diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,20 +1,46 @@
 # Amazon Simple Systems Management Service SDK
 
-> _Warning:_ This is an experimental preview release which is still under heavy development and not intended for public consumption, _caveat emptor_!
-
+* [Version](#version)
 * [Description](#description)
 * [Contribute](#contribute)
 * [Licence](#licence)
 
+
+## Version
+
+`1.0.0`
+
+
 ## Description
 
-Amazon EC2 Simple Systems Manager (SSM) enables you to configure and manage
-your EC2 instances. You can create a configuration document and then
-associate it with one or more running instances.
+Amazon EC2 Simple Systems Manager (SSM) enables you to configure and
+manage your EC2 instances. You can create a configuration document and
+then associate it with one or more running instances.
 
+You can use a configuration document to automate the following tasks for
+your Windows instances:
+
+-   Join an AWS Directory
+
+-   Install, repair, or uninstall software using an MSI package
+
+-   Run PowerShell scripts
+
+-   Configure CloudWatch Logs to monitor applications and systems
+
+Note that configuration documents are not supported on Linux instances.
+
 Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-ssm)
 and the [AWS API Reference](http://docs.aws.amazon.com/ssm/latest/APIReference/Welcome.html).
 
+The types from this library are intended to be used with [amazonka](http://hackage.haskell.org/package/amazonka),
+which provides mechanisms for specifying AuthN/AuthZ information and sending requests.
+
+Use of lenses is required for constructing and manipulating types.
+This is due to the amount of nesting of AWS types and transparency regarding
+de/serialisation into more palatable Haskell values.
+The provided lenses should be compatible with any of the major lens libraries
+[lens](http://hackage.haskell.org/package/lens) or [lens-family-core](http://hackage.haskell.org/package/lens-family-core).
 
 ## Contribute
 
diff --git a/amazonka-ssm.cabal b/amazonka-ssm.cabal
--- a/amazonka-ssm.cabal
+++ b/amazonka-ssm.cabal
@@ -1,27 +1,48 @@
 name:                  amazonka-ssm
-version:               0.3.6
+version:               1.0.0
 synopsis:              Amazon Simple Systems Management Service SDK.
 homepage:              https://github.com/brendanhay/amazonka
 license:               OtherLicense
 license-file:          LICENSE
 author:                Brendan Hay
 maintainer:            Brendan Hay <brendan.g.hay@gmail.com>
-copyright:             Copyright (c) 2013-2014 Brendan Hay
+copyright:             Copyright (c) 2013-2015 Brendan Hay
 category:              Network, AWS, Cloud, Distributed Computing
 build-type:            Simple
 extra-source-files:    README.md
 cabal-version:         >= 1.10
 
 description:
-    Amazon EC2 Simple Systems Manager (SSM) enables you to configure and manage
-    your EC2 instances. You can create a configuration document and then
-    associate it with one or more running instances.
+    Amazon EC2 Simple Systems Manager (SSM) enables you to configure and
+    manage your EC2 instances. You can create a configuration document and
+    then associate it with one or more running instances.
 
+    You can use a configuration document to automate the following tasks for
+    your Windows instances:
+
+    -   Join an AWS Directory
+
+    -   Install, repair, or uninstall software using an MSI package
+
+    -   Run PowerShell scripts
+
+    -   Configure CloudWatch Logs to monitor applications and systems
+
+    Note that configuration documents are not supported on Linux instances.
     .
-    /See:/ <http://docs.aws.amazon.com/ssm/latest/APIReference/Welcome.html AWS API Reference>
+    The types from this library are intended to be used with
+    <http://hackage.haskell.org/package/amazonka amazonka>, which provides
+    mechanisms for specifying AuthN/AuthZ information and sending requests.
     .
-    /Warning:/ This is an experimental preview release which is still under
-    heavy development and not intended for public consumption, caveat emptor!
+    Use of lenses is required for constructing and manipulating types.
+    This is due to the amount of nesting of AWS types and transparency regarding
+    de/serialisation into more palatable Haskell values.
+    The provided lenses should be compatible with any of the major lens libraries
+    such as <http://hackage.haskell.org/package/lens lens> or
+    <http://hackage.haskell.org/package/lens-family-core lens-family-core>.
+    .
+    See "Network.AWS.SSM" and the <http://docs.aws.amazon.com/ssm/latest/APIReference/Welcome.html AWS API Reference>
+    to get started.
 
 source-repository head
     type:     git
@@ -47,9 +68,40 @@
         , Network.AWS.SSM.ListDocuments
         , Network.AWS.SSM.Types
         , Network.AWS.SSM.UpdateAssociationStatus
+        , Network.AWS.SSM.Waiters
 
     other-modules:
+          Network.AWS.SSM.Types.Product
+        , Network.AWS.SSM.Types.Sum
 
     build-depends:
-          amazonka-core == 0.3.6.*
+          amazonka-core == 1.0.0.*
         , base          >= 4.7     && < 5
+
+test-suite amazonka-ssm-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.SSM
+        , Test.AWS.Gen.SSM
+        , Test.AWS.SSM.Internal
+
+    build-depends:
+          amazonka-core == 1.0.0
+        , amazonka-test == 1.0.0
+        , amazonka-ssm == 1.0.0
+        , base
+        , bytestring
+        , lens
+        , tasty
+        , tasty-hunit
+        , text
+        , time
+        , unordered-containers
diff --git a/gen/Network/AWS/SSM.hs b/gen/Network/AWS/SSM.hs
--- a/gen/Network/AWS/SSM.hs
+++ b/gen/Network/AWS/SSM.hs
@@ -1,42 +1,244 @@
+{-# 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.SSM
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Amazon EC2 Simple Systems Manager (SSM) enables you to configure and manage
--- your EC2 instances. You can create a configuration document and then
--- associate it with one or more running instances.
+-- Amazon EC2 Simple Systems Manager (SSM) enables you to configure and
+-- manage your EC2 instances. You can create a configuration document and
+-- then associate it with one or more running instances.
+--
+-- You can use a configuration document to automate the following tasks for
+-- your Windows instances:
+--
+-- -   Join an AWS Directory
+--
+-- -   Install, repair, or uninstall software using an MSI package
+--
+-- -   Run PowerShell scripts
+--
+-- -   Configure CloudWatch Logs to monitor applications and systems
+--
+-- Note that configuration documents are not supported on Linux instances.
+--
+-- /See:/ <http://docs.aws.amazon.com/ssm/latest/APIReference/Welcome.html AWS API Reference>
 module Network.AWS.SSM
-    ( module Network.AWS.SSM.CreateAssociation
-    , module Network.AWS.SSM.CreateAssociationBatch
-    , module Network.AWS.SSM.CreateDocument
-    , module Network.AWS.SSM.DeleteAssociation
-    , module Network.AWS.SSM.DeleteDocument
-    , module Network.AWS.SSM.DescribeAssociation
+    (
+    -- * Service
+      SSM
+
+    -- * Errors
+    -- $errors
+
+    -- ** AssociatedInstances
+    , _AssociatedInstances
+
+    -- ** InvalidNextToken
+    , _InvalidNextToken
+
+    -- ** InvalidInstanceId
+    , _InvalidInstanceId
+
+    -- ** StatusUnchanged
+    , _StatusUnchanged
+
+    -- ** DuplicateInstanceId
+    , _DuplicateInstanceId
+
+    -- ** InvalidDocument
+    , _InvalidDocument
+
+    -- ** AssociationLimitExceeded
+    , _AssociationLimitExceeded
+
+    -- ** InvalidDocumentContent
+    , _InvalidDocumentContent
+
+    -- ** AssociationAlreadyExists
+    , _AssociationAlreadyExists
+
+    -- ** AssociationDoesNotExist
+    , _AssociationDoesNotExist
+
+    -- ** InternalServerError
+    , _InternalServerError
+
+    -- ** MaxDocumentSizeExceeded
+    , _MaxDocumentSizeExceeded
+
+    -- ** TooManyUpdates
+    , _TooManyUpdates
+
+    -- ** DocumentAlreadyExists
+    , _DocumentAlreadyExists
+
+    -- ** DocumentLimitExceeded
+    , _DocumentLimitExceeded
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** DescribeDocument
     , module Network.AWS.SSM.DescribeDocument
-    , module Network.AWS.SSM.GetDocument
-    , module Network.AWS.SSM.ListAssociations
+
+    -- ** CreateAssociation
+    , module Network.AWS.SSM.CreateAssociation
+
+    -- ** CreateDocument
+    , module Network.AWS.SSM.CreateDocument
+
+    -- ** ListDocuments
     , module Network.AWS.SSM.ListDocuments
-    , module Network.AWS.SSM.Types
+
+    -- ** GetDocument
+    , module Network.AWS.SSM.GetDocument
+
+    -- ** DescribeAssociation
+    , module Network.AWS.SSM.DescribeAssociation
+
+    -- ** UpdateAssociationStatus
     , module Network.AWS.SSM.UpdateAssociationStatus
+
+    -- ** DeleteAssociation
+    , module Network.AWS.SSM.DeleteAssociation
+
+    -- ** ListAssociations
+    , module Network.AWS.SSM.ListAssociations
+
+    -- ** DeleteDocument
+    , module Network.AWS.SSM.DeleteDocument
+
+    -- ** CreateAssociationBatch
+    , module Network.AWS.SSM.CreateAssociationBatch
+
+    -- * Types
+
+    -- ** AssociationFilterKey
+    , AssociationFilterKey (..)
+
+    -- ** AssociationStatusName
+    , AssociationStatusName (..)
+
+    -- ** DocumentFilterKey
+    , DocumentFilterKey (..)
+
+    -- ** DocumentStatus
+    , DocumentStatus (..)
+
+    -- ** Fault
+    , Fault (..)
+
+    -- ** Association
+    , Association
+    , association
+    , aInstanceId
+    , aName
+
+    -- ** AssociationDescription
+    , AssociationDescription
+    , associationDescription
+    , adInstanceId
+    , adStatus
+    , adDate
+    , adName
+
+    -- ** AssociationFilter
+    , AssociationFilter
+    , associationFilter
+    , afKey
+    , afValue
+
+    -- ** AssociationStatus
+    , AssociationStatus
+    , associationStatus
+    , asAdditionalInfo
+    , asDate
+    , asName
+    , asMessage
+
+    -- ** CreateAssociationBatchRequestEntry
+    , CreateAssociationBatchRequestEntry
+    , createAssociationBatchRequestEntry
+    , cabreInstanceId
+    , cabreName
+
+    -- ** DocumentDescription
+    , DocumentDescription
+    , documentDescription
+    , dStatus
+    , dSha1
+    , dCreatedDate
+    , dName
+
+    -- ** DocumentFilter
+    , DocumentFilter
+    , documentFilter
+    , dfKey
+    , dfValue
+
+    -- ** DocumentIdentifier
+    , DocumentIdentifier
+    , documentIdentifier
+    , diName
+
+    -- ** FailedCreateAssociation
+    , FailedCreateAssociation
+    , failedCreateAssociation
+    , fcaEntry
+    , fcaFault
+    , fcaMessage
     ) where
 
-import Network.AWS.SSM.CreateAssociation
-import Network.AWS.SSM.CreateAssociationBatch
-import Network.AWS.SSM.CreateDocument
-import Network.AWS.SSM.DeleteAssociation
-import Network.AWS.SSM.DeleteDocument
-import Network.AWS.SSM.DescribeAssociation
-import Network.AWS.SSM.DescribeDocument
-import Network.AWS.SSM.GetDocument
-import Network.AWS.SSM.ListAssociations
-import Network.AWS.SSM.ListDocuments
-import Network.AWS.SSM.Types
-import Network.AWS.SSM.UpdateAssociationStatus
+import           Network.AWS.SSM.CreateAssociation
+import           Network.AWS.SSM.CreateAssociationBatch
+import           Network.AWS.SSM.CreateDocument
+import           Network.AWS.SSM.DeleteAssociation
+import           Network.AWS.SSM.DeleteDocument
+import           Network.AWS.SSM.DescribeAssociation
+import           Network.AWS.SSM.DescribeDocument
+import           Network.AWS.SSM.GetDocument
+import           Network.AWS.SSM.ListAssociations
+import           Network.AWS.SSM.ListDocuments
+import           Network.AWS.SSM.Types
+import           Network.AWS.SSM.UpdateAssociationStatus
+import           Network.AWS.SSM.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 'SSM'.
+-}
+
+{- $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/SSM/CreateAssociation.hs b/gen/Network/AWS/SSM/CreateAssociation.hs
--- a/gen/Network/AWS/SSM/CreateAssociation.hs
+++ b/gen/Network/AWS/SSM/CreateAssociation.hs
@@ -1,133 +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.SSM.CreateAssociation
--- 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.
-
--- | Associates the specified configuration document with the specified instance.
+-- Associates the specified configuration document with the specified
+-- instance.
 --
 -- When you associate a configuration document with an instance, the
--- configuration agent on the instance processes the configuration document and
--- configures the instance as specified.
+-- configuration agent on the instance processes the configuration document
+-- and configures the instance as specified.
 --
--- If you associate a configuration document with an instance that already has
--- an associated configuration document, we replace the current configuration
--- document with the new configuration document.
+-- If you associate a configuration document with an instance that already
+-- has an associated configuration document, we replace the current
+-- configuration document with the new configuration document.
 --
--- <http://docs.aws.amazon.com/ssm/latest/APIReference/API_CreateAssociation.html>
+-- /See:/ <http://docs.aws.amazon.com/ssm/latest/APIReference/API_CreateAssociation.html AWS API Reference> for CreateAssociation.
 module Network.AWS.SSM.CreateAssociation
     (
-    -- * Request
-      CreateAssociation
-    -- ** Request constructor
-    , createAssociation
-    -- ** Request lenses
-    , caInstanceId
+    -- * Creating a Request
+      createAssociation
+    , CreateAssociation
+    -- * Request Lenses
     , caName
+    , caInstanceId
 
-    -- * Response
-    , CreateAssociationResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , createAssociationResponse
-    -- ** Response lenses
-    , carAssociationDescription
+    , CreateAssociationResponse
+    -- * Response Lenses
+    , carsAssociationDescription
+    , carsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.SSM.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.SSM.Types
+import           Network.AWS.SSM.Types.Product
 
-data CreateAssociation = CreateAssociation
-    { _caInstanceId :: Text
-    , _caName       :: Text
-    } deriving (Eq, Ord, Read, Show)
+-- | /See:/ 'createAssociation' smart constructor.
+data CreateAssociation = CreateAssociation'
+    { _caName       :: !Text
+    , _caInstanceId :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'CreateAssociation' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'CreateAssociation' with the minimum fields required to make a request.
 --
--- * 'caInstanceId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'caName' @::@ 'Text'
+-- * 'caName'
 --
-createAssociation :: Text -- ^ 'caName'
-                  -> Text -- ^ 'caInstanceId'
-                  -> CreateAssociation
-createAssociation p1 p2 = CreateAssociation
-    { _caName       = p1
-    , _caInstanceId = p2
+-- * 'caInstanceId'
+createAssociation
+    :: Text -- ^ 'caName'
+    -> Text -- ^ 'caInstanceId'
+    -> CreateAssociation
+createAssociation pName_ pInstanceId_ =
+    CreateAssociation'
+    { _caName = pName_
+    , _caInstanceId = pInstanceId_
     }
 
--- | The ID of the instance.
-caInstanceId :: Lens' CreateAssociation Text
-caInstanceId = lens _caInstanceId (\s a -> s { _caInstanceId = a })
-
 -- | The name of the configuration document.
 caName :: Lens' CreateAssociation Text
-caName = lens _caName (\s a -> s { _caName = a })
+caName = lens _caName (\ s a -> s{_caName = a});
 
-newtype CreateAssociationResponse = CreateAssociationResponse
-    { _carAssociationDescription :: Maybe AssociationDescription
-    } deriving (Eq, Read, Show)
+-- | The ID of the instance.
+caInstanceId :: Lens' CreateAssociation Text
+caInstanceId = lens _caInstanceId (\ s a -> s{_caInstanceId = a});
 
--- | 'CreateAssociationResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'carAssociationDescription' @::@ 'Maybe' 'AssociationDescription'
---
-createAssociationResponse :: CreateAssociationResponse
-createAssociationResponse = CreateAssociationResponse
-    { _carAssociationDescription = Nothing
-    }
+instance AWSRequest CreateAssociation where
+        type Sv CreateAssociation = SSM
+        type Rs CreateAssociation = CreateAssociationResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 CreateAssociationResponse' <$>
+                   (x .?> "AssociationDescription") <*>
+                     (pure (fromEnum s)))
 
--- | Information about the association.
-carAssociationDescription :: Lens' CreateAssociationResponse (Maybe AssociationDescription)
-carAssociationDescription =
-    lens _carAssociationDescription
-        (\s a -> s { _carAssociationDescription = a })
+instance ToHeaders CreateAssociation where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonSSM.CreateAssociation" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
+instance ToJSON CreateAssociation where
+        toJSON CreateAssociation'{..}
+          = object
+              ["Name" .= _caName, "InstanceId" .= _caInstanceId]
+
 instance ToPath CreateAssociation where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery CreateAssociation where
-    toQuery = const mempty
-
-instance ToHeaders CreateAssociation
+        toQuery = const mempty
 
-instance ToJSON CreateAssociation where
-    toJSON CreateAssociation{..} = object
-        [ "Name"       .= _caName
-        , "InstanceId" .= _caInstanceId
-        ]
+-- | /See:/ 'createAssociationResponse' smart constructor.
+data CreateAssociationResponse = CreateAssociationResponse'
+    { _carsAssociationDescription :: !(Maybe AssociationDescription)
+    , _carsStatus                 :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest CreateAssociation where
-    type Sv CreateAssociation = SSM
-    type Rs CreateAssociation = CreateAssociationResponse
+-- | Creates a value of 'CreateAssociationResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'carsAssociationDescription'
+--
+-- * 'carsStatus'
+createAssociationResponse
+    :: Int -- ^ 'carsStatus'
+    -> CreateAssociationResponse
+createAssociationResponse pStatus_ =
+    CreateAssociationResponse'
+    { _carsAssociationDescription = Nothing
+    , _carsStatus = pStatus_
+    }
 
-    request  = post "CreateAssociation"
-    response = jsonResponse
+-- | Information about the association.
+carsAssociationDescription :: Lens' CreateAssociationResponse (Maybe AssociationDescription)
+carsAssociationDescription = lens _carsAssociationDescription (\ s a -> s{_carsAssociationDescription = a});
 
-instance FromJSON CreateAssociationResponse where
-    parseJSON = withObject "CreateAssociationResponse" $ \o -> CreateAssociationResponse
-        <$> o .:? "AssociationDescription"
+-- | The response status code.
+carsStatus :: Lens' CreateAssociationResponse Int
+carsStatus = lens _carsStatus (\ s a -> s{_carsStatus = a});
diff --git a/gen/Network/AWS/SSM/CreateAssociationBatch.hs b/gen/Network/AWS/SSM/CreateAssociationBatch.hs
--- a/gen/Network/AWS/SSM/CreateAssociationBatch.hs
+++ b/gen/Network/AWS/SSM/CreateAssociationBatch.hs
@@ -1,135 +1,145 @@
-{-# 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.SSM.CreateAssociationBatch
--- 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.
-
--- | Associates the specified configuration documents with the specified instances.
+-- Associates the specified configuration documents with the specified
+-- instances.
 --
 -- When you associate a configuration document with an instance, the
--- configuration agent on the instance processes the configuration document and
--- configures the instance as specified.
+-- configuration agent on the instance processes the configuration document
+-- and configures the instance as specified.
 --
--- If you associate a configuration document with an instance that already has
--- an associated configuration document, we replace the current configuration
--- document with the new configuration document.
+-- If you associate a configuration document with an instance that already
+-- has an associated configuration document, we replace the current
+-- configuration document with the new configuration document.
 --
--- <http://docs.aws.amazon.com/ssm/latest/APIReference/API_CreateAssociationBatch.html>
+-- /See:/ <http://docs.aws.amazon.com/ssm/latest/APIReference/API_CreateAssociationBatch.html AWS API Reference> for CreateAssociationBatch.
 module Network.AWS.SSM.CreateAssociationBatch
     (
-    -- * Request
-      CreateAssociationBatch
-    -- ** Request constructor
-    , createAssociationBatch
-    -- ** Request lenses
+    -- * Creating a Request
+      createAssociationBatch
+    , CreateAssociationBatch
+    -- * Request Lenses
     , cabEntries
 
-    -- * Response
-    , CreateAssociationBatchResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , createAssociationBatchResponse
-    -- ** Response lenses
-    , cabrFailed
-    , cabrSuccessful
+    , CreateAssociationBatchResponse
+    -- * Response Lenses
+    , cabrsSuccessful
+    , cabrsFailed
+    , cabrsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.SSM.Types
-import qualified GHC.Exts
-
-newtype CreateAssociationBatch = CreateAssociationBatch
-    { _cabEntries :: List "entries" CreateAssociationBatchRequestEntry
-    } deriving (Eq, Read, Show, Monoid, Semigroup)
-
-instance GHC.Exts.IsList CreateAssociationBatch where
-    type Item CreateAssociationBatch = CreateAssociationBatchRequestEntry
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.SSM.Types
+import           Network.AWS.SSM.Types.Product
 
-    fromList = CreateAssociationBatch . GHC.Exts.fromList
-    toList   = GHC.Exts.toList . _cabEntries
+-- | /See:/ 'createAssociationBatch' smart constructor.
+newtype CreateAssociationBatch = CreateAssociationBatch'
+    { _cabEntries :: [CreateAssociationBatchRequestEntry]
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'CreateAssociationBatch' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'CreateAssociationBatch' with the minimum fields required to make a request.
 --
--- * 'cabEntries' @::@ ['CreateAssociationBatchRequestEntry']
+-- Use one of the following lenses to modify other fields as desired:
 --
-createAssociationBatch :: CreateAssociationBatch
-createAssociationBatch = CreateAssociationBatch
+-- * 'cabEntries'
+createAssociationBatch
+    :: CreateAssociationBatch
+createAssociationBatch =
+    CreateAssociationBatch'
     { _cabEntries = mempty
     }
 
 -- | One or more associations.
 cabEntries :: Lens' CreateAssociationBatch [CreateAssociationBatchRequestEntry]
-cabEntries = lens _cabEntries (\s a -> s { _cabEntries = a }) . _List
-
-data CreateAssociationBatchResponse = CreateAssociationBatchResponse
-    { _cabrFailed     :: List "FailedCreateAssociationEntry" FailedCreateAssociation
-    , _cabrSuccessful :: List "AssociationDescription" AssociationDescription
-    } deriving (Eq, Read, Show)
+cabEntries = lens _cabEntries (\ s a -> s{_cabEntries = a}) . _Coerce;
 
--- | 'CreateAssociationBatchResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'cabrFailed' @::@ ['FailedCreateAssociation']
---
--- * 'cabrSuccessful' @::@ ['AssociationDescription']
---
-createAssociationBatchResponse :: CreateAssociationBatchResponse
-createAssociationBatchResponse = CreateAssociationBatchResponse
-    { _cabrSuccessful = mempty
-    , _cabrFailed     = mempty
-    }
+instance AWSRequest CreateAssociationBatch where
+        type Sv CreateAssociationBatch = SSM
+        type Rs CreateAssociationBatch =
+             CreateAssociationBatchResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 CreateAssociationBatchResponse' <$>
+                   (x .?> "Successful" .!@ mempty) <*>
+                     (x .?> "Failed" .!@ mempty)
+                     <*> (pure (fromEnum s)))
 
--- | Information about the associations that failed.
-cabrFailed :: Lens' CreateAssociationBatchResponse [FailedCreateAssociation]
-cabrFailed = lens _cabrFailed (\s a -> s { _cabrFailed = a }) . _List
+instance ToHeaders CreateAssociationBatch where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonSSM.CreateAssociationBatch" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
--- | Information about the associations that succeeded.
-cabrSuccessful :: Lens' CreateAssociationBatchResponse [AssociationDescription]
-cabrSuccessful = lens _cabrSuccessful (\s a -> s { _cabrSuccessful = a }) . _List
+instance ToJSON CreateAssociationBatch where
+        toJSON CreateAssociationBatch'{..}
+          = object ["Entries" .= _cabEntries]
 
 instance ToPath CreateAssociationBatch where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery CreateAssociationBatch where
-    toQuery = const mempty
+        toQuery = const mempty
 
-instance ToHeaders CreateAssociationBatch
+-- | /See:/ 'createAssociationBatchResponse' smart constructor.
+data CreateAssociationBatchResponse = CreateAssociationBatchResponse'
+    { _cabrsSuccessful :: !(Maybe [AssociationDescription])
+    , _cabrsFailed     :: !(Maybe [FailedCreateAssociation])
+    , _cabrsStatus     :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance ToJSON CreateAssociationBatch where
-    toJSON CreateAssociationBatch{..} = object
-        [ "Entries" .= _cabEntries
-        ]
+-- | Creates a value of 'CreateAssociationBatchResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cabrsSuccessful'
+--
+-- * 'cabrsFailed'
+--
+-- * 'cabrsStatus'
+createAssociationBatchResponse
+    :: Int -- ^ 'cabrsStatus'
+    -> CreateAssociationBatchResponse
+createAssociationBatchResponse pStatus_ =
+    CreateAssociationBatchResponse'
+    { _cabrsSuccessful = Nothing
+    , _cabrsFailed = Nothing
+    , _cabrsStatus = pStatus_
+    }
 
-instance AWSRequest CreateAssociationBatch where
-    type Sv CreateAssociationBatch = SSM
-    type Rs CreateAssociationBatch = CreateAssociationBatchResponse
+-- | Information about the associations that succeeded.
+cabrsSuccessful :: Lens' CreateAssociationBatchResponse [AssociationDescription]
+cabrsSuccessful = lens _cabrsSuccessful (\ s a -> s{_cabrsSuccessful = a}) . _Default . _Coerce;
 
-    request  = post "CreateAssociationBatch"
-    response = jsonResponse
+-- | Information about the associations that failed.
+cabrsFailed :: Lens' CreateAssociationBatchResponse [FailedCreateAssociation]
+cabrsFailed = lens _cabrsFailed (\ s a -> s{_cabrsFailed = a}) . _Default . _Coerce;
 
-instance FromJSON CreateAssociationBatchResponse where
-    parseJSON = withObject "CreateAssociationBatchResponse" $ \o -> CreateAssociationBatchResponse
-        <$> o .:? "Failed" .!= mempty
-        <*> o .:? "Successful" .!= mempty
+-- | The response status code.
+cabrsStatus :: Lens' CreateAssociationBatchResponse Int
+cabrsStatus = lens _cabrsStatus (\ s a -> s{_cabrsStatus = a});
diff --git a/gen/Network/AWS/SSM/CreateDocument.hs b/gen/Network/AWS/SSM/CreateDocument.hs
--- a/gen/Network/AWS/SSM/CreateDocument.hs
+++ b/gen/Network/AWS/SSM/CreateDocument.hs
@@ -1,127 +1,141 @@
-{-# 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.SSM.CreateDocument
--- 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 configuration document.
+-- Creates a configuration document.
 --
--- After you create a configuration document, you can use 'CreateAssociation' to
--- associate it with one or more running instances.
+-- After you create a configuration document, you can use CreateAssociation
+-- to associate it with one or more running instances.
 --
--- <http://docs.aws.amazon.com/ssm/latest/APIReference/API_CreateDocument.html>
+-- /See:/ <http://docs.aws.amazon.com/ssm/latest/APIReference/API_CreateDocument.html AWS API Reference> for CreateDocument.
 module Network.AWS.SSM.CreateDocument
     (
-    -- * Request
-      CreateDocument
-    -- ** Request constructor
-    , createDocument
-    -- ** Request lenses
+    -- * Creating a Request
+      createDocument
+    , CreateDocument
+    -- * Request Lenses
     , cdContent
     , cdName
 
-    -- * Response
-    , CreateDocumentResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , createDocumentResponse
-    -- ** Response lenses
-    , cdrDocumentDescription
+    , CreateDocumentResponse
+    -- * Response Lenses
+    , cdrsDocumentDescription
+    , cdrsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.SSM.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.SSM.Types
+import           Network.AWS.SSM.Types.Product
 
-data CreateDocument = CreateDocument
-    { _cdContent :: Text
-    , _cdName    :: Text
-    } deriving (Eq, Ord, Read, Show)
+-- | /See:/ 'createDocument' smart constructor.
+data CreateDocument = CreateDocument'
+    { _cdContent :: !Text
+    , _cdName    :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'CreateDocument' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'CreateDocument' with the minimum fields required to make a request.
 --
--- * 'cdContent' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'cdName' @::@ 'Text'
+-- * 'cdContent'
 --
-createDocument :: Text -- ^ 'cdContent'
-               -> Text -- ^ 'cdName'
-               -> CreateDocument
-createDocument p1 p2 = CreateDocument
-    { _cdContent = p1
-    , _cdName    = p2
+-- * 'cdName'
+createDocument
+    :: Text -- ^ 'cdContent'
+    -> Text -- ^ 'cdName'
+    -> CreateDocument
+createDocument pContent_ pName_ =
+    CreateDocument'
+    { _cdContent = pContent_
+    , _cdName = pName_
     }
 
--- | A valid JSON file. For more information about the contents of this file, see <http://docs.aws.amazon.com/ssm/latest/APIReference/aws-ssm-document.html Configuration Document>.
+-- | A valid JSON file. For more information about the contents of this file,
+-- see
+-- <http://docs.aws.amazon.com/ssm/latest/APIReference/aws-ssm-document.html Configuration Document>.
 cdContent :: Lens' CreateDocument Text
-cdContent = lens _cdContent (\s a -> s { _cdContent = a })
+cdContent = lens _cdContent (\ s a -> s{_cdContent = a});
 
 -- | A name for the configuration document.
 cdName :: Lens' CreateDocument Text
-cdName = lens _cdName (\s a -> s { _cdName = a })
+cdName = lens _cdName (\ s a -> s{_cdName = a});
 
-newtype CreateDocumentResponse = CreateDocumentResponse
-    { _cdrDocumentDescription :: Maybe DocumentDescription
-    } deriving (Eq, Read, Show)
+instance AWSRequest CreateDocument where
+        type Sv CreateDocument = SSM
+        type Rs CreateDocument = CreateDocumentResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 CreateDocumentResponse' <$>
+                   (x .?> "DocumentDescription") <*>
+                     (pure (fromEnum s)))
 
--- | 'CreateDocumentResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'cdrDocumentDescription' @::@ 'Maybe' 'DocumentDescription'
---
-createDocumentResponse :: CreateDocumentResponse
-createDocumentResponse = CreateDocumentResponse
-    { _cdrDocumentDescription = Nothing
-    }
+instance ToHeaders CreateDocument where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonSSM.CreateDocument" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
--- | Information about the configuration document.
-cdrDocumentDescription :: Lens' CreateDocumentResponse (Maybe DocumentDescription)
-cdrDocumentDescription =
-    lens _cdrDocumentDescription (\s a -> s { _cdrDocumentDescription = a })
+instance ToJSON CreateDocument where
+        toJSON CreateDocument'{..}
+          = object ["Content" .= _cdContent, "Name" .= _cdName]
 
 instance ToPath CreateDocument where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery CreateDocument where
-    toQuery = const mempty
-
-instance ToHeaders CreateDocument
+        toQuery = const mempty
 
-instance ToJSON CreateDocument where
-    toJSON CreateDocument{..} = object
-        [ "Content" .= _cdContent
-        , "Name"    .= _cdName
-        ]
+-- | /See:/ 'createDocumentResponse' smart constructor.
+data CreateDocumentResponse = CreateDocumentResponse'
+    { _cdrsDocumentDescription :: !(Maybe DocumentDescription)
+    , _cdrsStatus              :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest CreateDocument where
-    type Sv CreateDocument = SSM
-    type Rs CreateDocument = CreateDocumentResponse
+-- | Creates a value of 'CreateDocumentResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cdrsDocumentDescription'
+--
+-- * 'cdrsStatus'
+createDocumentResponse
+    :: Int -- ^ 'cdrsStatus'
+    -> CreateDocumentResponse
+createDocumentResponse pStatus_ =
+    CreateDocumentResponse'
+    { _cdrsDocumentDescription = Nothing
+    , _cdrsStatus = pStatus_
+    }
 
-    request  = post "CreateDocument"
-    response = jsonResponse
+-- | Information about the configuration document.
+cdrsDocumentDescription :: Lens' CreateDocumentResponse (Maybe DocumentDescription)
+cdrsDocumentDescription = lens _cdrsDocumentDescription (\ s a -> s{_cdrsDocumentDescription = a});
 
-instance FromJSON CreateDocumentResponse where
-    parseJSON = withObject "CreateDocumentResponse" $ \o -> CreateDocumentResponse
-        <$> o .:? "DocumentDescription"
+-- | The response status code.
+cdrsStatus :: Lens' CreateDocumentResponse Int
+cdrsStatus = lens _cdrsStatus (\ s a -> s{_cdrsStatus = a});
diff --git a/gen/Network/AWS/SSM/DeleteAssociation.hs b/gen/Network/AWS/SSM/DeleteAssociation.hs
--- a/gen/Network/AWS/SSM/DeleteAssociation.hs
+++ b/gen/Network/AWS/SSM/DeleteAssociation.hs
@@ -1,112 +1,133 @@
-{-# 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.SSM.DeleteAssociation
--- 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.
-
--- | Disassociates the specified configuration document from the specified
+-- Disassociates the specified configuration document from the specified
 -- instance.
 --
--- When you disassociate a configuration document from an instance, it does not
--- change the configuration of the instance. To change the configuration state
--- of an instance after you disassociate a configuration document, you must
--- create a new configuration document with the desired configuration and
--- associate it with the instance.
+-- When you disassociate a configuration document from an instance, it does
+-- not change the configuration of the instance. To change the
+-- configuration state of an instance after you disassociate a
+-- configuration document, you must create a new configuration document
+-- with the desired configuration and associate it with the instance.
 --
--- <http://docs.aws.amazon.com/ssm/latest/APIReference/API_DeleteAssociation.html>
+-- /See:/ <http://docs.aws.amazon.com/ssm/latest/APIReference/API_DeleteAssociation.html AWS API Reference> for DeleteAssociation.
 module Network.AWS.SSM.DeleteAssociation
     (
-    -- * Request
-      DeleteAssociation
-    -- ** Request constructor
-    , deleteAssociation
-    -- ** Request lenses
-    , da1InstanceId
-    , da1Name
+    -- * Creating a Request
+      deleteAssociation
+    , DeleteAssociation
+    -- * Request Lenses
+    , delName
+    , delInstanceId
 
-    -- * Response
-    , DeleteAssociationResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , deleteAssociationResponse
+    , DeleteAssociationResponse
+    -- * Response Lenses
+    , delrsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.SSM.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.SSM.Types
+import           Network.AWS.SSM.Types.Product
 
-data DeleteAssociation = DeleteAssociation
-    { _da1InstanceId :: Text
-    , _da1Name       :: Text
-    } deriving (Eq, Ord, Read, Show)
+-- | /See:/ 'deleteAssociation' smart constructor.
+data DeleteAssociation = DeleteAssociation'
+    { _delName       :: !Text
+    , _delInstanceId :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'DeleteAssociation' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'DeleteAssociation' with the minimum fields required to make a request.
 --
--- * 'da1InstanceId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'da1Name' @::@ 'Text'
+-- * 'delName'
 --
-deleteAssociation :: Text -- ^ 'da1Name'
-                  -> Text -- ^ 'da1InstanceId'
-                  -> DeleteAssociation
-deleteAssociation p1 p2 = DeleteAssociation
-    { _da1Name       = p1
-    , _da1InstanceId = p2
+-- * 'delInstanceId'
+deleteAssociation
+    :: Text -- ^ 'delName'
+    -> Text -- ^ 'delInstanceId'
+    -> DeleteAssociation
+deleteAssociation pName_ pInstanceId_ =
+    DeleteAssociation'
+    { _delName = pName_
+    , _delInstanceId = pInstanceId_
     }
 
+-- | The name of the configuration document.
+delName :: Lens' DeleteAssociation Text
+delName = lens _delName (\ s a -> s{_delName = a});
+
 -- | The ID of the instance.
-da1InstanceId :: Lens' DeleteAssociation Text
-da1InstanceId = lens _da1InstanceId (\s a -> s { _da1InstanceId = a })
+delInstanceId :: Lens' DeleteAssociation Text
+delInstanceId = lens _delInstanceId (\ s a -> s{_delInstanceId = a});
 
--- | The name of the configuration document.
-da1Name :: Lens' DeleteAssociation Text
-da1Name = lens _da1Name (\s a -> s { _da1Name = a })
+instance AWSRequest DeleteAssociation where
+        type Sv DeleteAssociation = SSM
+        type Rs DeleteAssociation = DeleteAssociationResponse
+        request = postJSON
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 DeleteAssociationResponse' <$> (pure (fromEnum s)))
 
-data DeleteAssociationResponse = DeleteAssociationResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+instance ToHeaders DeleteAssociation where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonSSM.DeleteAssociation" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
--- | 'DeleteAssociationResponse' constructor.
-deleteAssociationResponse :: DeleteAssociationResponse
-deleteAssociationResponse = DeleteAssociationResponse
+instance ToJSON DeleteAssociation where
+        toJSON DeleteAssociation'{..}
+          = object
+              ["Name" .= _delName, "InstanceId" .= _delInstanceId]
 
 instance ToPath DeleteAssociation where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery DeleteAssociation where
-    toQuery = const mempty
-
-instance ToHeaders DeleteAssociation
+        toQuery = const mempty
 
-instance ToJSON DeleteAssociation where
-    toJSON DeleteAssociation{..} = object
-        [ "Name"       .= _da1Name
-        , "InstanceId" .= _da1InstanceId
-        ]
+-- | /See:/ 'deleteAssociationResponse' smart constructor.
+newtype DeleteAssociationResponse = DeleteAssociationResponse'
+    { _delrsStatus :: Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest DeleteAssociation where
-    type Sv DeleteAssociation = SSM
-    type Rs DeleteAssociation = DeleteAssociationResponse
+-- | Creates a value of 'DeleteAssociationResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'delrsStatus'
+deleteAssociationResponse
+    :: Int -- ^ 'delrsStatus'
+    -> DeleteAssociationResponse
+deleteAssociationResponse pStatus_ =
+    DeleteAssociationResponse'
+    { _delrsStatus = pStatus_
+    }
 
-    request  = post "DeleteAssociation"
-    response = nullResponse DeleteAssociationResponse
+-- | The response status code.
+delrsStatus :: Lens' DeleteAssociationResponse Int
+delrsStatus = lens _delrsStatus (\ s a -> s{_delrsStatus = a});
diff --git a/gen/Network/AWS/SSM/DeleteDocument.hs b/gen/Network/AWS/SSM/DeleteDocument.hs
--- a/gen/Network/AWS/SSM/DeleteDocument.hs
+++ b/gen/Network/AWS/SSM/DeleteDocument.hs
@@ -1,97 +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.SSM.DeleteDocument
--- 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 configuration document.
+-- Deletes the specified configuration document.
 --
--- You must use 'DeleteAssociation' to disassociate all instances that are
+-- You must use DeleteAssociation to disassociate all instances that are
 -- associated with the configuration document before you can delete it.
 --
--- <http://docs.aws.amazon.com/ssm/latest/APIReference/API_DeleteDocument.html>
+-- /See:/ <http://docs.aws.amazon.com/ssm/latest/APIReference/API_DeleteDocument.html AWS API Reference> for DeleteDocument.
 module Network.AWS.SSM.DeleteDocument
     (
-    -- * Request
-      DeleteDocument
-    -- ** Request constructor
-    , deleteDocument
-    -- ** Request lenses
-    , dd2Name
+    -- * Creating a Request
+      deleteDocument
+    , DeleteDocument
+    -- * Request Lenses
+    , dddName
 
-    -- * Response
-    , DeleteDocumentResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , deleteDocumentResponse
+    , DeleteDocumentResponse
+    -- * Response Lenses
+    , ddrsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.SSM.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.SSM.Types
+import           Network.AWS.SSM.Types.Product
 
-newtype DeleteDocument = DeleteDocument
-    { _dd2Name :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+-- | /See:/ 'deleteDocument' smart constructor.
+newtype DeleteDocument = DeleteDocument'
+    { _dddName :: Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'DeleteDocument' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'DeleteDocument' with the minimum fields required to make a request.
 --
--- * 'dd2Name' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-deleteDocument :: Text -- ^ 'dd2Name'
-               -> DeleteDocument
-deleteDocument p1 = DeleteDocument
-    { _dd2Name = p1
+-- * 'dddName'
+deleteDocument
+    :: Text -- ^ 'dddName'
+    -> DeleteDocument
+deleteDocument pName_ =
+    DeleteDocument'
+    { _dddName = pName_
     }
 
 -- | The name of the configuration document.
-dd2Name :: Lens' DeleteDocument Text
-dd2Name = lens _dd2Name (\s a -> s { _dd2Name = a })
+dddName :: Lens' DeleteDocument Text
+dddName = lens _dddName (\ s a -> s{_dddName = a});
 
-data DeleteDocumentResponse = DeleteDocumentResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+instance AWSRequest DeleteDocument where
+        type Sv DeleteDocument = SSM
+        type Rs DeleteDocument = DeleteDocumentResponse
+        request = postJSON
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 DeleteDocumentResponse' <$> (pure (fromEnum s)))
 
--- | 'DeleteDocumentResponse' constructor.
-deleteDocumentResponse :: DeleteDocumentResponse
-deleteDocumentResponse = DeleteDocumentResponse
+instance ToHeaders DeleteDocument where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonSSM.DeleteDocument" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
+instance ToJSON DeleteDocument where
+        toJSON DeleteDocument'{..}
+          = object ["Name" .= _dddName]
+
 instance ToPath DeleteDocument where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery DeleteDocument where
-    toQuery = const mempty
-
-instance ToHeaders DeleteDocument
+        toQuery = const mempty
 
-instance ToJSON DeleteDocument where
-    toJSON DeleteDocument{..} = object
-        [ "Name" .= _dd2Name
-        ]
+-- | /See:/ 'deleteDocumentResponse' smart constructor.
+newtype DeleteDocumentResponse = DeleteDocumentResponse'
+    { _ddrsStatus :: Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest DeleteDocument where
-    type Sv DeleteDocument = SSM
-    type Rs DeleteDocument = DeleteDocumentResponse
+-- | Creates a value of 'DeleteDocumentResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ddrsStatus'
+deleteDocumentResponse
+    :: Int -- ^ 'ddrsStatus'
+    -> DeleteDocumentResponse
+deleteDocumentResponse pStatus_ =
+    DeleteDocumentResponse'
+    { _ddrsStatus = pStatus_
+    }
 
-    request  = post "DeleteDocument"
-    response = nullResponse DeleteDocumentResponse
+-- | The response status code.
+ddrsStatus :: Lens' DeleteDocumentResponse Int
+ddrsStatus = lens _ddrsStatus (\ s a -> s{_ddrsStatus = a});
diff --git a/gen/Network/AWS/SSM/DescribeAssociation.hs b/gen/Network/AWS/SSM/DescribeAssociation.hs
--- a/gen/Network/AWS/SSM/DescribeAssociation.hs
+++ b/gen/Network/AWS/SSM/DescribeAssociation.hs
@@ -1,126 +1,139 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.SSM.DescribeAssociation
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Describes the associations for the specified configuration document or
+-- Describes the associations for the specified configuration document or
 -- instance.
 --
--- <http://docs.aws.amazon.com/ssm/latest/APIReference/API_DescribeAssociation.html>
+-- /See:/ <http://docs.aws.amazon.com/ssm/latest/APIReference/API_DescribeAssociation.html AWS API Reference> for DescribeAssociation.
 module Network.AWS.SSM.DescribeAssociation
     (
-    -- * Request
-      DescribeAssociation
-    -- ** Request constructor
-    , describeAssociation
-    -- ** Request lenses
-    , daInstanceId
+    -- * Creating a Request
+      describeAssociation
+    , DescribeAssociation
+    -- * Request Lenses
     , daName
+    , daInstanceId
 
-    -- * Response
-    , DescribeAssociationResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , describeAssociationResponse
-    -- ** Response lenses
-    , darAssociationDescription
+    , DescribeAssociationResponse
+    -- * Response Lenses
+    , darsAssociationDescription
+    , darsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.SSM.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.SSM.Types
+import           Network.AWS.SSM.Types.Product
 
-data DescribeAssociation = DescribeAssociation
-    { _daInstanceId :: Text
-    , _daName       :: Text
-    } deriving (Eq, Ord, Read, Show)
+-- | /See:/ 'describeAssociation' smart constructor.
+data DescribeAssociation = DescribeAssociation'
+    { _daName       :: !Text
+    , _daInstanceId :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'DescribeAssociation' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'DescribeAssociation' with the minimum fields required to make a request.
 --
--- * 'daInstanceId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'daName' @::@ 'Text'
+-- * 'daName'
 --
-describeAssociation :: Text -- ^ 'daName'
-                    -> Text -- ^ 'daInstanceId'
-                    -> DescribeAssociation
-describeAssociation p1 p2 = DescribeAssociation
-    { _daName       = p1
-    , _daInstanceId = p2
+-- * 'daInstanceId'
+describeAssociation
+    :: Text -- ^ 'daName'
+    -> Text -- ^ 'daInstanceId'
+    -> DescribeAssociation
+describeAssociation pName_ pInstanceId_ =
+    DescribeAssociation'
+    { _daName = pName_
+    , _daInstanceId = pInstanceId_
     }
 
--- | The ID of the instance.
-daInstanceId :: Lens' DescribeAssociation Text
-daInstanceId = lens _daInstanceId (\s a -> s { _daInstanceId = a })
-
 -- | The name of the configuration document.
 daName :: Lens' DescribeAssociation Text
-daName = lens _daName (\s a -> s { _daName = a })
+daName = lens _daName (\ s a -> s{_daName = a});
 
-newtype DescribeAssociationResponse = DescribeAssociationResponse
-    { _darAssociationDescription :: Maybe AssociationDescription
-    } deriving (Eq, Read, Show)
+-- | The ID of the instance.
+daInstanceId :: Lens' DescribeAssociation Text
+daInstanceId = lens _daInstanceId (\ s a -> s{_daInstanceId = a});
 
--- | 'DescribeAssociationResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'darAssociationDescription' @::@ 'Maybe' 'AssociationDescription'
---
-describeAssociationResponse :: DescribeAssociationResponse
-describeAssociationResponse = DescribeAssociationResponse
-    { _darAssociationDescription = Nothing
-    }
+instance AWSRequest DescribeAssociation where
+        type Sv DescribeAssociation = SSM
+        type Rs DescribeAssociation =
+             DescribeAssociationResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DescribeAssociationResponse' <$>
+                   (x .?> "AssociationDescription") <*>
+                     (pure (fromEnum s)))
 
--- | Information about the association.
-darAssociationDescription :: Lens' DescribeAssociationResponse (Maybe AssociationDescription)
-darAssociationDescription =
-    lens _darAssociationDescription
-        (\s a -> s { _darAssociationDescription = a })
+instance ToHeaders DescribeAssociation where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonSSM.DescribeAssociation" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
+instance ToJSON DescribeAssociation where
+        toJSON DescribeAssociation'{..}
+          = object
+              ["Name" .= _daName, "InstanceId" .= _daInstanceId]
+
 instance ToPath DescribeAssociation where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery DescribeAssociation where
-    toQuery = const mempty
-
-instance ToHeaders DescribeAssociation
+        toQuery = const mempty
 
-instance ToJSON DescribeAssociation where
-    toJSON DescribeAssociation{..} = object
-        [ "Name"       .= _daName
-        , "InstanceId" .= _daInstanceId
-        ]
+-- | /See:/ 'describeAssociationResponse' smart constructor.
+data DescribeAssociationResponse = DescribeAssociationResponse'
+    { _darsAssociationDescription :: !(Maybe AssociationDescription)
+    , _darsStatus                 :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest DescribeAssociation where
-    type Sv DescribeAssociation = SSM
-    type Rs DescribeAssociation = DescribeAssociationResponse
+-- | Creates a value of 'DescribeAssociationResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'darsAssociationDescription'
+--
+-- * 'darsStatus'
+describeAssociationResponse
+    :: Int -- ^ 'darsStatus'
+    -> DescribeAssociationResponse
+describeAssociationResponse pStatus_ =
+    DescribeAssociationResponse'
+    { _darsAssociationDescription = Nothing
+    , _darsStatus = pStatus_
+    }
 
-    request  = post "DescribeAssociation"
-    response = jsonResponse
+-- | Information about the association.
+darsAssociationDescription :: Lens' DescribeAssociationResponse (Maybe AssociationDescription)
+darsAssociationDescription = lens _darsAssociationDescription (\ s a -> s{_darsAssociationDescription = a});
 
-instance FromJSON DescribeAssociationResponse where
-    parseJSON = withObject "DescribeAssociationResponse" $ \o -> DescribeAssociationResponse
-        <$> o .:? "AssociationDescription"
+-- | The response status code.
+darsStatus :: Lens' DescribeAssociationResponse Int
+darsStatus = lens _darsStatus (\ s a -> s{_darsStatus = a});
diff --git a/gen/Network/AWS/SSM/DescribeDocument.hs b/gen/Network/AWS/SSM/DescribeDocument.hs
--- a/gen/Network/AWS/SSM/DescribeDocument.hs
+++ b/gen/Network/AWS/SSM/DescribeDocument.hs
@@ -1,112 +1,125 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.SSM.DescribeDocument
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Describes the specified configuration document.
+-- Describes the specified configuration document.
 --
--- <http://docs.aws.amazon.com/ssm/latest/APIReference/API_DescribeDocument.html>
+-- /See:/ <http://docs.aws.amazon.com/ssm/latest/APIReference/API_DescribeDocument.html AWS API Reference> for DescribeDocument.
 module Network.AWS.SSM.DescribeDocument
     (
-    -- * Request
-      DescribeDocument
-    -- ** Request constructor
-    , describeDocument
-    -- ** Request lenses
+    -- * Creating a Request
+      describeDocument
+    , DescribeDocument
+    -- * Request Lenses
     , ddName
 
-    -- * Response
-    , DescribeDocumentResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , describeDocumentResponse
-    -- ** Response lenses
-    , ddrDocument
+    , DescribeDocumentResponse
+    -- * Response Lenses
+    , drsDocument
+    , drsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.SSM.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.SSM.Types
+import           Network.AWS.SSM.Types.Product
 
-newtype DescribeDocument = DescribeDocument
+-- | /See:/ 'describeDocument' smart constructor.
+newtype DescribeDocument = DescribeDocument'
     { _ddName :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'DescribeDocument' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'DescribeDocument' with the minimum fields required to make a request.
 --
--- * 'ddName' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-describeDocument :: Text -- ^ 'ddName'
-                 -> DescribeDocument
-describeDocument p1 = DescribeDocument
-    { _ddName = p1
+-- * 'ddName'
+describeDocument
+    :: Text -- ^ 'ddName'
+    -> DescribeDocument
+describeDocument pName_ =
+    DescribeDocument'
+    { _ddName = pName_
     }
 
 -- | The name of the configuration document.
 ddName :: Lens' DescribeDocument Text
-ddName = lens _ddName (\s a -> s { _ddName = a })
+ddName = lens _ddName (\ s a -> s{_ddName = a});
 
-newtype DescribeDocumentResponse = DescribeDocumentResponse
-    { _ddrDocument :: Maybe DocumentDescription
-    } deriving (Eq, Read, Show)
+instance AWSRequest DescribeDocument where
+        type Sv DescribeDocument = SSM
+        type Rs DescribeDocument = DescribeDocumentResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DescribeDocumentResponse' <$>
+                   (x .?> "Document") <*> (pure (fromEnum s)))
 
--- | 'DescribeDocumentResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'ddrDocument' @::@ 'Maybe' 'DocumentDescription'
---
-describeDocumentResponse :: DescribeDocumentResponse
-describeDocumentResponse = DescribeDocumentResponse
-    { _ddrDocument = Nothing
-    }
+instance ToHeaders DescribeDocument where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonSSM.DescribeDocument" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
--- | Information about the configuration document.
-ddrDocument :: Lens' DescribeDocumentResponse (Maybe DocumentDescription)
-ddrDocument = lens _ddrDocument (\s a -> s { _ddrDocument = a })
+instance ToJSON DescribeDocument where
+        toJSON DescribeDocument'{..}
+          = object ["Name" .= _ddName]
 
 instance ToPath DescribeDocument where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery DescribeDocument where
-    toQuery = const mempty
-
-instance ToHeaders DescribeDocument
+        toQuery = const mempty
 
-instance ToJSON DescribeDocument where
-    toJSON DescribeDocument{..} = object
-        [ "Name" .= _ddName
-        ]
+-- | /See:/ 'describeDocumentResponse' smart constructor.
+data DescribeDocumentResponse = DescribeDocumentResponse'
+    { _drsDocument :: !(Maybe DocumentDescription)
+    , _drsStatus   :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest DescribeDocument where
-    type Sv DescribeDocument = SSM
-    type Rs DescribeDocument = DescribeDocumentResponse
+-- | Creates a value of 'DescribeDocumentResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'drsDocument'
+--
+-- * 'drsStatus'
+describeDocumentResponse
+    :: Int -- ^ 'drsStatus'
+    -> DescribeDocumentResponse
+describeDocumentResponse pStatus_ =
+    DescribeDocumentResponse'
+    { _drsDocument = Nothing
+    , _drsStatus = pStatus_
+    }
 
-    request  = post "DescribeDocument"
-    response = jsonResponse
+-- | Information about the configuration document.
+drsDocument :: Lens' DescribeDocumentResponse (Maybe DocumentDescription)
+drsDocument = lens _drsDocument (\ s a -> s{_drsDocument = a});
 
-instance FromJSON DescribeDocumentResponse where
-    parseJSON = withObject "DescribeDocumentResponse" $ \o -> DescribeDocumentResponse
-        <$> o .:? "Document"
+-- | The response status code.
+drsStatus :: Lens' DescribeDocumentResponse Int
+drsStatus = lens _drsStatus (\ s a -> s{_drsStatus = a});
diff --git a/gen/Network/AWS/SSM/GetDocument.hs b/gen/Network/AWS/SSM/GetDocument.hs
--- a/gen/Network/AWS/SSM/GetDocument.hs
+++ b/gen/Network/AWS/SSM/GetDocument.hs
@@ -1,122 +1,134 @@
-{-# 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.SSM.GetDocument
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Gets the contents of the specified configuration document.
+-- Gets the contents of the specified configuration document.
 --
--- <http://docs.aws.amazon.com/ssm/latest/APIReference/API_GetDocument.html>
+-- /See:/ <http://docs.aws.amazon.com/ssm/latest/APIReference/API_GetDocument.html AWS API Reference> for GetDocument.
 module Network.AWS.SSM.GetDocument
     (
-    -- * Request
-      GetDocument
-    -- ** Request constructor
-    , getDocument
-    -- ** Request lenses
+    -- * Creating a Request
+      getDocument
+    , GetDocument
+    -- * Request Lenses
     , gdName
 
-    -- * Response
-    , GetDocumentResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , getDocumentResponse
-    -- ** Response lenses
-    , gdrContent
-    , gdrName
+    , GetDocumentResponse
+    -- * Response Lenses
+    , gdrsContent
+    , gdrsName
+    , gdrsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.SSM.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.SSM.Types
+import           Network.AWS.SSM.Types.Product
 
-newtype GetDocument = GetDocument
+-- | /See:/ 'getDocument' smart constructor.
+newtype GetDocument = GetDocument'
     { _gdName :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'GetDocument' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'GetDocument' with the minimum fields required to make a request.
 --
--- * 'gdName' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-getDocument :: Text -- ^ 'gdName'
-            -> GetDocument
-getDocument p1 = GetDocument
-    { _gdName = p1
+-- * 'gdName'
+getDocument
+    :: Text -- ^ 'gdName'
+    -> GetDocument
+getDocument pName_ =
+    GetDocument'
+    { _gdName = pName_
     }
 
 -- | The name of the configuration document.
 gdName :: Lens' GetDocument Text
-gdName = lens _gdName (\s a -> s { _gdName = a })
-
-data GetDocumentResponse = GetDocumentResponse
-    { _gdrContent :: Maybe Text
-    , _gdrName    :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
+gdName = lens _gdName (\ s a -> s{_gdName = a});
 
--- | 'GetDocumentResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'gdrContent' @::@ 'Maybe' 'Text'
---
--- * 'gdrName' @::@ 'Maybe' 'Text'
---
-getDocumentResponse :: GetDocumentResponse
-getDocumentResponse = GetDocumentResponse
-    { _gdrName    = Nothing
-    , _gdrContent = Nothing
-    }
+instance AWSRequest GetDocument where
+        type Sv GetDocument = SSM
+        type Rs GetDocument = GetDocumentResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetDocumentResponse' <$>
+                   (x .?> "Content") <*> (x .?> "Name") <*>
+                     (pure (fromEnum s)))
 
--- | The contents of the configuration document.
-gdrContent :: Lens' GetDocumentResponse (Maybe Text)
-gdrContent = lens _gdrContent (\s a -> s { _gdrContent = a })
+instance ToHeaders GetDocument where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonSSM.GetDocument" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
--- | The name of the configuration document.
-gdrName :: Lens' GetDocumentResponse (Maybe Text)
-gdrName = lens _gdrName (\s a -> s { _gdrName = a })
+instance ToJSON GetDocument where
+        toJSON GetDocument'{..} = object ["Name" .= _gdName]
 
 instance ToPath GetDocument where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery GetDocument where
-    toQuery = const mempty
+        toQuery = const mempty
 
-instance ToHeaders GetDocument
+-- | /See:/ 'getDocumentResponse' smart constructor.
+data GetDocumentResponse = GetDocumentResponse'
+    { _gdrsContent :: !(Maybe Text)
+    , _gdrsName    :: !(Maybe Text)
+    , _gdrsStatus  :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance ToJSON GetDocument where
-    toJSON GetDocument{..} = object
-        [ "Name" .= _gdName
-        ]
+-- | Creates a value of 'GetDocumentResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gdrsContent'
+--
+-- * 'gdrsName'
+--
+-- * 'gdrsStatus'
+getDocumentResponse
+    :: Int -- ^ 'gdrsStatus'
+    -> GetDocumentResponse
+getDocumentResponse pStatus_ =
+    GetDocumentResponse'
+    { _gdrsContent = Nothing
+    , _gdrsName = Nothing
+    , _gdrsStatus = pStatus_
+    }
 
-instance AWSRequest GetDocument where
-    type Sv GetDocument = SSM
-    type Rs GetDocument = GetDocumentResponse
+-- | The contents of the configuration document.
+gdrsContent :: Lens' GetDocumentResponse (Maybe Text)
+gdrsContent = lens _gdrsContent (\ s a -> s{_gdrsContent = a});
 
-    request  = post "GetDocument"
-    response = jsonResponse
+-- | The name of the configuration document.
+gdrsName :: Lens' GetDocumentResponse (Maybe Text)
+gdrsName = lens _gdrsName (\ s a -> s{_gdrsName = a});
 
-instance FromJSON GetDocumentResponse where
-    parseJSON = withObject "GetDocumentResponse" $ \o -> GetDocumentResponse
-        <$> o .:? "Content"
-        <*> o .:? "Name"
+-- | The response status code.
+gdrsStatus :: Lens' GetDocumentResponse Int
+gdrsStatus = lens _gdrsStatus (\ s a -> s{_gdrsStatus = a});
diff --git a/gen/Network/AWS/SSM/ListAssociations.hs b/gen/Network/AWS/SSM/ListAssociations.hs
--- a/gen/Network/AWS/SSM/ListAssociations.hs
+++ b/gen/Network/AWS/SSM/ListAssociations.hs
@@ -1,148 +1,163 @@
-{-# 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.SSM.ListAssociations
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Lists the associations for the specified configuration document or instance.
+-- Lists the associations for the specified configuration document or
+-- instance.
 --
--- <http://docs.aws.amazon.com/ssm/latest/APIReference/API_ListAssociations.html>
+-- /See:/ <http://docs.aws.amazon.com/ssm/latest/APIReference/API_ListAssociations.html AWS API Reference> for ListAssociations.
 module Network.AWS.SSM.ListAssociations
     (
-    -- * Request
-      ListAssociations
-    -- ** Request constructor
-    , listAssociations
-    -- ** Request lenses
-    , laAssociationFilterList
-    , laMaxResults
+    -- * Creating a Request
+      listAssociations
+    , ListAssociations
+    -- * Request Lenses
     , laNextToken
+    , laMaxResults
+    , laAssociationFilterList
 
-    -- * Response
-    , ListAssociationsResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , listAssociationsResponse
-    -- ** Response lenses
-    , larAssociations
-    , larNextToken
+    , ListAssociationsResponse
+    -- * Response Lenses
+    , larsNextToken
+    , larsAssociations
+    , larsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.SSM.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.SSM.Types
+import           Network.AWS.SSM.Types.Product
 
-data ListAssociations = ListAssociations
-    { _laAssociationFilterList :: List1 "AssociationFilter" AssociationFilter
-    , _laMaxResults            :: Maybe Nat
-    , _laNextToken             :: Maybe Text
-    } deriving (Eq, Read, Show)
+-- | /See:/ 'listAssociations' smart constructor.
+data ListAssociations = ListAssociations'
+    { _laNextToken             :: !(Maybe Text)
+    , _laMaxResults            :: !(Maybe Nat)
+    , _laAssociationFilterList :: !(List1 AssociationFilter)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'ListAssociations' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'ListAssociations' with the minimum fields required to make a request.
 --
--- * 'laAssociationFilterList' @::@ 'NonEmpty' 'AssociationFilter'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'laMaxResults' @::@ 'Maybe' 'Natural'
+-- * 'laNextToken'
 --
--- * 'laNextToken' @::@ 'Maybe' 'Text'
+-- * 'laMaxResults'
 --
-listAssociations :: NonEmpty AssociationFilter -- ^ 'laAssociationFilterList'
-                 -> ListAssociations
-listAssociations p1 = ListAssociations
-    { _laAssociationFilterList = withIso _List1 (const id) p1
-    , _laMaxResults            = Nothing
-    , _laNextToken             = Nothing
+-- * 'laAssociationFilterList'
+listAssociations
+    :: NonEmpty AssociationFilter -- ^ 'laAssociationFilterList'
+    -> ListAssociations
+listAssociations pAssociationFilterList_ =
+    ListAssociations'
+    { _laNextToken = Nothing
+    , _laMaxResults = Nothing
+    , _laAssociationFilterList = _List1 # pAssociationFilterList_
     }
 
--- | One or more filters. Use a filter to return a more specific list of results.
-laAssociationFilterList :: Lens' ListAssociations (NonEmpty AssociationFilter)
-laAssociationFilterList =
-    lens _laAssociationFilterList (\s a -> s { _laAssociationFilterList = a })
-        . _List1
+-- | The token for the next set of items to return. (You received this token
+-- from a previous call.)
+laNextToken :: Lens' ListAssociations (Maybe Text)
+laNextToken = lens _laNextToken (\ s a -> s{_laNextToken = a});
 
--- | The maximum number of items to return for this call. The call also returns a
--- token that you can specify in a subsequent call to get the next set of
--- results.
+-- | The maximum number of items to return for this call. The call also
+-- returns a token that you can specify in a subsequent call to get the
+-- next set of results.
 laMaxResults :: Lens' ListAssociations (Maybe Natural)
-laMaxResults = lens _laMaxResults (\s a -> s { _laMaxResults = a }) . mapping _Nat
-
--- | The token for the next set of items to return. (You received this token from
--- a previous call.)
-laNextToken :: Lens' ListAssociations (Maybe Text)
-laNextToken = lens _laNextToken (\s a -> s { _laNextToken = a })
+laMaxResults = lens _laMaxResults (\ s a -> s{_laMaxResults = a}) . mapping _Nat;
 
-data ListAssociationsResponse = ListAssociationsResponse
-    { _larAssociations :: List "Association" Association
-    , _larNextToken    :: Maybe Text
-    } deriving (Eq, Read, Show)
+-- | One or more filters. Use a filter to return a more specific list of
+-- results.
+laAssociationFilterList :: Lens' ListAssociations (NonEmpty AssociationFilter)
+laAssociationFilterList = lens _laAssociationFilterList (\ s a -> s{_laAssociationFilterList = a}) . _List1;
 
--- | 'ListAssociationsResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'larAssociations' @::@ ['Association']
---
--- * 'larNextToken' @::@ 'Maybe' 'Text'
---
-listAssociationsResponse :: ListAssociationsResponse
-listAssociationsResponse = ListAssociationsResponse
-    { _larAssociations = mempty
-    , _larNextToken    = Nothing
-    }
+instance AWSRequest ListAssociations where
+        type Sv ListAssociations = SSM
+        type Rs ListAssociations = ListAssociationsResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 ListAssociationsResponse' <$>
+                   (x .?> "NextToken") <*>
+                     (x .?> "Associations" .!@ mempty)
+                     <*> (pure (fromEnum s)))
 
--- | The associations.
-larAssociations :: Lens' ListAssociationsResponse [Association]
-larAssociations = lens _larAssociations (\s a -> s { _larAssociations = a }) . _List
+instance ToHeaders ListAssociations where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonSSM.ListAssociations" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
--- | The token to use when requesting the next set of items. If there are no
--- additional items to return, the string is empty.
-larNextToken :: Lens' ListAssociationsResponse (Maybe Text)
-larNextToken = lens _larNextToken (\s a -> s { _larNextToken = a })
+instance ToJSON ListAssociations where
+        toJSON ListAssociations'{..}
+          = object
+              ["NextToken" .= _laNextToken,
+               "MaxResults" .= _laMaxResults,
+               "AssociationFilterList" .= _laAssociationFilterList]
 
 instance ToPath ListAssociations where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery ListAssociations where
-    toQuery = const mempty
+        toQuery = const mempty
 
-instance ToHeaders ListAssociations
+-- | /See:/ 'listAssociationsResponse' smart constructor.
+data ListAssociationsResponse = ListAssociationsResponse'
+    { _larsNextToken    :: !(Maybe Text)
+    , _larsAssociations :: !(Maybe [Association])
+    , _larsStatus       :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance ToJSON ListAssociations where
-    toJSON ListAssociations{..} = object
-        [ "AssociationFilterList" .= _laAssociationFilterList
-        , "MaxResults"            .= _laMaxResults
-        , "NextToken"             .= _laNextToken
-        ]
+-- | Creates a value of 'ListAssociationsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'larsNextToken'
+--
+-- * 'larsAssociations'
+--
+-- * 'larsStatus'
+listAssociationsResponse
+    :: Int -- ^ 'larsStatus'
+    -> ListAssociationsResponse
+listAssociationsResponse pStatus_ =
+    ListAssociationsResponse'
+    { _larsNextToken = Nothing
+    , _larsAssociations = Nothing
+    , _larsStatus = pStatus_
+    }
 
-instance AWSRequest ListAssociations where
-    type Sv ListAssociations = SSM
-    type Rs ListAssociations = ListAssociationsResponse
+-- | The token to use when requesting the next set of items. If there are no
+-- additional items to return, the string is empty.
+larsNextToken :: Lens' ListAssociationsResponse (Maybe Text)
+larsNextToken = lens _larsNextToken (\ s a -> s{_larsNextToken = a});
 
-    request  = post "ListAssociations"
-    response = jsonResponse
+-- | The associations.
+larsAssociations :: Lens' ListAssociationsResponse [Association]
+larsAssociations = lens _larsAssociations (\ s a -> s{_larsAssociations = a}) . _Default . _Coerce;
 
-instance FromJSON ListAssociationsResponse where
-    parseJSON = withObject "ListAssociationsResponse" $ \o -> ListAssociationsResponse
-        <$> o .:? "Associations" .!= mempty
-        <*> o .:? "NextToken"
+-- | The response status code.
+larsStatus :: Lens' ListAssociationsResponse Int
+larsStatus = lens _larsStatus (\ s a -> s{_larsStatus = a});
diff --git a/gen/Network/AWS/SSM/ListDocuments.hs b/gen/Network/AWS/SSM/ListDocuments.hs
--- a/gen/Network/AWS/SSM/ListDocuments.hs
+++ b/gen/Network/AWS/SSM/ListDocuments.hs
@@ -1,150 +1,161 @@
-{-# 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.SSM.ListDocuments
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Describes one or more of your configuration documents.
+-- Describes one or more of your configuration documents.
 --
--- <http://docs.aws.amazon.com/ssm/latest/APIReference/API_ListDocuments.html>
+-- /See:/ <http://docs.aws.amazon.com/ssm/latest/APIReference/API_ListDocuments.html AWS API Reference> for ListDocuments.
 module Network.AWS.SSM.ListDocuments
     (
-    -- * Request
-      ListDocuments
-    -- ** Request constructor
-    , listDocuments
-    -- ** Request lenses
+    -- * Creating a Request
+      listDocuments
+    , ListDocuments
+    -- * Request Lenses
     , ldDocumentFilterList
-    , ldMaxResults
     , ldNextToken
+    , ldMaxResults
 
-    -- * Response
-    , ListDocumentsResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , listDocumentsResponse
-    -- ** Response lenses
-    , ldrDocumentIdentifiers
-    , ldrNextToken
+    , ListDocumentsResponse
+    -- * Response Lenses
+    , ldrsDocumentIdentifiers
+    , ldrsNextToken
+    , ldrsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.SSM.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.SSM.Types
+import           Network.AWS.SSM.Types.Product
 
-data ListDocuments = ListDocuments
-    { _ldDocumentFilterList :: List1 "DocumentFilter" DocumentFilter
-    , _ldMaxResults         :: Maybe Nat
-    , _ldNextToken          :: Maybe Text
-    } deriving (Eq, Read, Show)
+-- | /See:/ 'listDocuments' smart constructor.
+data ListDocuments = ListDocuments'
+    { _ldDocumentFilterList :: !(Maybe (List1 DocumentFilter))
+    , _ldNextToken          :: !(Maybe Text)
+    , _ldMaxResults         :: !(Maybe Nat)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'ListDocuments' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'ListDocuments' with the minimum fields required to make a request.
 --
--- * 'ldDocumentFilterList' @::@ 'NonEmpty' 'DocumentFilter'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'ldMaxResults' @::@ 'Maybe' 'Natural'
+-- * 'ldDocumentFilterList'
 --
--- * 'ldNextToken' @::@ 'Maybe' 'Text'
+-- * 'ldNextToken'
 --
-listDocuments :: NonEmpty DocumentFilter -- ^ 'ldDocumentFilterList'
-              -> ListDocuments
-listDocuments p1 = ListDocuments
-    { _ldDocumentFilterList = withIso _List1 (const id) p1
-    , _ldMaxResults         = Nothing
-    , _ldNextToken          = Nothing
+-- * 'ldMaxResults'
+listDocuments
+    :: ListDocuments
+listDocuments =
+    ListDocuments'
+    { _ldDocumentFilterList = Nothing
+    , _ldNextToken = Nothing
+    , _ldMaxResults = Nothing
     }
 
--- | One or more filters. Use a filter to return a more specific list of results.
-ldDocumentFilterList :: Lens' ListDocuments (NonEmpty DocumentFilter)
-ldDocumentFilterList =
-    lens _ldDocumentFilterList (\s a -> s { _ldDocumentFilterList = a })
-        . _List1
-
--- | The maximum number of items to return for this call. The call also returns a
--- token that you can specify in a subsequent call to get the next set of
+-- | One or more filters. Use a filter to return a more specific list of
 -- results.
-ldMaxResults :: Lens' ListDocuments (Maybe Natural)
-ldMaxResults = lens _ldMaxResults (\s a -> s { _ldMaxResults = a }) . mapping _Nat
+ldDocumentFilterList :: Lens' ListDocuments (Maybe (NonEmpty DocumentFilter))
+ldDocumentFilterList = lens _ldDocumentFilterList (\ s a -> s{_ldDocumentFilterList = a}) . mapping _List1;
 
--- | The token for the next set of items to return. (You received this token from
--- a previous call.)
+-- | The token for the next set of items to return. (You received this token
+-- from a previous call.)
 ldNextToken :: Lens' ListDocuments (Maybe Text)
-ldNextToken = lens _ldNextToken (\s a -> s { _ldNextToken = a })
+ldNextToken = lens _ldNextToken (\ s a -> s{_ldNextToken = a});
 
-data ListDocumentsResponse = ListDocumentsResponse
-    { _ldrDocumentIdentifiers :: List "DocumentIdentifier" DocumentIdentifier
-    , _ldrNextToken           :: Maybe Text
-    } deriving (Eq, Read, Show)
+-- | The maximum number of items to return for this call. The call also
+-- returns a token that you can specify in a subsequent call to get the
+-- next set of results.
+ldMaxResults :: Lens' ListDocuments (Maybe Natural)
+ldMaxResults = lens _ldMaxResults (\ s a -> s{_ldMaxResults = a}) . mapping _Nat;
 
--- | 'ListDocumentsResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'ldrDocumentIdentifiers' @::@ ['DocumentIdentifier']
---
--- * 'ldrNextToken' @::@ 'Maybe' 'Text'
---
-listDocumentsResponse :: ListDocumentsResponse
-listDocumentsResponse = ListDocumentsResponse
-    { _ldrDocumentIdentifiers = mempty
-    , _ldrNextToken           = Nothing
-    }
+instance AWSRequest ListDocuments where
+        type Sv ListDocuments = SSM
+        type Rs ListDocuments = ListDocumentsResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 ListDocumentsResponse' <$>
+                   (x .?> "DocumentIdentifiers" .!@ mempty) <*>
+                     (x .?> "NextToken")
+                     <*> (pure (fromEnum s)))
 
--- | The names of the configuration documents.
-ldrDocumentIdentifiers :: Lens' ListDocumentsResponse [DocumentIdentifier]
-ldrDocumentIdentifiers =
-    lens _ldrDocumentIdentifiers (\s a -> s { _ldrDocumentIdentifiers = a })
-        . _List
+instance ToHeaders ListDocuments where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonSSM.ListDocuments" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
--- | The token to use when requesting the next set of items. If there are no
--- additional items to return, the string is empty.
-ldrNextToken :: Lens' ListDocumentsResponse (Maybe Text)
-ldrNextToken = lens _ldrNextToken (\s a -> s { _ldrNextToken = a })
+instance ToJSON ListDocuments where
+        toJSON ListDocuments'{..}
+          = object
+              ["DocumentFilterList" .= _ldDocumentFilterList,
+               "NextToken" .= _ldNextToken,
+               "MaxResults" .= _ldMaxResults]
 
 instance ToPath ListDocuments where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery ListDocuments where
-    toQuery = const mempty
+        toQuery = const mempty
 
-instance ToHeaders ListDocuments
+-- | /See:/ 'listDocumentsResponse' smart constructor.
+data ListDocumentsResponse = ListDocumentsResponse'
+    { _ldrsDocumentIdentifiers :: !(Maybe [DocumentIdentifier])
+    , _ldrsNextToken           :: !(Maybe Text)
+    , _ldrsStatus              :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance ToJSON ListDocuments where
-    toJSON ListDocuments{..} = object
-        [ "DocumentFilterList" .= _ldDocumentFilterList
-        , "MaxResults"         .= _ldMaxResults
-        , "NextToken"          .= _ldNextToken
-        ]
+-- | Creates a value of 'ListDocumentsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ldrsDocumentIdentifiers'
+--
+-- * 'ldrsNextToken'
+--
+-- * 'ldrsStatus'
+listDocumentsResponse
+    :: Int -- ^ 'ldrsStatus'
+    -> ListDocumentsResponse
+listDocumentsResponse pStatus_ =
+    ListDocumentsResponse'
+    { _ldrsDocumentIdentifiers = Nothing
+    , _ldrsNextToken = Nothing
+    , _ldrsStatus = pStatus_
+    }
 
-instance AWSRequest ListDocuments where
-    type Sv ListDocuments = SSM
-    type Rs ListDocuments = ListDocumentsResponse
+-- | The names of the configuration documents.
+ldrsDocumentIdentifiers :: Lens' ListDocumentsResponse [DocumentIdentifier]
+ldrsDocumentIdentifiers = lens _ldrsDocumentIdentifiers (\ s a -> s{_ldrsDocumentIdentifiers = a}) . _Default . _Coerce;
 
-    request  = post "ListDocuments"
-    response = jsonResponse
+-- | The token to use when requesting the next set of items. If there are no
+-- additional items to return, the string is empty.
+ldrsNextToken :: Lens' ListDocumentsResponse (Maybe Text)
+ldrsNextToken = lens _ldrsNextToken (\ s a -> s{_ldrsNextToken = a});
 
-instance FromJSON ListDocumentsResponse where
-    parseJSON = withObject "ListDocumentsResponse" $ \o -> ListDocumentsResponse
-        <$> o .:? "DocumentIdentifiers" .!= mempty
-        <*> o .:? "NextToken"
+-- | The response status code.
+ldrsStatus :: Lens' ListDocumentsResponse Int
+ldrsStatus = lens _ldrsStatus (\ s a -> s{_ldrsStatus = a});
diff --git a/gen/Network/AWS/SSM/Types.hs b/gen/Network/AWS/SSM/Types.hs
--- a/gen/Network/AWS/SSM/Types.hs
+++ b/gen/Network/AWS/SSM/Types.hs
@@ -1,54 +1,40 @@
-{-# 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.SSM.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.SSM.Types
     (
     -- * Service
       SSM
-    -- ** Error
-    , JSONError
 
-    -- * CreateAssociationBatchRequestEntry
-    , CreateAssociationBatchRequestEntry
-    , createAssociationBatchRequestEntry
-    , cabreInstanceId
-    , cabreName
-
-    -- * DocumentFilter
-    , DocumentFilter
-    , documentFilter
-    , dfKey
-    , dfValue
+    -- * Errors
+    , _AssociatedInstances
+    , _InvalidNextToken
+    , _InvalidInstanceId
+    , _StatusUnchanged
+    , _DuplicateInstanceId
+    , _InvalidDocument
+    , _AssociationLimitExceeded
+    , _InvalidDocumentContent
+    , _AssociationAlreadyExists
+    , _AssociationDoesNotExist
+    , _InternalServerError
+    , _MaxDocumentSizeExceeded
+    , _TooManyUpdates
+    , _DocumentAlreadyExists
+    , _DocumentLimitExceeded
 
-    -- * AssociationDescription
-    , AssociationDescription
-    , associationDescription
-    , adDate
-    , adInstanceId
-    , adName
-    , adStatus
+    -- * AssociationFilterKey
+    , AssociationFilterKey (..)
 
     -- * AssociationStatusName
     , AssociationStatusName (..)
@@ -56,656 +42,181 @@
     -- * DocumentFilterKey
     , DocumentFilterKey (..)
 
-    -- * DocumentDescription
-    , DocumentDescription
-    , documentDescription
-    , dd1CreatedDate
-    , dd1Name
-    , dd1Sha1
-    , dd1Status
+    -- * DocumentStatus
+    , DocumentStatus (..)
 
+    -- * Fault
+    , Fault (..)
+
+    -- * Association
+    , Association
+    , association
+    , aInstanceId
+    , aName
+
+    -- * AssociationDescription
+    , AssociationDescription
+    , associationDescription
+    , adInstanceId
+    , adStatus
+    , adDate
+    , adName
+
     -- * AssociationFilter
     , AssociationFilter
     , associationFilter
     , afKey
     , afValue
 
-    -- * DocumentIdentifier
-    , DocumentIdentifier
-    , documentIdentifier
-    , diName
-
-    -- * Fault
-    , Fault (..)
-
     -- * AssociationStatus
     , AssociationStatus
     , associationStatus
     , asAdditionalInfo
     , asDate
-    , asMessage
     , asName
+    , asMessage
 
-    -- * DocumentStatus
-    , DocumentStatus (..)
+    -- * CreateAssociationBatchRequestEntry
+    , CreateAssociationBatchRequestEntry
+    , createAssociationBatchRequestEntry
+    , cabreInstanceId
+    , cabreName
 
-    -- * AssociationFilterKey
-    , AssociationFilterKey (..)
+    -- * DocumentDescription
+    , DocumentDescription
+    , documentDescription
+    , dStatus
+    , dSha1
+    , dCreatedDate
+    , dName
 
+    -- * DocumentFilter
+    , DocumentFilter
+    , documentFilter
+    , dfKey
+    , dfValue
+
+    -- * DocumentIdentifier
+    , DocumentIdentifier
+    , documentIdentifier
+    , diName
+
     -- * FailedCreateAssociation
     , FailedCreateAssociation
     , failedCreateAssociation
     , fcaEntry
     , fcaFault
     , fcaMessage
-
-    -- * Association
-    , Association
-    , association
-    , aInstanceId
-    , aName
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Signing
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Sign.V4
+import           Network.AWS.SSM.Types.Product
+import           Network.AWS.SSM.Types.Sum
 
--- | Version @2014-11-06@ of the Amazon Simple Systems Management Service service.
+-- | Version @2014-11-06@ of the Amazon Simple Systems Management Service SDK.
 data SSM
 
 instance AWSService SSM where
     type Sg SSM = V4
-    type Er SSM = JSONError
-
-    service = service'
+    service = const svc
       where
-        service' :: Service SSM
-        service' = Service
-            { _svcAbbrev       = "SSM"
-            , _svcPrefix       = "ssm"
-            , _svcVersion      = "2014-11-06"
-            , _svcTargetPrefix = Just "AmazonSSM"
-            , _svcJSONVersion  = Just "1.1"
-            , _svcHandle       = handle
-            , _svcRetry        = retry
+        svc =
+            Service
+            { _svcAbbrev = "SSM"
+            , _svcPrefix = "ssm"
+            , _svcVersion = "2014-11-06"
+            , _svcEndpoint = defaultEndpoint svc
+            , _svcTimeout = Just 70
+            , _svcStatus = statusSuccess
+            , _svcError = parseJSONError
+            , _svcRetry = retry
             }
-
-        handle :: Status
-               -> Maybe (LazyByteString -> ServiceError JSONError)
-        handle = jsonError statusSuccess service'
-
-        retry :: Retry SSM
-        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 CreateAssociationBatchRequestEntry = CreateAssociationBatchRequestEntry
-    { _cabreInstanceId :: Maybe Text
-    , _cabreName       :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'CreateAssociationBatchRequestEntry' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'cabreInstanceId' @::@ 'Maybe' 'Text'
---
--- * 'cabreName' @::@ 'Maybe' 'Text'
---
-createAssociationBatchRequestEntry :: CreateAssociationBatchRequestEntry
-createAssociationBatchRequestEntry = CreateAssociationBatchRequestEntry
-    { _cabreName       = Nothing
-    , _cabreInstanceId = Nothing
-    }
-
--- | The ID of the instance.
-cabreInstanceId :: Lens' CreateAssociationBatchRequestEntry (Maybe Text)
-cabreInstanceId = lens _cabreInstanceId (\s a -> s { _cabreInstanceId = a })
-
--- | The name of the configuration document.
-cabreName :: Lens' CreateAssociationBatchRequestEntry (Maybe Text)
-cabreName = lens _cabreName (\s a -> s { _cabreName = a })
-
-instance FromJSON CreateAssociationBatchRequestEntry where
-    parseJSON = withObject "CreateAssociationBatchRequestEntry" $ \o -> CreateAssociationBatchRequestEntry
-        <$> o .:? "InstanceId"
-        <*> o .:? "Name"
-
-instance ToJSON CreateAssociationBatchRequestEntry where
-    toJSON CreateAssociationBatchRequestEntry{..} = object
-        [ "Name"       .= _cabreName
-        , "InstanceId" .= _cabreInstanceId
-        ]
-
-data DocumentFilter = DocumentFilter
-    { _dfKey   :: DocumentFilterKey
-    , _dfValue :: Text
-    } deriving (Eq, Read, Show)
-
--- | 'DocumentFilter' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'dfKey' @::@ 'DocumentFilterKey'
---
--- * 'dfValue' @::@ 'Text'
---
-documentFilter :: DocumentFilterKey -- ^ 'dfKey'
-               -> Text -- ^ 'dfValue'
-               -> DocumentFilter
-documentFilter p1 p2 = DocumentFilter
-    { _dfKey   = p1
-    , _dfValue = p2
-    }
-
--- | The name of the filter.
-dfKey :: Lens' DocumentFilter DocumentFilterKey
-dfKey = lens _dfKey (\s a -> s { _dfKey = a })
-
--- | The value of the filter.
-dfValue :: Lens' DocumentFilter Text
-dfValue = lens _dfValue (\s a -> s { _dfValue = a })
-
-instance FromJSON DocumentFilter where
-    parseJSON = withObject "DocumentFilter" $ \o -> DocumentFilter
-        <$> o .:  "key"
-        <*> o .:  "value"
-
-instance ToJSON DocumentFilter where
-    toJSON DocumentFilter{..} = object
-        [ "key"   .= _dfKey
-        , "value" .= _dfValue
-        ]
-
-data AssociationDescription = AssociationDescription
-    { _adDate       :: Maybe POSIX
-    , _adInstanceId :: Maybe Text
-    , _adName       :: Maybe Text
-    , _adStatus     :: Maybe AssociationStatus
-    } deriving (Eq, Read, Show)
-
--- | 'AssociationDescription' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'adDate' @::@ 'Maybe' 'UTCTime'
---
--- * 'adInstanceId' @::@ 'Maybe' 'Text'
---
--- * 'adName' @::@ 'Maybe' 'Text'
---
--- * 'adStatus' @::@ 'Maybe' 'AssociationStatus'
---
-associationDescription :: AssociationDescription
-associationDescription = AssociationDescription
-    { _adName       = Nothing
-    , _adInstanceId = Nothing
-    , _adDate       = Nothing
-    , _adStatus     = Nothing
-    }
-
--- | The date when the association was made.
-adDate :: Lens' AssociationDescription (Maybe UTCTime)
-adDate = lens _adDate (\s a -> s { _adDate = a }) . mapping _Time
-
--- | The ID of the instance.
-adInstanceId :: Lens' AssociationDescription (Maybe Text)
-adInstanceId = lens _adInstanceId (\s a -> s { _adInstanceId = a })
-
--- | The name of the configuration document.
-adName :: Lens' AssociationDescription (Maybe Text)
-adName = lens _adName (\s a -> s { _adName = a })
-
--- | The association status.
-adStatus :: Lens' AssociationDescription (Maybe AssociationStatus)
-adStatus = lens _adStatus (\s a -> s { _adStatus = a })
-
-instance FromJSON AssociationDescription where
-    parseJSON = withObject "AssociationDescription" $ \o -> AssociationDescription
-        <$> o .:? "Date"
-        <*> o .:? "InstanceId"
-        <*> o .:? "Name"
-        <*> o .:? "Status"
-
-instance ToJSON AssociationDescription where
-    toJSON AssociationDescription{..} = object
-        [ "Name"       .= _adName
-        , "InstanceId" .= _adInstanceId
-        , "Date"       .= _adDate
-        , "Status"     .= _adStatus
-        ]
-
-data AssociationStatusName
-    = Failed  -- ^ Failed
-    | Pending -- ^ Pending
-    | Success -- ^ Success
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
-
-instance Hashable AssociationStatusName
-
-instance FromText AssociationStatusName where
-    parser = takeLowerText >>= \case
-        "failed"  -> pure Failed
-        "pending" -> pure Pending
-        "success" -> pure Success
-        e         -> fail $
-            "Failure parsing AssociationStatusName from " ++ show e
-
-instance ToText AssociationStatusName where
-    toText = \case
-        Failed  -> "Failed"
-        Pending -> "Pending"
-        Success -> "Success"
-
-instance ToByteString AssociationStatusName
-instance ToHeader     AssociationStatusName
-instance ToQuery      AssociationStatusName
-
-instance FromJSON AssociationStatusName where
-    parseJSON = parseJSONText "AssociationStatusName"
-
-instance ToJSON AssociationStatusName where
-    toJSON = toJSONText
-
-data DocumentFilterKey
-    = Name -- ^ Name
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
-
-instance Hashable DocumentFilterKey
-
-instance FromText DocumentFilterKey where
-    parser = takeLowerText >>= \case
-        "name" -> pure Name
-        e      -> fail $
-            "Failure parsing DocumentFilterKey from " ++ show e
-
-instance ToText DocumentFilterKey where
-    toText Name = "Name"
-
-instance ToByteString DocumentFilterKey
-instance ToHeader     DocumentFilterKey
-instance ToQuery      DocumentFilterKey
-
-instance FromJSON DocumentFilterKey where
-    parseJSON = parseJSONText "DocumentFilterKey"
-
-instance ToJSON DocumentFilterKey where
-    toJSON = toJSONText
-
-data DocumentDescription = DocumentDescription
-    { _dd1CreatedDate :: Maybe POSIX
-    , _dd1Name        :: Maybe Text
-    , _dd1Sha1        :: Maybe Text
-    , _dd1Status      :: Maybe DocumentStatus
-    } deriving (Eq, Read, Show)
-
--- | 'DocumentDescription' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'dd1CreatedDate' @::@ 'Maybe' 'UTCTime'
---
--- * 'dd1Name' @::@ 'Maybe' 'Text'
---
--- * 'dd1Sha1' @::@ 'Maybe' 'Text'
---
--- * 'dd1Status' @::@ 'Maybe' 'DocumentStatus'
---
-documentDescription :: DocumentDescription
-documentDescription = DocumentDescription
-    { _dd1Sha1        = Nothing
-    , _dd1Name        = Nothing
-    , _dd1CreatedDate = Nothing
-    , _dd1Status      = Nothing
-    }
-
--- | The date when the configuration document was created.
-dd1CreatedDate :: Lens' DocumentDescription (Maybe UTCTime)
-dd1CreatedDate = lens _dd1CreatedDate (\s a -> s { _dd1CreatedDate = a }) . mapping _Time
-
--- | The name of the configuration document.
-dd1Name :: Lens' DocumentDescription (Maybe Text)
-dd1Name = lens _dd1Name (\s a -> s { _dd1Name = a })
-
--- | The SHA1 hash of the document, which you can use for verification purposes.
-dd1Sha1 :: Lens' DocumentDescription (Maybe Text)
-dd1Sha1 = lens _dd1Sha1 (\s a -> s { _dd1Sha1 = a })
-
--- | The status of the configuration document.
-dd1Status :: Lens' DocumentDescription (Maybe DocumentStatus)
-dd1Status = lens _dd1Status (\s a -> s { _dd1Status = a })
-
-instance FromJSON DocumentDescription where
-    parseJSON = withObject "DocumentDescription" $ \o -> DocumentDescription
-        <$> o .:? "CreatedDate"
-        <*> o .:? "Name"
-        <*> o .:? "Sha1"
-        <*> o .:? "Status"
-
-instance ToJSON DocumentDescription where
-    toJSON DocumentDescription{..} = object
-        [ "Sha1"        .= _dd1Sha1
-        , "Name"        .= _dd1Name
-        , "CreatedDate" .= _dd1CreatedDate
-        , "Status"      .= _dd1Status
-        ]
-
-data AssociationFilter = AssociationFilter
-    { _afKey   :: AssociationFilterKey
-    , _afValue :: Text
-    } deriving (Eq, Read, Show)
-
--- | 'AssociationFilter' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'afKey' @::@ 'AssociationFilterKey'
---
--- * 'afValue' @::@ 'Text'
---
-associationFilter :: AssociationFilterKey -- ^ 'afKey'
-                  -> Text -- ^ 'afValue'
-                  -> AssociationFilter
-associationFilter p1 p2 = AssociationFilter
-    { _afKey   = p1
-    , _afValue = p2
-    }
-
--- | The name of the filter.
-afKey :: Lens' AssociationFilter AssociationFilterKey
-afKey = lens _afKey (\s a -> s { _afKey = a })
-
--- | The filter value.
-afValue :: Lens' AssociationFilter Text
-afValue = lens _afValue (\s a -> s { _afValue = a })
-
-instance FromJSON AssociationFilter where
-    parseJSON = withObject "AssociationFilter" $ \o -> AssociationFilter
-        <$> o .:  "key"
-        <*> o .:  "value"
-
-instance ToJSON AssociationFilter where
-    toJSON AssociationFilter{..} = object
-        [ "key"   .= _afKey
-        , "value" .= _afValue
-        ]
-
-newtype DocumentIdentifier = DocumentIdentifier
-    { _diName :: Maybe Text
-    } deriving (Eq, Ord, Read, Show, Monoid)
-
--- | 'DocumentIdentifier' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'diName' @::@ 'Maybe' 'Text'
---
-documentIdentifier :: DocumentIdentifier
-documentIdentifier = DocumentIdentifier
-    { _diName = Nothing
-    }
-
--- | The name of the configuration document.
-diName :: Lens' DocumentIdentifier (Maybe Text)
-diName = lens _diName (\s a -> s { _diName = a })
-
-instance FromJSON DocumentIdentifier where
-    parseJSON = withObject "DocumentIdentifier" $ \o -> DocumentIdentifier
-        <$> o .:? "Name"
-
-instance ToJSON DocumentIdentifier where
-    toJSON DocumentIdentifier{..} = object
-        [ "Name" .= _diName
-        ]
-
-data Fault
-    = Client  -- ^ Client
-    | Server  -- ^ Server
-    | Unknown -- ^ Unknown
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
-
-instance Hashable Fault
-
-instance FromText Fault where
-    parser = takeLowerText >>= \case
-        "client"  -> pure Client
-        "server"  -> pure Server
-        "unknown" -> pure Unknown
-        e         -> fail $
-            "Failure parsing Fault from " ++ show e
-
-instance ToText Fault where
-    toText = \case
-        Client  -> "Client"
-        Server  -> "Server"
-        Unknown -> "Unknown"
-
-instance ToByteString Fault
-instance ToHeader     Fault
-instance ToQuery      Fault
-
-instance FromJSON Fault where
-    parseJSON = parseJSONText "Fault"
-
-instance ToJSON Fault where
-    toJSON = toJSONText
-
-data AssociationStatus = AssociationStatus
-    { _asAdditionalInfo :: Maybe Text
-    , _asDate           :: POSIX
-    , _asMessage        :: Text
-    , _asName           :: AssociationStatusName
-    } deriving (Eq, Read, Show)
-
--- | 'AssociationStatus' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'asAdditionalInfo' @::@ 'Maybe' 'Text'
---
--- * 'asDate' @::@ 'UTCTime'
---
--- * 'asMessage' @::@ 'Text'
---
--- * 'asName' @::@ 'AssociationStatusName'
---
-associationStatus :: UTCTime -- ^ 'asDate'
-                  -> AssociationStatusName -- ^ 'asName'
-                  -> Text -- ^ 'asMessage'
-                  -> AssociationStatus
-associationStatus p1 p2 p3 = AssociationStatus
-    { _asDate           = withIso _Time (const id) p1
-    , _asName           = p2
-    , _asMessage        = p3
-    , _asAdditionalInfo = Nothing
-    }
-
--- | A user-defined string.
-asAdditionalInfo :: Lens' AssociationStatus (Maybe Text)
-asAdditionalInfo = lens _asAdditionalInfo (\s a -> s { _asAdditionalInfo = a })
-
--- | The date when the status changed.
-asDate :: Lens' AssociationStatus UTCTime
-asDate = lens _asDate (\s a -> s { _asDate = a }) . _Time
-
--- | The reason for the status.
-asMessage :: Lens' AssociationStatus Text
-asMessage = lens _asMessage (\s a -> s { _asMessage = a })
-
--- | The status.
-asName :: Lens' AssociationStatus AssociationStatusName
-asName = lens _asName (\s a -> s { _asName = a })
-
-instance FromJSON AssociationStatus where
-    parseJSON = withObject "AssociationStatus" $ \o -> AssociationStatus
-        <$> o .:? "AdditionalInfo"
-        <*> o .:  "Date"
-        <*> o .:  "Message"
-        <*> o .:  "Name"
-
-instance ToJSON AssociationStatus where
-    toJSON AssociationStatus{..} = object
-        [ "Date"           .= _asDate
-        , "Name"           .= _asName
-        , "Message"        .= _asMessage
-        , "AdditionalInfo" .= _asAdditionalInfo
-        ]
-
-data DocumentStatus
-    = Active   -- ^ Active
-    | Creating -- ^ Creating
-    | Deleting -- ^ Deleting
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
-
-instance Hashable DocumentStatus
-
-instance FromText DocumentStatus where
-    parser = takeLowerText >>= \case
-        "active"   -> pure Active
-        "creating" -> pure Creating
-        "deleting" -> pure Deleting
-        e          -> fail $
-            "Failure parsing DocumentStatus from " ++ show e
-
-instance ToText DocumentStatus where
-    toText = \case
-        Active   -> "Active"
-        Creating -> "Creating"
-        Deleting -> "Deleting"
-
-instance ToByteString DocumentStatus
-instance ToHeader     DocumentStatus
-instance ToQuery      DocumentStatus
-
-instance FromJSON DocumentStatus where
-    parseJSON = parseJSONText "DocumentStatus"
-
-instance ToJSON DocumentStatus where
-    toJSON = toJSONText
-
-data AssociationFilterKey
-    = AFKInstanceId -- ^ InstanceId
-    | AFKName       -- ^ Name
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
-
-instance Hashable AssociationFilterKey
-
-instance FromText AssociationFilterKey where
-    parser = takeLowerText >>= \case
-        "instanceid" -> pure AFKInstanceId
-        "name"       -> pure AFKName
-        e            -> fail $
-            "Failure parsing AssociationFilterKey from " ++ show e
-
-instance ToText AssociationFilterKey where
-    toText = \case
-        AFKInstanceId -> "InstanceId"
-        AFKName       -> "Name"
-
-instance ToByteString AssociationFilterKey
-instance ToHeader     AssociationFilterKey
-instance ToQuery      AssociationFilterKey
+        check e
+          | has (hasCode "ThrottlingException" . hasStatus 400) e =
+              Just "throttling_exception"
+          | has (hasCode "Throttling" . hasStatus 400) e = Just "throttling"
+          | has (hasStatus 503) e = Just "service_unavailable"
+          | has (hasStatus 500) e = Just "general_server_error"
+          | has (hasStatus 509) e = Just "limit_exceeded"
+          | otherwise = Nothing
 
-instance FromJSON AssociationFilterKey where
-    parseJSON = parseJSONText "AssociationFilterKey"
+-- | You must disassociate a configuration document from all instances before
+-- you can delete it.
+_AssociatedInstances :: AsError a => Getting (First ServiceError) a ServiceError
+_AssociatedInstances =
+    _ServiceError . hasStatus 400 . hasCode "AssociatedInstances"
 
-instance ToJSON AssociationFilterKey where
-    toJSON = toJSONText
+-- | The specified token is not valid.
+_InvalidNextToken :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidNextToken = _ServiceError . hasStatus 400 . hasCode "InvalidNextToken"
 
-data FailedCreateAssociation = FailedCreateAssociation
-    { _fcaEntry   :: Maybe CreateAssociationBatchRequestEntry
-    , _fcaFault   :: Maybe Fault
-    , _fcaMessage :: Maybe Text
-    } deriving (Eq, Read, Show)
+-- | You must specify the ID of a running instance.
+_InvalidInstanceId :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidInstanceId =
+    _ServiceError . hasStatus 404 . hasCode "InvalidInstanceId"
 
--- | 'FailedCreateAssociation' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'fcaEntry' @::@ 'Maybe' 'CreateAssociationBatchRequestEntry'
---
--- * 'fcaFault' @::@ 'Maybe' 'Fault'
---
--- * 'fcaMessage' @::@ 'Maybe' 'Text'
---
-failedCreateAssociation :: FailedCreateAssociation
-failedCreateAssociation = FailedCreateAssociation
-    { _fcaEntry   = Nothing
-    , _fcaMessage = Nothing
-    , _fcaFault   = Nothing
-    }
+-- | The updated status is the same as the current status.
+_StatusUnchanged :: AsError a => Getting (First ServiceError) a ServiceError
+_StatusUnchanged = _ServiceError . hasStatus 400 . hasCode "StatusUnchanged"
 
--- | The association.
-fcaEntry :: Lens' FailedCreateAssociation (Maybe CreateAssociationBatchRequestEntry)
-fcaEntry = lens _fcaEntry (\s a -> s { _fcaEntry = a })
+-- | You cannot specify an instance ID in more than one association.
+_DuplicateInstanceId :: AsError a => Getting (First ServiceError) a ServiceError
+_DuplicateInstanceId =
+    _ServiceError . hasStatus 404 . hasCode "DuplicateInstanceId"
 
--- | The source of the failure.
-fcaFault :: Lens' FailedCreateAssociation (Maybe Fault)
-fcaFault = lens _fcaFault (\s a -> s { _fcaFault = a })
+-- | The configuration document is not valid.
+_InvalidDocument :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidDocument = _ServiceError . hasStatus 404 . hasCode "InvalidDocument"
 
--- | A description of the failure.
-fcaMessage :: Lens' FailedCreateAssociation (Maybe Text)
-fcaMessage = lens _fcaMessage (\s a -> s { _fcaMessage = a })
+-- | You can have at most 2,000 active associations.
+_AssociationLimitExceeded :: AsError a => Getting (First ServiceError) a ServiceError
+_AssociationLimitExceeded =
+    _ServiceError . hasStatus 400 . hasCode "AssociationLimitExceeded"
 
-instance FromJSON FailedCreateAssociation where
-    parseJSON = withObject "FailedCreateAssociation" $ \o -> FailedCreateAssociation
-        <$> o .:? "Entry"
-        <*> o .:? "Fault"
-        <*> o .:? "Message"
+-- | The content for the configuration document is not valid.
+_InvalidDocumentContent :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidDocumentContent =
+    _ServiceError . hasStatus 400 . hasCode "InvalidDocumentContent"
 
-instance ToJSON FailedCreateAssociation where
-    toJSON FailedCreateAssociation{..} = object
-        [ "Entry"   .= _fcaEntry
-        , "Message" .= _fcaMessage
-        , "Fault"   .= _fcaFault
-        ]
+-- | The specified association already exists.
+_AssociationAlreadyExists :: AsError a => Getting (First ServiceError) a ServiceError
+_AssociationAlreadyExists =
+    _ServiceError . hasStatus 400 . hasCode "AssociationAlreadyExists"
 
-data Association = Association
-    { _aInstanceId :: Maybe Text
-    , _aName       :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
+-- | The specified association does not exist.
+_AssociationDoesNotExist :: AsError a => Getting (First ServiceError) a ServiceError
+_AssociationDoesNotExist =
+    _ServiceError . hasStatus 404 . hasCode "AssociationDoesNotExist"
 
--- | 'Association' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'aInstanceId' @::@ 'Maybe' 'Text'
---
--- * 'aName' @::@ 'Maybe' 'Text'
---
-association :: Association
-association = Association
-    { _aName       = Nothing
-    , _aInstanceId = Nothing
-    }
+-- | An error occurred on the server side.
+_InternalServerError :: AsError a => Getting (First ServiceError) a ServiceError
+_InternalServerError =
+    _ServiceError . hasStatus 500 . hasCode "InternalServerError"
 
--- | The ID of the instance.
-aInstanceId :: Lens' Association (Maybe Text)
-aInstanceId = lens _aInstanceId (\s a -> s { _aInstanceId = a })
+-- | The size limit of a configuration document is 64 KB.
+_MaxDocumentSizeExceeded :: AsError a => Getting (First ServiceError) a ServiceError
+_MaxDocumentSizeExceeded =
+    _ServiceError . hasStatus 400 . hasCode "MaxDocumentSizeExceeded"
 
--- | The name of the configuration document.
-aName :: Lens' Association (Maybe Text)
-aName = lens _aName (\s a -> s { _aName = a })
+-- | There are concurrent updates for a resource that supports one update at
+-- a time.
+_TooManyUpdates :: AsError a => Getting (First ServiceError) a ServiceError
+_TooManyUpdates = _ServiceError . hasStatus 429 . hasCode "TooManyUpdates"
 
-instance FromJSON Association where
-    parseJSON = withObject "Association" $ \o -> Association
-        <$> o .:? "InstanceId"
-        <*> o .:? "Name"
+-- | The specified configuration document already exists.
+_DocumentAlreadyExists :: AsError a => Getting (First ServiceError) a ServiceError
+_DocumentAlreadyExists =
+    _ServiceError . hasStatus 400 . hasCode "DocumentAlreadyExists"
 
-instance ToJSON Association where
-    toJSON Association{..} = object
-        [ "Name"       .= _aName
-        , "InstanceId" .= _aInstanceId
-        ]
+-- | You can have at most 100 active configuration documents.
+_DocumentLimitExceeded :: AsError a => Getting (First ServiceError) a ServiceError
+_DocumentLimitExceeded =
+    _ServiceError . hasStatus 400 . hasCode "DocumentLimitExceeded"
diff --git a/gen/Network/AWS/SSM/Types/Product.hs b/gen/Network/AWS/SSM/Types/Product.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/SSM/Types/Product.hs
@@ -0,0 +1,434 @@
+{-# 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.SSM.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.SSM.Types.Product where
+
+import           Network.AWS.Prelude
+import           Network.AWS.SSM.Types.Sum
+
+-- | Describes an association of a configuration document and an instance.
+--
+-- /See:/ 'association' smart constructor.
+data Association = Association'
+    { _aInstanceId :: !(Maybe Text)
+    , _aName       :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Association' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aInstanceId'
+--
+-- * 'aName'
+association
+    :: Association
+association =
+    Association'
+    { _aInstanceId = Nothing
+    , _aName = Nothing
+    }
+
+-- | The ID of the instance.
+aInstanceId :: Lens' Association (Maybe Text)
+aInstanceId = lens _aInstanceId (\ s a -> s{_aInstanceId = a});
+
+-- | The name of the configuration document.
+aName :: Lens' Association (Maybe Text)
+aName = lens _aName (\ s a -> s{_aName = a});
+
+instance FromJSON Association where
+        parseJSON
+          = withObject "Association"
+              (\ x ->
+                 Association' <$>
+                   (x .:? "InstanceId") <*> (x .:? "Name"))
+
+-- | Describes an association.
+--
+-- /See:/ 'associationDescription' smart constructor.
+data AssociationDescription = AssociationDescription'
+    { _adInstanceId :: !(Maybe Text)
+    , _adStatus     :: !(Maybe AssociationStatus)
+    , _adDate       :: !(Maybe POSIX)
+    , _adName       :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AssociationDescription' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'adInstanceId'
+--
+-- * 'adStatus'
+--
+-- * 'adDate'
+--
+-- * 'adName'
+associationDescription
+    :: AssociationDescription
+associationDescription =
+    AssociationDescription'
+    { _adInstanceId = Nothing
+    , _adStatus = Nothing
+    , _adDate = Nothing
+    , _adName = Nothing
+    }
+
+-- | The ID of the instance.
+adInstanceId :: Lens' AssociationDescription (Maybe Text)
+adInstanceId = lens _adInstanceId (\ s a -> s{_adInstanceId = a});
+
+-- | The association status.
+adStatus :: Lens' AssociationDescription (Maybe AssociationStatus)
+adStatus = lens _adStatus (\ s a -> s{_adStatus = a});
+
+-- | The date when the association was made.
+adDate :: Lens' AssociationDescription (Maybe UTCTime)
+adDate = lens _adDate (\ s a -> s{_adDate = a}) . mapping _Time;
+
+-- | The name of the configuration document.
+adName :: Lens' AssociationDescription (Maybe Text)
+adName = lens _adName (\ s a -> s{_adName = a});
+
+instance FromJSON AssociationDescription where
+        parseJSON
+          = withObject "AssociationDescription"
+              (\ x ->
+                 AssociationDescription' <$>
+                   (x .:? "InstanceId") <*> (x .:? "Status") <*>
+                     (x .:? "Date")
+                     <*> (x .:? "Name"))
+
+-- | Describes a filter.
+--
+-- /See:/ 'associationFilter' smart constructor.
+data AssociationFilter = AssociationFilter'
+    { _afKey   :: !AssociationFilterKey
+    , _afValue :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AssociationFilter' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'afKey'
+--
+-- * 'afValue'
+associationFilter
+    :: AssociationFilterKey -- ^ 'afKey'
+    -> Text -- ^ 'afValue'
+    -> AssociationFilter
+associationFilter pKey_ pValue_ =
+    AssociationFilter'
+    { _afKey = pKey_
+    , _afValue = pValue_
+    }
+
+-- | The name of the filter.
+afKey :: Lens' AssociationFilter AssociationFilterKey
+afKey = lens _afKey (\ s a -> s{_afKey = a});
+
+-- | The filter value.
+afValue :: Lens' AssociationFilter Text
+afValue = lens _afValue (\ s a -> s{_afValue = a});
+
+instance ToJSON AssociationFilter where
+        toJSON AssociationFilter'{..}
+          = object ["key" .= _afKey, "value" .= _afValue]
+
+-- | Describes an association status.
+--
+-- /See:/ 'associationStatus' smart constructor.
+data AssociationStatus = AssociationStatus'
+    { _asAdditionalInfo :: !(Maybe Text)
+    , _asDate           :: !POSIX
+    , _asName           :: !AssociationStatusName
+    , _asMessage        :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AssociationStatus' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'asAdditionalInfo'
+--
+-- * 'asDate'
+--
+-- * 'asName'
+--
+-- * 'asMessage'
+associationStatus
+    :: UTCTime -- ^ 'asDate'
+    -> AssociationStatusName -- ^ 'asName'
+    -> Text -- ^ 'asMessage'
+    -> AssociationStatus
+associationStatus pDate_ pName_ pMessage_ =
+    AssociationStatus'
+    { _asAdditionalInfo = Nothing
+    , _asDate = _Time # pDate_
+    , _asName = pName_
+    , _asMessage = pMessage_
+    }
+
+-- | A user-defined string.
+asAdditionalInfo :: Lens' AssociationStatus (Maybe Text)
+asAdditionalInfo = lens _asAdditionalInfo (\ s a -> s{_asAdditionalInfo = a});
+
+-- | The date when the status changed.
+asDate :: Lens' AssociationStatus UTCTime
+asDate = lens _asDate (\ s a -> s{_asDate = a}) . _Time;
+
+-- | The status.
+asName :: Lens' AssociationStatus AssociationStatusName
+asName = lens _asName (\ s a -> s{_asName = a});
+
+-- | The reason for the status.
+asMessage :: Lens' AssociationStatus Text
+asMessage = lens _asMessage (\ s a -> s{_asMessage = a});
+
+instance FromJSON AssociationStatus where
+        parseJSON
+          = withObject "AssociationStatus"
+              (\ x ->
+                 AssociationStatus' <$>
+                   (x .:? "AdditionalInfo") <*> (x .: "Date") <*>
+                     (x .: "Name")
+                     <*> (x .: "Message"))
+
+instance ToJSON AssociationStatus where
+        toJSON AssociationStatus'{..}
+          = object
+              ["AdditionalInfo" .= _asAdditionalInfo,
+               "Date" .= _asDate, "Name" .= _asName,
+               "Message" .= _asMessage]
+
+-- | Describes the association of a configuration document and an instance.
+--
+-- /See:/ 'createAssociationBatchRequestEntry' smart constructor.
+data CreateAssociationBatchRequestEntry = CreateAssociationBatchRequestEntry'
+    { _cabreInstanceId :: !(Maybe Text)
+    , _cabreName       :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CreateAssociationBatchRequestEntry' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cabreInstanceId'
+--
+-- * 'cabreName'
+createAssociationBatchRequestEntry
+    :: CreateAssociationBatchRequestEntry
+createAssociationBatchRequestEntry =
+    CreateAssociationBatchRequestEntry'
+    { _cabreInstanceId = Nothing
+    , _cabreName = Nothing
+    }
+
+-- | The ID of the instance.
+cabreInstanceId :: Lens' CreateAssociationBatchRequestEntry (Maybe Text)
+cabreInstanceId = lens _cabreInstanceId (\ s a -> s{_cabreInstanceId = a});
+
+-- | The name of the configuration document.
+cabreName :: Lens' CreateAssociationBatchRequestEntry (Maybe Text)
+cabreName = lens _cabreName (\ s a -> s{_cabreName = a});
+
+instance FromJSON CreateAssociationBatchRequestEntry
+         where
+        parseJSON
+          = withObject "CreateAssociationBatchRequestEntry"
+              (\ x ->
+                 CreateAssociationBatchRequestEntry' <$>
+                   (x .:? "InstanceId") <*> (x .:? "Name"))
+
+instance ToJSON CreateAssociationBatchRequestEntry
+         where
+        toJSON CreateAssociationBatchRequestEntry'{..}
+          = object
+              ["InstanceId" .= _cabreInstanceId,
+               "Name" .= _cabreName]
+
+-- | Describes a configuration document.
+--
+-- /See:/ 'documentDescription' smart constructor.
+data DocumentDescription = DocumentDescription'
+    { _dStatus      :: !(Maybe DocumentStatus)
+    , _dSha1        :: !(Maybe Text)
+    , _dCreatedDate :: !(Maybe POSIX)
+    , _dName        :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DocumentDescription' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dStatus'
+--
+-- * 'dSha1'
+--
+-- * 'dCreatedDate'
+--
+-- * 'dName'
+documentDescription
+    :: DocumentDescription
+documentDescription =
+    DocumentDescription'
+    { _dStatus = Nothing
+    , _dSha1 = Nothing
+    , _dCreatedDate = Nothing
+    , _dName = Nothing
+    }
+
+-- | The status of the configuration document.
+dStatus :: Lens' DocumentDescription (Maybe DocumentStatus)
+dStatus = lens _dStatus (\ s a -> s{_dStatus = a});
+
+-- | The SHA1 hash of the document, which you can use for verification
+-- purposes.
+dSha1 :: Lens' DocumentDescription (Maybe Text)
+dSha1 = lens _dSha1 (\ s a -> s{_dSha1 = a});
+
+-- | The date when the configuration document was created.
+dCreatedDate :: Lens' DocumentDescription (Maybe UTCTime)
+dCreatedDate = lens _dCreatedDate (\ s a -> s{_dCreatedDate = a}) . mapping _Time;
+
+-- | The name of the configuration document.
+dName :: Lens' DocumentDescription (Maybe Text)
+dName = lens _dName (\ s a -> s{_dName = a});
+
+instance FromJSON DocumentDescription where
+        parseJSON
+          = withObject "DocumentDescription"
+              (\ x ->
+                 DocumentDescription' <$>
+                   (x .:? "Status") <*> (x .:? "Sha1") <*>
+                     (x .:? "CreatedDate")
+                     <*> (x .:? "Name"))
+
+-- | Describes a filter.
+--
+-- /See:/ 'documentFilter' smart constructor.
+data DocumentFilter = DocumentFilter'
+    { _dfKey   :: !DocumentFilterKey
+    , _dfValue :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DocumentFilter' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dfKey'
+--
+-- * 'dfValue'
+documentFilter
+    :: DocumentFilterKey -- ^ 'dfKey'
+    -> Text -- ^ 'dfValue'
+    -> DocumentFilter
+documentFilter pKey_ pValue_ =
+    DocumentFilter'
+    { _dfKey = pKey_
+    , _dfValue = pValue_
+    }
+
+-- | The name of the filter.
+dfKey :: Lens' DocumentFilter DocumentFilterKey
+dfKey = lens _dfKey (\ s a -> s{_dfKey = a});
+
+-- | The value of the filter.
+dfValue :: Lens' DocumentFilter Text
+dfValue = lens _dfValue (\ s a -> s{_dfValue = a});
+
+instance ToJSON DocumentFilter where
+        toJSON DocumentFilter'{..}
+          = object ["key" .= _dfKey, "value" .= _dfValue]
+
+-- | Describes the name of a configuration document.
+--
+-- /See:/ 'documentIdentifier' smart constructor.
+newtype DocumentIdentifier = DocumentIdentifier'
+    { _diName :: Maybe Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DocumentIdentifier' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'diName'
+documentIdentifier
+    :: DocumentIdentifier
+documentIdentifier =
+    DocumentIdentifier'
+    { _diName = Nothing
+    }
+
+-- | The name of the configuration document.
+diName :: Lens' DocumentIdentifier (Maybe Text)
+diName = lens _diName (\ s a -> s{_diName = a});
+
+instance FromJSON DocumentIdentifier where
+        parseJSON
+          = withObject "DocumentIdentifier"
+              (\ x -> DocumentIdentifier' <$> (x .:? "Name"))
+
+-- | Describes a failed association.
+--
+-- /See:/ 'failedCreateAssociation' smart constructor.
+data FailedCreateAssociation = FailedCreateAssociation'
+    { _fcaEntry   :: !(Maybe CreateAssociationBatchRequestEntry)
+    , _fcaFault   :: !(Maybe Fault)
+    , _fcaMessage :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FailedCreateAssociation' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'fcaEntry'
+--
+-- * 'fcaFault'
+--
+-- * 'fcaMessage'
+failedCreateAssociation
+    :: FailedCreateAssociation
+failedCreateAssociation =
+    FailedCreateAssociation'
+    { _fcaEntry = Nothing
+    , _fcaFault = Nothing
+    , _fcaMessage = Nothing
+    }
+
+-- | The association.
+fcaEntry :: Lens' FailedCreateAssociation (Maybe CreateAssociationBatchRequestEntry)
+fcaEntry = lens _fcaEntry (\ s a -> s{_fcaEntry = a});
+
+-- | The source of the failure.
+fcaFault :: Lens' FailedCreateAssociation (Maybe Fault)
+fcaFault = lens _fcaFault (\ s a -> s{_fcaFault = a});
+
+-- | A description of the failure.
+fcaMessage :: Lens' FailedCreateAssociation (Maybe Text)
+fcaMessage = lens _fcaMessage (\ s a -> s{_fcaMessage = a});
+
+instance FromJSON FailedCreateAssociation where
+        parseJSON
+          = withObject "FailedCreateAssociation"
+              (\ x ->
+                 FailedCreateAssociation' <$>
+                   (x .:? "Entry") <*> (x .:? "Fault") <*>
+                     (x .:? "Message"))
diff --git a/gen/Network/AWS/SSM/Types/Sum.hs b/gen/Network/AWS/SSM/Types/Sum.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/SSM/Types/Sum.hs
@@ -0,0 +1,154 @@
+{-# 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.SSM.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.SSM.Types.Sum where
+
+import           Network.AWS.Prelude
+
+data AssociationFilterKey
+    = AFKInstanceId
+    | AFKName
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText AssociationFilterKey where
+    parser = takeLowerText >>= \case
+        "instanceid" -> pure AFKInstanceId
+        "name" -> pure AFKName
+        e -> fromTextError $ "Failure parsing AssociationFilterKey from value: '" <> e
+           <> "'. Accepted values: instanceid, name"
+
+instance ToText AssociationFilterKey where
+    toText = \case
+        AFKInstanceId -> "instanceid"
+        AFKName -> "name"
+
+instance Hashable     AssociationFilterKey
+instance ToByteString AssociationFilterKey
+instance ToQuery      AssociationFilterKey
+instance ToHeader     AssociationFilterKey
+
+instance ToJSON AssociationFilterKey where
+    toJSON = toJSONText
+
+data AssociationStatusName
+    = Failed
+    | Pending
+    | Success
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText AssociationStatusName where
+    parser = takeLowerText >>= \case
+        "failed" -> pure Failed
+        "pending" -> pure Pending
+        "success" -> pure Success
+        e -> fromTextError $ "Failure parsing AssociationStatusName from value: '" <> e
+           <> "'. Accepted values: failed, pending, success"
+
+instance ToText AssociationStatusName where
+    toText = \case
+        Failed -> "failed"
+        Pending -> "pending"
+        Success -> "success"
+
+instance Hashable     AssociationStatusName
+instance ToByteString AssociationStatusName
+instance ToQuery      AssociationStatusName
+instance ToHeader     AssociationStatusName
+
+instance ToJSON AssociationStatusName where
+    toJSON = toJSONText
+
+instance FromJSON AssociationStatusName where
+    parseJSON = parseJSONText "AssociationStatusName"
+
+data DocumentFilterKey =
+    Name
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText DocumentFilterKey where
+    parser = takeLowerText >>= \case
+        "name" -> pure Name
+        e -> fromTextError $ "Failure parsing DocumentFilterKey from value: '" <> e
+           <> "'. Accepted values: name"
+
+instance ToText DocumentFilterKey where
+    toText = \case
+        Name -> "name"
+
+instance Hashable     DocumentFilterKey
+instance ToByteString DocumentFilterKey
+instance ToQuery      DocumentFilterKey
+instance ToHeader     DocumentFilterKey
+
+instance ToJSON DocumentFilterKey where
+    toJSON = toJSONText
+
+data DocumentStatus
+    = Active
+    | Creating
+    | Deleting
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText DocumentStatus where
+    parser = takeLowerText >>= \case
+        "active" -> pure Active
+        "creating" -> pure Creating
+        "deleting" -> pure Deleting
+        e -> fromTextError $ "Failure parsing DocumentStatus from value: '" <> e
+           <> "'. Accepted values: active, creating, deleting"
+
+instance ToText DocumentStatus where
+    toText = \case
+        Active -> "active"
+        Creating -> "creating"
+        Deleting -> "deleting"
+
+instance Hashable     DocumentStatus
+instance ToByteString DocumentStatus
+instance ToQuery      DocumentStatus
+instance ToHeader     DocumentStatus
+
+instance FromJSON DocumentStatus where
+    parseJSON = parseJSONText "DocumentStatus"
+
+data Fault
+    = Client
+    | Server
+    | Unknown
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText Fault where
+    parser = takeLowerText >>= \case
+        "client" -> pure Client
+        "server" -> pure Server
+        "unknown" -> pure Unknown
+        e -> fromTextError $ "Failure parsing Fault from value: '" <> e
+           <> "'. Accepted values: client, server, unknown"
+
+instance ToText Fault where
+    toText = \case
+        Client -> "client"
+        Server -> "server"
+        Unknown -> "unknown"
+
+instance Hashable     Fault
+instance ToByteString Fault
+instance ToQuery      Fault
+instance ToHeader     Fault
+
+instance FromJSON Fault where
+    parseJSON = parseJSONText "Fault"
diff --git a/gen/Network/AWS/SSM/UpdateAssociationStatus.hs b/gen/Network/AWS/SSM/UpdateAssociationStatus.hs
--- a/gen/Network/AWS/SSM/UpdateAssociationStatus.hs
+++ b/gen/Network/AWS/SSM/UpdateAssociationStatus.hs
@@ -1,138 +1,150 @@
-{-# 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.SSM.UpdateAssociationStatus
--- 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 status of the configuration document associated with the
+-- Updates the status of the configuration document associated with the
 -- specified instance.
 --
--- <http://docs.aws.amazon.com/ssm/latest/APIReference/API_UpdateAssociationStatus.html>
+-- /See:/ <http://docs.aws.amazon.com/ssm/latest/APIReference/API_UpdateAssociationStatus.html AWS API Reference> for UpdateAssociationStatus.
 module Network.AWS.SSM.UpdateAssociationStatus
     (
-    -- * Request
-      UpdateAssociationStatus
-    -- ** Request constructor
-    , updateAssociationStatus
-    -- ** Request lenses
-    , uasAssociationStatus
-    , uasInstanceId
+    -- * Creating a Request
+      updateAssociationStatus
+    , UpdateAssociationStatus
+    -- * Request Lenses
     , uasName
+    , uasInstanceId
+    , uasAssociationStatus
 
-    -- * Response
-    , UpdateAssociationStatusResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , updateAssociationStatusResponse
-    -- ** Response lenses
-    , uasrAssociationDescription
+    , UpdateAssociationStatusResponse
+    -- * Response Lenses
+    , uasrsAssociationDescription
+    , uasrsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.SSM.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.SSM.Types
+import           Network.AWS.SSM.Types.Product
 
-data UpdateAssociationStatus = UpdateAssociationStatus
-    { _uasAssociationStatus :: AssociationStatus
-    , _uasInstanceId        :: Text
-    , _uasName              :: Text
-    } deriving (Eq, Read, Show)
+-- | /See:/ 'updateAssociationStatus' smart constructor.
+data UpdateAssociationStatus = UpdateAssociationStatus'
+    { _uasName              :: !Text
+    , _uasInstanceId        :: !Text
+    , _uasAssociationStatus :: !AssociationStatus
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'UpdateAssociationStatus' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'UpdateAssociationStatus' with the minimum fields required to make a request.
 --
--- * 'uasAssociationStatus' @::@ 'AssociationStatus'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'uasInstanceId' @::@ 'Text'
+-- * 'uasName'
 --
--- * 'uasName' @::@ 'Text'
+-- * 'uasInstanceId'
 --
-updateAssociationStatus :: Text -- ^ 'uasName'
-                        -> Text -- ^ 'uasInstanceId'
-                        -> AssociationStatus -- ^ 'uasAssociationStatus'
-                        -> UpdateAssociationStatus
-updateAssociationStatus p1 p2 p3 = UpdateAssociationStatus
-    { _uasName              = p1
-    , _uasInstanceId        = p2
-    , _uasAssociationStatus = p3
+-- * 'uasAssociationStatus'
+updateAssociationStatus
+    :: Text -- ^ 'uasName'
+    -> Text -- ^ 'uasInstanceId'
+    -> AssociationStatus -- ^ 'uasAssociationStatus'
+    -> UpdateAssociationStatus
+updateAssociationStatus pName_ pInstanceId_ pAssociationStatus_ =
+    UpdateAssociationStatus'
+    { _uasName = pName_
+    , _uasInstanceId = pInstanceId_
+    , _uasAssociationStatus = pAssociationStatus_
     }
 
--- | The association status.
-uasAssociationStatus :: Lens' UpdateAssociationStatus AssociationStatus
-uasAssociationStatus =
-    lens _uasAssociationStatus (\s a -> s { _uasAssociationStatus = a })
+-- | The name of the configuration document.
+uasName :: Lens' UpdateAssociationStatus Text
+uasName = lens _uasName (\ s a -> s{_uasName = a});
 
 -- | The ID of the instance.
 uasInstanceId :: Lens' UpdateAssociationStatus Text
-uasInstanceId = lens _uasInstanceId (\s a -> s { _uasInstanceId = a })
+uasInstanceId = lens _uasInstanceId (\ s a -> s{_uasInstanceId = a});
 
--- | The name of the configuration document.
-uasName :: Lens' UpdateAssociationStatus Text
-uasName = lens _uasName (\s a -> s { _uasName = a })
+-- | The association status.
+uasAssociationStatus :: Lens' UpdateAssociationStatus AssociationStatus
+uasAssociationStatus = lens _uasAssociationStatus (\ s a -> s{_uasAssociationStatus = a});
 
-newtype UpdateAssociationStatusResponse = UpdateAssociationStatusResponse
-    { _uasrAssociationDescription :: Maybe AssociationDescription
-    } deriving (Eq, Read, Show)
+instance AWSRequest UpdateAssociationStatus where
+        type Sv UpdateAssociationStatus = SSM
+        type Rs UpdateAssociationStatus =
+             UpdateAssociationStatusResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 UpdateAssociationStatusResponse' <$>
+                   (x .?> "AssociationDescription") <*>
+                     (pure (fromEnum s)))
 
--- | 'UpdateAssociationStatusResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'uasrAssociationDescription' @::@ 'Maybe' 'AssociationDescription'
---
-updateAssociationStatusResponse :: UpdateAssociationStatusResponse
-updateAssociationStatusResponse = UpdateAssociationStatusResponse
-    { _uasrAssociationDescription = Nothing
-    }
+instance ToHeaders UpdateAssociationStatus where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonSSM.UpdateAssociationStatus" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
--- | Information about the association.
-uasrAssociationDescription :: Lens' UpdateAssociationStatusResponse (Maybe AssociationDescription)
-uasrAssociationDescription =
-    lens _uasrAssociationDescription
-        (\s a -> s { _uasrAssociationDescription = a })
+instance ToJSON UpdateAssociationStatus where
+        toJSON UpdateAssociationStatus'{..}
+          = object
+              ["Name" .= _uasName, "InstanceId" .= _uasInstanceId,
+               "AssociationStatus" .= _uasAssociationStatus]
 
 instance ToPath UpdateAssociationStatus where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery UpdateAssociationStatus where
-    toQuery = const mempty
-
-instance ToHeaders UpdateAssociationStatus
+        toQuery = const mempty
 
-instance ToJSON UpdateAssociationStatus where
-    toJSON UpdateAssociationStatus{..} = object
-        [ "Name"              .= _uasName
-        , "InstanceId"        .= _uasInstanceId
-        , "AssociationStatus" .= _uasAssociationStatus
-        ]
+-- | /See:/ 'updateAssociationStatusResponse' smart constructor.
+data UpdateAssociationStatusResponse = UpdateAssociationStatusResponse'
+    { _uasrsAssociationDescription :: !(Maybe AssociationDescription)
+    , _uasrsStatus                 :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest UpdateAssociationStatus where
-    type Sv UpdateAssociationStatus = SSM
-    type Rs UpdateAssociationStatus = UpdateAssociationStatusResponse
+-- | Creates a value of 'UpdateAssociationStatusResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uasrsAssociationDescription'
+--
+-- * 'uasrsStatus'
+updateAssociationStatusResponse
+    :: Int -- ^ 'uasrsStatus'
+    -> UpdateAssociationStatusResponse
+updateAssociationStatusResponse pStatus_ =
+    UpdateAssociationStatusResponse'
+    { _uasrsAssociationDescription = Nothing
+    , _uasrsStatus = pStatus_
+    }
 
-    request  = post "UpdateAssociationStatus"
-    response = jsonResponse
+-- | Information about the association.
+uasrsAssociationDescription :: Lens' UpdateAssociationStatusResponse (Maybe AssociationDescription)
+uasrsAssociationDescription = lens _uasrsAssociationDescription (\ s a -> s{_uasrsAssociationDescription = a});
 
-instance FromJSON UpdateAssociationStatusResponse where
-    parseJSON = withObject "UpdateAssociationStatusResponse" $ \o -> UpdateAssociationStatusResponse
-        <$> o .:? "AssociationDescription"
+-- | The response status code.
+uasrsStatus :: Lens' UpdateAssociationStatusResponse Int
+uasrsStatus = lens _uasrsStatus (\ s a -> s{_uasrsStatus = a});
diff --git a/gen/Network/AWS/SSM/Waiters.hs b/gen/Network/AWS/SSM/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/SSM/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.SSM.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.SSM.Waiters where
+
+import           Network.AWS.Prelude
+import           Network.AWS.SSM.Types
+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.SSM
+import Test.AWS.SSM.Internal
+
+main :: IO ()
+main = defaultMain $ testGroup "SSM"
+    [ testGroup "tests"    tests
+    , testGroup "fixtures" fixtures
+    ]
diff --git a/test/Test/AWS/Gen/SSM.hs b/test/Test/AWS/Gen/SSM.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/Gen/SSM.hs
@@ -0,0 +1,226 @@
+{-# 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.SSM
+-- 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.SSM where
+
+import Data.Proxy
+import Test.AWS.Fixture
+import Test.AWS.Prelude
+import Test.Tasty
+import Network.AWS.SSM
+import Test.AWS.SSM.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"
+--         [ testDescribeDocument $
+--             describeDocument
+--
+--         , testCreateAssociation $
+--             createAssociation
+--
+--         , testCreateDocument $
+--             createDocument
+--
+--         , testListDocuments $
+--             listDocuments
+--
+--         , testGetDocument $
+--             getDocument
+--
+--         , testDescribeAssociation $
+--             describeAssociation
+--
+--         , testUpdateAssociationStatus $
+--             updateAssociationStatus
+--
+--         , testDeleteAssociation $
+--             deleteAssociation
+--
+--         , testListAssociations $
+--             listAssociations
+--
+--         , testDeleteDocument $
+--             deleteDocument
+--
+--         , testCreateAssociationBatch $
+--             createAssociationBatch
+--
+--           ]
+
+--     , testGroup "response"
+--         [ testDescribeDocumentResponse $
+--             describeDocumentResponse
+--
+--         , testCreateAssociationResponse $
+--             createAssociationResponse
+--
+--         , testCreateDocumentResponse $
+--             createDocumentResponse
+--
+--         , testListDocumentsResponse $
+--             listDocumentsResponse
+--
+--         , testGetDocumentResponse $
+--             getDocumentResponse
+--
+--         , testDescribeAssociationResponse $
+--             describeAssociationResponse
+--
+--         , testUpdateAssociationStatusResponse $
+--             updateAssociationStatusResponse
+--
+--         , testDeleteAssociationResponse $
+--             deleteAssociationResponse
+--
+--         , testListAssociationsResponse $
+--             listAssociationsResponse
+--
+--         , testDeleteDocumentResponse $
+--             deleteDocumentResponse
+--
+--         , testCreateAssociationBatchResponse $
+--             createAssociationBatchResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+testDescribeDocument :: DescribeDocument -> TestTree
+testDescribeDocument = req
+    "DescribeDocument"
+    "fixture/DescribeDocument"
+
+testCreateAssociation :: CreateAssociation -> TestTree
+testCreateAssociation = req
+    "CreateAssociation"
+    "fixture/CreateAssociation"
+
+testCreateDocument :: CreateDocument -> TestTree
+testCreateDocument = req
+    "CreateDocument"
+    "fixture/CreateDocument"
+
+testListDocuments :: ListDocuments -> TestTree
+testListDocuments = req
+    "ListDocuments"
+    "fixture/ListDocuments"
+
+testGetDocument :: GetDocument -> TestTree
+testGetDocument = req
+    "GetDocument"
+    "fixture/GetDocument"
+
+testDescribeAssociation :: DescribeAssociation -> TestTree
+testDescribeAssociation = req
+    "DescribeAssociation"
+    "fixture/DescribeAssociation"
+
+testUpdateAssociationStatus :: UpdateAssociationStatus -> TestTree
+testUpdateAssociationStatus = req
+    "UpdateAssociationStatus"
+    "fixture/UpdateAssociationStatus"
+
+testDeleteAssociation :: DeleteAssociation -> TestTree
+testDeleteAssociation = req
+    "DeleteAssociation"
+    "fixture/DeleteAssociation"
+
+testListAssociations :: ListAssociations -> TestTree
+testListAssociations = req
+    "ListAssociations"
+    "fixture/ListAssociations"
+
+testDeleteDocument :: DeleteDocument -> TestTree
+testDeleteDocument = req
+    "DeleteDocument"
+    "fixture/DeleteDocument"
+
+testCreateAssociationBatch :: CreateAssociationBatch -> TestTree
+testCreateAssociationBatch = req
+    "CreateAssociationBatch"
+    "fixture/CreateAssociationBatch"
+
+-- Responses
+
+testDescribeDocumentResponse :: DescribeDocumentResponse -> TestTree
+testDescribeDocumentResponse = res
+    "DescribeDocumentResponse"
+    "fixture/DescribeDocumentResponse"
+    (Proxy :: Proxy DescribeDocument)
+
+testCreateAssociationResponse :: CreateAssociationResponse -> TestTree
+testCreateAssociationResponse = res
+    "CreateAssociationResponse"
+    "fixture/CreateAssociationResponse"
+    (Proxy :: Proxy CreateAssociation)
+
+testCreateDocumentResponse :: CreateDocumentResponse -> TestTree
+testCreateDocumentResponse = res
+    "CreateDocumentResponse"
+    "fixture/CreateDocumentResponse"
+    (Proxy :: Proxy CreateDocument)
+
+testListDocumentsResponse :: ListDocumentsResponse -> TestTree
+testListDocumentsResponse = res
+    "ListDocumentsResponse"
+    "fixture/ListDocumentsResponse"
+    (Proxy :: Proxy ListDocuments)
+
+testGetDocumentResponse :: GetDocumentResponse -> TestTree
+testGetDocumentResponse = res
+    "GetDocumentResponse"
+    "fixture/GetDocumentResponse"
+    (Proxy :: Proxy GetDocument)
+
+testDescribeAssociationResponse :: DescribeAssociationResponse -> TestTree
+testDescribeAssociationResponse = res
+    "DescribeAssociationResponse"
+    "fixture/DescribeAssociationResponse"
+    (Proxy :: Proxy DescribeAssociation)
+
+testUpdateAssociationStatusResponse :: UpdateAssociationStatusResponse -> TestTree
+testUpdateAssociationStatusResponse = res
+    "UpdateAssociationStatusResponse"
+    "fixture/UpdateAssociationStatusResponse"
+    (Proxy :: Proxy UpdateAssociationStatus)
+
+testDeleteAssociationResponse :: DeleteAssociationResponse -> TestTree
+testDeleteAssociationResponse = res
+    "DeleteAssociationResponse"
+    "fixture/DeleteAssociationResponse"
+    (Proxy :: Proxy DeleteAssociation)
+
+testListAssociationsResponse :: ListAssociationsResponse -> TestTree
+testListAssociationsResponse = res
+    "ListAssociationsResponse"
+    "fixture/ListAssociationsResponse"
+    (Proxy :: Proxy ListAssociations)
+
+testDeleteDocumentResponse :: DeleteDocumentResponse -> TestTree
+testDeleteDocumentResponse = res
+    "DeleteDocumentResponse"
+    "fixture/DeleteDocumentResponse"
+    (Proxy :: Proxy DeleteDocument)
+
+testCreateAssociationBatchResponse :: CreateAssociationBatchResponse -> TestTree
+testCreateAssociationBatchResponse = res
+    "CreateAssociationBatchResponse"
+    "fixture/CreateAssociationBatchResponse"
+    (Proxy :: Proxy CreateAssociationBatch)
diff --git a/test/Test/AWS/SSM.hs b/test/Test/AWS/SSM.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/SSM.hs
@@ -0,0 +1,26 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+-- Module      : Test.AWS.SSM
+-- 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.SSM
+    ( tests
+    , fixtures
+    ) where
+
+import           Network.AWS.SSM
+import           Test.AWS.Gen.SSM
+import           Test.Tasty
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/AWS/SSM/Internal.hs b/test/Test/AWS/SSM/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/SSM/Internal.hs
@@ -0,0 +1,16 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Test.AWS.SSM.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.SSM.Internal where
+
+import Test.AWS.Prelude
