diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,23 +1,64 @@
 # Amazon Glacier 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 Glacier is a secure, durable, and extremely low-cost storage service
-for data archiving and online backup. Customers can reliably store large or
-small amounts of data for as little as $0.01 per gigabyte per month, a
-significant savings compared to on-premises solutions. To keep costs low,
-Amazon Glacier is optimized for infrequently accessed data where a retrieval
-time of several hours is suitable.
+Amazon Glacier is a storage solution for \"cold data.\"
 
+Amazon Glacier is an extremely low-cost storage service that provides
+secure, durable, and easy-to-use storage for data backup and archival.
+With Amazon Glacier, customers can store their data cost effectively for
+months, years, or decades. Amazon Glacier also enables customers to
+offload the administrative burdens of operating and scaling storage to
+AWS, so they don\'t have to worry about capacity planning, hardware
+provisioning, data replication, hardware failure and recovery, or
+time-consuming hardware migrations.
+
+Amazon Glacier is a great storage choice when low storage cost is
+paramount, your data is rarely retrieved, and retrieval latency of
+several hours is acceptable. If your application requires fast or
+frequent access to your data, consider using Amazon S3. For more
+information, go to
+<http://aws.amazon.com/s3/ Amazon Simple Storage Service (Amazon S3)>.
+
+You can store any kind of data in any format. There is no maximum limit
+on the total amount of data you can store in Amazon Glacier.
+
+If you are a first-time user of Amazon Glacier, we recommend that you
+begin by reading the following sections in the /Amazon Glacier Developer
+Guide/:
+
+-   <http://docs.aws.amazon.com/amazonglacier/latest/dev/introduction.html What is Amazon Glacier>
+    - This section of the Developer Guide describes the underlying data
+    model, the operations it supports, and the AWS SDKs that you can use
+    to interact with the service.
+
+-   <http://docs.aws.amazon.com/amazonglacier/latest/dev/amazon-glacier-getting-started.html Getting Started with Amazon Glacier>
+    - The Getting Started section walks you through the process of
+    creating a vault, uploading archives, creating jobs to download
+    archives, retrieving the job output, and deleting archives.
+
 Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-glacier)
 and the [AWS API Reference](http://docs.aws.amazon.com/amazonglacier/latest/dev/introduction.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-glacier.cabal b/amazonka-glacier.cabal
--- a/amazonka-glacier.cabal
+++ b/amazonka-glacier.cabal
@@ -1,30 +1,66 @@
 name:                  amazonka-glacier
-version:               0.3.6
+version:               1.0.0
 synopsis:              Amazon Glacier 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 Glacier is a secure, durable, and extremely low-cost storage service
-    for data archiving and online backup. Customers can reliably store large or
-    small amounts of data for as little as $0.01 per gigabyte per month, a
-    significant savings compared to on-premises solutions. To keep costs low,
-    Amazon Glacier is optimized for infrequently accessed data where a retrieval
-    time of several hours is suitable.
+    Amazon Glacier is a storage solution for \"cold data.\"
 
+    Amazon Glacier is an extremely low-cost storage service that provides
+    secure, durable, and easy-to-use storage for data backup and archival.
+    With Amazon Glacier, customers can store their data cost effectively for
+    months, years, or decades. Amazon Glacier also enables customers to
+    offload the administrative burdens of operating and scaling storage to
+    AWS, so they don\'t have to worry about capacity planning, hardware
+    provisioning, data replication, hardware failure and recovery, or
+    time-consuming hardware migrations.
+
+    Amazon Glacier is a great storage choice when low storage cost is
+    paramount, your data is rarely retrieved, and retrieval latency of
+    several hours is acceptable. If your application requires fast or
+    frequent access to your data, consider using Amazon S3. For more
+    information, go to
+    <http://aws.amazon.com/s3/ Amazon Simple Storage Service (Amazon S3)>.
+
+    You can store any kind of data in any format. There is no maximum limit
+    on the total amount of data you can store in Amazon Glacier.
+
+    If you are a first-time user of Amazon Glacier, we recommend that you
+    begin by reading the following sections in the /Amazon Glacier Developer
+    Guide/:
+
+    -   <http://docs.aws.amazon.com/amazonglacier/latest/dev/introduction.html What is Amazon Glacier>
+        - This section of the Developer Guide describes the underlying data
+        model, the operations it supports, and the AWS SDKs that you can use
+        to interact with the service.
+
+    -   <http://docs.aws.amazon.com/amazonglacier/latest/dev/amazon-glacier-getting-started.html Getting Started with Amazon Glacier>
+        - The Getting Started section walks you through the process of
+        creating a vault, uploading archives, creating jobs to download
+        archives, retrieving the job output, and deleting archives.
     .
-    /See:/ <http://docs.aws.amazon.com/amazonglacier/latest/dev/introduction.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.Glacier" and the <http://docs.aws.amazon.com/amazonglacier/latest/dev/introduction.html AWS API Reference>
+    to get started.
 
 source-repository head
     type:     git
@@ -39,7 +75,10 @@
     exposed-modules:
           Network.AWS.Glacier
         , Network.AWS.Glacier.AbortMultipartUpload
+        , Network.AWS.Glacier.AbortVaultLock
+        , Network.AWS.Glacier.AddTagsToVault
         , Network.AWS.Glacier.CompleteMultipartUpload
+        , Network.AWS.Glacier.CompleteVaultLock
         , Network.AWS.Glacier.CreateVault
         , Network.AWS.Glacier.DeleteArchive
         , Network.AWS.Glacier.DeleteVault
@@ -50,22 +89,57 @@
         , Network.AWS.Glacier.GetDataRetrievalPolicy
         , Network.AWS.Glacier.GetJobOutput
         , Network.AWS.Glacier.GetVaultAccessPolicy
+        , Network.AWS.Glacier.GetVaultLock
         , Network.AWS.Glacier.GetVaultNotifications
         , Network.AWS.Glacier.InitiateJob
         , Network.AWS.Glacier.InitiateMultipartUpload
+        , Network.AWS.Glacier.InitiateVaultLock
         , Network.AWS.Glacier.ListJobs
         , Network.AWS.Glacier.ListMultipartUploads
         , Network.AWS.Glacier.ListParts
+        , Network.AWS.Glacier.ListTagsForVault
         , Network.AWS.Glacier.ListVaults
+        , Network.AWS.Glacier.RemoveTagsFromVault
         , Network.AWS.Glacier.SetDataRetrievalPolicy
         , Network.AWS.Glacier.SetVaultAccessPolicy
         , Network.AWS.Glacier.SetVaultNotifications
         , Network.AWS.Glacier.Types
         , Network.AWS.Glacier.UploadArchive
         , Network.AWS.Glacier.UploadMultipartPart
+        , Network.AWS.Glacier.Waiters
 
     other-modules:
+          Network.AWS.Glacier.Types.Product
+        , Network.AWS.Glacier.Types.Sum
 
     build-depends:
-          amazonka-core == 0.3.6.*
+          amazonka-core == 1.0.0.*
         , base          >= 4.7     && < 5
+
+test-suite amazonka-glacier-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.Glacier
+        , Test.AWS.Gen.Glacier
+        , Test.AWS.Glacier.Internal
+
+    build-depends:
+          amazonka-core == 1.0.0
+        , amazonka-test == 1.0.0
+        , amazonka-glacier == 1.0.0
+        , base
+        , bytestring
+        , lens
+        , tasty
+        , tasty-hunit
+        , text
+        , time
+        , unordered-containers
diff --git a/gen/Network/AWS/Glacier.hs b/gen/Network/AWS/Glacier.hs
--- a/gen/Network/AWS/Glacier.hs
+++ b/gen/Network/AWS/Glacier.hs
@@ -1,71 +1,358 @@
+{-# 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.Glacier
--- 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 Glacier is a secure, durable, and extremely low-cost storage service
--- for data archiving and online backup. Customers can reliably store large or
--- small amounts of data for as little as $0.01 per gigabyte per month, a
--- significant savings compared to on-premises solutions. To keep costs low,
--- Amazon Glacier is optimized for infrequently accessed data where a retrieval
--- time of several hours is suitable.
+-- Amazon Glacier is a storage solution for \"cold data.\"
+--
+-- Amazon Glacier is an extremely low-cost storage service that provides
+-- secure, durable, and easy-to-use storage for data backup and archival.
+-- With Amazon Glacier, customers can store their data cost effectively for
+-- months, years, or decades. Amazon Glacier also enables customers to
+-- offload the administrative burdens of operating and scaling storage to
+-- AWS, so they don\'t have to worry about capacity planning, hardware
+-- provisioning, data replication, hardware failure and recovery, or
+-- time-consuming hardware migrations.
+--
+-- Amazon Glacier is a great storage choice when low storage cost is
+-- paramount, your data is rarely retrieved, and retrieval latency of
+-- several hours is acceptable. If your application requires fast or
+-- frequent access to your data, consider using Amazon S3. For more
+-- information, go to
+-- <http://aws.amazon.com/s3/ Amazon Simple Storage Service (Amazon S3)>.
+--
+-- You can store any kind of data in any format. There is no maximum limit
+-- on the total amount of data you can store in Amazon Glacier.
+--
+-- If you are a first-time user of Amazon Glacier, we recommend that you
+-- begin by reading the following sections in the /Amazon Glacier Developer
+-- Guide/:
+--
+-- -   <http://docs.aws.amazon.com/amazonglacier/latest/dev/introduction.html What is Amazon Glacier>
+--     - This section of the Developer Guide describes the underlying data
+--     model, the operations it supports, and the AWS SDKs that you can use
+--     to interact with the service.
+--
+-- -   <http://docs.aws.amazon.com/amazonglacier/latest/dev/amazon-glacier-getting-started.html Getting Started with Amazon Glacier>
+--     - The Getting Started section walks you through the process of
+--     creating a vault, uploading archives, creating jobs to download
+--     archives, retrieving the job output, and deleting archives.
+--
+--
+-- /See:/ <http://docs.aws.amazon.com/amazonglacier/latest/dev/introduction.html AWS API Reference>
 module Network.AWS.Glacier
-    ( module Network.AWS.Glacier.AbortMultipartUpload
-    , module Network.AWS.Glacier.CompleteMultipartUpload
-    , module Network.AWS.Glacier.CreateVault
-    , module Network.AWS.Glacier.DeleteArchive
-    , module Network.AWS.Glacier.DeleteVault
+    (
+    -- * Service
+      Glacier
+
+    -- * Errors
+    -- $errors
+
+    -- ** PolicyEnforcedException
+    , _PolicyEnforcedException
+
+    -- ** InvalidParameterValueException
+    , _InvalidParameterValueException
+
+    -- ** RequestTimeoutException
+    , _RequestTimeoutException
+
+    -- ** ServiceUnavailableException
+    , _ServiceUnavailableException
+
+    -- ** ResourceNotFoundException
+    , _ResourceNotFoundException
+
+    -- ** LimitExceededException
+    , _LimitExceededException
+
+    -- ** MissingParameterValueException
+    , _MissingParameterValueException
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** SetVaultAccessPolicy
+    , module Network.AWS.Glacier.SetVaultAccessPolicy
+
+    -- ** InitiateJob
+    , module Network.AWS.Glacier.InitiateJob
+
+    -- ** SetDataRetrievalPolicy
+    , module Network.AWS.Glacier.SetDataRetrievalPolicy
+
+    -- ** DeleteVaultAccessPolicy
     , module Network.AWS.Glacier.DeleteVaultAccessPolicy
+
+    -- ** ListTagsForVault
+    , module Network.AWS.Glacier.ListTagsForVault
+
+    -- ** GetVaultNotifications
+    , module Network.AWS.Glacier.GetVaultNotifications
+
+    -- ** UploadMultipartPart
+    , module Network.AWS.Glacier.UploadMultipartPart
+
+    -- ** DeleteVaultNotifications
     , module Network.AWS.Glacier.DeleteVaultNotifications
-    , module Network.AWS.Glacier.DescribeJob
-    , module Network.AWS.Glacier.DescribeVault
-    , module Network.AWS.Glacier.GetDataRetrievalPolicy
+
+    -- ** CompleteVaultLock
+    , module Network.AWS.Glacier.CompleteVaultLock
+
+    -- ** AbortVaultLock
+    , module Network.AWS.Glacier.AbortVaultLock
+
+    -- ** ListVaults
+    , module Network.AWS.Glacier.ListVaults
+
+    -- ** GetJobOutput
     , module Network.AWS.Glacier.GetJobOutput
-    , module Network.AWS.Glacier.GetVaultAccessPolicy
-    , module Network.AWS.Glacier.GetVaultNotifications
-    , module Network.AWS.Glacier.InitiateJob
-    , module Network.AWS.Glacier.InitiateMultipartUpload
+
+    -- ** ListJobs
     , module Network.AWS.Glacier.ListJobs
+
+    -- ** SetVaultNotifications
+    , module Network.AWS.Glacier.SetVaultNotifications
+
+    -- ** CompleteMultipartUpload
+    , module Network.AWS.Glacier.CompleteMultipartUpload
+
+    -- ** ListMultipartUploads
     , module Network.AWS.Glacier.ListMultipartUploads
+
+    -- ** DescribeVault
+    , module Network.AWS.Glacier.DescribeVault
+
+    -- ** AbortMultipartUpload
+    , module Network.AWS.Glacier.AbortMultipartUpload
+
+    -- ** GetVaultLock
+    , module Network.AWS.Glacier.GetVaultLock
+
+    -- ** DescribeJob
+    , module Network.AWS.Glacier.DescribeJob
+
+    -- ** InitiateVaultLock
+    , module Network.AWS.Glacier.InitiateVaultLock
+
+    -- ** GetVaultAccessPolicy
+    , module Network.AWS.Glacier.GetVaultAccessPolicy
+
+    -- ** GetDataRetrievalPolicy
+    , module Network.AWS.Glacier.GetDataRetrievalPolicy
+
+    -- ** RemoveTagsFromVault
+    , module Network.AWS.Glacier.RemoveTagsFromVault
+
+    -- ** DeleteArchive
+    , module Network.AWS.Glacier.DeleteArchive
+
+    -- ** DeleteVault
+    , module Network.AWS.Glacier.DeleteVault
+
+    -- ** InitiateMultipartUpload
+    , module Network.AWS.Glacier.InitiateMultipartUpload
+
+    -- ** ListParts
     , module Network.AWS.Glacier.ListParts
-    , module Network.AWS.Glacier.ListVaults
-    , module Network.AWS.Glacier.SetDataRetrievalPolicy
-    , module Network.AWS.Glacier.SetVaultAccessPolicy
-    , module Network.AWS.Glacier.SetVaultNotifications
-    , module Network.AWS.Glacier.Types
+
+    -- ** CreateVault
+    , module Network.AWS.Glacier.CreateVault
+
+    -- ** AddTagsToVault
+    , module Network.AWS.Glacier.AddTagsToVault
+
+    -- ** UploadArchive
     , module Network.AWS.Glacier.UploadArchive
-    , module Network.AWS.Glacier.UploadMultipartPart
+
+    -- * Types
+
+    -- ** ActionCode
+    , ActionCode (..)
+
+    -- ** StatusCode
+    , StatusCode (..)
+
+    -- ** ArchiveCreationOutput
+    , ArchiveCreationOutput
+    , archiveCreationOutput
+    , acoArchiveId
+    , acoChecksum
+    , acoLocation
+
+    -- ** DataRetrievalPolicy
+    , DataRetrievalPolicy
+    , dataRetrievalPolicy
+    , drpRules
+
+    -- ** DataRetrievalRule
+    , DataRetrievalRule
+    , dataRetrievalRule
+    , drrStrategy
+    , drrBytesPerHour
+
+    -- ** DescribeVaultOutput
+    , DescribeVaultOutput
+    , describeVaultOutput
+    , dvoVaultName
+    , dvoSizeInBytes
+    , dvoLastInventoryDate
+    , dvoVaultARN
+    , dvoCreationDate
+    , dvoNumberOfArchives
+
+    -- ** GlacierJobDescription
+    , GlacierJobDescription
+    , glacierJobDescription
+    , gjdArchiveId
+    , gjdSHA256TreeHash
+    , gjdJobId
+    , gjdRetrievalByteRange
+    , gjdInventoryRetrievalParameters
+    , gjdAction
+    , gjdJobDescription
+    , gjdSNSTopic
+    , gjdVaultARN
+    , gjdStatusMessage
+    , gjdArchiveSHA256TreeHash
+    , gjdCreationDate
+    , gjdCompleted
+    , gjdCompletionDate
+    , gjdArchiveSizeInBytes
+    , gjdStatusCode
+    , gjdInventorySizeInBytes
+
+    -- ** InventoryRetrievalJobDescription
+    , InventoryRetrievalJobDescription
+    , inventoryRetrievalJobDescription
+    , irjdFormat
+    , irjdEndDate
+    , irjdStartDate
+    , irjdMarker
+    , irjdLimit
+
+    -- ** InventoryRetrievalJobInput
+    , InventoryRetrievalJobInput
+    , inventoryRetrievalJobInput
+    , irjiEndDate
+    , irjiStartDate
+    , irjiMarker
+    , irjiLimit
+
+    -- ** JobParameters
+    , JobParameters
+    , jobParameters
+    , jpArchiveId
+    , jpRetrievalByteRange
+    , jpFormat
+    , jpInventoryRetrievalParameters
+    , jpSNSTopic
+    , jpType
+    , jpDescription
+
+    -- ** PartListElement
+    , PartListElement
+    , partListElement
+    , pleSHA256TreeHash
+    , pleRangeInBytes
+
+    -- ** UploadListElement
+    , UploadListElement
+    , uploadListElement
+    , uleMultipartUploadId
+    , uleArchiveDescription
+    , ulePartSizeInBytes
+    , uleVaultARN
+    , uleCreationDate
+
+    -- ** VaultAccessPolicy
+    , VaultAccessPolicy
+    , vaultAccessPolicy
+    , vapPolicy
+
+    -- ** VaultLockPolicy
+    , VaultLockPolicy
+    , vaultLockPolicy
+    , vlpPolicy
+
+    -- ** VaultNotificationConfig
+    , VaultNotificationConfig
+    , vaultNotificationConfig
+    , vncSNSTopic
+    , vncEvents
     ) where
 
-import Network.AWS.Glacier.AbortMultipartUpload
-import Network.AWS.Glacier.CompleteMultipartUpload
-import Network.AWS.Glacier.CreateVault
-import Network.AWS.Glacier.DeleteArchive
-import Network.AWS.Glacier.DeleteVault
-import Network.AWS.Glacier.DeleteVaultAccessPolicy
-import Network.AWS.Glacier.DeleteVaultNotifications
-import Network.AWS.Glacier.DescribeJob
-import Network.AWS.Glacier.DescribeVault
-import Network.AWS.Glacier.GetDataRetrievalPolicy
-import Network.AWS.Glacier.GetJobOutput
-import Network.AWS.Glacier.GetVaultAccessPolicy
-import Network.AWS.Glacier.GetVaultNotifications
-import Network.AWS.Glacier.InitiateJob
-import Network.AWS.Glacier.InitiateMultipartUpload
-import Network.AWS.Glacier.ListJobs
-import Network.AWS.Glacier.ListMultipartUploads
-import Network.AWS.Glacier.ListParts
-import Network.AWS.Glacier.ListVaults
-import Network.AWS.Glacier.SetDataRetrievalPolicy
-import Network.AWS.Glacier.SetVaultAccessPolicy
-import Network.AWS.Glacier.SetVaultNotifications
-import Network.AWS.Glacier.Types
-import Network.AWS.Glacier.UploadArchive
-import Network.AWS.Glacier.UploadMultipartPart
+import           Network.AWS.Glacier.AbortMultipartUpload
+import           Network.AWS.Glacier.AbortVaultLock
+import           Network.AWS.Glacier.AddTagsToVault
+import           Network.AWS.Glacier.CompleteMultipartUpload
+import           Network.AWS.Glacier.CompleteVaultLock
+import           Network.AWS.Glacier.CreateVault
+import           Network.AWS.Glacier.DeleteArchive
+import           Network.AWS.Glacier.DeleteVault
+import           Network.AWS.Glacier.DeleteVaultAccessPolicy
+import           Network.AWS.Glacier.DeleteVaultNotifications
+import           Network.AWS.Glacier.DescribeJob
+import           Network.AWS.Glacier.DescribeVault
+import           Network.AWS.Glacier.GetDataRetrievalPolicy
+import           Network.AWS.Glacier.GetJobOutput
+import           Network.AWS.Glacier.GetVaultAccessPolicy
+import           Network.AWS.Glacier.GetVaultLock
+import           Network.AWS.Glacier.GetVaultNotifications
+import           Network.AWS.Glacier.InitiateJob
+import           Network.AWS.Glacier.InitiateMultipartUpload
+import           Network.AWS.Glacier.InitiateVaultLock
+import           Network.AWS.Glacier.ListJobs
+import           Network.AWS.Glacier.ListMultipartUploads
+import           Network.AWS.Glacier.ListParts
+import           Network.AWS.Glacier.ListTagsForVault
+import           Network.AWS.Glacier.ListVaults
+import           Network.AWS.Glacier.RemoveTagsFromVault
+import           Network.AWS.Glacier.SetDataRetrievalPolicy
+import           Network.AWS.Glacier.SetVaultAccessPolicy
+import           Network.AWS.Glacier.SetVaultNotifications
+import           Network.AWS.Glacier.Types
+import           Network.AWS.Glacier.UploadArchive
+import           Network.AWS.Glacier.UploadMultipartPart
+import           Network.AWS.Glacier.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 'Glacier'.
+-}
+
+{- $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/Glacier/AbortMultipartUpload.hs b/gen/Network/AWS/Glacier/AbortMultipartUpload.hs
--- a/gen/Network/AWS/Glacier/AbortMultipartUpload.hs
+++ b/gen/Network/AWS/Glacier/AbortMultipartUpload.hs
@@ -1,138 +1,147 @@
-{-# 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.Glacier.AbortMultipartUpload
--- 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.
-
--- | This operation aborts a multipart upload identified by the upload ID.
+-- This operation aborts a multipart upload identified by the upload ID.
 --
 -- After the Abort Multipart Upload request succeeds, you cannot upload any
--- more parts to the multipart upload or complete the multipart upload. Aborting
--- a completed upload fails. However, aborting an already-aborted upload will
--- succeed, for a short time. For more information about uploading a part and
--- completing a multipart upload, see 'UploadMultipartPart' and 'CompleteMultipartUpload'.
+-- more parts to the multipart upload or complete the multipart upload.
+-- Aborting a completed upload fails. However, aborting an already-aborted
+-- upload will succeed, for a short time. For more information about
+-- uploading a part and completing a multipart upload, see
+-- UploadMultipartPart and CompleteMultipartUpload.
 --
 -- This operation is idempotent.
 --
 -- An AWS account has full permission to perform all operations (actions).
--- However, AWS Identity and Access Management (IAM) users don't have any
--- permissions by default. You must grant them explicit permission to perform
--- specific actions. For more information, see <http://docs.aws.amazon.com/amazonglacier/latest/dev/using-iam-with-amazon-glacier.html Access Control Using AWS Identityand Access Management (IAM)>.
+-- However, AWS Identity and Access Management (IAM) users don\'t have any
+-- permissions by default. You must grant them explicit permission to
+-- perform specific actions. For more information, see
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/using-iam-with-amazon-glacier.html Access Control Using AWS Identity and Access Management (IAM)>.
 --
--- For conceptual information and underlying REST API, go to <http://docs.aws.amazon.com/amazonglacier/latest/dev/working-with-archives.html Working withArchives in Amazon Glacier> and <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-multipart-abort-upload.html Abort Multipart Upload> in the /Amazon GlacierDeveloper Guide/.
+-- For conceptual information and underlying REST API, go to
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/working-with-archives.html Working with Archives in Amazon Glacier>
+-- and
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-multipart-abort-upload.html Abort Multipart Upload>
+-- in the /Amazon Glacier Developer Guide/.
 --
--- <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-AbortMultipartUpload.html>
+-- /See:/ <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-AbortMultipartUpload.html AWS API Reference> for AbortMultipartUpload.
 module Network.AWS.Glacier.AbortMultipartUpload
     (
-    -- * Request
-      AbortMultipartUpload
-    -- ** Request constructor
-    , abortMultipartUpload
-    -- ** Request lenses
+    -- * Creating a Request
+      abortMultipartUpload
+    , AbortMultipartUpload
+    -- * Request Lenses
     , amuAccountId
-    , amuUploadId
     , amuVaultName
+    , amuUploadId
 
-    -- * Response
-    , AbortMultipartUploadResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , abortMultipartUploadResponse
+    , AbortMultipartUploadResponse
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.RestJSON
-import Network.AWS.Glacier.Types
-import qualified GHC.Exts
-
-data AbortMultipartUpload = AbortMultipartUpload
-    { _amuAccountId :: Text
-    , _amuUploadId  :: Text
-    , _amuVaultName :: Text
-    } deriving (Eq, Ord, Read, Show)
+import           Network.AWS.Glacier.Types
+import           Network.AWS.Glacier.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
--- | 'AbortMultipartUpload' constructor.
+-- | Provides options to abort a multipart upload identified by the upload
+-- ID.
 --
--- The fields accessible through corresponding lenses are:
+-- For information about the underlying REST API, go to
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-multipart-abort-upload.html Abort Multipart Upload>.
+-- For conceptual information, go to
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/working-with-archives.html Working with Archives in Amazon Glacier>.
 --
--- * 'amuAccountId' @::@ 'Text'
+-- /See:/ 'abortMultipartUpload' smart constructor.
+data AbortMultipartUpload = AbortMultipartUpload'
+    { _amuAccountId :: !Text
+    , _amuVaultName :: !Text
+    , _amuUploadId  :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AbortMultipartUpload' with the minimum fields required to make a request.
 --
--- * 'amuUploadId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'amuVaultName' @::@ 'Text'
+-- * 'amuAccountId'
 --
-abortMultipartUpload :: Text -- ^ 'amuAccountId'
-                     -> Text -- ^ 'amuVaultName'
-                     -> Text -- ^ 'amuUploadId'
-                     -> AbortMultipartUpload
-abortMultipartUpload p1 p2 p3 = AbortMultipartUpload
-    { _amuAccountId = p1
-    , _amuVaultName = p2
-    , _amuUploadId  = p3
+-- * 'amuVaultName'
+--
+-- * 'amuUploadId'
+abortMultipartUpload
+    :: Text -- ^ 'amuAccountId'
+    -> Text -- ^ 'amuVaultName'
+    -> Text -- ^ 'amuUploadId'
+    -> AbortMultipartUpload
+abortMultipartUpload pAccountId_ pVaultName_ pUploadId_ =
+    AbortMultipartUpload'
+    { _amuAccountId = pAccountId_
+    , _amuVaultName = pVaultName_
+    , _amuUploadId = pUploadId_
     }
 
--- | The 'AccountId' value is the AWS account ID of the account that owns the vault.
--- You can either specify an AWS account ID or optionally a single apos'-'apos
--- (hyphen), in which case Amazon Glacier uses the AWS account ID associated
--- with the credentials used to sign the request. If you use an account ID, do
--- not include any hyphens (apos-apos) in the ID.
+-- | The 'AccountId' value is the AWS account ID of the account that owns the
+-- vault. You can either specify an AWS account ID or optionally a single
+-- apos'-'apos (hyphen), in which case Amazon Glacier uses the AWS account
+-- ID associated with the credentials used to sign the request. If you use
+-- an account ID, do not include any hyphens (apos-apos) in the ID.
 amuAccountId :: Lens' AbortMultipartUpload Text
-amuAccountId = lens _amuAccountId (\s a -> s { _amuAccountId = a })
-
--- | The upload ID of the multipart upload to delete.
-amuUploadId :: Lens' AbortMultipartUpload Text
-amuUploadId = lens _amuUploadId (\s a -> s { _amuUploadId = a })
+amuAccountId = lens _amuAccountId (\ s a -> s{_amuAccountId = a});
 
 -- | The name of the vault.
 amuVaultName :: Lens' AbortMultipartUpload Text
-amuVaultName = lens _amuVaultName (\s a -> s { _amuVaultName = a })
+amuVaultName = lens _amuVaultName (\ s a -> s{_amuVaultName = a});
 
-data AbortMultipartUploadResponse = AbortMultipartUploadResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+-- | The upload ID of the multipart upload to delete.
+amuUploadId :: Lens' AbortMultipartUpload Text
+amuUploadId = lens _amuUploadId (\ s a -> s{_amuUploadId = a});
 
--- | 'AbortMultipartUploadResponse' constructor.
-abortMultipartUploadResponse :: AbortMultipartUploadResponse
-abortMultipartUploadResponse = AbortMultipartUploadResponse
+instance AWSRequest AbortMultipartUpload where
+        type Sv AbortMultipartUpload = Glacier
+        type Rs AbortMultipartUpload =
+             AbortMultipartUploadResponse
+        request = delete
+        response = receiveNull AbortMultipartUploadResponse'
 
+instance ToHeaders AbortMultipartUpload where
+        toHeaders = const mempty
+
 instance ToPath AbortMultipartUpload where
-    toPath AbortMultipartUpload{..} = mconcat
-        [ "/"
-        , toText _amuAccountId
-        , "/vaults/"
-        , toText _amuVaultName
-        , "/multipart-uploads/"
-        , toText _amuUploadId
-        ]
+        toPath AbortMultipartUpload'{..}
+          = mconcat
+              ["/", toBS _amuAccountId, "/vaults/",
+               toBS _amuVaultName, "/multipart-uploads/",
+               toBS _amuUploadId]
 
 instance ToQuery AbortMultipartUpload where
-    toQuery = const mempty
-
-instance ToHeaders AbortMultipartUpload
-
-instance ToJSON AbortMultipartUpload where
-    toJSON = const (toJSON Empty)
+        toQuery = const mempty
 
-instance AWSRequest AbortMultipartUpload where
-    type Sv AbortMultipartUpload = Glacier
-    type Rs AbortMultipartUpload = AbortMultipartUploadResponse
+-- | /See:/ 'abortMultipartUploadResponse' smart constructor.
+data AbortMultipartUploadResponse =
+    AbortMultipartUploadResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = delete
-    response = nullResponse AbortMultipartUploadResponse
+-- | Creates a value of 'AbortMultipartUploadResponse' with the minimum fields required to make a request.
+--
+abortMultipartUploadResponse
+    :: AbortMultipartUploadResponse
+abortMultipartUploadResponse = AbortMultipartUploadResponse'
diff --git a/gen/Network/AWS/Glacier/AbortVaultLock.hs b/gen/Network/AWS/Glacier/AbortVaultLock.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glacier/AbortVaultLock.hs
@@ -0,0 +1,127 @@
+{-# 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.Glacier.AbortVaultLock
+-- 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)
+--
+-- This operation aborts the vault locking process if the vault lock is not
+-- in the 'Locked' state. If the vault lock is in the 'Locked' state when
+-- this operation is requested, the operation returns an
+-- 'AccessDeniedException' error. Aborting the vault locking process
+-- removes the vault lock policy from the specified vault.
+--
+-- A vault lock is put into the 'InProgress' state by calling
+-- InitiateVaultLock. A vault lock is put into the 'Locked' state by
+-- calling CompleteVaultLock. You can get the state of a vault lock by
+-- calling GetVaultLock. For more information about the vault locking
+-- process, see
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/vault-lock.html Amazon Glacier Vault Lock>.
+-- For more information about vault lock policies, see
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/vault-lock-policy.html Amazon Glacier Access Control with Vault Lock Policies>.
+--
+-- This operation is idempotent. You can successfully invoke this operation
+-- multiple times, if the vault lock is in the 'InProgress' state or if
+-- there is no policy associated with the vault.
+--
+-- /See:/ <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-AbortVaultLock.html AWS API Reference> for AbortVaultLock.
+module Network.AWS.Glacier.AbortVaultLock
+    (
+    -- * Creating a Request
+      abortVaultLock
+    , AbortVaultLock
+    -- * Request Lenses
+    , avlAccountId
+    , avlVaultName
+
+    -- * Destructuring the Response
+    , abortVaultLockResponse
+    , AbortVaultLockResponse
+    ) where
+
+import           Network.AWS.Glacier.Types
+import           Network.AWS.Glacier.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | The input values for 'AbortVaultLock'.
+--
+-- /See:/ 'abortVaultLock' smart constructor.
+data AbortVaultLock = AbortVaultLock'
+    { _avlAccountId :: !Text
+    , _avlVaultName :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AbortVaultLock' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'avlAccountId'
+--
+-- * 'avlVaultName'
+abortVaultLock
+    :: Text -- ^ 'avlAccountId'
+    -> Text -- ^ 'avlVaultName'
+    -> AbortVaultLock
+abortVaultLock pAccountId_ pVaultName_ =
+    AbortVaultLock'
+    { _avlAccountId = pAccountId_
+    , _avlVaultName = pVaultName_
+    }
+
+-- | The 'AccountId' value is the AWS account ID. This value must match the
+-- AWS account ID associated with the credentials used to sign the request.
+-- You can either specify an AWS account ID or optionally a single
+-- apos'-'apos (hyphen), in which case Amazon Glacier uses the AWS account
+-- ID associated with the credentials used to sign the request. If you
+-- specify your account ID, do not include any hyphens (apos-apos) in the
+-- ID.
+avlAccountId :: Lens' AbortVaultLock Text
+avlAccountId = lens _avlAccountId (\ s a -> s{_avlAccountId = a});
+
+-- | The name of the vault.
+avlVaultName :: Lens' AbortVaultLock Text
+avlVaultName = lens _avlVaultName (\ s a -> s{_avlVaultName = a});
+
+instance AWSRequest AbortVaultLock where
+        type Sv AbortVaultLock = Glacier
+        type Rs AbortVaultLock = AbortVaultLockResponse
+        request = delete
+        response = receiveNull AbortVaultLockResponse'
+
+instance ToHeaders AbortVaultLock where
+        toHeaders = const mempty
+
+instance ToPath AbortVaultLock where
+        toPath AbortVaultLock'{..}
+          = mconcat
+              ["/", toBS _avlAccountId, "/vaults/",
+               toBS _avlVaultName, "/lock-policy"]
+
+instance ToQuery AbortVaultLock where
+        toQuery = const mempty
+
+-- | /See:/ 'abortVaultLockResponse' smart constructor.
+data AbortVaultLockResponse =
+    AbortVaultLockResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AbortVaultLockResponse' with the minimum fields required to make a request.
+--
+abortVaultLockResponse
+    :: AbortVaultLockResponse
+abortVaultLockResponse = AbortVaultLockResponse'
diff --git a/gen/Network/AWS/Glacier/AddTagsToVault.hs b/gen/Network/AWS/Glacier/AddTagsToVault.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glacier/AddTagsToVault.hs
@@ -0,0 +1,128 @@
+{-# 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.Glacier.AddTagsToVault
+-- 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)
+--
+-- This operation adds the specified tags to a vault. Each tag is composed
+-- of a key and a value. Each vault can have up to 10 tags. If your request
+-- would cause the tag limit for the vault to be exceeded, the operation
+-- throws the 'LimitExceededException' error. If a tag already exists on
+-- the vault under a specified key, the existing key value will be
+-- overwritten. For more information about tags, see
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/tagging.html Tagging Amazon Glacier Resources>.
+--
+-- /See:/ <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-AddTagsToVault.html AWS API Reference> for AddTagsToVault.
+module Network.AWS.Glacier.AddTagsToVault
+    (
+    -- * Creating a Request
+      addTagsToVault
+    , AddTagsToVault
+    -- * Request Lenses
+    , attvTags
+    , attvAccountId
+    , attvVaultName
+
+    -- * Destructuring the Response
+    , addTagsToVaultResponse
+    , AddTagsToVaultResponse
+    ) where
+
+import           Network.AWS.Glacier.Types
+import           Network.AWS.Glacier.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | The input values for 'AddTagsToVault'.
+--
+-- /See:/ 'addTagsToVault' smart constructor.
+data AddTagsToVault = AddTagsToVault'
+    { _attvTags      :: !(Maybe (Map Text Text))
+    , _attvAccountId :: !Text
+    , _attvVaultName :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AddTagsToVault' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'attvTags'
+--
+-- * 'attvAccountId'
+--
+-- * 'attvVaultName'
+addTagsToVault
+    :: Text -- ^ 'attvAccountId'
+    -> Text -- ^ 'attvVaultName'
+    -> AddTagsToVault
+addTagsToVault pAccountId_ pVaultName_ =
+    AddTagsToVault'
+    { _attvTags = Nothing
+    , _attvAccountId = pAccountId_
+    , _attvVaultName = pVaultName_
+    }
+
+-- | The tags to add to the vault. Each tag is composed of a key and a value.
+-- The value can be an empty string.
+attvTags :: Lens' AddTagsToVault (HashMap Text Text)
+attvTags = lens _attvTags (\ s a -> s{_attvTags = a}) . _Default . _Map;
+
+-- | The 'AccountId' value is the AWS account ID of the account that owns the
+-- vault. You can either specify an AWS account ID or optionally a single
+-- apos'-'apos (hyphen), in which case Amazon Glacier uses the AWS account
+-- ID associated with the credentials used to sign the request. If you use
+-- an account ID, do not include any hyphens (apos-apos) in the ID.
+attvAccountId :: Lens' AddTagsToVault Text
+attvAccountId = lens _attvAccountId (\ s a -> s{_attvAccountId = a});
+
+-- | The name of the vault.
+attvVaultName :: Lens' AddTagsToVault Text
+attvVaultName = lens _attvVaultName (\ s a -> s{_attvVaultName = a});
+
+instance AWSRequest AddTagsToVault where
+        type Sv AddTagsToVault = Glacier
+        type Rs AddTagsToVault = AddTagsToVaultResponse
+        request = postJSON
+        response = receiveNull AddTagsToVaultResponse'
+
+instance ToHeaders AddTagsToVault where
+        toHeaders = const mempty
+
+instance ToJSON AddTagsToVault where
+        toJSON AddTagsToVault'{..}
+          = object ["Tags" .= _attvTags]
+
+instance ToPath AddTagsToVault where
+        toPath AddTagsToVault'{..}
+          = mconcat
+              ["/", toBS _attvAccountId, "/vaults/",
+               toBS _attvVaultName, "/tags"]
+
+instance ToQuery AddTagsToVault where
+        toQuery = const (mconcat ["operation=add"])
+
+-- | /See:/ 'addTagsToVaultResponse' smart constructor.
+data AddTagsToVaultResponse =
+    AddTagsToVaultResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AddTagsToVaultResponse' with the minimum fields required to make a request.
+--
+addTagsToVaultResponse
+    :: AddTagsToVaultResponse
+addTagsToVaultResponse = AddTagsToVaultResponse'
diff --git a/gen/Network/AWS/Glacier/CompleteMultipartUpload.hs b/gen/Network/AWS/Glacier/CompleteMultipartUpload.hs
--- a/gen/Network/AWS/Glacier/CompleteMultipartUpload.hs
+++ b/gen/Network/AWS/Glacier/CompleteMultipartUpload.hs
@@ -1,224 +1,198 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.Glacier.CompleteMultipartUpload
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | You call this operation to inform Amazon Glacier that all the archive parts
--- have been uploaded and that Amazon Glacier can now assemble the archive from
--- the uploaded parts. After assembling and saving the archive to the vault,
--- Amazon Glacier returns the URI path of the newly created archive resource.
--- Using the URI path, you can then access the archive. After you upload an
--- archive, you should save the archive ID returned to retrieve the archive at a
--- later point. You can also get the vault inventory to obtain a list of archive
--- IDs in a vault. For more information, see 'InitiateJob'.
+-- You call this operation to inform Amazon Glacier that all the archive
+-- parts have been uploaded and that Amazon Glacier can now assemble the
+-- archive from the uploaded parts. After assembling and saving the archive
+-- to the vault, Amazon Glacier returns the URI path of the newly created
+-- archive resource. Using the URI path, you can then access the archive.
+-- After you upload an archive, you should save the archive ID returned to
+-- retrieve the archive at a later point. You can also get the vault
+-- inventory to obtain a list of archive IDs in a vault. For more
+-- information, see InitiateJob.
 --
--- In the request, you must include the computed SHA256 tree hash of the entire
--- archive you have uploaded. For information about computing a SHA256 tree
--- hash, see <http://docs.aws.amazon.com/amazonglacier/latest/dev/checksum-calculations.html Computing Checksums>. On the server side, Amazon Glacier also
--- constructs the SHA256 tree hash of the assembled archive. If the values
--- match, Amazon Glacier saves the archive to the vault; otherwise, it returns
--- an error, and the operation fails. The 'ListParts' operation returns a list of
--- parts uploaded for a specific multipart upload. It includes checksum
--- information for each uploaded part that can be used to debug a bad checksum
--- issue.
+-- In the request, you must include the computed SHA256 tree hash of the
+-- entire archive you have uploaded. For information about computing a
+-- SHA256 tree hash, see
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/checksum-calculations.html Computing Checksums>.
+-- On the server side, Amazon Glacier also constructs the SHA256 tree hash
+-- of the assembled archive. If the values match, Amazon Glacier saves the
+-- archive to the vault; otherwise, it returns an error, and the operation
+-- fails. The ListParts operation returns a list of parts uploaded for a
+-- specific multipart upload. It includes checksum information for each
+-- uploaded part that can be used to debug a bad checksum issue.
 --
--- Additionally, Amazon Glacier also checks for any missing content ranges when
--- assembling the archive, if missing content ranges are found, Amazon Glacier
--- returns an error and the operation fails.
+-- Additionally, Amazon Glacier also checks for any missing content ranges
+-- when assembling the archive, if missing content ranges are found, Amazon
+-- Glacier returns an error and the operation fails.
 --
 -- Complete Multipart Upload is an idempotent operation. After your first
--- successful complete multipart upload, if you call the operation again within
--- a short period, the operation will succeed and return the same archive ID.
--- This is useful in the event you experience a network issue that causes an
--- aborted connection or receive a 500 server error, in which case you can
--- repeat your Complete Multipart Upload request and get the same archive ID
--- without creating duplicate archives. Note, however, that after the multipart
--- upload completes, you cannot call the List Parts operation and the multipart
--- upload will not appear in List Multipart Uploads response, even if idempotent
--- complete is possible.
+-- successful complete multipart upload, if you call the operation again
+-- within a short period, the operation will succeed and return the same
+-- archive ID. This is useful in the event you experience a network issue
+-- that causes an aborted connection or receive a 500 server error, in
+-- which case you can repeat your Complete Multipart Upload request and get
+-- the same archive ID without creating duplicate archives. Note, however,
+-- that after the multipart upload completes, you cannot call the List
+-- Parts operation and the multipart upload will not appear in List
+-- Multipart Uploads response, even if idempotent complete is possible.
 --
 -- An AWS account has full permission to perform all operations (actions).
--- However, AWS Identity and Access Management (IAM) users don't have any
--- permissions by default. You must grant them explicit permission to perform
--- specific actions. For more information, see <http://docs.aws.amazon.com/amazonglacier/latest/dev/using-iam-with-amazon-glacier.html Access Control Using AWS Identityand Access Management (IAM)>.
+-- However, AWS Identity and Access Management (IAM) users don\'t have any
+-- permissions by default. You must grant them explicit permission to
+-- perform specific actions. For more information, see
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/using-iam-with-amazon-glacier.html Access Control Using AWS Identity and Access Management (IAM)>.
 --
--- For conceptual information and underlying REST API, go to <http://docs.aws.amazon.com/amazonglacier/latest/dev/uploading-archive-mpu.html Uploading LargeArchives in Parts (Multipart Upload)> and <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-multipart-complete-upload.html Complete Multipart Upload> in the /Amazon Glacier Developer Guide/.
+-- For conceptual information and underlying REST API, go to
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/uploading-archive-mpu.html Uploading Large Archives in Parts (Multipart Upload)>
+-- and
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-multipart-complete-upload.html Complete Multipart Upload>
+-- in the /Amazon Glacier Developer Guide/.
 --
--- <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-CompleteMultipartUpload.html>
+-- /See:/ <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-CompleteMultipartUpload.html AWS API Reference> for CompleteMultipartUpload.
 module Network.AWS.Glacier.CompleteMultipartUpload
     (
-    -- * Request
-      CompleteMultipartUpload
-    -- ** Request constructor
-    , completeMultipartUpload
-    -- ** Request lenses
-    , cmuAccountId
-    , cmuArchiveSize
+    -- * Creating a Request
+      completeMultipartUpload
+    , CompleteMultipartUpload
+    -- * Request Lenses
     , cmuChecksum
-    , cmuUploadId
+    , cmuArchiveSize
+    , cmuAccountId
     , cmuVaultName
+    , cmuUploadId
 
-    -- * Response
-    , CompleteMultipartUploadResponse
-    -- ** Response constructor
-    , completeMultipartUploadResponse
-    -- ** Response lenses
-    , cmurArchiveId
-    , cmurChecksum
-    , cmurLocation
+    -- * Destructuring the Response
+    , archiveCreationOutput
+    , ArchiveCreationOutput
+    -- * Response Lenses
+    , acoArchiveId
+    , acoChecksum
+    , acoLocation
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.RestJSON
-import Network.AWS.Glacier.Types
-import qualified GHC.Exts
-
-data CompleteMultipartUpload = CompleteMultipartUpload
-    { _cmuAccountId   :: Text
-    , _cmuArchiveSize :: Maybe Text
-    , _cmuChecksum    :: Maybe Text
-    , _cmuUploadId    :: Text
-    , _cmuVaultName   :: Text
-    } deriving (Eq, Ord, Read, Show)
+import           Network.AWS.Glacier.Types
+import           Network.AWS.Glacier.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
--- | 'CompleteMultipartUpload' constructor.
+-- | Provides options to complete a multipart upload operation. This informs
+-- Amazon Glacier that all the archive parts have been uploaded and Amazon
+-- Glacier can now assemble the archive from the uploaded parts. After
+-- assembling and saving the archive to the vault, Amazon Glacier returns
+-- the URI path of the newly created archive resource.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'completeMultipartUpload' smart constructor.
+data CompleteMultipartUpload = CompleteMultipartUpload'
+    { _cmuChecksum    :: !(Maybe Text)
+    , _cmuArchiveSize :: !(Maybe Text)
+    , _cmuAccountId   :: !Text
+    , _cmuVaultName   :: !Text
+    , _cmuUploadId    :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CompleteMultipartUpload' with the minimum fields required to make a request.
 --
--- * 'cmuAccountId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'cmuArchiveSize' @::@ 'Maybe' 'Text'
+-- * 'cmuChecksum'
 --
--- * 'cmuChecksum' @::@ 'Maybe' 'Text'
+-- * 'cmuArchiveSize'
 --
--- * 'cmuUploadId' @::@ 'Text'
+-- * 'cmuAccountId'
 --
--- * 'cmuVaultName' @::@ 'Text'
+-- * 'cmuVaultName'
 --
-completeMultipartUpload :: Text -- ^ 'cmuAccountId'
-                        -> Text -- ^ 'cmuVaultName'
-                        -> Text -- ^ 'cmuUploadId'
-                        -> CompleteMultipartUpload
-completeMultipartUpload p1 p2 p3 = CompleteMultipartUpload
-    { _cmuAccountId   = p1
-    , _cmuVaultName   = p2
-    , _cmuUploadId    = p3
+-- * 'cmuUploadId'
+completeMultipartUpload
+    :: Text -- ^ 'cmuAccountId'
+    -> Text -- ^ 'cmuVaultName'
+    -> Text -- ^ 'cmuUploadId'
+    -> CompleteMultipartUpload
+completeMultipartUpload pAccountId_ pVaultName_ pUploadId_ =
+    CompleteMultipartUpload'
+    { _cmuChecksum = Nothing
     , _cmuArchiveSize = Nothing
-    , _cmuChecksum    = Nothing
+    , _cmuAccountId = pAccountId_
+    , _cmuVaultName = pVaultName_
+    , _cmuUploadId = pUploadId_
     }
 
--- | The 'AccountId' value is the AWS account ID of the account that owns the vault.
--- You can either specify an AWS account ID or optionally a single apos'-'apos
--- (hyphen), in which case Amazon Glacier uses the AWS account ID associated
--- with the credentials used to sign the request. If you use an account ID, do
--- not include any hyphens (apos-apos) in the ID.
-cmuAccountId :: Lens' CompleteMultipartUpload Text
-cmuAccountId = lens _cmuAccountId (\s a -> s { _cmuAccountId = a })
+-- | The SHA256 tree hash of the entire archive. It is the tree hash of
+-- SHA256 tree hash of the individual parts. If the value you specify in
+-- the request does not match the SHA256 tree hash of the final assembled
+-- archive as computed by Amazon Glacier, Amazon Glacier returns an error
+-- and the request fails.
+cmuChecksum :: Lens' CompleteMultipartUpload (Maybe Text)
+cmuChecksum = lens _cmuChecksum (\ s a -> s{_cmuChecksum = a});
 
--- | The total size, in bytes, of the entire archive. This value should be the sum
--- of all the sizes of the individual parts that you uploaded.
+-- | The total size, in bytes, of the entire archive. This value should be
+-- the sum of all the sizes of the individual parts that you uploaded.
 cmuArchiveSize :: Lens' CompleteMultipartUpload (Maybe Text)
-cmuArchiveSize = lens _cmuArchiveSize (\s a -> s { _cmuArchiveSize = a })
-
--- | The SHA256 tree hash of the entire archive. It is the tree hash of SHA256
--- tree hash of the individual parts. If the value you specify in the request
--- does not match the SHA256 tree hash of the final assembled archive as
--- computed by Amazon Glacier, Amazon Glacier returns an error and the request
--- fails.
-cmuChecksum :: Lens' CompleteMultipartUpload (Maybe Text)
-cmuChecksum = lens _cmuChecksum (\s a -> s { _cmuChecksum = a })
+cmuArchiveSize = lens _cmuArchiveSize (\ s a -> s{_cmuArchiveSize = a});
 
--- | The upload ID of the multipart upload.
-cmuUploadId :: Lens' CompleteMultipartUpload Text
-cmuUploadId = lens _cmuUploadId (\s a -> s { _cmuUploadId = a })
+-- | The 'AccountId' value is the AWS account ID of the account that owns the
+-- vault. You can either specify an AWS account ID or optionally a single
+-- apos'-'apos (hyphen), in which case Amazon Glacier uses the AWS account
+-- ID associated with the credentials used to sign the request. If you use
+-- an account ID, do not include any hyphens (apos-apos) in the ID.
+cmuAccountId :: Lens' CompleteMultipartUpload Text
+cmuAccountId = lens _cmuAccountId (\ s a -> s{_cmuAccountId = a});
 
 -- | The name of the vault.
 cmuVaultName :: Lens' CompleteMultipartUpload Text
-cmuVaultName = lens _cmuVaultName (\s a -> s { _cmuVaultName = a })
-
-data CompleteMultipartUploadResponse = CompleteMultipartUploadResponse
-    { _cmurArchiveId :: Maybe Text
-    , _cmurChecksum  :: Maybe Text
-    , _cmurLocation  :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'CompleteMultipartUploadResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'cmurArchiveId' @::@ 'Maybe' 'Text'
---
--- * 'cmurChecksum' @::@ 'Maybe' 'Text'
---
--- * 'cmurLocation' @::@ 'Maybe' 'Text'
---
-completeMultipartUploadResponse :: CompleteMultipartUploadResponse
-completeMultipartUploadResponse = CompleteMultipartUploadResponse
-    { _cmurLocation  = Nothing
-    , _cmurChecksum  = Nothing
-    , _cmurArchiveId = Nothing
-    }
-
--- | The ID of the archive. This value is also included as part of the location.
-cmurArchiveId :: Lens' CompleteMultipartUploadResponse (Maybe Text)
-cmurArchiveId = lens _cmurArchiveId (\s a -> s { _cmurArchiveId = a })
-
--- | The checksum of the archive computed by Amazon Glacier.
-cmurChecksum :: Lens' CompleteMultipartUploadResponse (Maybe Text)
-cmurChecksum = lens _cmurChecksum (\s a -> s { _cmurChecksum = a })
-
--- | The relative URI path of the newly added archive resource.
-cmurLocation :: Lens' CompleteMultipartUploadResponse (Maybe Text)
-cmurLocation = lens _cmurLocation (\s a -> s { _cmurLocation = a })
+cmuVaultName = lens _cmuVaultName (\ s a -> s{_cmuVaultName = a});
 
-instance ToPath CompleteMultipartUpload where
-    toPath CompleteMultipartUpload{..} = mconcat
-        [ "/"
-        , toText _cmuAccountId
-        , "/vaults/"
-        , toText _cmuVaultName
-        , "/multipart-uploads/"
-        , toText _cmuUploadId
-        ]
+-- | The upload ID of the multipart upload.
+cmuUploadId :: Lens' CompleteMultipartUpload Text
+cmuUploadId = lens _cmuUploadId (\ s a -> s{_cmuUploadId = a});
 
-instance ToQuery CompleteMultipartUpload where
-    toQuery = const mempty
+instance AWSRequest CompleteMultipartUpload where
+        type Sv CompleteMultipartUpload = Glacier
+        type Rs CompleteMultipartUpload =
+             ArchiveCreationOutput
+        request = postJSON
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 ArchiveCreationOutput' <$>
+                   (h .#? "x-amz-archive-id") <*>
+                     (h .#? "x-amz-sha256-tree-hash")
+                     <*> (h .#? "Location"))
 
 instance ToHeaders CompleteMultipartUpload where
-    toHeaders CompleteMultipartUpload{..} = mconcat
-        [ "x-amz-archive-size"     =: _cmuArchiveSize
-        , "x-amz-sha256-tree-hash" =: _cmuChecksum
-        ]
+        toHeaders CompleteMultipartUpload'{..}
+          = mconcat
+              ["x-amz-sha256-tree-hash" =# _cmuChecksum,
+               "x-amz-archive-size" =# _cmuArchiveSize]
 
 instance ToJSON CompleteMultipartUpload where
-    toJSON = const (toJSON Empty)
+        toJSON = const (Object mempty)
 
-instance AWSRequest CompleteMultipartUpload where
-    type Sv CompleteMultipartUpload = Glacier
-    type Rs CompleteMultipartUpload = CompleteMultipartUploadResponse
+instance ToPath CompleteMultipartUpload where
+        toPath CompleteMultipartUpload'{..}
+          = mconcat
+              ["/", toBS _cmuAccountId, "/vaults/",
+               toBS _cmuVaultName, "/multipart-uploads/",
+               toBS _cmuUploadId]
 
-    request  = post
-    response = headerResponse $ \h -> CompleteMultipartUploadResponse
-        <$> h ~:? "x-amz-archive-id"
-        <*> h ~:? "x-amz-sha256-tree-hash"
-        <*> h ~:? "Location"
+instance ToQuery CompleteMultipartUpload where
+        toQuery = const mempty
diff --git a/gen/Network/AWS/Glacier/CompleteVaultLock.hs b/gen/Network/AWS/Glacier/CompleteVaultLock.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glacier/CompleteVaultLock.hs
@@ -0,0 +1,140 @@
+{-# 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.Glacier.CompleteVaultLock
+-- 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)
+--
+-- This operation completes the vault locking process by transitioning the
+-- vault lock from the 'InProgress' state to the 'Locked' state, which
+-- causes the vault lock policy to become unchangeable. A vault lock is put
+-- into the 'InProgress' state by calling InitiateVaultLock. You can obtain
+-- the state of the vault lock by calling GetVaultLock. For more
+-- information about the vault locking process,
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/vault-lock.html Amazon Glacier Vault Lock>.
+--
+-- This operation is idempotent. This request is always successful if the
+-- vault lock is in the 'Locked' state and the provided lock ID matches the
+-- lock ID originally used to lock the vault.
+--
+-- If an invalid lock ID is passed in the request when the vault lock is in
+-- the 'Locked' state, the operation returns an 'AccessDeniedException'
+-- error. If an invalid lock ID is passed in the request when the vault
+-- lock is in the 'InProgress' state, the operation throws an
+-- 'InvalidParameter' error.
+--
+-- /See:/ <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-CompleteVaultLock.html AWS API Reference> for CompleteVaultLock.
+module Network.AWS.Glacier.CompleteVaultLock
+    (
+    -- * Creating a Request
+      completeVaultLock
+    , CompleteVaultLock
+    -- * Request Lenses
+    , cvlAccountId
+    , cvlVaultName
+    , cvlLockId
+
+    -- * Destructuring the Response
+    , completeVaultLockResponse
+    , CompleteVaultLockResponse
+    ) where
+
+import           Network.AWS.Glacier.Types
+import           Network.AWS.Glacier.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | The input values for 'CompleteVaultLock'.
+--
+-- /See:/ 'completeVaultLock' smart constructor.
+data CompleteVaultLock = CompleteVaultLock'
+    { _cvlAccountId :: !Text
+    , _cvlVaultName :: !Text
+    , _cvlLockId    :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CompleteVaultLock' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cvlAccountId'
+--
+-- * 'cvlVaultName'
+--
+-- * 'cvlLockId'
+completeVaultLock
+    :: Text -- ^ 'cvlAccountId'
+    -> Text -- ^ 'cvlVaultName'
+    -> Text -- ^ 'cvlLockId'
+    -> CompleteVaultLock
+completeVaultLock pAccountId_ pVaultName_ pLockId_ =
+    CompleteVaultLock'
+    { _cvlAccountId = pAccountId_
+    , _cvlVaultName = pVaultName_
+    , _cvlLockId = pLockId_
+    }
+
+-- | The 'AccountId' value is the AWS account ID. This value must match the
+-- AWS account ID associated with the credentials used to sign the request.
+-- You can either specify an AWS account ID or optionally a single
+-- apos'-'apos (hyphen), in which case Amazon Glacier uses the AWS account
+-- ID associated with the credentials used to sign the request. If you
+-- specify your account ID, do not include any hyphens (apos-apos) in the
+-- ID.
+cvlAccountId :: Lens' CompleteVaultLock Text
+cvlAccountId = lens _cvlAccountId (\ s a -> s{_cvlAccountId = a});
+
+-- | The name of the vault.
+cvlVaultName :: Lens' CompleteVaultLock Text
+cvlVaultName = lens _cvlVaultName (\ s a -> s{_cvlVaultName = a});
+
+-- | The 'lockId' value is the lock ID obtained from a InitiateVaultLock
+-- request.
+cvlLockId :: Lens' CompleteVaultLock Text
+cvlLockId = lens _cvlLockId (\ s a -> s{_cvlLockId = a});
+
+instance AWSRequest CompleteVaultLock where
+        type Sv CompleteVaultLock = Glacier
+        type Rs CompleteVaultLock = CompleteVaultLockResponse
+        request = postJSON
+        response = receiveNull CompleteVaultLockResponse'
+
+instance ToHeaders CompleteVaultLock where
+        toHeaders = const mempty
+
+instance ToJSON CompleteVaultLock where
+        toJSON = const (Object mempty)
+
+instance ToPath CompleteVaultLock where
+        toPath CompleteVaultLock'{..}
+          = mconcat
+              ["/", toBS _cvlAccountId, "/vaults/",
+               toBS _cvlVaultName, "/lock-policy/", toBS _cvlLockId]
+
+instance ToQuery CompleteVaultLock where
+        toQuery = const mempty
+
+-- | /See:/ 'completeVaultLockResponse' smart constructor.
+data CompleteVaultLockResponse =
+    CompleteVaultLockResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CompleteVaultLockResponse' with the minimum fields required to make a request.
+--
+completeVaultLockResponse
+    :: CompleteVaultLockResponse
+completeVaultLockResponse = CompleteVaultLockResponse'
diff --git a/gen/Network/AWS/Glacier/CreateVault.hs b/gen/Network/AWS/Glacier/CreateVault.hs
--- a/gen/Network/AWS/Glacier/CreateVault.hs
+++ b/gen/Network/AWS/Glacier/CreateVault.hs
@@ -1,148 +1,165 @@
-{-# 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.Glacier.CreateVault
--- 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.
-
--- | This operation creates a new vault with the specified name. The name of the
--- vault must be unique within a region for an AWS account. You can create up to
--- 1,000 vaults per account. If you need to create more vaults, contact Amazon
--- Glacier.
+-- This operation creates a new vault with the specified name. The name of
+-- the vault must be unique within a region for an AWS account. You can
+-- create up to 1,000 vaults per account. If you need to create more
+-- vaults, contact Amazon Glacier.
 --
 -- You must use the following guidelines when naming a vault.
 --
--- Names can be between 1 and 255 characters long.
---
--- Allowed characters are a-z, A-Z, 0-9, '_' (underscore), '-' (hyphen), and
--- '.' (period).
---
+-- -   Names can be between 1 and 255 characters long.
 --
+-- -   Allowed characters are a-z, A-Z, 0-9, \'_\' (underscore), \'-\'
+--     (hyphen), and \'.\' (period).
 --
 -- This operation is idempotent.
 --
 -- An AWS account has full permission to perform all operations (actions).
--- However, AWS Identity and Access Management (IAM) users don't have any
--- permissions by default. You must grant them explicit permission to perform
--- specific actions. For more information, see <http://docs.aws.amazon.com/amazonglacier/latest/dev/using-iam-with-amazon-glacier.html Access Control Using AWS Identityand Access Management (IAM)>.
+-- However, AWS Identity and Access Management (IAM) users don\'t have any
+-- permissions by default. You must grant them explicit permission to
+-- perform specific actions. For more information, see
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/using-iam-with-amazon-glacier.html Access Control Using AWS Identity and Access Management (IAM)>.
 --
--- For conceptual information and underlying REST API, go to <http://docs.aws.amazon.com/amazonglacier/latest/dev/creating-vaults.html Creating a Vaultin Amazon Glacier> and <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-vault-put.html Create Vault > in the /Amazon Glacier Developer Guide/.
+-- For conceptual information and underlying REST API, go to
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/creating-vaults.html Creating a Vault in Amazon Glacier>
+-- and
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-vault-put.html Create Vault>
+-- in the /Amazon Glacier Developer Guide/.
 --
--- <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-CreateVault.html>
+-- /See:/ <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-CreateVault.html AWS API Reference> for CreateVault.
 module Network.AWS.Glacier.CreateVault
     (
-    -- * Request
-      CreateVault
-    -- ** Request constructor
-    , createVault
-    -- ** Request lenses
+    -- * Creating a Request
+      createVault
+    , CreateVault
+    -- * Request Lenses
     , cvAccountId
     , cvVaultName
 
-    -- * Response
-    , CreateVaultResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , createVaultResponse
-    -- ** Response lenses
-    , cvrLocation
+    , CreateVaultResponse
+    -- * Response Lenses
+    , cvrsLocation
+    , cvrsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.RestJSON
-import Network.AWS.Glacier.Types
-import qualified GHC.Exts
-
-data CreateVault = CreateVault
-    { _cvAccountId :: Text
-    , _cvVaultName :: Text
-    } deriving (Eq, Ord, Read, Show)
+import           Network.AWS.Glacier.Types
+import           Network.AWS.Glacier.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
--- | 'CreateVault' constructor.
+-- | Provides options to create a vault.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'createVault' smart constructor.
+data CreateVault = CreateVault'
+    { _cvAccountId :: !Text
+    , _cvVaultName :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CreateVault' with the minimum fields required to make a request.
 --
--- * 'cvAccountId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'cvVaultName' @::@ 'Text'
+-- * 'cvAccountId'
 --
-createVault :: Text -- ^ 'cvAccountId'
-            -> Text -- ^ 'cvVaultName'
-            -> CreateVault
-createVault p1 p2 = CreateVault
-    { _cvAccountId = p1
-    , _cvVaultName = p2
+-- * 'cvVaultName'
+createVault
+    :: Text -- ^ 'cvAccountId'
+    -> Text -- ^ 'cvVaultName'
+    -> CreateVault
+createVault pAccountId_ pVaultName_ =
+    CreateVault'
+    { _cvAccountId = pAccountId_
+    , _cvVaultName = pVaultName_
     }
 
--- | The 'AccountId' value is the AWS account ID. This value must match the AWS
--- account ID associated with the credentials used to sign the request. You can
--- either specify an AWS account ID or optionally a single apos'-'apos (hyphen),
--- in which case Amazon Glacier uses the AWS account ID associated with the
--- credentials used to sign the request. If you specify your Account ID, do not
--- include any hyphens (apos-apos) in the ID.
+-- | The 'AccountId' value is the AWS account ID. This value must match the
+-- AWS account ID associated with the credentials used to sign the request.
+-- You can either specify an AWS account ID or optionally a single
+-- apos'-'apos (hyphen), in which case Amazon Glacier uses the AWS account
+-- ID associated with the credentials used to sign the request. If you
+-- specify your account ID, do not include any hyphens (apos-apos) in the
+-- ID.
 cvAccountId :: Lens' CreateVault Text
-cvAccountId = lens _cvAccountId (\s a -> s { _cvAccountId = a })
+cvAccountId = lens _cvAccountId (\ s a -> s{_cvAccountId = a});
 
 -- | The name of the vault.
 cvVaultName :: Lens' CreateVault Text
-cvVaultName = lens _cvVaultName (\s a -> s { _cvVaultName = a })
+cvVaultName = lens _cvVaultName (\ s a -> s{_cvVaultName = a});
 
-newtype CreateVaultResponse = CreateVaultResponse
-    { _cvrLocation :: Maybe Text
-    } deriving (Eq, Ord, Read, Show, Monoid)
+instance AWSRequest CreateVault where
+        type Sv CreateVault = Glacier
+        type Rs CreateVault = CreateVaultResponse
+        request = putJSON
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 CreateVaultResponse' <$>
+                   (h .#? "Location") <*> (pure (fromEnum s)))
 
--- | 'CreateVaultResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'cvrLocation' @::@ 'Maybe' 'Text'
---
-createVaultResponse :: CreateVaultResponse
-createVaultResponse = CreateVaultResponse
-    { _cvrLocation = Nothing
-    }
+instance ToHeaders CreateVault where
+        toHeaders = const mempty
 
--- | The URI of the vault that was created.
-cvrLocation :: Lens' CreateVaultResponse (Maybe Text)
-cvrLocation = lens _cvrLocation (\s a -> s { _cvrLocation = a })
+instance ToJSON CreateVault where
+        toJSON = const (Object mempty)
 
 instance ToPath CreateVault where
-    toPath CreateVault{..} = mconcat
-        [ "/"
-        , toText _cvAccountId
-        , "/vaults/"
-        , toText _cvVaultName
-        ]
+        toPath CreateVault'{..}
+          = mconcat
+              ["/", toBS _cvAccountId, "/vaults/",
+               toBS _cvVaultName]
 
 instance ToQuery CreateVault where
-    toQuery = const mempty
+        toQuery = const mempty
 
-instance ToHeaders CreateVault
+-- | Contains the Amazon Glacier response to your request.
+--
+-- /See:/ 'createVaultResponse' smart constructor.
+data CreateVaultResponse = CreateVaultResponse'
+    { _cvrsLocation :: !(Maybe Text)
+    , _cvrsStatus   :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance ToJSON CreateVault where
-    toJSON = const (toJSON Empty)
+-- | Creates a value of 'CreateVaultResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cvrsLocation'
+--
+-- * 'cvrsStatus'
+createVaultResponse
+    :: Int -- ^ 'cvrsStatus'
+    -> CreateVaultResponse
+createVaultResponse pStatus_ =
+    CreateVaultResponse'
+    { _cvrsLocation = Nothing
+    , _cvrsStatus = pStatus_
+    }
 
-instance AWSRequest CreateVault where
-    type Sv CreateVault = Glacier
-    type Rs CreateVault = CreateVaultResponse
+-- | The URI of the vault that was created.
+cvrsLocation :: Lens' CreateVaultResponse (Maybe Text)
+cvrsLocation = lens _cvrsLocation (\ s a -> s{_cvrsLocation = a});
 
-    request  = put
-    response = headerResponse $ \h -> CreateVaultResponse
-        <$> h ~:? "Location"
+-- | The response status code.
+cvrsStatus :: Lens' CreateVaultResponse Int
+cvrsStatus = lens _cvrsStatus (\ s a -> s{_cvrsStatus = a});
diff --git a/gen/Network/AWS/Glacier/DeleteArchive.hs b/gen/Network/AWS/Glacier/DeleteArchive.hs
--- a/gen/Network/AWS/Glacier/DeleteArchive.hs
+++ b/gen/Network/AWS/Glacier/DeleteArchive.hs
@@ -1,141 +1,143 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.Glacier.DeleteArchive
--- 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.
-
--- | This operation deletes an archive from a vault. Subsequent requests to
--- initiate a retrieval of this archive will fail. Archive retrievals that are
--- in progress for this archive ID may or may not succeed according to the
--- following scenarios:
+-- This operation deletes an archive from a vault. Subsequent requests to
+-- initiate a retrieval of this archive will fail. Archive retrievals that
+-- are in progress for this archive ID may or may not succeed according to
+-- the following scenarios:
 --
--- If the archive retrieval job is actively preparing the data for download
--- when Amazon Glacier receives the delete archive request, the archival
--- retrieval operation might fail.  If the archive retrieval job has
--- successfully prepared the archive for download when Amazon Glacier receives
--- the delete archive request, you will be able to download the output.   This
--- operation is idempotent. Attempting to delete an already-deleted archive does
--- not result in an error.
+-- -   If the archive retrieval job is actively preparing the data for
+--     download when Amazon Glacier receives the delete archive request,
+--     the archival retrieval operation might fail.
+-- -   If the archive retrieval job has successfully prepared the archive
+--     for download when Amazon Glacier receives the delete archive
+--     request, you will be able to download the output.
 --
+-- This operation is idempotent. Attempting to delete an already-deleted
+-- archive does not result in an error.
+--
 -- An AWS account has full permission to perform all operations (actions).
--- However, AWS Identity and Access Management (IAM) users don't have any
--- permissions by default. You must grant them explicit permission to perform
--- specific actions. For more information, see <http://docs.aws.amazon.com/amazonglacier/latest/dev/using-iam-with-amazon-glacier.html Access Control Using AWS Identityand Access Management (IAM)>.
+-- However, AWS Identity and Access Management (IAM) users don\'t have any
+-- permissions by default. You must grant them explicit permission to
+-- perform specific actions. For more information, see
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/using-iam-with-amazon-glacier.html Access Control Using AWS Identity and Access Management (IAM)>.
 --
--- For conceptual information and underlying REST API, go to <http://docs.aws.amazon.com/amazonglacier/latest/dev/deleting-an-archive.html Deleting anArchive in Amazon Glacier> and <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-archive-delete.html Delete Archive> in the /Amazon Glacier DeveloperGuide/.
+-- For conceptual information and underlying REST API, go to
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/deleting-an-archive.html Deleting an Archive in Amazon Glacier>
+-- and
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-archive-delete.html Delete Archive>
+-- in the /Amazon Glacier Developer Guide/.
 --
--- <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-DeleteArchive.html>
+-- /See:/ <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-DeleteArchive.html AWS API Reference> for DeleteArchive.
 module Network.AWS.Glacier.DeleteArchive
     (
-    -- * Request
-      DeleteArchive
-    -- ** Request constructor
-    , deleteArchive
-    -- ** Request lenses
+    -- * Creating a Request
+      deleteArchive
+    , DeleteArchive
+    -- * Request Lenses
     , daAccountId
-    , daArchiveId
     , daVaultName
+    , daArchiveId
 
-    -- * Response
-    , DeleteArchiveResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , deleteArchiveResponse
+    , DeleteArchiveResponse
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.RestJSON
-import Network.AWS.Glacier.Types
-import qualified GHC.Exts
-
-data DeleteArchive = DeleteArchive
-    { _daAccountId :: Text
-    , _daArchiveId :: Text
-    , _daVaultName :: Text
-    } deriving (Eq, Ord, Read, Show)
+import           Network.AWS.Glacier.Types
+import           Network.AWS.Glacier.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
--- | 'DeleteArchive' constructor.
+-- | Provides options for deleting an archive from an Amazon Glacier vault.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'deleteArchive' smart constructor.
+data DeleteArchive = DeleteArchive'
+    { _daAccountId :: !Text
+    , _daVaultName :: !Text
+    , _daArchiveId :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteArchive' with the minimum fields required to make a request.
 --
--- * 'daAccountId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'daArchiveId' @::@ 'Text'
+-- * 'daAccountId'
 --
--- * 'daVaultName' @::@ 'Text'
+-- * 'daVaultName'
 --
-deleteArchive :: Text -- ^ 'daAccountId'
-              -> Text -- ^ 'daVaultName'
-              -> Text -- ^ 'daArchiveId'
-              -> DeleteArchive
-deleteArchive p1 p2 p3 = DeleteArchive
-    { _daAccountId = p1
-    , _daVaultName = p2
-    , _daArchiveId = p3
+-- * 'daArchiveId'
+deleteArchive
+    :: Text -- ^ 'daAccountId'
+    -> Text -- ^ 'daVaultName'
+    -> Text -- ^ 'daArchiveId'
+    -> DeleteArchive
+deleteArchive pAccountId_ pVaultName_ pArchiveId_ =
+    DeleteArchive'
+    { _daAccountId = pAccountId_
+    , _daVaultName = pVaultName_
+    , _daArchiveId = pArchiveId_
     }
 
--- | The 'AccountId' value is the AWS account ID of the account that owns the vault.
--- You can either specify an AWS account ID or optionally a single apos'-'apos
--- (hyphen), in which case Amazon Glacier uses the AWS account ID associated
--- with the credentials used to sign the request. If you use an account ID, do
--- not include any hyphens (apos-apos) in the ID.
+-- | The 'AccountId' value is the AWS account ID of the account that owns the
+-- vault. You can either specify an AWS account ID or optionally a single
+-- apos'-'apos (hyphen), in which case Amazon Glacier uses the AWS account
+-- ID associated with the credentials used to sign the request. If you use
+-- an account ID, do not include any hyphens (apos-apos) in the ID.
 daAccountId :: Lens' DeleteArchive Text
-daAccountId = lens _daAccountId (\s a -> s { _daAccountId = a })
-
--- | The ID of the archive to delete.
-daArchiveId :: Lens' DeleteArchive Text
-daArchiveId = lens _daArchiveId (\s a -> s { _daArchiveId = a })
+daAccountId = lens _daAccountId (\ s a -> s{_daAccountId = a});
 
 -- | The name of the vault.
 daVaultName :: Lens' DeleteArchive Text
-daVaultName = lens _daVaultName (\s a -> s { _daVaultName = a })
+daVaultName = lens _daVaultName (\ s a -> s{_daVaultName = a});
 
-data DeleteArchiveResponse = DeleteArchiveResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+-- | The ID of the archive to delete.
+daArchiveId :: Lens' DeleteArchive Text
+daArchiveId = lens _daArchiveId (\ s a -> s{_daArchiveId = a});
 
--- | 'DeleteArchiveResponse' constructor.
-deleteArchiveResponse :: DeleteArchiveResponse
-deleteArchiveResponse = DeleteArchiveResponse
+instance AWSRequest DeleteArchive where
+        type Sv DeleteArchive = Glacier
+        type Rs DeleteArchive = DeleteArchiveResponse
+        request = delete
+        response = receiveNull DeleteArchiveResponse'
 
+instance ToHeaders DeleteArchive where
+        toHeaders = const mempty
+
 instance ToPath DeleteArchive where
-    toPath DeleteArchive{..} = mconcat
-        [ "/"
-        , toText _daAccountId
-        , "/vaults/"
-        , toText _daVaultName
-        , "/archives/"
-        , toText _daArchiveId
-        ]
+        toPath DeleteArchive'{..}
+          = mconcat
+              ["/", toBS _daAccountId, "/vaults/",
+               toBS _daVaultName, "/archives/", toBS _daArchiveId]
 
 instance ToQuery DeleteArchive where
-    toQuery = const mempty
-
-instance ToHeaders DeleteArchive
-
-instance ToJSON DeleteArchive where
-    toJSON = const (toJSON Empty)
+        toQuery = const mempty
 
-instance AWSRequest DeleteArchive where
-    type Sv DeleteArchive = Glacier
-    type Rs DeleteArchive = DeleteArchiveResponse
+-- | /See:/ 'deleteArchiveResponse' smart constructor.
+data DeleteArchiveResponse =
+    DeleteArchiveResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = delete
-    response = nullResponse DeleteArchiveResponse
+-- | Creates a value of 'DeleteArchiveResponse' with the minimum fields required to make a request.
+--
+deleteArchiveResponse
+    :: DeleteArchiveResponse
+deleteArchiveResponse = DeleteArchiveResponse'
diff --git a/gen/Network/AWS/Glacier/DeleteVault.hs b/gen/Network/AWS/Glacier/DeleteVault.hs
--- a/gen/Network/AWS/Glacier/DeleteVault.hs
+++ b/gen/Network/AWS/Glacier/DeleteVault.hs
@@ -1,126 +1,131 @@
-{-# 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.Glacier.DeleteVault
--- 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.
-
--- | This operation deletes a vault. Amazon Glacier will delete a vault only if
--- there are no archives in the vault as of the last inventory and there have
--- been no writes to the vault since the last inventory. If either of these
--- conditions is not satisfied, the vault deletion fails (that is, the vault is
--- not removed) and Amazon Glacier returns an error. You can use 'DescribeVault'
--- to return the number of archives in a vault, and you can use <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-initiate-job-post.html Initiate a Job(POST jobs)> to initiate a new inventory retrieval for a vault. The inventory
--- contains the archive IDs you use to delete archives using <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-archive-delete.html Delete Archive(DELETE archive)>.
+-- This operation deletes a vault. Amazon Glacier will delete a vault only
+-- if there are no archives in the vault as of the last inventory and there
+-- have been no writes to the vault since the last inventory. If either of
+-- these conditions is not satisfied, the vault deletion fails (that is,
+-- the vault is not removed) and Amazon Glacier returns an error. You can
+-- use DescribeVault to return the number of archives in a vault, and you
+-- can use
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-initiate-job-post.html Initiate a Job (POST jobs)>
+-- to initiate a new inventory retrieval for a vault. The inventory
+-- contains the archive IDs you use to delete archives using
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-archive-delete.html Delete Archive (DELETE archive)>.
 --
 -- This operation is idempotent.
 --
 -- An AWS account has full permission to perform all operations (actions).
--- However, AWS Identity and Access Management (IAM) users don't have any
--- permissions by default. You must grant them explicit permission to perform
--- specific actions. For more information, see <http://docs.aws.amazon.com/amazonglacier/latest/dev/using-iam-with-amazon-glacier.html Access Control Using AWS Identityand Access Management (IAM)>.
+-- However, AWS Identity and Access Management (IAM) users don\'t have any
+-- permissions by default. You must grant them explicit permission to
+-- perform specific actions. For more information, see
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/using-iam-with-amazon-glacier.html Access Control Using AWS Identity and Access Management (IAM)>.
 --
--- For conceptual information and underlying REST API, go to <http://docs.aws.amazon.com/amazonglacier/latest/dev/deleting-vaults.html Deleting a Vaultin Amazon Glacier> and <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-vault-delete.html Delete Vault > in the /Amazon Glacier Developer Guide/.
+-- For conceptual information and underlying REST API, go to
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/deleting-vaults.html Deleting a Vault in Amazon Glacier>
+-- and
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-vault-delete.html Delete Vault>
+-- in the /Amazon Glacier Developer Guide/.
 --
--- <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-DeleteVault.html>
+-- /See:/ <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-DeleteVault.html AWS API Reference> for DeleteVault.
 module Network.AWS.Glacier.DeleteVault
     (
-    -- * Request
-      DeleteVault
-    -- ** Request constructor
-    , deleteVault
-    -- ** Request lenses
-    , dv1AccountId
-    , dv1VaultName
+    -- * Creating a Request
+      deleteVault
+    , DeleteVault
+    -- * Request Lenses
+    , dAccountId
+    , dVaultName
 
-    -- * Response
-    , DeleteVaultResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , deleteVaultResponse
+    , DeleteVaultResponse
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.RestJSON
-import Network.AWS.Glacier.Types
-import qualified GHC.Exts
-
-data DeleteVault = DeleteVault
-    { _dv1AccountId :: Text
-    , _dv1VaultName :: Text
-    } deriving (Eq, Ord, Read, Show)
+import           Network.AWS.Glacier.Types
+import           Network.AWS.Glacier.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
--- | 'DeleteVault' constructor.
+-- | Provides options for deleting a vault from Amazon Glacier.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'deleteVault' smart constructor.
+data DeleteVault = DeleteVault'
+    { _dAccountId :: !Text
+    , _dVaultName :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteVault' with the minimum fields required to make a request.
 --
--- * 'dv1AccountId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'dv1VaultName' @::@ 'Text'
+-- * 'dAccountId'
 --
-deleteVault :: Text -- ^ 'dv1AccountId'
-            -> Text -- ^ 'dv1VaultName'
-            -> DeleteVault
-deleteVault p1 p2 = DeleteVault
-    { _dv1AccountId = p1
-    , _dv1VaultName = p2
+-- * 'dVaultName'
+deleteVault
+    :: Text -- ^ 'dAccountId'
+    -> Text -- ^ 'dVaultName'
+    -> DeleteVault
+deleteVault pAccountId_ pVaultName_ =
+    DeleteVault'
+    { _dAccountId = pAccountId_
+    , _dVaultName = pVaultName_
     }
 
--- | The 'AccountId' value is the AWS account ID of the account that owns the vault.
--- You can either specify an AWS account ID or optionally a single apos'-'apos
--- (hyphen), in which case Amazon Glacier uses the AWS account ID associated
--- with the credentials used to sign the request. If you use an account ID, do
--- not include any hyphens (apos-apos) in the ID.
-dv1AccountId :: Lens' DeleteVault Text
-dv1AccountId = lens _dv1AccountId (\s a -> s { _dv1AccountId = a })
+-- | The 'AccountId' value is the AWS account ID of the account that owns the
+-- vault. You can either specify an AWS account ID or optionally a single
+-- apos'-'apos (hyphen), in which case Amazon Glacier uses the AWS account
+-- ID associated with the credentials used to sign the request. If you use
+-- an account ID, do not include any hyphens (apos-apos) in the ID.
+dAccountId :: Lens' DeleteVault Text
+dAccountId = lens _dAccountId (\ s a -> s{_dAccountId = a});
 
 -- | The name of the vault.
-dv1VaultName :: Lens' DeleteVault Text
-dv1VaultName = lens _dv1VaultName (\s a -> s { _dv1VaultName = a })
+dVaultName :: Lens' DeleteVault Text
+dVaultName = lens _dVaultName (\ s a -> s{_dVaultName = a});
 
-data DeleteVaultResponse = DeleteVaultResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+instance AWSRequest DeleteVault where
+        type Sv DeleteVault = Glacier
+        type Rs DeleteVault = DeleteVaultResponse
+        request = delete
+        response = receiveNull DeleteVaultResponse'
 
--- | 'DeleteVaultResponse' constructor.
-deleteVaultResponse :: DeleteVaultResponse
-deleteVaultResponse = DeleteVaultResponse
+instance ToHeaders DeleteVault where
+        toHeaders = const mempty
 
 instance ToPath DeleteVault where
-    toPath DeleteVault{..} = mconcat
-        [ "/"
-        , toText _dv1AccountId
-        , "/vaults/"
-        , toText _dv1VaultName
-        ]
+        toPath DeleteVault'{..}
+          = mconcat
+              ["/", toBS _dAccountId, "/vaults/", toBS _dVaultName]
 
 instance ToQuery DeleteVault where
-    toQuery = const mempty
-
-instance ToHeaders DeleteVault
-
-instance ToJSON DeleteVault where
-    toJSON = const (toJSON Empty)
+        toQuery = const mempty
 
-instance AWSRequest DeleteVault where
-    type Sv DeleteVault = Glacier
-    type Rs DeleteVault = DeleteVaultResponse
+-- | /See:/ 'deleteVaultResponse' smart constructor.
+data DeleteVaultResponse =
+    DeleteVaultResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = delete
-    response = nullResponse DeleteVaultResponse
+-- | Creates a value of 'DeleteVaultResponse' with the minimum fields required to make a request.
+--
+deleteVaultResponse
+    :: DeleteVaultResponse
+deleteVaultResponse = DeleteVaultResponse'
diff --git a/gen/Network/AWS/Glacier/DeleteVaultAccessPolicy.hs b/gen/Network/AWS/Glacier/DeleteVaultAccessPolicy.hs
--- a/gen/Network/AWS/Glacier/DeleteVaultAccessPolicy.hs
+++ b/gen/Network/AWS/Glacier/DeleteVaultAccessPolicy.hs
@@ -1,120 +1,119 @@
-{-# 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.Glacier.DeleteVaultAccessPolicy
--- 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.
-
--- | This operation deletes the access policy associated with the specified vault.
--- The operation is eventually consistent—that is, it might take some time for
--- Amazon Glacier to completely remove the access policy, and you might still
--- see the effect of the policy for a short time after you send the delete
--- request.
+-- This operation deletes the access policy associated with the specified
+-- vault. The operation is eventually consistent; that is, it might take
+-- some time for Amazon Glacier to completely remove the access policy, and
+-- you might still see the effect of the policy for a short time after you
+-- send the delete request.
 --
--- This operation is idempotent. You can invoke delete multiple times, even if
--- there is no policy associated with the vault. For more information about
--- vault access policies, see <http://docs.aws.amazon.com/amazonglacier/latest/dev/vault-access-policy.html Amazon Glacier Access Control with Vault AccessPolicies>.
+-- This operation is idempotent. You can invoke delete multiple times, even
+-- if there is no policy associated with the vault. For more information
+-- about vault access policies, see
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/vault-access-policy.html Amazon Glacier Access Control with Vault Access Policies>.
 --
--- <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-DeleteVaultAccessPolicy.html>
+-- /See:/ <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-DeleteVaultAccessPolicy.html AWS API Reference> for DeleteVaultAccessPolicy.
 module Network.AWS.Glacier.DeleteVaultAccessPolicy
     (
-    -- * Request
-      DeleteVaultAccessPolicy
-    -- ** Request constructor
-    , deleteVaultAccessPolicy
-    -- ** Request lenses
+    -- * Creating a Request
+      deleteVaultAccessPolicy
+    , DeleteVaultAccessPolicy
+    -- * Request Lenses
     , dvapAccountId
     , dvapVaultName
 
-    -- * Response
-    , DeleteVaultAccessPolicyResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , deleteVaultAccessPolicyResponse
+    , DeleteVaultAccessPolicyResponse
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.RestJSON
-import Network.AWS.Glacier.Types
-import qualified GHC.Exts
-
-data DeleteVaultAccessPolicy = DeleteVaultAccessPolicy
-    { _dvapAccountId :: Text
-    , _dvapVaultName :: Text
-    } deriving (Eq, Ord, Read, Show)
+import           Network.AWS.Glacier.Types
+import           Network.AWS.Glacier.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
--- | 'DeleteVaultAccessPolicy' constructor.
+-- | DeleteVaultAccessPolicy input.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'deleteVaultAccessPolicy' smart constructor.
+data DeleteVaultAccessPolicy = DeleteVaultAccessPolicy'
+    { _dvapAccountId :: !Text
+    , _dvapVaultName :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteVaultAccessPolicy' with the minimum fields required to make a request.
 --
--- * 'dvapAccountId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'dvapVaultName' @::@ 'Text'
+-- * 'dvapAccountId'
 --
-deleteVaultAccessPolicy :: Text -- ^ 'dvapAccountId'
-                        -> Text -- ^ 'dvapVaultName'
-                        -> DeleteVaultAccessPolicy
-deleteVaultAccessPolicy p1 p2 = DeleteVaultAccessPolicy
-    { _dvapAccountId = p1
-    , _dvapVaultName = p2
+-- * 'dvapVaultName'
+deleteVaultAccessPolicy
+    :: Text -- ^ 'dvapAccountId'
+    -> Text -- ^ 'dvapVaultName'
+    -> DeleteVaultAccessPolicy
+deleteVaultAccessPolicy pAccountId_ pVaultName_ =
+    DeleteVaultAccessPolicy'
+    { _dvapAccountId = pAccountId_
+    , _dvapVaultName = pVaultName_
     }
 
--- | The 'AccountId' value is the AWS account ID of the account that owns the vault.
--- You can either specify an AWS account ID or optionally a single apos'-'apos
--- (hyphen), in which case Amazon Glacier uses the AWS account ID associated
--- with the credentials used to sign the request. If you use an account ID, do
--- not include any hyphens (apos-apos) in the ID.
+-- | The 'AccountId' value is the AWS account ID of the account that owns the
+-- vault. You can either specify an AWS account ID or optionally a single
+-- apos'-'apos (hyphen), in which case Amazon Glacier uses the AWS account
+-- ID associated with the credentials used to sign the request. If you use
+-- an account ID, do not include any hyphens (apos-apos) in the ID.
 dvapAccountId :: Lens' DeleteVaultAccessPolicy Text
-dvapAccountId = lens _dvapAccountId (\s a -> s { _dvapAccountId = a })
+dvapAccountId = lens _dvapAccountId (\ s a -> s{_dvapAccountId = a});
 
 -- | The name of the vault.
 dvapVaultName :: Lens' DeleteVaultAccessPolicy Text
-dvapVaultName = lens _dvapVaultName (\s a -> s { _dvapVaultName = a })
+dvapVaultName = lens _dvapVaultName (\ s a -> s{_dvapVaultName = a});
 
-data DeleteVaultAccessPolicyResponse = DeleteVaultAccessPolicyResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+instance AWSRequest DeleteVaultAccessPolicy where
+        type Sv DeleteVaultAccessPolicy = Glacier
+        type Rs DeleteVaultAccessPolicy =
+             DeleteVaultAccessPolicyResponse
+        request = delete
+        response
+          = receiveNull DeleteVaultAccessPolicyResponse'
 
--- | 'DeleteVaultAccessPolicyResponse' constructor.
-deleteVaultAccessPolicyResponse :: DeleteVaultAccessPolicyResponse
-deleteVaultAccessPolicyResponse = DeleteVaultAccessPolicyResponse
+instance ToHeaders DeleteVaultAccessPolicy where
+        toHeaders = const mempty
 
 instance ToPath DeleteVaultAccessPolicy where
-    toPath DeleteVaultAccessPolicy{..} = mconcat
-        [ "/"
-        , toText _dvapAccountId
-        , "/vaults/"
-        , toText _dvapVaultName
-        , "/access-policy"
-        ]
+        toPath DeleteVaultAccessPolicy'{..}
+          = mconcat
+              ["/", toBS _dvapAccountId, "/vaults/",
+               toBS _dvapVaultName, "/access-policy"]
 
 instance ToQuery DeleteVaultAccessPolicy where
-    toQuery = const mempty
-
-instance ToHeaders DeleteVaultAccessPolicy
-
-instance ToJSON DeleteVaultAccessPolicy where
-    toJSON = const (toJSON Empty)
+        toQuery = const mempty
 
-instance AWSRequest DeleteVaultAccessPolicy where
-    type Sv DeleteVaultAccessPolicy = Glacier
-    type Rs DeleteVaultAccessPolicy = DeleteVaultAccessPolicyResponse
+-- | /See:/ 'deleteVaultAccessPolicyResponse' smart constructor.
+data DeleteVaultAccessPolicyResponse =
+    DeleteVaultAccessPolicyResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = delete
-    response = nullResponse DeleteVaultAccessPolicyResponse
+-- | Creates a value of 'DeleteVaultAccessPolicyResponse' with the minimum fields required to make a request.
+--
+deleteVaultAccessPolicyResponse
+    :: DeleteVaultAccessPolicyResponse
+deleteVaultAccessPolicyResponse = DeleteVaultAccessPolicyResponse'
diff --git a/gen/Network/AWS/Glacier/DeleteVaultNotifications.hs b/gen/Network/AWS/Glacier/DeleteVaultNotifications.hs
--- a/gen/Network/AWS/Glacier/DeleteVaultNotifications.hs
+++ b/gen/Network/AWS/Glacier/DeleteVaultNotifications.hs
@@ -1,124 +1,127 @@
-{-# 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.Glacier.DeleteVaultNotifications
--- 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.
-
--- | This operation deletes the notification configuration set for a vault. The
--- operation is eventually consistent;that is, it might take some time for
--- Amazon Glacier to completely disable the notifications and you might still
--- receive some notifications for a short time after you send the delete
--- request.
+-- This operation deletes the notification configuration set for a vault.
+-- The operation is eventually consistent; that is, it might take some time
+-- for Amazon Glacier to completely disable the notifications and you might
+-- still receive some notifications for a short time after you send the
+-- delete request.
 --
 -- An AWS account has full permission to perform all operations (actions).
--- However, AWS Identity and Access Management (IAM) users don't have any
--- permissions by default. You must grant them explicit permission to perform
--- specific actions. For more information, see <http://docs.aws.amazon.com/latest/dev/using-iam-with-amazon-glacier.html Access Control Using AWS Identityand Access Management (IAM)>.
+-- However, AWS Identity and Access Management (IAM) users don\'t have any
+-- permissions by default. You must grant them explicit permission to
+-- perform specific actions. For more information, see
+-- <http://docs.aws.amazon.com/latest/dev/using-iam-with-amazon-glacier.html Access Control Using AWS Identity and Access Management (IAM)>.
 --
--- For conceptual information and underlying REST API, go to <http://docs.aws.amazon.com/amazonglacier/latest/dev/configuring-notifications.html Configuring VaultNotifications in Amazon Glacier> and <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-vault-notifications-delete.html Delete Vault Notification Configuration >
+-- For conceptual information and underlying REST API, go to
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/configuring-notifications.html Configuring Vault Notifications in Amazon Glacier>
+-- and
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-vault-notifications-delete.html Delete Vault Notification Configuration>
 -- in the Amazon Glacier Developer Guide.
 --
--- <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-DeleteVaultNotifications.html>
+-- /See:/ <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-DeleteVaultNotifications.html AWS API Reference> for DeleteVaultNotifications.
 module Network.AWS.Glacier.DeleteVaultNotifications
     (
-    -- * Request
-      DeleteVaultNotifications
-    -- ** Request constructor
-    , deleteVaultNotifications
-    -- ** Request lenses
+    -- * Creating a Request
+      deleteVaultNotifications
+    , DeleteVaultNotifications
+    -- * Request Lenses
     , dvnAccountId
     , dvnVaultName
 
-    -- * Response
-    , DeleteVaultNotificationsResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , deleteVaultNotificationsResponse
+    , DeleteVaultNotificationsResponse
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.RestJSON
-import Network.AWS.Glacier.Types
-import qualified GHC.Exts
-
-data DeleteVaultNotifications = DeleteVaultNotifications
-    { _dvnAccountId :: Text
-    , _dvnVaultName :: Text
-    } deriving (Eq, Ord, Read, Show)
+import           Network.AWS.Glacier.Types
+import           Network.AWS.Glacier.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
--- | 'DeleteVaultNotifications' constructor.
+-- | Provides options for deleting a vault notification configuration from an
+-- Amazon Glacier vault.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'deleteVaultNotifications' smart constructor.
+data DeleteVaultNotifications = DeleteVaultNotifications'
+    { _dvnAccountId :: !Text
+    , _dvnVaultName :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteVaultNotifications' with the minimum fields required to make a request.
 --
--- * 'dvnAccountId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'dvnVaultName' @::@ 'Text'
+-- * 'dvnAccountId'
 --
-deleteVaultNotifications :: Text -- ^ 'dvnAccountId'
-                         -> Text -- ^ 'dvnVaultName'
-                         -> DeleteVaultNotifications
-deleteVaultNotifications p1 p2 = DeleteVaultNotifications
-    { _dvnAccountId = p1
-    , _dvnVaultName = p2
+-- * 'dvnVaultName'
+deleteVaultNotifications
+    :: Text -- ^ 'dvnAccountId'
+    -> Text -- ^ 'dvnVaultName'
+    -> DeleteVaultNotifications
+deleteVaultNotifications pAccountId_ pVaultName_ =
+    DeleteVaultNotifications'
+    { _dvnAccountId = pAccountId_
+    , _dvnVaultName = pVaultName_
     }
 
--- | The 'AccountId' value is the AWS account ID of the account that owns the vault.
--- You can either specify an AWS account ID or optionally a single apos'-'apos
--- (hyphen), in which case Amazon Glacier uses the AWS account ID associated
--- with the credentials used to sign the request. If you use an account ID, do
--- not include any hyphens (apos-apos) in the ID.
+-- | The 'AccountId' value is the AWS account ID of the account that owns the
+-- vault. You can either specify an AWS account ID or optionally a single
+-- apos'-'apos (hyphen), in which case Amazon Glacier uses the AWS account
+-- ID associated with the credentials used to sign the request. If you use
+-- an account ID, do not include any hyphens (apos-apos) in the ID.
 dvnAccountId :: Lens' DeleteVaultNotifications Text
-dvnAccountId = lens _dvnAccountId (\s a -> s { _dvnAccountId = a })
+dvnAccountId = lens _dvnAccountId (\ s a -> s{_dvnAccountId = a});
 
 -- | The name of the vault.
 dvnVaultName :: Lens' DeleteVaultNotifications Text
-dvnVaultName = lens _dvnVaultName (\s a -> s { _dvnVaultName = a })
+dvnVaultName = lens _dvnVaultName (\ s a -> s{_dvnVaultName = a});
 
-data DeleteVaultNotificationsResponse = DeleteVaultNotificationsResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+instance AWSRequest DeleteVaultNotifications where
+        type Sv DeleteVaultNotifications = Glacier
+        type Rs DeleteVaultNotifications =
+             DeleteVaultNotificationsResponse
+        request = delete
+        response
+          = receiveNull DeleteVaultNotificationsResponse'
 
--- | 'DeleteVaultNotificationsResponse' constructor.
-deleteVaultNotificationsResponse :: DeleteVaultNotificationsResponse
-deleteVaultNotificationsResponse = DeleteVaultNotificationsResponse
+instance ToHeaders DeleteVaultNotifications where
+        toHeaders = const mempty
 
 instance ToPath DeleteVaultNotifications where
-    toPath DeleteVaultNotifications{..} = mconcat
-        [ "/"
-        , toText _dvnAccountId
-        , "/vaults/"
-        , toText _dvnVaultName
-        , "/notification-configuration"
-        ]
+        toPath DeleteVaultNotifications'{..}
+          = mconcat
+              ["/", toBS _dvnAccountId, "/vaults/",
+               toBS _dvnVaultName, "/notification-configuration"]
 
 instance ToQuery DeleteVaultNotifications where
-    toQuery = const mempty
-
-instance ToHeaders DeleteVaultNotifications
-
-instance ToJSON DeleteVaultNotifications where
-    toJSON = const (toJSON Empty)
+        toQuery = const mempty
 
-instance AWSRequest DeleteVaultNotifications where
-    type Sv DeleteVaultNotifications = Glacier
-    type Rs DeleteVaultNotifications = DeleteVaultNotificationsResponse
+-- | /See:/ 'deleteVaultNotificationsResponse' smart constructor.
+data DeleteVaultNotificationsResponse =
+    DeleteVaultNotificationsResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = delete
-    response = nullResponse DeleteVaultNotificationsResponse
+-- | Creates a value of 'DeleteVaultNotificationsResponse' with the minimum fields required to make a request.
+--
+deleteVaultNotificationsResponse
+    :: DeleteVaultNotificationsResponse
+deleteVaultNotificationsResponse = DeleteVaultNotificationsResponse'
diff --git a/gen/Network/AWS/Glacier/DescribeJob.hs b/gen/Network/AWS/Glacier/DescribeJob.hs
--- a/gen/Network/AWS/Glacier/DescribeJob.hs
+++ b/gen/Network/AWS/Glacier/DescribeJob.hs
@@ -1,359 +1,147 @@
-{-# 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.Glacier.DescribeJob
--- 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.
-
--- | This operation returns information about a job you previously initiated,
--- including the job initiation date, the user who initiated the job, the job
--- status code/message and the Amazon SNS topic to notify after Amazon Glacier
--- completes the job. For more information about initiating a job, see 'InitiateJob'.
+-- This operation returns information about a job you previously initiated,
+-- including the job initiation date, the user who initiated the job, the
+-- job status code\/message and the Amazon SNS topic to notify after Amazon
+-- Glacier completes the job. For more information about initiating a job,
+-- see InitiateJob.
 --
--- This operation enables you to check the status of your job. However, it is
--- strongly recommended that you set up an Amazon SNS topic and specify it in
--- your initiate job request so that Amazon Glacier can notify the topic after
--- it completes the job.
+-- This operation enables you to check the status of your job. However, it
+-- is strongly recommended that you set up an Amazon SNS topic and specify
+-- it in your initiate job request so that Amazon Glacier can notify the
+-- topic after it completes the job.
 --
 -- A job ID will not expire for at least 24 hours after Amazon Glacier
 -- completes the job.
 --
 -- An AWS account has full permission to perform all operations (actions).
--- However, AWS Identity and Access Management (IAM) users don't have any
--- permissions by default. You must grant them explicit permission to perform
--- specific actions. For more information, see <http://docs.aws.amazon.com/amazonglacier/latest/dev/using-iam-with-amazon-glacier.html Access Control Using AWS Identityand Access Management (IAM)>.
+-- However, AWS Identity and Access Management (IAM) users don\'t have any
+-- permissions by default. You must grant them explicit permission to
+-- perform specific actions. For more information, see
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/using-iam-with-amazon-glacier.html Access Control Using AWS Identity and Access Management (IAM)>.
 --
--- For information about the underlying REST API, go to <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-describe-job-get.html Working with Archivesin Amazon Glacier> in the /Amazon Glacier Developer Guide/.
+-- For information about the underlying REST API, go to
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-describe-job-get.html Working with Archives in Amazon Glacier>
+-- in the /Amazon Glacier Developer Guide/.
 --
--- <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-DescribeJob.html>
+-- /See:/ <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-DescribeJob.html AWS API Reference> for DescribeJob.
 module Network.AWS.Glacier.DescribeJob
     (
-    -- * Request
-      DescribeJob
-    -- ** Request constructor
-    , describeJob
-    -- ** Request lenses
+    -- * Creating a Request
+      describeJob
+    , DescribeJob
+    -- * Request Lenses
     , djAccountId
-    , djJobId
     , djVaultName
+    , djJobId
 
-    -- * Response
-    , DescribeJobResponse
-    -- ** Response constructor
-    , describeJobResponse
-    -- ** Response lenses
-    , djrAction
-    , djrArchiveId
-    , djrArchiveSHA256TreeHash
-    , djrArchiveSizeInBytes
-    , djrCompleted
-    , djrCompletionDate
-    , djrCreationDate
-    , djrInventoryRetrievalParameters
-    , djrInventorySizeInBytes
-    , djrJobDescription
-    , djrJobId
-    , djrRetrievalByteRange
-    , djrSHA256TreeHash
-    , djrSNSTopic
-    , djrStatusCode
-    , djrStatusMessage
-    , djrVaultARN
+    -- * Destructuring the Response
+    , glacierJobDescription
+    , GlacierJobDescription
+    -- * Response Lenses
+    , gjdArchiveId
+    , gjdSHA256TreeHash
+    , gjdJobId
+    , gjdRetrievalByteRange
+    , gjdInventoryRetrievalParameters
+    , gjdAction
+    , gjdJobDescription
+    , gjdSNSTopic
+    , gjdVaultARN
+    , gjdStatusMessage
+    , gjdArchiveSHA256TreeHash
+    , gjdCreationDate
+    , gjdCompleted
+    , gjdCompletionDate
+    , gjdArchiveSizeInBytes
+    , gjdStatusCode
+    , gjdInventorySizeInBytes
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.RestJSON
-import Network.AWS.Glacier.Types
-import qualified GHC.Exts
-
-data DescribeJob = DescribeJob
-    { _djAccountId :: Text
-    , _djJobId     :: Text
-    , _djVaultName :: Text
-    } deriving (Eq, Ord, Read, Show)
+import           Network.AWS.Glacier.Types
+import           Network.AWS.Glacier.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
--- | 'DescribeJob' constructor.
+-- | Provides options for retrieving a job description.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'describeJob' smart constructor.
+data DescribeJob = DescribeJob'
+    { _djAccountId :: !Text
+    , _djVaultName :: !Text
+    , _djJobId     :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeJob' with the minimum fields required to make a request.
 --
--- * 'djAccountId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'djJobId' @::@ 'Text'
+-- * 'djAccountId'
 --
--- * 'djVaultName' @::@ 'Text'
+-- * 'djVaultName'
 --
-describeJob :: Text -- ^ 'djAccountId'
-            -> Text -- ^ 'djVaultName'
-            -> Text -- ^ 'djJobId'
-            -> DescribeJob
-describeJob p1 p2 p3 = DescribeJob
-    { _djAccountId = p1
-    , _djVaultName = p2
-    , _djJobId     = p3
+-- * 'djJobId'
+describeJob
+    :: Text -- ^ 'djAccountId'
+    -> Text -- ^ 'djVaultName'
+    -> Text -- ^ 'djJobId'
+    -> DescribeJob
+describeJob pAccountId_ pVaultName_ pJobId_ =
+    DescribeJob'
+    { _djAccountId = pAccountId_
+    , _djVaultName = pVaultName_
+    , _djJobId = pJobId_
     }
 
--- | The 'AccountId' value is the AWS account ID of the account that owns the vault.
--- You can either specify an AWS account ID or optionally a single apos'-'apos
--- (hyphen), in which case Amazon Glacier uses the AWS account ID associated
--- with the credentials used to sign the request. If you use an account ID, do
--- not include any hyphens (apos-apos) in the ID.
+-- | The 'AccountId' value is the AWS account ID of the account that owns the
+-- vault. You can either specify an AWS account ID or optionally a single
+-- apos'-'apos (hyphen), in which case Amazon Glacier uses the AWS account
+-- ID associated with the credentials used to sign the request. If you use
+-- an account ID, do not include any hyphens (apos-apos) in the ID.
 djAccountId :: Lens' DescribeJob Text
-djAccountId = lens _djAccountId (\s a -> s { _djAccountId = a })
-
--- | The ID of the job to describe.
-djJobId :: Lens' DescribeJob Text
-djJobId = lens _djJobId (\s a -> s { _djJobId = a })
+djAccountId = lens _djAccountId (\ s a -> s{_djAccountId = a});
 
 -- | The name of the vault.
 djVaultName :: Lens' DescribeJob Text
-djVaultName = lens _djVaultName (\s a -> s { _djVaultName = a })
-
-data DescribeJobResponse = DescribeJobResponse
-    { _djrAction                       :: Maybe ActionCode
-    , _djrArchiveId                    :: Maybe Text
-    , _djrArchiveSHA256TreeHash        :: Maybe Text
-    , _djrArchiveSizeInBytes           :: Maybe Integer
-    , _djrCompleted                    :: Maybe Bool
-    , _djrCompletionDate               :: Maybe Text
-    , _djrCreationDate                 :: Maybe Text
-    , _djrInventoryRetrievalParameters :: Maybe InventoryRetrievalJobDescription
-    , _djrInventorySizeInBytes         :: Maybe Integer
-    , _djrJobDescription               :: Maybe Text
-    , _djrJobId                        :: Maybe Text
-    , _djrRetrievalByteRange           :: Maybe Text
-    , _djrSHA256TreeHash               :: Maybe Text
-    , _djrSNSTopic                     :: Maybe Text
-    , _djrStatusCode                   :: Maybe StatusCode
-    , _djrStatusMessage                :: Maybe Text
-    , _djrVaultARN                     :: Maybe Text
-    } deriving (Eq, Read, Show)
-
--- | 'DescribeJobResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'djrAction' @::@ 'Maybe' 'ActionCode'
---
--- * 'djrArchiveId' @::@ 'Maybe' 'Text'
---
--- * 'djrArchiveSHA256TreeHash' @::@ 'Maybe' 'Text'
---
--- * 'djrArchiveSizeInBytes' @::@ 'Maybe' 'Integer'
---
--- * 'djrCompleted' @::@ 'Maybe' 'Bool'
---
--- * 'djrCompletionDate' @::@ 'Maybe' 'Text'
---
--- * 'djrCreationDate' @::@ 'Maybe' 'Text'
---
--- * 'djrInventoryRetrievalParameters' @::@ 'Maybe' 'InventoryRetrievalJobDescription'
---
--- * 'djrInventorySizeInBytes' @::@ 'Maybe' 'Integer'
---
--- * 'djrJobDescription' @::@ 'Maybe' 'Text'
---
--- * 'djrJobId' @::@ 'Maybe' 'Text'
---
--- * 'djrRetrievalByteRange' @::@ 'Maybe' 'Text'
---
--- * 'djrSHA256TreeHash' @::@ 'Maybe' 'Text'
---
--- * 'djrSNSTopic' @::@ 'Maybe' 'Text'
---
--- * 'djrStatusCode' @::@ 'Maybe' 'StatusCode'
---
--- * 'djrStatusMessage' @::@ 'Maybe' 'Text'
---
--- * 'djrVaultARN' @::@ 'Maybe' 'Text'
---
-describeJobResponse :: DescribeJobResponse
-describeJobResponse = DescribeJobResponse
-    { _djrJobId                        = Nothing
-    , _djrJobDescription               = Nothing
-    , _djrAction                       = Nothing
-    , _djrArchiveId                    = Nothing
-    , _djrVaultARN                     = Nothing
-    , _djrCreationDate                 = Nothing
-    , _djrCompleted                    = Nothing
-    , _djrStatusCode                   = Nothing
-    , _djrStatusMessage                = Nothing
-    , _djrArchiveSizeInBytes           = Nothing
-    , _djrInventorySizeInBytes         = Nothing
-    , _djrSNSTopic                     = Nothing
-    , _djrCompletionDate               = Nothing
-    , _djrSHA256TreeHash               = Nothing
-    , _djrArchiveSHA256TreeHash        = Nothing
-    , _djrRetrievalByteRange           = Nothing
-    , _djrInventoryRetrievalParameters = Nothing
-    }
-
--- | The job type. It is either ArchiveRetrieval or InventoryRetrieval.
-djrAction :: Lens' DescribeJobResponse (Maybe ActionCode)
-djrAction = lens _djrAction (\s a -> s { _djrAction = a })
-
--- | For an ArchiveRetrieval job, this is the archive ID requested for download.
--- Otherwise, this field is null.
-djrArchiveId :: Lens' DescribeJobResponse (Maybe Text)
-djrArchiveId = lens _djrArchiveId (\s a -> s { _djrArchiveId = a })
-
--- | The SHA256 tree hash of the entire archive for an archive retrieval. For
--- inventory retrieval jobs, this field is null.
-djrArchiveSHA256TreeHash :: Lens' DescribeJobResponse (Maybe Text)
-djrArchiveSHA256TreeHash =
-    lens _djrArchiveSHA256TreeHash
-        (\s a -> s { _djrArchiveSHA256TreeHash = a })
-
--- | For an ArchiveRetrieval job, this is the size in bytes of the archive being
--- requested for download. For the InventoryRetrieval job, the value is null.
-djrArchiveSizeInBytes :: Lens' DescribeJobResponse (Maybe Integer)
-djrArchiveSizeInBytes =
-    lens _djrArchiveSizeInBytes (\s a -> s { _djrArchiveSizeInBytes = a })
-
--- | The job status. When a job is completed, you get the job's output.
-djrCompleted :: Lens' DescribeJobResponse (Maybe Bool)
-djrCompleted = lens _djrCompleted (\s a -> s { _djrCompleted = a })
-
--- | The UTC time that the archive retrieval request completed. While the job is
--- in progress, the value will be null.
-djrCompletionDate :: Lens' DescribeJobResponse (Maybe Text)
-djrCompletionDate =
-    lens _djrCompletionDate (\s a -> s { _djrCompletionDate = a })
-
--- | The UTC date when the job was created. A string representation of ISO 8601
--- date format, for example, "2012-03-20T17:03:43.221Z".
-djrCreationDate :: Lens' DescribeJobResponse (Maybe Text)
-djrCreationDate = lens _djrCreationDate (\s a -> s { _djrCreationDate = a })
-
--- | Parameters used for range inventory retrieval.
-djrInventoryRetrievalParameters :: Lens' DescribeJobResponse (Maybe InventoryRetrievalJobDescription)
-djrInventoryRetrievalParameters =
-    lens _djrInventoryRetrievalParameters
-        (\s a -> s { _djrInventoryRetrievalParameters = a })
-
--- | For an InventoryRetrieval job, this is the size in bytes of the inventory
--- requested for download. For the ArchiveRetrieval job, the value is null.
-djrInventorySizeInBytes :: Lens' DescribeJobResponse (Maybe Integer)
-djrInventorySizeInBytes =
-    lens _djrInventorySizeInBytes (\s a -> s { _djrInventorySizeInBytes = a })
-
--- | The job description you provided when you initiated the job.
-djrJobDescription :: Lens' DescribeJobResponse (Maybe Text)
-djrJobDescription =
-    lens _djrJobDescription (\s a -> s { _djrJobDescription = a })
-
--- | An opaque string that identifies an Amazon Glacier job.
-djrJobId :: Lens' DescribeJobResponse (Maybe Text)
-djrJobId = lens _djrJobId (\s a -> s { _djrJobId = a })
-
--- | The retrieved byte range for archive retrieval jobs in the form "/StartByteValue/-/EndByteValue/" If no range was specified in the archive retrieval, then the
--- whole archive is retrieved and /StartByteValue/ equals 0 and /EndByteValue/
--- equals the size of the archive minus 1. For inventory retrieval jobs this
--- field is null.
-djrRetrievalByteRange :: Lens' DescribeJobResponse (Maybe Text)
-djrRetrievalByteRange =
-    lens _djrRetrievalByteRange (\s a -> s { _djrRetrievalByteRange = a })
-
--- | For an ArchiveRetrieval job, it is the checksum of the archive. Otherwise,
--- the value is null.
---
--- The SHA256 tree hash value for the requested range of an archive. If the
--- Initiate a Job request for an archive specified a tree-hash aligned range,
--- then this field returns a value.
---
--- For the specific case when the whole archive is retrieved, this value is
--- the same as the ArchiveSHA256TreeHash value.
---
--- This field is null in the following situations:  Archive retrieval jobs
--- that specify a range that is not tree-hash aligned.
---
--- Archival jobs that specify a range that is equal to the whole archive and
--- the job status is InProgress.
---
--- Inventory jobs.
---
---
-djrSHA256TreeHash :: Lens' DescribeJobResponse (Maybe Text)
-djrSHA256TreeHash =
-    lens _djrSHA256TreeHash (\s a -> s { _djrSHA256TreeHash = a })
-
--- | An Amazon Simple Notification Service (Amazon SNS) topic that receives
--- notification.
-djrSNSTopic :: Lens' DescribeJobResponse (Maybe Text)
-djrSNSTopic = lens _djrSNSTopic (\s a -> s { _djrSNSTopic = a })
+djVaultName = lens _djVaultName (\ s a -> s{_djVaultName = a});
 
--- | The status code can be InProgress, Succeeded, or Failed, and indicates the
--- status of the job.
-djrStatusCode :: Lens' DescribeJobResponse (Maybe StatusCode)
-djrStatusCode = lens _djrStatusCode (\s a -> s { _djrStatusCode = a })
+-- | The ID of the job to describe.
+djJobId :: Lens' DescribeJob Text
+djJobId = lens _djJobId (\ s a -> s{_djJobId = a});
 
--- | A friendly message that describes the job status.
-djrStatusMessage :: Lens' DescribeJobResponse (Maybe Text)
-djrStatusMessage = lens _djrStatusMessage (\s a -> s { _djrStatusMessage = a })
+instance AWSRequest DescribeJob where
+        type Sv DescribeJob = Glacier
+        type Rs DescribeJob = GlacierJobDescription
+        request = get
+        response = receiveJSON (\ s h x -> eitherParseJSON x)
 
--- | The Amazon Resource Name (ARN) of the vault from which the archive retrieval
--- was requested.
-djrVaultARN :: Lens' DescribeJobResponse (Maybe Text)
-djrVaultARN = lens _djrVaultARN (\s a -> s { _djrVaultARN = a })
+instance ToHeaders DescribeJob where
+        toHeaders = const mempty
 
 instance ToPath DescribeJob where
-    toPath DescribeJob{..} = mconcat
-        [ "/"
-        , toText _djAccountId
-        , "/vaults/"
-        , toText _djVaultName
-        , "/jobs/"
-        , toText _djJobId
-        ]
+        toPath DescribeJob'{..}
+          = mconcat
+              ["/", toBS _djAccountId, "/vaults/",
+               toBS _djVaultName, "/jobs/", toBS _djJobId]
 
 instance ToQuery DescribeJob where
-    toQuery = const mempty
-
-instance ToHeaders DescribeJob
-
-instance ToJSON DescribeJob where
-    toJSON = const (toJSON Empty)
-
-instance AWSRequest DescribeJob where
-    type Sv DescribeJob = Glacier
-    type Rs DescribeJob = DescribeJobResponse
-
-    request  = get
-    response = jsonResponse
-
-instance FromJSON DescribeJobResponse where
-    parseJSON = withObject "DescribeJobResponse" $ \o -> DescribeJobResponse
-        <$> o .:? "Action"
-        <*> o .:? "ArchiveId"
-        <*> o .:? "ArchiveSHA256TreeHash"
-        <*> o .:? "ArchiveSizeInBytes"
-        <*> o .:? "Completed"
-        <*> o .:? "CompletionDate"
-        <*> o .:? "CreationDate"
-        <*> o .:? "InventoryRetrievalParameters"
-        <*> o .:? "InventorySizeInBytes"
-        <*> o .:? "JobDescription"
-        <*> o .:? "JobId"
-        <*> o .:? "RetrievalByteRange"
-        <*> o .:? "SHA256TreeHash"
-        <*> o .:? "SNSTopic"
-        <*> o .:? "StatusCode"
-        <*> o .:? "StatusMessage"
-        <*> o .:? "VaultARN"
+        toQuery = const mempty
diff --git a/gen/Network/AWS/Glacier/DescribeVault.hs b/gen/Network/AWS/Glacier/DescribeVault.hs
--- a/gen/Network/AWS/Glacier/DescribeVault.hs
+++ b/gen/Network/AWS/Glacier/DescribeVault.hs
@@ -1,203 +1,126 @@
-{-# 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.Glacier.DescribeVault
--- 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.
-
--- | This operation returns information about a vault, including the vault's
--- Amazon Resource Name (ARN), the date the vault was created, the number of
--- archives it contains, and the total size of all the archives in the vault.
--- The number of archives and their total size are as of the last inventory
--- generation. This means that if you add or remove an archive from a vault, and
--- then immediately use Describe Vault, the change in contents will not be
--- immediately reflected. If you want to retrieve the latest inventory of the
--- vault, use 'InitiateJob'. Amazon Glacier generates vault inventories
--- approximately daily. For more information, see <http://docs.aws.amazon.com/amazonglacier/latest/dev/vault-inventory.html Downloading a Vault Inventoryin Amazon Glacier>.
+-- This operation returns information about a vault, including the vault\'s
+-- Amazon Resource Name (ARN), the date the vault was created, the number
+-- of archives it contains, and the total size of all the archives in the
+-- vault. The number of archives and their total size are as of the last
+-- inventory generation. This means that if you add or remove an archive
+-- from a vault, and then immediately use Describe Vault, the change in
+-- contents will not be immediately reflected. If you want to retrieve the
+-- latest inventory of the vault, use InitiateJob. Amazon Glacier generates
+-- vault inventories approximately daily. For more information, see
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/vault-inventory.html Downloading a Vault Inventory in Amazon Glacier>.
 --
 -- An AWS account has full permission to perform all operations (actions).
--- However, AWS Identity and Access Management (IAM) users don't have any
--- permissions by default. You must grant them explicit permission to perform
--- specific actions. For more information, see <http://docs.aws.amazon.com/amazonglacier/latest/dev/using-iam-with-amazon-glacier.html Access Control Using AWS Identityand Access Management (IAM)>.
+-- However, AWS Identity and Access Management (IAM) users don\'t have any
+-- permissions by default. You must grant them explicit permission to
+-- perform specific actions. For more information, see
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/using-iam-with-amazon-glacier.html Access Control Using AWS Identity and Access Management (IAM)>.
 --
--- For conceptual information and underlying REST API, go to <http://docs.aws.amazon.com/amazonglacier/latest/dev/retrieving-vault-info.html Retrieving VaultMetadata in Amazon Glacier> and <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-vault-get.html Describe Vault > in the /Amazon GlacierDeveloper Guide/.
+-- For conceptual information and underlying REST API, go to
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/retrieving-vault-info.html Retrieving Vault Metadata in Amazon Glacier>
+-- and
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-vault-get.html Describe Vault>
+-- in the /Amazon Glacier Developer Guide/.
 --
--- <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-DescribeVault.html>
+-- /See:/ <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-DescribeVault.html AWS API Reference> for DescribeVault.
 module Network.AWS.Glacier.DescribeVault
     (
-    -- * Request
-      DescribeVault
-    -- ** Request constructor
-    , describeVault
-    -- ** Request lenses
+    -- * Creating a Request
+      describeVault
+    , DescribeVault
+    -- * Request Lenses
     , dvAccountId
     , dvVaultName
 
-    -- * Response
-    , DescribeVaultResponse
-    -- ** Response constructor
-    , describeVaultResponse
-    -- ** Response lenses
-    , dvrCreationDate
-    , dvrLastInventoryDate
-    , dvrNumberOfArchives
-    , dvrSizeInBytes
-    , dvrVaultARN
-    , dvrVaultName
+    -- * Destructuring the Response
+    , describeVaultOutput
+    , DescribeVaultOutput
+    -- * Response Lenses
+    , dvoVaultName
+    , dvoSizeInBytes
+    , dvoLastInventoryDate
+    , dvoVaultARN
+    , dvoCreationDate
+    , dvoNumberOfArchives
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.RestJSON
-import Network.AWS.Glacier.Types
-import qualified GHC.Exts
-
-data DescribeVault = DescribeVault
-    { _dvAccountId :: Text
-    , _dvVaultName :: Text
-    } deriving (Eq, Ord, Read, Show)
+import           Network.AWS.Glacier.Types
+import           Network.AWS.Glacier.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
--- | 'DescribeVault' constructor.
+-- | Provides options for retrieving metadata for a specific vault in Amazon
+-- Glacier.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'describeVault' smart constructor.
+data DescribeVault = DescribeVault'
+    { _dvAccountId :: !Text
+    , _dvVaultName :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeVault' with the minimum fields required to make a request.
 --
--- * 'dvAccountId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'dvVaultName' @::@ 'Text'
+-- * 'dvAccountId'
 --
-describeVault :: Text -- ^ 'dvAccountId'
-              -> Text -- ^ 'dvVaultName'
-              -> DescribeVault
-describeVault p1 p2 = DescribeVault
-    { _dvAccountId = p1
-    , _dvVaultName = p2
+-- * 'dvVaultName'
+describeVault
+    :: Text -- ^ 'dvAccountId'
+    -> Text -- ^ 'dvVaultName'
+    -> DescribeVault
+describeVault pAccountId_ pVaultName_ =
+    DescribeVault'
+    { _dvAccountId = pAccountId_
+    , _dvVaultName = pVaultName_
     }
 
--- | The 'AccountId' value is the AWS account ID of the account that owns the vault.
--- You can either specify an AWS account ID or optionally a single apos'-'apos
--- (hyphen), in which case Amazon Glacier uses the AWS account ID associated
--- with the credentials used to sign the request. If you use an account ID, do
--- not include any hyphens (apos-apos) in the ID.
+-- | The 'AccountId' value is the AWS account ID of the account that owns the
+-- vault. You can either specify an AWS account ID or optionally a single
+-- apos'-'apos (hyphen), in which case Amazon Glacier uses the AWS account
+-- ID associated with the credentials used to sign the request. If you use
+-- an account ID, do not include any hyphens (apos-apos) in the ID.
 dvAccountId :: Lens' DescribeVault Text
-dvAccountId = lens _dvAccountId (\s a -> s { _dvAccountId = a })
+dvAccountId = lens _dvAccountId (\ s a -> s{_dvAccountId = a});
 
 -- | The name of the vault.
 dvVaultName :: Lens' DescribeVault Text
-dvVaultName = lens _dvVaultName (\s a -> s { _dvVaultName = a })
-
-data DescribeVaultResponse = DescribeVaultResponse
-    { _dvrCreationDate      :: Maybe Text
-    , _dvrLastInventoryDate :: Maybe Text
-    , _dvrNumberOfArchives  :: Maybe Integer
-    , _dvrSizeInBytes       :: Maybe Integer
-    , _dvrVaultARN          :: Maybe Text
-    , _dvrVaultName         :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'DescribeVaultResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'dvrCreationDate' @::@ 'Maybe' 'Text'
---
--- * 'dvrLastInventoryDate' @::@ 'Maybe' 'Text'
---
--- * 'dvrNumberOfArchives' @::@ 'Maybe' 'Integer'
---
--- * 'dvrSizeInBytes' @::@ 'Maybe' 'Integer'
---
--- * 'dvrVaultARN' @::@ 'Maybe' 'Text'
---
--- * 'dvrVaultName' @::@ 'Maybe' 'Text'
---
-describeVaultResponse :: DescribeVaultResponse
-describeVaultResponse = DescribeVaultResponse
-    { _dvrVaultARN          = Nothing
-    , _dvrVaultName         = Nothing
-    , _dvrCreationDate      = Nothing
-    , _dvrLastInventoryDate = Nothing
-    , _dvrNumberOfArchives  = Nothing
-    , _dvrSizeInBytes       = Nothing
-    }
-
--- | The UTC date when the vault was created. A string representation of ISO 8601
--- date format, for example, "2012-03-20T17:03:43.221Z".
-dvrCreationDate :: Lens' DescribeVaultResponse (Maybe Text)
-dvrCreationDate = lens _dvrCreationDate (\s a -> s { _dvrCreationDate = a })
-
--- | The UTC date when Amazon Glacier completed the last vault inventory. A string
--- representation of ISO 8601 date format, for example,
--- "2012-03-20T17:03:43.221Z".
-dvrLastInventoryDate :: Lens' DescribeVaultResponse (Maybe Text)
-dvrLastInventoryDate =
-    lens _dvrLastInventoryDate (\s a -> s { _dvrLastInventoryDate = a })
-
--- | The number of archives in the vault as of the last inventory date. This field
--- will return 'null' if an inventory has not yet run on the vault, for example,
--- if you just created the vault.
-dvrNumberOfArchives :: Lens' DescribeVaultResponse (Maybe Integer)
-dvrNumberOfArchives =
-    lens _dvrNumberOfArchives (\s a -> s { _dvrNumberOfArchives = a })
-
--- | Total size, in bytes, of the archives in the vault as of the last inventory
--- date. This field will return null if an inventory has not yet run on the
--- vault, for example, if you just created the vault.
-dvrSizeInBytes :: Lens' DescribeVaultResponse (Maybe Integer)
-dvrSizeInBytes = lens _dvrSizeInBytes (\s a -> s { _dvrSizeInBytes = a })
+dvVaultName = lens _dvVaultName (\ s a -> s{_dvVaultName = a});
 
--- | The Amazon Resource Name (ARN) of the vault.
-dvrVaultARN :: Lens' DescribeVaultResponse (Maybe Text)
-dvrVaultARN = lens _dvrVaultARN (\s a -> s { _dvrVaultARN = a })
+instance AWSRequest DescribeVault where
+        type Sv DescribeVault = Glacier
+        type Rs DescribeVault = DescribeVaultOutput
+        request = get
+        response = receiveJSON (\ s h x -> eitherParseJSON x)
 
--- | The name of the vault.
-dvrVaultName :: Lens' DescribeVaultResponse (Maybe Text)
-dvrVaultName = lens _dvrVaultName (\s a -> s { _dvrVaultName = a })
+instance ToHeaders DescribeVault where
+        toHeaders = const mempty
 
 instance ToPath DescribeVault where
-    toPath DescribeVault{..} = mconcat
-        [ "/"
-        , toText _dvAccountId
-        , "/vaults/"
-        , toText _dvVaultName
-        ]
+        toPath DescribeVault'{..}
+          = mconcat
+              ["/", toBS _dvAccountId, "/vaults/",
+               toBS _dvVaultName]
 
 instance ToQuery DescribeVault where
-    toQuery = const mempty
-
-instance ToHeaders DescribeVault
-
-instance ToJSON DescribeVault where
-    toJSON = const (toJSON Empty)
-
-instance AWSRequest DescribeVault where
-    type Sv DescribeVault = Glacier
-    type Rs DescribeVault = DescribeVaultResponse
-
-    request  = get
-    response = jsonResponse
-
-instance FromJSON DescribeVaultResponse where
-    parseJSON = withObject "DescribeVaultResponse" $ \o -> DescribeVaultResponse
-        <$> o .:? "CreationDate"
-        <*> o .:? "LastInventoryDate"
-        <*> o .:? "NumberOfArchives"
-        <*> o .:? "SizeInBytes"
-        <*> o .:? "VaultARN"
-        <*> o .:? "VaultName"
+        toQuery = const mempty
diff --git a/gen/Network/AWS/Glacier/GetDataRetrievalPolicy.hs b/gen/Network/AWS/Glacier/GetDataRetrievalPolicy.hs
--- a/gen/Network/AWS/Glacier/GetDataRetrievalPolicy.hs
+++ b/gen/Network/AWS/Glacier/GetDataRetrievalPolicy.hs
@@ -1,121 +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.Glacier.GetDataRetrievalPolicy
--- 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.
-
--- | This operation returns the current data retrieval policy for the account and
--- region specified in the GET request. For more information about data
--- retrieval policies, see <http://docs.aws.amazon.com/amazonglacier/latest/dev/data-retrieval-policy.html Amazon Glacier Data Retrieval Policies>.
+-- This operation returns the current data retrieval policy for the account
+-- and region specified in the GET request. For more information about data
+-- retrieval policies, see
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/data-retrieval-policy.html Amazon Glacier Data Retrieval Policies>.
 --
--- <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-GetDataRetrievalPolicy.html>
+-- /See:/ <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-GetDataRetrievalPolicy.html AWS API Reference> for GetDataRetrievalPolicy.
 module Network.AWS.Glacier.GetDataRetrievalPolicy
     (
-    -- * Request
-      GetDataRetrievalPolicy
-    -- ** Request constructor
-    , getDataRetrievalPolicy
-    -- ** Request lenses
+    -- * Creating a Request
+      getDataRetrievalPolicy
+    , GetDataRetrievalPolicy
+    -- * Request Lenses
     , gdrpAccountId
 
-    -- * Response
-    , GetDataRetrievalPolicyResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , getDataRetrievalPolicyResponse
-    -- ** Response lenses
-    , gdrprPolicy
+    , GetDataRetrievalPolicyResponse
+    -- * Response Lenses
+    , gdrprsPolicy
+    , gdrprsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.RestJSON
-import Network.AWS.Glacier.Types
-import qualified GHC.Exts
+import           Network.AWS.Glacier.Types
+import           Network.AWS.Glacier.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-newtype GetDataRetrievalPolicy = GetDataRetrievalPolicy
+-- | Input for GetDataRetrievalPolicy.
+--
+-- /See:/ 'getDataRetrievalPolicy' smart constructor.
+newtype GetDataRetrievalPolicy = GetDataRetrievalPolicy'
     { _gdrpAccountId :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'GetDataRetrievalPolicy' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'GetDataRetrievalPolicy' with the minimum fields required to make a request.
 --
--- * 'gdrpAccountId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-getDataRetrievalPolicy :: Text -- ^ 'gdrpAccountId'
-                       -> GetDataRetrievalPolicy
-getDataRetrievalPolicy p1 = GetDataRetrievalPolicy
-    { _gdrpAccountId = p1
+-- * 'gdrpAccountId'
+getDataRetrievalPolicy
+    :: Text -- ^ 'gdrpAccountId'
+    -> GetDataRetrievalPolicy
+getDataRetrievalPolicy pAccountId_ =
+    GetDataRetrievalPolicy'
+    { _gdrpAccountId = pAccountId_
     }
 
--- | The 'AccountId' value is the AWS account ID. This value must match the AWS
--- account ID associated with the credentials used to sign the request. You can
--- either specify an AWS account ID or optionally a single apos'-'apos (hyphen),
--- in which case Amazon Glacier uses the AWS account ID associated with the
--- credentials used to sign the request. If you specify your Account ID, do not
--- include any hyphens (apos-apos) in the ID.
+-- | The 'AccountId' value is the AWS account ID. This value must match the
+-- AWS account ID associated with the credentials used to sign the request.
+-- You can either specify an AWS account ID or optionally a single
+-- apos'-'apos (hyphen), in which case Amazon Glacier uses the AWS account
+-- ID associated with the credentials used to sign the request. If you
+-- specify your account ID, do not include any hyphens (apos-apos) in the
+-- ID.
 gdrpAccountId :: Lens' GetDataRetrievalPolicy Text
-gdrpAccountId = lens _gdrpAccountId (\s a -> s { _gdrpAccountId = a })
-
-newtype GetDataRetrievalPolicyResponse = GetDataRetrievalPolicyResponse
-    { _gdrprPolicy :: Maybe DataRetrievalPolicy
-    } deriving (Eq, Read, Show)
+gdrpAccountId = lens _gdrpAccountId (\ s a -> s{_gdrpAccountId = a});
 
--- | 'GetDataRetrievalPolicyResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'gdrprPolicy' @::@ 'Maybe' 'DataRetrievalPolicy'
---
-getDataRetrievalPolicyResponse :: GetDataRetrievalPolicyResponse
-getDataRetrievalPolicyResponse = GetDataRetrievalPolicyResponse
-    { _gdrprPolicy = Nothing
-    }
+instance AWSRequest GetDataRetrievalPolicy where
+        type Sv GetDataRetrievalPolicy = Glacier
+        type Rs GetDataRetrievalPolicy =
+             GetDataRetrievalPolicyResponse
+        request = get
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetDataRetrievalPolicyResponse' <$>
+                   (x .?> "Policy") <*> (pure (fromEnum s)))
 
--- | Contains the returned data retrieval policy in JSON format.
-gdrprPolicy :: Lens' GetDataRetrievalPolicyResponse (Maybe DataRetrievalPolicy)
-gdrprPolicy = lens _gdrprPolicy (\s a -> s { _gdrprPolicy = a })
+instance ToHeaders GetDataRetrievalPolicy where
+        toHeaders = const mempty
 
 instance ToPath GetDataRetrievalPolicy where
-    toPath GetDataRetrievalPolicy{..} = mconcat
-        [ "/"
-        , toText _gdrpAccountId
-        , "/policies/data-retrieval"
-        ]
+        toPath GetDataRetrievalPolicy'{..}
+          = mconcat
+              ["/", toBS _gdrpAccountId,
+               "/policies/data-retrieval"]
 
 instance ToQuery GetDataRetrievalPolicy where
-    toQuery = const mempty
-
-instance ToHeaders GetDataRetrievalPolicy
+        toQuery = const mempty
 
-instance ToJSON GetDataRetrievalPolicy where
-    toJSON = const (toJSON Empty)
+-- | Contains the Amazon Glacier response to the 'GetDataRetrievalPolicy'
+-- request.
+--
+-- /See:/ 'getDataRetrievalPolicyResponse' smart constructor.
+data GetDataRetrievalPolicyResponse = GetDataRetrievalPolicyResponse'
+    { _gdrprsPolicy :: !(Maybe DataRetrievalPolicy)
+    , _gdrprsStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest GetDataRetrievalPolicy where
-    type Sv GetDataRetrievalPolicy = Glacier
-    type Rs GetDataRetrievalPolicy = GetDataRetrievalPolicyResponse
+-- | Creates a value of 'GetDataRetrievalPolicyResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gdrprsPolicy'
+--
+-- * 'gdrprsStatus'
+getDataRetrievalPolicyResponse
+    :: Int -- ^ 'gdrprsStatus'
+    -> GetDataRetrievalPolicyResponse
+getDataRetrievalPolicyResponse pStatus_ =
+    GetDataRetrievalPolicyResponse'
+    { _gdrprsPolicy = Nothing
+    , _gdrprsStatus = pStatus_
+    }
 
-    request  = get
-    response = jsonResponse
+-- | Contains the returned data retrieval policy in JSON format.
+gdrprsPolicy :: Lens' GetDataRetrievalPolicyResponse (Maybe DataRetrievalPolicy)
+gdrprsPolicy = lens _gdrprsPolicy (\ s a -> s{_gdrprsPolicy = a});
 
-instance FromJSON GetDataRetrievalPolicyResponse where
-    parseJSON = withObject "GetDataRetrievalPolicyResponse" $ \o -> GetDataRetrievalPolicyResponse
-        <$> o .:? "Policy"
+-- | The response status code.
+gdrprsStatus :: Lens' GetDataRetrievalPolicyResponse Int
+gdrprsStatus = lens _gdrprsStatus (\ s a -> s{_gdrprsStatus = a});
diff --git a/gen/Network/AWS/Glacier/GetJobOutput.hs b/gen/Network/AWS/Glacier/GetJobOutput.hs
--- a/gen/Network/AWS/Glacier/GetJobOutput.hs
+++ b/gen/Network/AWS/Glacier/GetJobOutput.hs
@@ -1,271 +1,281 @@
-{-# 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.Glacier.GetJobOutput
--- 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.
-
--- | This operation downloads the output of the job you initiated using 'InitiateJob'
--- . Depending on the job type you specified when you initiated the job, the
--- output will be either the content of an archive or a vault inventory.
+-- This operation downloads the output of the job you initiated using
+-- InitiateJob. Depending on the job type you specified when you initiated
+-- the job, the output will be either the content of an archive or a vault
+-- inventory.
 --
 -- A job ID will not expire for at least 24 hours after Amazon Glacier
--- completes the job. That is, you can download the job output within the 24
--- hours period after Amazon Glacier completes the job.
+-- completes the job. That is, you can download the job output within the
+-- 24 hours period after Amazon Glacier completes the job.
 --
--- If the job output is large, then you can use the 'Range' request header to
--- retrieve a portion of the output. This allows you to download the entire
--- output in smaller chunks of bytes. For example, suppose you have 1 GB of job
--- output you want to download and you decide to download 128 MB chunks of data
--- at a time, which is a total of eight Get Job Output requests. You use the
--- following process to download the job output:
+-- If the job output is large, then you can use the 'Range' request header
+-- to retrieve a portion of the output. This allows you to download the
+-- entire output in smaller chunks of bytes. For example, suppose you have
+-- 1 GB of job output you want to download and you decide to download 128
+-- MB chunks of data at a time, which is a total of eight Get Job Output
+-- requests. You use the following process to download the job output:
 --
--- Download a 128 MB chunk of output by specifying the appropriate byte range
--- using the 'Range' header.
+-- 1.  Download a 128 MB chunk of output by specifying the appropriate byte
+--     range using the 'Range' header.
 --
--- Along with the data, the response includes a SHA256 tree hash of the
--- payload. You compute the checksum of the payload on the client and compare it
--- with the checksum you received in the response to ensure you received all the
--- expected data.
+-- 2.  Along with the data, the response includes a SHA256 tree hash of the
+--     payload. You compute the checksum of the payload on the client and
+--     compare it with the checksum you received in the response to ensure
+--     you received all the expected data.
 --
--- Repeat steps 1 and 2 for all the eight 128 MB chunks of output data, each
--- time specifying the appropriate byte range.
+-- 3.  Repeat steps 1 and 2 for all the eight 128 MB chunks of output data,
+--     each time specifying the appropriate byte range.
 --
--- After downloading all the parts of the job output, you have a list of
--- eight checksum values. Compute the tree hash of these values to find the
--- checksum of the entire output. Using the 'DescribeJob' API, obtain job
--- information of the job that provided you the output. The response includes
--- the checksum of the entire archive stored in Amazon Glacier. You compare this
--- value with the checksum you computed to ensure you have downloaded the entire
--- archive content with no errors.
+-- 4.  After downloading all the parts of the job output, you have a list
+--     of eight checksum values. Compute the tree hash of these values to
+--     find the checksum of the entire output. Using the DescribeJob API,
+--     obtain job information of the job that provided you the output. The
+--     response includes the checksum of the entire archive stored in
+--     Amazon Glacier. You compare this value with the checksum you
+--     computed to ensure you have downloaded the entire archive content
+--     with no errors.
 --
 -- An AWS account has full permission to perform all operations (actions).
--- However, AWS Identity and Access Management (IAM) users don't have any
--- permissions by default. You must grant them explicit permission to perform
--- specific actions. For more information, see <http://docs.aws.amazon.com/amazonglacier/latest/dev/using-iam-with-amazon-glacier.html Access Control Using AWS Identityand Access Management (IAM)>.
+-- However, AWS Identity and Access Management (IAM) users don\'t have any
+-- permissions by default. You must grant them explicit permission to
+-- perform specific actions. For more information, see
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/using-iam-with-amazon-glacier.html Access Control Using AWS Identity and Access Management (IAM)>.
 --
--- For conceptual information and the underlying REST API, go to <http://docs.aws.amazon.com/amazonglacier/latest/dev/vault-inventory.html Downloading aVault Inventory>, <http://docs.aws.amazon.com/amazonglacier/latest/dev/downloading-an-archive.html Downloading an Archive>, and <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-job-output-get.html Get Job Output >
+-- For conceptual information and the underlying REST API, go to
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/vault-inventory.html Downloading a Vault Inventory>,
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/downloading-an-archive.html Downloading an Archive>,
+-- and
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-job-output-get.html Get Job Output>
 --
--- <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-GetJobOutput.html>
+-- /See:/ <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-GetJobOutput.html AWS API Reference> for GetJobOutput.
 module Network.AWS.Glacier.GetJobOutput
     (
-    -- * Request
-      GetJobOutput
-    -- ** Request constructor
-    , getJobOutput
-    -- ** Request lenses
-    , gjoAccountId
-    , gjoJobId
+    -- * Creating a Request
+      getJobOutput
+    , GetJobOutput
+    -- * Request Lenses
     , gjoRange
+    , gjoAccountId
     , gjoVaultName
+    , gjoJobId
 
-    -- * Response
-    , GetJobOutputResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , getJobOutputResponse
-    -- ** Response lenses
-    , gjorAcceptRanges
-    , gjorArchiveDescription
-    , gjorBody
-    , gjorChecksum
-    , gjorContentRange
-    , gjorContentType
-    , gjorStatus
+    , GetJobOutputResponse
+    -- * Response Lenses
+    , gjorsChecksum
+    , gjorsAcceptRanges
+    , gjorsArchiveDescription
+    , gjorsContentRange
+    , gjorsContentType
+    , gjorsStatus
+    , gjorsBody
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.RestJSON
-import Network.AWS.Glacier.Types
-import qualified GHC.Exts
-
-data GetJobOutput = GetJobOutput
-    { _gjoAccountId :: Text
-    , _gjoJobId     :: Text
-    , _gjoRange     :: Maybe Text
-    , _gjoVaultName :: Text
-    } deriving (Eq, Ord, Read, Show)
+import           Network.AWS.Glacier.Types
+import           Network.AWS.Glacier.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
--- | 'GetJobOutput' constructor.
+-- | Provides options for downloading output of an Amazon Glacier job.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'getJobOutput' smart constructor.
+data GetJobOutput = GetJobOutput'
+    { _gjoRange     :: !(Maybe Text)
+    , _gjoAccountId :: !Text
+    , _gjoVaultName :: !Text
+    , _gjoJobId     :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetJobOutput' with the minimum fields required to make a request.
 --
--- * 'gjoAccountId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'gjoJobId' @::@ 'Text'
+-- * 'gjoRange'
 --
--- * 'gjoRange' @::@ 'Maybe' 'Text'
+-- * 'gjoAccountId'
 --
--- * 'gjoVaultName' @::@ 'Text'
+-- * 'gjoVaultName'
 --
-getJobOutput :: Text -- ^ 'gjoAccountId'
-             -> Text -- ^ 'gjoVaultName'
-             -> Text -- ^ 'gjoJobId'
-             -> GetJobOutput
-getJobOutput p1 p2 p3 = GetJobOutput
-    { _gjoAccountId = p1
-    , _gjoVaultName = p2
-    , _gjoJobId     = p3
-    , _gjoRange     = Nothing
+-- * 'gjoJobId'
+getJobOutput
+    :: Text -- ^ 'gjoAccountId'
+    -> Text -- ^ 'gjoVaultName'
+    -> Text -- ^ 'gjoJobId'
+    -> GetJobOutput
+getJobOutput pAccountId_ pVaultName_ pJobId_ =
+    GetJobOutput'
+    { _gjoRange = Nothing
+    , _gjoAccountId = pAccountId_
+    , _gjoVaultName = pVaultName_
+    , _gjoJobId = pJobId_
     }
 
--- | The 'AccountId' value is the AWS account ID of the account that owns the vault.
--- You can either specify an AWS account ID or optionally a single apos'-'apos
--- (hyphen), in which case Amazon Glacier uses the AWS account ID associated
--- with the credentials used to sign the request. If you use an account ID, do
--- not include any hyphens (apos-apos) in the ID.
+-- | The range of bytes to retrieve from the output. For example, if you want
+-- to download the first 1,048,576 bytes, specify \"Range:
+-- bytes=0-1048575\". By default, this operation downloads the entire
+-- output.
+gjoRange :: Lens' GetJobOutput (Maybe Text)
+gjoRange = lens _gjoRange (\ s a -> s{_gjoRange = a});
+
+-- | The 'AccountId' value is the AWS account ID of the account that owns the
+-- vault. You can either specify an AWS account ID or optionally a single
+-- apos'-'apos (hyphen), in which case Amazon Glacier uses the AWS account
+-- ID associated with the credentials used to sign the request. If you use
+-- an account ID, do not include any hyphens (apos-apos) in the ID.
 gjoAccountId :: Lens' GetJobOutput Text
-gjoAccountId = lens _gjoAccountId (\s a -> s { _gjoAccountId = a })
+gjoAccountId = lens _gjoAccountId (\ s a -> s{_gjoAccountId = a});
 
+-- | The name of the vault.
+gjoVaultName :: Lens' GetJobOutput Text
+gjoVaultName = lens _gjoVaultName (\ s a -> s{_gjoVaultName = a});
+
 -- | The job ID whose data is downloaded.
 gjoJobId :: Lens' GetJobOutput Text
-gjoJobId = lens _gjoJobId (\s a -> s { _gjoJobId = a })
+gjoJobId = lens _gjoJobId (\ s a -> s{_gjoJobId = a});
 
--- | The range of bytes to retrieve from the output. For example, if you want to
--- download the first 1,048,576 bytes, specify "Range: bytes=0-1048575". By
--- default, this operation downloads the entire output.
-gjoRange :: Lens' GetJobOutput (Maybe Text)
-gjoRange = lens _gjoRange (\s a -> s { _gjoRange = a })
+instance AWSRequest GetJobOutput where
+        type Sv GetJobOutput = Glacier
+        type Rs GetJobOutput = GetJobOutputResponse
+        request = get
+        response
+          = receiveBody
+              (\ s h x ->
+                 GetJobOutputResponse' <$>
+                   (h .#? "x-amz-sha256-tree-hash") <*>
+                     (h .#? "Accept-Ranges")
+                     <*> (h .#? "x-amz-archive-description")
+                     <*> (h .#? "Content-Range")
+                     <*> (h .#? "Content-Type")
+                     <*> (pure (fromEnum s))
+                     <*> (pure x))
 
--- | The name of the vault.
-gjoVaultName :: Lens' GetJobOutput Text
-gjoVaultName = lens _gjoVaultName (\s a -> s { _gjoVaultName = a })
+instance ToHeaders GetJobOutput where
+        toHeaders GetJobOutput'{..}
+          = mconcat ["Range" =# _gjoRange]
 
-data GetJobOutputResponse = GetJobOutputResponse
-    { _gjorAcceptRanges       :: Maybe Text
-    , _gjorArchiveDescription :: Maybe Text
-    , _gjorBody               :: RsBody
-    , _gjorChecksum           :: Maybe Text
-    , _gjorContentRange       :: Maybe Text
-    , _gjorContentType        :: Maybe Text
-    , _gjorStatus             :: Maybe Int
-    } deriving (Show)
+instance ToPath GetJobOutput where
+        toPath GetJobOutput'{..}
+          = mconcat
+              ["/", toBS _gjoAccountId, "/vaults/",
+               toBS _gjoVaultName, "/jobs/", toBS _gjoJobId,
+               "/output"]
 
--- | 'GetJobOutputResponse' constructor.
+instance ToQuery GetJobOutput where
+        toQuery = const mempty
+
+-- | Contains the Amazon Glacier response to your request.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'getJobOutputResponse' smart constructor.
+data GetJobOutputResponse = GetJobOutputResponse'
+    { _gjorsChecksum           :: !(Maybe Text)
+    , _gjorsAcceptRanges       :: !(Maybe Text)
+    , _gjorsArchiveDescription :: !(Maybe Text)
+    , _gjorsContentRange       :: !(Maybe Text)
+    , _gjorsContentType        :: !(Maybe Text)
+    , _gjorsStatus             :: !Int
+    , _gjorsBody               :: !RsBody
+    } deriving (Show,Generic)
+
+-- | Creates a value of 'GetJobOutputResponse' with the minimum fields required to make a request.
 --
--- * 'gjorAcceptRanges' @::@ 'Maybe' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'gjorArchiveDescription' @::@ 'Maybe' 'Text'
+-- * 'gjorsChecksum'
 --
--- * 'gjorBody' @::@ 'RsBody'
+-- * 'gjorsAcceptRanges'
 --
--- * 'gjorChecksum' @::@ 'Maybe' 'Text'
+-- * 'gjorsArchiveDescription'
 --
--- * 'gjorContentRange' @::@ 'Maybe' 'Text'
+-- * 'gjorsContentRange'
 --
--- * 'gjorContentType' @::@ 'Maybe' 'Text'
+-- * 'gjorsContentType'
 --
--- * 'gjorStatus' @::@ 'Maybe' 'Int'
+-- * 'gjorsStatus'
 --
-getJobOutputResponse :: RsBody -- ^ 'gjorBody'
-                     -> GetJobOutputResponse
-getJobOutputResponse p1 = GetJobOutputResponse
-    { _gjorBody               = p1
-    , _gjorChecksum           = Nothing
-    , _gjorStatus             = Nothing
-    , _gjorContentRange       = Nothing
-    , _gjorAcceptRanges       = Nothing
-    , _gjorContentType        = Nothing
-    , _gjorArchiveDescription = Nothing
+-- * 'gjorsBody'
+getJobOutputResponse
+    :: Int -- ^ 'gjorsStatus'
+    -> RsBody -- ^ 'gjorsBody'
+    -> GetJobOutputResponse
+getJobOutputResponse pStatus_ pBody_ =
+    GetJobOutputResponse'
+    { _gjorsChecksum = Nothing
+    , _gjorsAcceptRanges = Nothing
+    , _gjorsArchiveDescription = Nothing
+    , _gjorsContentRange = Nothing
+    , _gjorsContentType = Nothing
+    , _gjorsStatus = pStatus_
+    , _gjorsBody = pBody_
     }
 
--- | Indicates the range units accepted. For more information, go to <http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html RFC2616>.
-gjorAcceptRanges :: Lens' GetJobOutputResponse (Maybe Text)
-gjorAcceptRanges = lens _gjorAcceptRanges (\s a -> s { _gjorAcceptRanges = a })
-
--- | The description of an archive.
-gjorArchiveDescription :: Lens' GetJobOutputResponse (Maybe Text)
-gjorArchiveDescription =
-    lens _gjorArchiveDescription (\s a -> s { _gjorArchiveDescription = a })
+-- | The checksum of the data in the response. This header is returned only
+-- when retrieving the output for an archive retrieval job. Furthermore,
+-- this header appears only under the following conditions:
+--
+-- -   You get the entire range of the archive.
+-- -   You request a range to return of the archive that starts and ends on
+--     a multiple of 1 MB. For example, if you have an 3.1 MB archive and
+--     you specify a range to return that starts at 1 MB and ends at 2 MB,
+--     then the x-amz-sha256-tree-hash is returned as a response header.
+-- -   You request a range of the archive to return that starts on a
+--     multiple of 1 MB and goes to the end of the archive. For example, if
+--     you have a 3.1 MB archive and you specify a range that starts at 2
+--     MB and ends at 3.1 MB (the end of the archive), then the
+--     x-amz-sha256-tree-hash is returned as a response header.
+gjorsChecksum :: Lens' GetJobOutputResponse (Maybe Text)
+gjorsChecksum = lens _gjorsChecksum (\ s a -> s{_gjorsChecksum = a});
 
--- | The job data, either archive data or inventory data.
-gjorBody :: Lens' GetJobOutputResponse RsBody
-gjorBody = lens _gjorBody (\s a -> s { _gjorBody = a })
+-- | Indicates the range units accepted. For more information, go to
+-- <http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html RFC2616>.
+gjorsAcceptRanges :: Lens' GetJobOutputResponse (Maybe Text)
+gjorsAcceptRanges = lens _gjorsAcceptRanges (\ s a -> s{_gjorsAcceptRanges = a});
 
--- | The checksum of the data in the response. This header is returned only when
--- retrieving the output for an archive retrieval job. Furthermore, this header
--- appears only under the following conditions:  You get the entire range of the
--- archive. You request a range to return of the archive that starts and ends on
--- a multiple of 1 MB. For example, if you have an 3.1 MB archive and you
--- specify a range to return that starts at 1 MB and ends at 2 MB, then the
--- x-amz-sha256-tree-hash is returned as a response header. You request a range
--- of the archive to return that starts on a multiple of 1 MB and goes to the
--- end of the archive. For example, if you have a 3.1 MB archive and you specify
--- a range that starts at 2 MB and ends at 3.1 MB (the end of the archive), then
--- the x-amz-sha256-tree-hash is returned as a response header.
-gjorChecksum :: Lens' GetJobOutputResponse (Maybe Text)
-gjorChecksum = lens _gjorChecksum (\s a -> s { _gjorChecksum = a })
+-- | The description of an archive.
+gjorsArchiveDescription :: Lens' GetJobOutputResponse (Maybe Text)
+gjorsArchiveDescription = lens _gjorsArchiveDescription (\ s a -> s{_gjorsArchiveDescription = a});
 
 -- | The range of bytes returned by Amazon Glacier. If only partial output is
--- downloaded, the response provides the range of bytes Amazon Glacier returned.
--- For example, bytes 0-1048575/8388608 returns the first 1 MB from 8 MB.
-gjorContentRange :: Lens' GetJobOutputResponse (Maybe Text)
-gjorContentRange = lens _gjorContentRange (\s a -> s { _gjorContentRange = a })
-
--- | The Content-Type depends on whether the job output is an archive or a vault
--- inventory. For archive data, the Content-Type is application/octet-stream.
--- For vault inventory, if you requested CSV format when you initiated the job,
--- the Content-Type is text/csv. Otherwise, by default, vault inventory is
--- returned as JSON, and the Content-Type is application/json.
-gjorContentType :: Lens' GetJobOutputResponse (Maybe Text)
-gjorContentType = lens _gjorContentType (\s a -> s { _gjorContentType = a })
-
--- | The HTTP response code for a job output request. The value depends on whether
--- a range was specified in the request.
-gjorStatus :: Lens' GetJobOutputResponse (Maybe Int)
-gjorStatus = lens _gjorStatus (\s a -> s { _gjorStatus = a })
-
-instance ToPath GetJobOutput where
-    toPath GetJobOutput{..} = mconcat
-        [ "/"
-        , toText _gjoAccountId
-        , "/vaults/"
-        , toText _gjoVaultName
-        , "/jobs/"
-        , toText _gjoJobId
-        , "/output"
-        ]
-
-instance ToQuery GetJobOutput where
-    toQuery = const mempty
-
-instance ToHeaders GetJobOutput where
-    toHeaders GetJobOutput{..} = mconcat
-        [ "Range" =: _gjoRange
-        ]
+-- downloaded, the response provides the range of bytes Amazon Glacier
+-- returned. For example, bytes 0-1048575\/8388608 returns the first 1 MB
+-- from 8 MB.
+gjorsContentRange :: Lens' GetJobOutputResponse (Maybe Text)
+gjorsContentRange = lens _gjorsContentRange (\ s a -> s{_gjorsContentRange = a});
 
-instance ToJSON GetJobOutput where
-    toJSON = const (toJSON Empty)
+-- | The Content-Type depends on whether the job output is an archive or a
+-- vault inventory. For archive data, the Content-Type is
+-- application\/octet-stream. For vault inventory, if you requested CSV
+-- format when you initiated the job, the Content-Type is text\/csv.
+-- Otherwise, by default, vault inventory is returned as JSON, and the
+-- Content-Type is application\/json.
+gjorsContentType :: Lens' GetJobOutputResponse (Maybe Text)
+gjorsContentType = lens _gjorsContentType (\ s a -> s{_gjorsContentType = a});
 
-instance AWSRequest GetJobOutput where
-    type Sv GetJobOutput = Glacier
-    type Rs GetJobOutput = GetJobOutputResponse
+-- | The HTTP response code for a job output request. The value depends on
+-- whether a range was specified in the request.
+gjorsStatus :: Lens' GetJobOutputResponse Int
+gjorsStatus = lens _gjorsStatus (\ s a -> s{_gjorsStatus = a});
 
-    request  = get
-    response = bodyResponse $ \h s b -> GetJobOutputResponse
-        <$> h ~:? "Accept-Ranges"
-        <*> h ~:? "x-amz-archive-description"
-        <*> pure (RsBody b)
-        <*> h ~:? "x-amz-sha256-tree-hash"
-        <*> h ~:? "Content-Range"
-        <*> h ~:? "Content-Type"
-        <*> pure (Just s)
+-- | The job data, either archive data or inventory data.
+gjorsBody :: Lens' GetJobOutputResponse RsBody
+gjorsBody = lens _gjorsBody (\ s a -> s{_gjorsBody = a});
diff --git a/gen/Network/AWS/Glacier/GetVaultAccessPolicy.hs b/gen/Network/AWS/Glacier/GetVaultAccessPolicy.hs
--- a/gen/Network/AWS/Glacier/GetVaultAccessPolicy.hs
+++ b/gen/Network/AWS/Glacier/GetVaultAccessPolicy.hs
@@ -1,133 +1,143 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.Glacier.GetVaultAccessPolicy
--- 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.
-
--- | This operation retrieves the 'access-policy' subresource set on the vault—for
--- more information on setting this subresource, see <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-SetVaultAccessPolicy.html Set Vault Access Policy(PUT access-policy)>. If there is no access policy set on the vault, the
--- operation returns a '404 Not found' error. For more information about vault
--- access policies, see <http://docs.aws.amazon.com/amazonglacier/latest/dev/vault-access-policy.html Amazon Glacier Access Control with Vault Access Policies>.
+-- This operation retrieves the 'access-policy' subresource set on the
+-- vault; for more information on setting this subresource, see
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-SetVaultAccessPolicy.html Set Vault Access Policy (PUT access-policy)>.
+-- If there is no access policy set on the vault, the operation returns a
+-- '404 Not found' error. For more information about vault access policies,
+-- see
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/vault-access-policy.html Amazon Glacier Access Control with Vault Access Policies>.
 --
--- <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-GetVaultAccessPolicy.html>
+-- /See:/ <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-GetVaultAccessPolicy.html AWS API Reference> for GetVaultAccessPolicy.
 module Network.AWS.Glacier.GetVaultAccessPolicy
     (
-    -- * Request
-      GetVaultAccessPolicy
-    -- ** Request constructor
-    , getVaultAccessPolicy
-    -- ** Request lenses
+    -- * Creating a Request
+      getVaultAccessPolicy
+    , GetVaultAccessPolicy
+    -- * Request Lenses
     , gvapAccountId
     , gvapVaultName
 
-    -- * Response
-    , GetVaultAccessPolicyResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , getVaultAccessPolicyResponse
-    -- ** Response lenses
-    , gvaprPolicy
+    , GetVaultAccessPolicyResponse
+    -- * Response Lenses
+    , gvaprsPolicy
+    , gvaprsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.RestJSON
-import Network.AWS.Glacier.Types
-import qualified GHC.Exts
-
-data GetVaultAccessPolicy = GetVaultAccessPolicy
-    { _gvapAccountId :: Text
-    , _gvapVaultName :: Text
-    } deriving (Eq, Ord, Read, Show)
+import           Network.AWS.Glacier.Types
+import           Network.AWS.Glacier.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
--- | 'GetVaultAccessPolicy' constructor.
+-- | Input for GetVaultAccessPolicy.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'getVaultAccessPolicy' smart constructor.
+data GetVaultAccessPolicy = GetVaultAccessPolicy'
+    { _gvapAccountId :: !Text
+    , _gvapVaultName :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetVaultAccessPolicy' with the minimum fields required to make a request.
 --
--- * 'gvapAccountId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'gvapVaultName' @::@ 'Text'
+-- * 'gvapAccountId'
 --
-getVaultAccessPolicy :: Text -- ^ 'gvapAccountId'
-                     -> Text -- ^ 'gvapVaultName'
-                     -> GetVaultAccessPolicy
-getVaultAccessPolicy p1 p2 = GetVaultAccessPolicy
-    { _gvapAccountId = p1
-    , _gvapVaultName = p2
+-- * 'gvapVaultName'
+getVaultAccessPolicy
+    :: Text -- ^ 'gvapAccountId'
+    -> Text -- ^ 'gvapVaultName'
+    -> GetVaultAccessPolicy
+getVaultAccessPolicy pAccountId_ pVaultName_ =
+    GetVaultAccessPolicy'
+    { _gvapAccountId = pAccountId_
+    , _gvapVaultName = pVaultName_
     }
 
--- | The 'AccountId' value is the AWS account ID of the account that owns the vault.
--- You can either specify an AWS account ID or optionally a single apos'-'apos
--- (hyphen), in which case Amazon Glacier uses the AWS account ID associated
--- with the credentials used to sign the request. If you use an account ID, do
--- not include any hyphens (apos-apos) in the ID.
+-- | The 'AccountId' value is the AWS account ID of the account that owns the
+-- vault. You can either specify an AWS account ID or optionally a single
+-- apos'-'apos (hyphen), in which case Amazon Glacier uses the AWS account
+-- ID associated with the credentials used to sign the request. If you use
+-- an account ID, do not include any hyphens (apos-apos) in the ID.
 gvapAccountId :: Lens' GetVaultAccessPolicy Text
-gvapAccountId = lens _gvapAccountId (\s a -> s { _gvapAccountId = a })
+gvapAccountId = lens _gvapAccountId (\ s a -> s{_gvapAccountId = a});
 
 -- | The name of the vault.
 gvapVaultName :: Lens' GetVaultAccessPolicy Text
-gvapVaultName = lens _gvapVaultName (\s a -> s { _gvapVaultName = a })
-
-newtype GetVaultAccessPolicyResponse = GetVaultAccessPolicyResponse
-    { _gvaprPolicy :: Maybe VaultAccessPolicy
-    } deriving (Eq, Read, Show)
+gvapVaultName = lens _gvapVaultName (\ s a -> s{_gvapVaultName = a});
 
--- | 'GetVaultAccessPolicyResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'gvaprPolicy' @::@ 'Maybe' 'VaultAccessPolicy'
---
-getVaultAccessPolicyResponse :: GetVaultAccessPolicyResponse
-getVaultAccessPolicyResponse = GetVaultAccessPolicyResponse
-    { _gvaprPolicy = Nothing
-    }
+instance AWSRequest GetVaultAccessPolicy where
+        type Sv GetVaultAccessPolicy = Glacier
+        type Rs GetVaultAccessPolicy =
+             GetVaultAccessPolicyResponse
+        request = get
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetVaultAccessPolicyResponse' <$>
+                   (x .?> "policy") <*> (pure (fromEnum s)))
 
--- | Contains the returned vault access policy as a JSON string.
-gvaprPolicy :: Lens' GetVaultAccessPolicyResponse (Maybe VaultAccessPolicy)
-gvaprPolicy = lens _gvaprPolicy (\s a -> s { _gvaprPolicy = a })
+instance ToHeaders GetVaultAccessPolicy where
+        toHeaders = const mempty
 
 instance ToPath GetVaultAccessPolicy where
-    toPath GetVaultAccessPolicy{..} = mconcat
-        [ "/"
-        , toText _gvapAccountId
-        , "/vaults/"
-        , toText _gvapVaultName
-        , "/access-policy"
-        ]
+        toPath GetVaultAccessPolicy'{..}
+          = mconcat
+              ["/", toBS _gvapAccountId, "/vaults/",
+               toBS _gvapVaultName, "/access-policy"]
 
 instance ToQuery GetVaultAccessPolicy where
-    toQuery = const mempty
-
-instance ToHeaders GetVaultAccessPolicy
+        toQuery = const mempty
 
-instance ToJSON GetVaultAccessPolicy where
-    toJSON = const (toJSON Empty)
+-- | Output for GetVaultAccessPolicy.
+--
+-- /See:/ 'getVaultAccessPolicyResponse' smart constructor.
+data GetVaultAccessPolicyResponse = GetVaultAccessPolicyResponse'
+    { _gvaprsPolicy :: !(Maybe VaultAccessPolicy)
+    , _gvaprsStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest GetVaultAccessPolicy where
-    type Sv GetVaultAccessPolicy = Glacier
-    type Rs GetVaultAccessPolicy = GetVaultAccessPolicyResponse
+-- | Creates a value of 'GetVaultAccessPolicyResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gvaprsPolicy'
+--
+-- * 'gvaprsStatus'
+getVaultAccessPolicyResponse
+    :: Int -- ^ 'gvaprsStatus'
+    -> GetVaultAccessPolicyResponse
+getVaultAccessPolicyResponse pStatus_ =
+    GetVaultAccessPolicyResponse'
+    { _gvaprsPolicy = Nothing
+    , _gvaprsStatus = pStatus_
+    }
 
-    request  = get
-    response = jsonResponse
+-- | Contains the returned vault access policy as a JSON string.
+gvaprsPolicy :: Lens' GetVaultAccessPolicyResponse (Maybe VaultAccessPolicy)
+gvaprsPolicy = lens _gvaprsPolicy (\ s a -> s{_gvaprsPolicy = a});
 
-instance FromJSON GetVaultAccessPolicyResponse where
-    parseJSON = withObject "GetVaultAccessPolicyResponse" $ \o -> GetVaultAccessPolicyResponse
-        <$> o .:? "policy"
+-- | The response status code.
+gvaprsStatus :: Lens' GetVaultAccessPolicyResponse Int
+gvaprsStatus = lens _gvaprsStatus (\ s a -> s{_gvaprsStatus = a});
diff --git a/gen/Network/AWS/Glacier/GetVaultLock.hs b/gen/Network/AWS/Glacier/GetVaultLock.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glacier/GetVaultLock.hs
@@ -0,0 +1,192 @@
+{-# 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.Glacier.GetVaultLock
+-- 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)
+--
+-- This operation retrieves the following attributes from the 'lock-policy'
+-- subresource set on the specified vault:
+--
+-- -   The vault lock policy set on the vault.
+--
+-- -   The state of the vault lock, which is either 'InProgess' or
+--     'Locked'.
+--
+-- -   When the lock ID expires. The lock ID is used to complete the vault
+--     locking process.
+--
+-- -   When the vault lock was initiated and put into the 'InProgress'
+--     state.
+--
+-- A vault lock is put into the 'InProgress' state by calling
+-- InitiateVaultLock. A vault lock is put into the 'Locked' state by
+-- calling CompleteVaultLock. You can abort the vault locking process by
+-- calling AbortVaultLock. For more information about the vault locking
+-- process,
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/vault-lock.html Amazon Glacier Vault Lock>.
+--
+-- If there is no vault lock policy set on the vault, the operation returns
+-- a '404 Not found' error. For more information about vault lock policies,
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/vault-lock-policy.html Amazon Glacier Access Control with Vault Lock Policies>.
+--
+-- /See:/ <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-GetVaultLock.html AWS API Reference> for GetVaultLock.
+module Network.AWS.Glacier.GetVaultLock
+    (
+    -- * Creating a Request
+      getVaultLock
+    , GetVaultLock
+    -- * Request Lenses
+    , gvlAccountId
+    , gvlVaultName
+
+    -- * Destructuring the Response
+    , getVaultLockResponse
+    , GetVaultLockResponse
+    -- * Response Lenses
+    , gvlrsState
+    , gvlrsExpirationDate
+    , gvlrsCreationDate
+    , gvlrsPolicy
+    , gvlrsStatus
+    ) where
+
+import           Network.AWS.Glacier.Types
+import           Network.AWS.Glacier.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | The input values for 'GetVaultLock'.
+--
+-- /See:/ 'getVaultLock' smart constructor.
+data GetVaultLock = GetVaultLock'
+    { _gvlAccountId :: !Text
+    , _gvlVaultName :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetVaultLock' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gvlAccountId'
+--
+-- * 'gvlVaultName'
+getVaultLock
+    :: Text -- ^ 'gvlAccountId'
+    -> Text -- ^ 'gvlVaultName'
+    -> GetVaultLock
+getVaultLock pAccountId_ pVaultName_ =
+    GetVaultLock'
+    { _gvlAccountId = pAccountId_
+    , _gvlVaultName = pVaultName_
+    }
+
+-- | The 'AccountId' value is the AWS account ID of the account that owns the
+-- vault. You can either specify an AWS account ID or optionally a single
+-- apos'-'apos (hyphen), in which case Amazon Glacier uses the AWS account
+-- ID associated with the credentials used to sign the request. If you use
+-- an account ID, do not include any hyphens (apos-apos) in the ID.
+gvlAccountId :: Lens' GetVaultLock Text
+gvlAccountId = lens _gvlAccountId (\ s a -> s{_gvlAccountId = a});
+
+-- | The name of the vault.
+gvlVaultName :: Lens' GetVaultLock Text
+gvlVaultName = lens _gvlVaultName (\ s a -> s{_gvlVaultName = a});
+
+instance AWSRequest GetVaultLock where
+        type Sv GetVaultLock = Glacier
+        type Rs GetVaultLock = GetVaultLockResponse
+        request = get
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetVaultLockResponse' <$>
+                   (x .?> "State") <*> (x .?> "ExpirationDate") <*>
+                     (x .?> "CreationDate")
+                     <*> (x .?> "Policy")
+                     <*> (pure (fromEnum s)))
+
+instance ToHeaders GetVaultLock where
+        toHeaders = const mempty
+
+instance ToPath GetVaultLock where
+        toPath GetVaultLock'{..}
+          = mconcat
+              ["/", toBS _gvlAccountId, "/vaults/",
+               toBS _gvlVaultName, "/lock-policy"]
+
+instance ToQuery GetVaultLock where
+        toQuery = const mempty
+
+-- | Contains the Amazon Glacier response to your request.
+--
+-- /See:/ 'getVaultLockResponse' smart constructor.
+data GetVaultLockResponse = GetVaultLockResponse'
+    { _gvlrsState          :: !(Maybe Text)
+    , _gvlrsExpirationDate :: !(Maybe Text)
+    , _gvlrsCreationDate   :: !(Maybe Text)
+    , _gvlrsPolicy         :: !(Maybe Text)
+    , _gvlrsStatus         :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetVaultLockResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gvlrsState'
+--
+-- * 'gvlrsExpirationDate'
+--
+-- * 'gvlrsCreationDate'
+--
+-- * 'gvlrsPolicy'
+--
+-- * 'gvlrsStatus'
+getVaultLockResponse
+    :: Int -- ^ 'gvlrsStatus'
+    -> GetVaultLockResponse
+getVaultLockResponse pStatus_ =
+    GetVaultLockResponse'
+    { _gvlrsState = Nothing
+    , _gvlrsExpirationDate = Nothing
+    , _gvlrsCreationDate = Nothing
+    , _gvlrsPolicy = Nothing
+    , _gvlrsStatus = pStatus_
+    }
+
+-- | The state of the vault lock. 'InProgress' or 'Locked'.
+gvlrsState :: Lens' GetVaultLockResponse (Maybe Text)
+gvlrsState = lens _gvlrsState (\ s a -> s{_gvlrsState = a});
+
+-- | The UTC date and time at which the lock ID expires. This value can be
+-- 'null' if the vault lock is in a 'Locked' state.
+gvlrsExpirationDate :: Lens' GetVaultLockResponse (Maybe Text)
+gvlrsExpirationDate = lens _gvlrsExpirationDate (\ s a -> s{_gvlrsExpirationDate = a});
+
+-- | The UTC date and time at which the vault lock was put into the
+-- 'InProgress' state.
+gvlrsCreationDate :: Lens' GetVaultLockResponse (Maybe Text)
+gvlrsCreationDate = lens _gvlrsCreationDate (\ s a -> s{_gvlrsCreationDate = a});
+
+-- | The vault lock policy as a JSON string, which uses \"\\\" as an escape
+-- character.
+gvlrsPolicy :: Lens' GetVaultLockResponse (Maybe Text)
+gvlrsPolicy = lens _gvlrsPolicy (\ s a -> s{_gvlrsPolicy = a});
+
+-- | The response status code.
+gvlrsStatus :: Lens' GetVaultLockResponse Int
+gvlrsStatus = lens _gvlrsStatus (\ s a -> s{_gvlrsStatus = a});
diff --git a/gen/Network/AWS/Glacier/GetVaultNotifications.hs b/gen/Network/AWS/Glacier/GetVaultNotifications.hs
--- a/gen/Network/AWS/Glacier/GetVaultNotifications.hs
+++ b/gen/Network/AWS/Glacier/GetVaultNotifications.hs
@@ -1,145 +1,158 @@
-{-# 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.Glacier.GetVaultNotifications
--- 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.
-
--- | This operation retrieves the 'notification-configuration' subresource of the
--- specified vault.
+-- This operation retrieves the 'notification-configuration' subresource of
+-- the specified vault.
 --
--- For information about setting a notification configuration on a vault, see 'SetVaultNotifications'. If a notification configuration for a vault is not set, the operation
--- returns a '404 Not Found' error. For more information about vault
--- notifications, see <http://docs.aws.amazon.com/amazonglacier/latest/dev/configuring-notifications.html Configuring Vault Notifications in Amazon Glacier>.
+-- For information about setting a notification configuration on a vault,
+-- see SetVaultNotifications. If a notification configuration for a vault
+-- is not set, the operation returns a '404 Not Found' error. For more
+-- information about vault notifications, see
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/configuring-notifications.html Configuring Vault Notifications in Amazon Glacier>.
 --
 -- An AWS account has full permission to perform all operations (actions).
--- However, AWS Identity and Access Management (IAM) users don't have any
--- permissions by default. You must grant them explicit permission to perform
--- specific actions. For more information, see <http://docs.aws.amazon.com/amazonglacier/latest/dev/using-iam-with-amazon-glacier.html Access Control Using AWS Identityand Access Management (IAM)>.
+-- However, AWS Identity and Access Management (IAM) users don\'t have any
+-- permissions by default. You must grant them explicit permission to
+-- perform specific actions. For more information, see
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/using-iam-with-amazon-glacier.html Access Control Using AWS Identity and Access Management (IAM)>.
 --
--- For conceptual information and underlying REST API, go to <http://docs.aws.amazon.com/amazonglacier/latest/dev/configuring-notifications.html Configuring VaultNotifications in Amazon Glacier> and <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-vault-notifications-get.html Get Vault Notification Configuration > in
--- the /Amazon Glacier Developer Guide/.
+-- For conceptual information and underlying REST API, go to
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/configuring-notifications.html Configuring Vault Notifications in Amazon Glacier>
+-- and
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-vault-notifications-get.html Get Vault Notification Configuration>
+-- in the /Amazon Glacier Developer Guide/.
 --
--- <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-GetVaultNotifications.html>
+-- /See:/ <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-GetVaultNotifications.html AWS API Reference> for GetVaultNotifications.
 module Network.AWS.Glacier.GetVaultNotifications
     (
-    -- * Request
-      GetVaultNotifications
-    -- ** Request constructor
-    , getVaultNotifications
-    -- ** Request lenses
+    -- * Creating a Request
+      getVaultNotifications
+    , GetVaultNotifications
+    -- * Request Lenses
     , gvnAccountId
     , gvnVaultName
 
-    -- * Response
-    , GetVaultNotificationsResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , getVaultNotificationsResponse
-    -- ** Response lenses
-    , gvnrVaultNotificationConfig
+    , GetVaultNotificationsResponse
+    -- * Response Lenses
+    , gvnrsVaultNotificationConfig
+    , gvnrsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.RestJSON
-import Network.AWS.Glacier.Types
-import qualified GHC.Exts
-
-data GetVaultNotifications = GetVaultNotifications
-    { _gvnAccountId :: Text
-    , _gvnVaultName :: Text
-    } deriving (Eq, Ord, Read, Show)
+import           Network.AWS.Glacier.Types
+import           Network.AWS.Glacier.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
--- | 'GetVaultNotifications' constructor.
+-- | Provides options for retrieving the notification configuration set on an
+-- Amazon Glacier vault.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'getVaultNotifications' smart constructor.
+data GetVaultNotifications = GetVaultNotifications'
+    { _gvnAccountId :: !Text
+    , _gvnVaultName :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetVaultNotifications' with the minimum fields required to make a request.
 --
--- * 'gvnAccountId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'gvnVaultName' @::@ 'Text'
+-- * 'gvnAccountId'
 --
-getVaultNotifications :: Text -- ^ 'gvnAccountId'
-                      -> Text -- ^ 'gvnVaultName'
-                      -> GetVaultNotifications
-getVaultNotifications p1 p2 = GetVaultNotifications
-    { _gvnAccountId = p1
-    , _gvnVaultName = p2
+-- * 'gvnVaultName'
+getVaultNotifications
+    :: Text -- ^ 'gvnAccountId'
+    -> Text -- ^ 'gvnVaultName'
+    -> GetVaultNotifications
+getVaultNotifications pAccountId_ pVaultName_ =
+    GetVaultNotifications'
+    { _gvnAccountId = pAccountId_
+    , _gvnVaultName = pVaultName_
     }
 
--- | The 'AccountId' value is the AWS account ID of the account that owns the vault.
--- You can either specify an AWS account ID or optionally a single apos'-'apos
--- (hyphen), in which case Amazon Glacier uses the AWS account ID associated
--- with the credentials used to sign the request. If you use an account ID, do
--- not include any hyphens (apos-apos) in the ID.
+-- | The 'AccountId' value is the AWS account ID of the account that owns the
+-- vault. You can either specify an AWS account ID or optionally a single
+-- apos'-'apos (hyphen), in which case Amazon Glacier uses the AWS account
+-- ID associated with the credentials used to sign the request. If you use
+-- an account ID, do not include any hyphens (apos-apos) in the ID.
 gvnAccountId :: Lens' GetVaultNotifications Text
-gvnAccountId = lens _gvnAccountId (\s a -> s { _gvnAccountId = a })
+gvnAccountId = lens _gvnAccountId (\ s a -> s{_gvnAccountId = a});
 
 -- | The name of the vault.
 gvnVaultName :: Lens' GetVaultNotifications Text
-gvnVaultName = lens _gvnVaultName (\s a -> s { _gvnVaultName = a })
-
-newtype GetVaultNotificationsResponse = GetVaultNotificationsResponse
-    { _gvnrVaultNotificationConfig :: Maybe VaultNotificationConfig
-    } deriving (Eq, Read, Show)
+gvnVaultName = lens _gvnVaultName (\ s a -> s{_gvnVaultName = a});
 
--- | 'GetVaultNotificationsResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'gvnrVaultNotificationConfig' @::@ 'Maybe' 'VaultNotificationConfig'
---
-getVaultNotificationsResponse :: GetVaultNotificationsResponse
-getVaultNotificationsResponse = GetVaultNotificationsResponse
-    { _gvnrVaultNotificationConfig = Nothing
-    }
+instance AWSRequest GetVaultNotifications where
+        type Sv GetVaultNotifications = Glacier
+        type Rs GetVaultNotifications =
+             GetVaultNotificationsResponse
+        request = get
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetVaultNotificationsResponse' <$>
+                   (x .?> "vaultNotificationConfig") <*>
+                     (pure (fromEnum s)))
 
--- | Returns the notification configuration set on the vault.
-gvnrVaultNotificationConfig :: Lens' GetVaultNotificationsResponse (Maybe VaultNotificationConfig)
-gvnrVaultNotificationConfig =
-    lens _gvnrVaultNotificationConfig
-        (\s a -> s { _gvnrVaultNotificationConfig = a })
+instance ToHeaders GetVaultNotifications where
+        toHeaders = const mempty
 
 instance ToPath GetVaultNotifications where
-    toPath GetVaultNotifications{..} = mconcat
-        [ "/"
-        , toText _gvnAccountId
-        , "/vaults/"
-        , toText _gvnVaultName
-        , "/notification-configuration"
-        ]
+        toPath GetVaultNotifications'{..}
+          = mconcat
+              ["/", toBS _gvnAccountId, "/vaults/",
+               toBS _gvnVaultName, "/notification-configuration"]
 
 instance ToQuery GetVaultNotifications where
-    toQuery = const mempty
-
-instance ToHeaders GetVaultNotifications
+        toQuery = const mempty
 
-instance ToJSON GetVaultNotifications where
-    toJSON = const (toJSON Empty)
+-- | Contains the Amazon Glacier response to your request.
+--
+-- /See:/ 'getVaultNotificationsResponse' smart constructor.
+data GetVaultNotificationsResponse = GetVaultNotificationsResponse'
+    { _gvnrsVaultNotificationConfig :: !(Maybe VaultNotificationConfig)
+    , _gvnrsStatus                  :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest GetVaultNotifications where
-    type Sv GetVaultNotifications = Glacier
-    type Rs GetVaultNotifications = GetVaultNotificationsResponse
+-- | Creates a value of 'GetVaultNotificationsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gvnrsVaultNotificationConfig'
+--
+-- * 'gvnrsStatus'
+getVaultNotificationsResponse
+    :: Int -- ^ 'gvnrsStatus'
+    -> GetVaultNotificationsResponse
+getVaultNotificationsResponse pStatus_ =
+    GetVaultNotificationsResponse'
+    { _gvnrsVaultNotificationConfig = Nothing
+    , _gvnrsStatus = pStatus_
+    }
 
-    request  = get
-    response = jsonResponse
+-- | Returns the notification configuration set on the vault.
+gvnrsVaultNotificationConfig :: Lens' GetVaultNotificationsResponse (Maybe VaultNotificationConfig)
+gvnrsVaultNotificationConfig = lens _gvnrsVaultNotificationConfig (\ s a -> s{_gvnrsVaultNotificationConfig = a});
 
-instance FromJSON GetVaultNotificationsResponse where
-    parseJSON = withObject "GetVaultNotificationsResponse" $ \o -> GetVaultNotificationsResponse
-        <$> o .:? "vaultNotificationConfig"
+-- | The response status code.
+gvnrsStatus :: Lens' GetVaultNotificationsResponse Int
+gvnrsStatus = lens _gvnrsStatus (\ s a -> s{_gvnrsStatus = a});
diff --git a/gen/Network/AWS/Glacier/InitiateJob.hs b/gen/Network/AWS/Glacier/InitiateJob.hs
--- a/gen/Network/AWS/Glacier/InitiateJob.hs
+++ b/gen/Network/AWS/Glacier/InitiateJob.hs
@@ -1,256 +1,286 @@
-{-# 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.Glacier.InitiateJob
--- 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.
-
--- | This operation initiates a job of the specified type. In this release, you
--- can initiate a job to retrieve either an archive or a vault inventory (a list
--- of archives in a vault).
+-- This operation initiates a job of the specified type. In this release,
+-- you can initiate a job to retrieve either an archive or a vault
+-- inventory (a list of archives in a vault).
 --
 -- Retrieving data from Amazon Glacier is a two-step process:
 --
--- Initiate a retrieval job.
+-- 1.  Initiate a retrieval job.
 --
--- A data retrieval policy can cause your initiate retrieval job request to
--- fail with a PolicyEnforcedException exception. For more information about
--- data retrieval policies, see <http://docs.aws.amazon.com/amazonglacier/latest/dev/data-retrieval-policy.html Amazon Glacier Data Retrieval Policies>. For more
--- information about the PolicyEnforcedException exception, see <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-error-responses.html Error Responses>.
+--     A data retrieval policy can cause your initiate retrieval job
+--     request to fail with a PolicyEnforcedException exception. For more
+--     information about data retrieval policies, see
+--     <http://docs.aws.amazon.com/amazonglacier/latest/dev/data-retrieval-policy.html Amazon Glacier Data Retrieval Policies>.
+--     For more information about the PolicyEnforcedException exception,
+--     see
+--     <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-error-responses.html Error Responses>.
 --
--- After the job completes, download the bytes.
+-- 2.  After the job completes, download the bytes.
 --
 -- The retrieval request is executed asynchronously. When you initiate a
 -- retrieval job, Amazon Glacier creates a job and returns a job ID in the
--- response. When Amazon Glacier completes the job, you can get the job output
--- (archive or inventory data). For information about getting job output, see 'GetJobOutput' operation.
+-- response. When Amazon Glacier completes the job, you can get the job
+-- output (archive or inventory data). For information about getting job
+-- output, see GetJobOutput operation.
 --
--- The job must complete before you can get its output. To determine when a job
--- is complete, you have the following options:
+-- The job must complete before you can get its output. To determine when a
+-- job is complete, you have the following options:
 --
--- Use Amazon SNS Notification You can specify an Amazon Simple Notification
--- Service (Amazon SNS) topic to which Amazon Glacier can post a notification
--- after the job is completed. You can specify an SNS topic per job request. The
--- notification is sent only after Amazon Glacier completes the job. In addition
--- to specifying an SNS topic per job request, you can configure vault
--- notifications for a vault so that job notifications are always sent. For more
--- information, see 'SetVaultNotifications'.
+-- -   __Use Amazon SNS Notification__ You can specify an Amazon Simple
+--     Notification Service (Amazon SNS) topic to which Amazon Glacier can
+--     post a notification after the job is completed. You can specify an
+--     SNS topic per job request. The notification is sent only after
+--     Amazon Glacier completes the job. In addition to specifying an SNS
+--     topic per job request, you can configure vault notifications for a
+--     vault so that job notifications are always sent. For more
+--     information, see SetVaultNotifications.
 --
--- Get job details You can make a 'DescribeJob' request to obtain job status
--- information while a job is in progress. However, it is more efficient to use
--- an Amazon SNS notification to determine when a job is complete.
+-- -   __Get job details__ You can make a DescribeJob request to obtain job
+--     status information while a job is in progress. However, it is more
+--     efficient to use an Amazon SNS notification to determine when a job
+--     is complete.
 --
--- The information you get via notification is same that you get by calling 'DescribeJob'.
+-- The information you get via notification is same that you get by calling
+-- DescribeJob.
 --
--- If for a specific event, you add both the notification configuration on the
--- vault and also specify an SNS topic in your initiate job request, Amazon
--- Glacier sends both notifications. For more information, see 'SetVaultNotifications'.
+-- If for a specific event, you add both the notification configuration on
+-- the vault and also specify an SNS topic in your initiate job request,
+-- Amazon Glacier sends both notifications. For more information, see
+-- SetVaultNotifications.
 --
 -- An AWS account has full permission to perform all operations (actions).
--- However, AWS Identity and Access Management (IAM) users don't have any
--- permissions by default. You must grant them explicit permission to perform
--- specific actions. For more information, see <http://docs.aws.amazon.com/amazonglacier/latest/dev/using-iam-with-amazon-glacier.html Access Control Using AWS Identityand Access Management (IAM)>.
+-- However, AWS Identity and Access Management (IAM) users don\'t have any
+-- permissions by default. You must grant them explicit permission to
+-- perform specific actions. For more information, see
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/using-iam-with-amazon-glacier.html Access Control Using AWS Identity and Access Management (IAM)>.
 --
--- About the Vault Inventory
+-- __About the Vault Inventory__
 --
--- Amazon Glacier prepares an inventory for each vault periodically, every 24
--- hours. When you initiate a job for a vault inventory, Amazon Glacier returns
--- the last inventory for the vault. The inventory data you get might be up to a
--- day or two days old. Also, the initiate inventory job might take some time to
--- complete before you can download the vault inventory. So you do not want to
--- retrieve a vault inventory for each vault operation. However, in some
--- scenarios, you might find the vault inventory useful. For example, when you
--- upload an archive, you can provide an archive description but not an archive
--- name. Amazon Glacier provides you a unique archive ID, an opaque string of
--- characters. So, you might maintain your own database that maps archive names
--- to their corresponding Amazon Glacier assigned archive IDs. You might find
--- the vault inventory useful in the event you need to reconcile information in
+-- Amazon Glacier prepares an inventory for each vault periodically, every
+-- 24 hours. When you initiate a job for a vault inventory, Amazon Glacier
+-- returns the last inventory for the vault. The inventory data you get
+-- might be up to a day or two days old. Also, the initiate inventory job
+-- might take some time to complete before you can download the vault
+-- inventory. So you do not want to retrieve a vault inventory for each
+-- vault operation. However, in some scenarios, you might find the vault
+-- inventory useful. For example, when you upload an archive, you can
+-- provide an archive description but not an archive name. Amazon Glacier
+-- provides you a unique archive ID, an opaque string of characters. So,
+-- you might maintain your own database that maps archive names to their
+-- corresponding Amazon Glacier assigned archive IDs. You might find the
+-- vault inventory useful in the event you need to reconcile information in
 -- your database with the actual vault inventory.
 --
--- Range Inventory Retrieval
+-- __Range Inventory Retrieval__
 --
--- You can limit the number of inventory items retrieved by filtering on the
--- archive creation date or by setting a limit.
+-- You can limit the number of inventory items retrieved by filtering on
+-- the archive creation date or by setting a limit.
 --
 -- /Filtering by Archive Creation Date/
 --
--- You can retrieve inventory items for archives created between 'StartDate' and 'EndDate' by specifying values for these parameters in the InitiateJob request.
--- Archives created on or after the 'StartDate' and before the 'EndDate' will be
--- returned. If you only provide the 'StartDate' without the 'EndDate', you will
--- retrieve the inventory for all archives created on or after the 'StartDate'. If
--- you only provide the 'EndDate' without the 'StartDate', you will get back the
--- inventory for all archives created before the 'EndDate'.
+-- You can retrieve inventory items for archives created between
+-- 'StartDate' and 'EndDate' by specifying values for these parameters in
+-- the __InitiateJob__ request. Archives created on or after the
+-- 'StartDate' and before the 'EndDate' will be returned. If you only
+-- provide the 'StartDate' without the 'EndDate', you will retrieve the
+-- inventory for all archives created on or after the 'StartDate'. If you
+-- only provide the 'EndDate' without the 'StartDate', you will get back
+-- the inventory for all archives created before the 'EndDate'.
 --
 -- /Limiting Inventory Items per Retrieval/
 --
--- You can limit the number of inventory items returned by setting the 'Limit'
--- parameter in the InitiateJob request. The inventory job output will contain
--- inventory items up to the specified 'Limit'. If there are more inventory items
--- available, the result is paginated. After a job is complete you can use the 'DescribeJob' operation to get a marker that you use in a subsequent InitiateJob request.
--- The marker will indicate the starting point to retrieve the next set of
--- inventory items. You can page through your entire inventory by repeatedly
--- making InitiateJob requests with the marker from the previous DescribeJob
--- output, until you get a marker from DescribeJob that returns null, indicating
--- that there are no more inventory items available.
+-- You can limit the number of inventory items returned by setting the
+-- 'Limit' parameter in the __InitiateJob__ request. The inventory job
+-- output will contain inventory items up to the specified 'Limit'. If
+-- there are more inventory items available, the result is paginated. After
+-- a job is complete you can use the DescribeJob operation to get a marker
+-- that you use in a subsequent __InitiateJob__ request. The marker will
+-- indicate the starting point to retrieve the next set of inventory items.
+-- You can page through your entire inventory by repeatedly making
+-- __InitiateJob__ requests with the marker from the previous
+-- __DescribeJob__ output, until you get a marker from __DescribeJob__ that
+-- returns null, indicating that there are no more inventory items
+-- available.
 --
--- You can use the 'Limit' parameter together with the date range parameters.
+-- You can use the 'Limit' parameter together with the date range
+-- parameters.
 --
--- About Ranged Archive Retrieval
+-- __About Ranged Archive Retrieval__
 --
--- You can initiate an archive retrieval for the whole archive or a range of
--- the archive. In the case of ranged archive retrieval, you specify a byte
--- range to return or the whole archive. The range specified must be megabyte
--- (MB) aligned, that is the range start value must be divisible by 1 MB and
--- range end value plus 1 must be divisible by 1 MB or equal the end of the
--- archive. If the ranged archive retrieval is not megabyte aligned, this
--- operation returns a 400 response. Furthermore, to ensure you get checksum
--- values for data you download using Get Job Output API, the range must be tree
--- hash aligned.
+-- You can initiate an archive retrieval for the whole archive or a range
+-- of the archive. In the case of ranged archive retrieval, you specify a
+-- byte range to return or the whole archive. The range specified must be
+-- megabyte (MB) aligned, that is the range start value must be divisible
+-- by 1 MB and range end value plus 1 must be divisible by 1 MB or equal
+-- the end of the archive. If the ranged archive retrieval is not megabyte
+-- aligned, this operation returns a 400 response. Furthermore, to ensure
+-- you get checksum values for data you download using Get Job Output API,
+-- the range must be tree hash aligned.
 --
 -- An AWS account has full permission to perform all operations (actions).
--- However, AWS Identity and Access Management (IAM) users don't have any
--- permissions by default. You must grant them explicit permission to perform
--- specific actions. For more information, see <http://docs.aws.amazon.com/amazonglacier/latest/dev/using-iam-with-amazon-glacier.html Access Control Using AWS Identityand Access Management (IAM)>.
+-- However, AWS Identity and Access Management (IAM) users don\'t have any
+-- permissions by default. You must grant them explicit permission to
+-- perform specific actions. For more information, see
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/using-iam-with-amazon-glacier.html Access Control Using AWS Identity and Access Management (IAM)>.
 --
--- For conceptual information and the underlying REST API, go to <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-initiate-job-post.html Initiate a Job>
--- and <http://docs.aws.amazon.com/amazonglacier/latest/dev/vault-inventory.html Downloading a Vault Inventory>
+-- For conceptual information and the underlying REST API, go to
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-initiate-job-post.html Initiate a Job>
+-- and
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/vault-inventory.html Downloading a Vault Inventory>
 --
--- <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-InitiateJob.html>
+-- /See:/ <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-InitiateJob.html AWS API Reference> for InitiateJob.
 module Network.AWS.Glacier.InitiateJob
     (
-    -- * Request
-      InitiateJob
-    -- ** Request constructor
-    , initiateJob
-    -- ** Request lenses
-    , ijAccountId
+    -- * Creating a Request
+      initiateJob
+    , InitiateJob
+    -- * Request Lenses
     , ijJobParameters
+    , ijAccountId
     , ijVaultName
 
-    -- * Response
-    , InitiateJobResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , initiateJobResponse
-    -- ** Response lenses
-    , ijrJobId
-    , ijrLocation
+    , InitiateJobResponse
+    -- * Response Lenses
+    , ijrsJobId
+    , ijrsLocation
+    , ijrsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.RestJSON
-import Network.AWS.Glacier.Types
-import qualified GHC.Exts
-
-data InitiateJob = InitiateJob
-    { _ijAccountId     :: Text
-    , _ijJobParameters :: Maybe JobParameters
-    , _ijVaultName     :: Text
-    } deriving (Eq, Read, Show)
+import           Network.AWS.Glacier.Types
+import           Network.AWS.Glacier.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
--- | 'InitiateJob' constructor.
+-- | Provides options for initiating an Amazon Glacier job.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'initiateJob' smart constructor.
+data InitiateJob = InitiateJob'
+    { _ijJobParameters :: !(Maybe JobParameters)
+    , _ijAccountId     :: !Text
+    , _ijVaultName     :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InitiateJob' with the minimum fields required to make a request.
 --
--- * 'ijAccountId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'ijJobParameters' @::@ 'Maybe' 'JobParameters'
+-- * 'ijJobParameters'
 --
--- * 'ijVaultName' @::@ 'Text'
+-- * 'ijAccountId'
 --
-initiateJob :: Text -- ^ 'ijAccountId'
-            -> Text -- ^ 'ijVaultName'
-            -> InitiateJob
-initiateJob p1 p2 = InitiateJob
-    { _ijAccountId     = p1
-    , _ijVaultName     = p2
-    , _ijJobParameters = Nothing
+-- * 'ijVaultName'
+initiateJob
+    :: Text -- ^ 'ijAccountId'
+    -> Text -- ^ 'ijVaultName'
+    -> InitiateJob
+initiateJob pAccountId_ pVaultName_ =
+    InitiateJob'
+    { _ijJobParameters = Nothing
+    , _ijAccountId = pAccountId_
+    , _ijVaultName = pVaultName_
     }
 
--- | The 'AccountId' value is the AWS account ID of the account that owns the vault.
--- You can either specify an AWS account ID or optionally a single apos'-'apos
--- (hyphen), in which case Amazon Glacier uses the AWS account ID associated
--- with the credentials used to sign the request. If you use an account ID, do
--- not include any hyphens (apos-apos) in the ID.
-ijAccountId :: Lens' InitiateJob Text
-ijAccountId = lens _ijAccountId (\s a -> s { _ijAccountId = a })
-
 -- | Provides options for specifying job information.
 ijJobParameters :: Lens' InitiateJob (Maybe JobParameters)
-ijJobParameters = lens _ijJobParameters (\s a -> s { _ijJobParameters = a })
+ijJobParameters = lens _ijJobParameters (\ s a -> s{_ijJobParameters = a});
 
+-- | The 'AccountId' value is the AWS account ID of the account that owns the
+-- vault. You can either specify an AWS account ID or optionally a single
+-- apos'-'apos (hyphen), in which case Amazon Glacier uses the AWS account
+-- ID associated with the credentials used to sign the request. If you use
+-- an account ID, do not include any hyphens (apos-apos) in the ID.
+ijAccountId :: Lens' InitiateJob Text
+ijAccountId = lens _ijAccountId (\ s a -> s{_ijAccountId = a});
+
 -- | The name of the vault.
 ijVaultName :: Lens' InitiateJob Text
-ijVaultName = lens _ijVaultName (\s a -> s { _ijVaultName = a })
+ijVaultName = lens _ijVaultName (\ s a -> s{_ijVaultName = a});
 
-data InitiateJobResponse = InitiateJobResponse
-    { _ijrJobId    :: Maybe Text
-    , _ijrLocation :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
+instance AWSRequest InitiateJob where
+        type Sv InitiateJob = Glacier
+        type Rs InitiateJob = InitiateJobResponse
+        request = postJSON
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 InitiateJobResponse' <$>
+                   (h .#? "x-amz-job-id") <*> (h .#? "Location") <*>
+                     (pure (fromEnum s)))
 
--- | 'InitiateJobResponse' constructor.
+instance ToHeaders InitiateJob where
+        toHeaders = const mempty
+
+instance ToJSON InitiateJob where
+        toJSON InitiateJob'{..}
+          = object ["jobParameters" .= _ijJobParameters]
+
+instance ToPath InitiateJob where
+        toPath InitiateJob'{..}
+          = mconcat
+              ["/", toBS _ijAccountId, "/vaults/",
+               toBS _ijVaultName, "/jobs"]
+
+instance ToQuery InitiateJob where
+        toQuery = const mempty
+
+-- | Contains the Amazon Glacier response to your request.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'initiateJobResponse' smart constructor.
+data InitiateJobResponse = InitiateJobResponse'
+    { _ijrsJobId    :: !(Maybe Text)
+    , _ijrsLocation :: !(Maybe Text)
+    , _ijrsStatus   :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InitiateJobResponse' with the minimum fields required to make a request.
 --
--- * 'ijrJobId' @::@ 'Maybe' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'ijrLocation' @::@ 'Maybe' 'Text'
+-- * 'ijrsJobId'
 --
-initiateJobResponse :: InitiateJobResponse
-initiateJobResponse = InitiateJobResponse
-    { _ijrLocation = Nothing
-    , _ijrJobId    = Nothing
+-- * 'ijrsLocation'
+--
+-- * 'ijrsStatus'
+initiateJobResponse
+    :: Int -- ^ 'ijrsStatus'
+    -> InitiateJobResponse
+initiateJobResponse pStatus_ =
+    InitiateJobResponse'
+    { _ijrsJobId = Nothing
+    , _ijrsLocation = Nothing
+    , _ijrsStatus = pStatus_
     }
 
 -- | The ID of the job.
-ijrJobId :: Lens' InitiateJobResponse (Maybe Text)
-ijrJobId = lens _ijrJobId (\s a -> s { _ijrJobId = a })
+ijrsJobId :: Lens' InitiateJobResponse (Maybe Text)
+ijrsJobId = lens _ijrsJobId (\ s a -> s{_ijrsJobId = a});
 
 -- | The relative URI path of the job.
-ijrLocation :: Lens' InitiateJobResponse (Maybe Text)
-ijrLocation = lens _ijrLocation (\s a -> s { _ijrLocation = a })
-
-instance ToPath InitiateJob where
-    toPath InitiateJob{..} = mconcat
-        [ "/"
-        , toText _ijAccountId
-        , "/vaults/"
-        , toText _ijVaultName
-        , "/jobs"
-        ]
-
-instance ToQuery InitiateJob where
-    toQuery = const mempty
-
-instance ToHeaders InitiateJob
-
-instance ToJSON InitiateJob where
-    toJSON InitiateJob{..} = object
-        [ "jobParameters" .= _ijJobParameters
-        ]
-
-instance AWSRequest InitiateJob where
-    type Sv InitiateJob = Glacier
-    type Rs InitiateJob = InitiateJobResponse
+ijrsLocation :: Lens' InitiateJobResponse (Maybe Text)
+ijrsLocation = lens _ijrsLocation (\ s a -> s{_ijrsLocation = a});
 
-    request  = post
-    response = headerResponse $ \h -> InitiateJobResponse
-        <$> h ~:? "x-amz-job-id"
-        <*> h ~:? "Location"
+-- | The response status code.
+ijrsStatus :: Lens' InitiateJobResponse Int
+ijrsStatus = lens _ijrsStatus (\ s a -> s{_ijrsStatus = a});
diff --git a/gen/Network/AWS/Glacier/InitiateMultipartUpload.hs b/gen/Network/AWS/Glacier/InitiateMultipartUpload.hs
--- a/gen/Network/AWS/Glacier/InitiateMultipartUpload.hs
+++ b/gen/Network/AWS/Glacier/InitiateMultipartUpload.hs
@@ -1,197 +1,217 @@
-{-# 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.Glacier.InitiateMultipartUpload
--- 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.
-
--- | This operation initiates a multipart upload. Amazon Glacier creates a
--- multipart upload resource and returns its ID in the response. The multipart
--- upload ID is used in subsequent requests to upload parts of an archive (see 'UploadMultipartPart').
+-- This operation initiates a multipart upload. Amazon Glacier creates a
+-- multipart upload resource and returns its ID in the response. The
+-- multipart upload ID is used in subsequent requests to upload parts of an
+-- archive (see UploadMultipartPart).
 --
--- When you initiate a multipart upload, you specify the part size in number of
--- bytes. The part size must be a megabyte (1024 KB) multiplied by a power of
--- 2-for example, 1048576 (1 MB), 2097152 (2 MB), 4194304 (4 MB), 8388608 (8
--- MB), and so on. The minimum allowable part size is 1 MB, and the maximum is 4
--- GB.
+-- When you initiate a multipart upload, you specify the part size in
+-- number of bytes. The part size must be a megabyte (1024 KB) multiplied
+-- by a power of 2-for example, 1048576 (1 MB), 2097152 (2 MB), 4194304 (4
+-- MB), 8388608 (8 MB), and so on. The minimum allowable part size is 1 MB,
+-- and the maximum is 4 GB.
 --
--- Every part you upload to this resource (see 'UploadMultipartPart'), except the
--- last one, must have the same size. The last one can be the same size or
--- smaller. For example, suppose you want to upload a 16.2 MB file. If you
--- initiate the multipart upload with a part size of 4 MB, you will upload four
--- parts of 4 MB each and one part of 0.2 MB.
+-- Every part you upload to this resource (see UploadMultipartPart), except
+-- the last one, must have the same size. The last one can be the same size
+-- or smaller. For example, suppose you want to upload a 16.2 MB file. If
+-- you initiate the multipart upload with a part size of 4 MB, you will
+-- upload four parts of 4 MB each and one part of 0.2 MB.
 --
--- You don't need to know the size of the archive when you start a multipart
--- upload because Amazon Glacier does not require you to specify the overall
--- archive size.
+-- You don\'t need to know the size of the archive when you start a
+-- multipart upload because Amazon Glacier does not require you to specify
+-- the overall archive size.
 --
 -- After you complete the multipart upload, Amazon Glacier removes the
--- multipart upload resource referenced by the ID. Amazon Glacier also removes
--- the multipart upload resource if you cancel the multipart upload or it may be
--- removed if there is no activity for a period of 24 hours.
+-- multipart upload resource referenced by the ID. Amazon Glacier also
+-- removes the multipart upload resource if you cancel the multipart upload
+-- or it may be removed if there is no activity for a period of 24 hours.
 --
 -- An AWS account has full permission to perform all operations (actions).
--- However, AWS Identity and Access Management (IAM) users don't have any
--- permissions by default. You must grant them explicit permission to perform
--- specific actions. For more information, see <http://docs.aws.amazon.com/amazonglacier/latest/dev/using-iam-with-amazon-glacier.html Access Control Using AWS Identityand Access Management (IAM)>.
+-- However, AWS Identity and Access Management (IAM) users don\'t have any
+-- permissions by default. You must grant them explicit permission to
+-- perform specific actions. For more information, see
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/using-iam-with-amazon-glacier.html Access Control Using AWS Identity and Access Management (IAM)>.
 --
--- For conceptual information and underlying REST API, go to <http://docs.aws.amazon.com/amazonglacier/latest/dev/uploading-archive-mpu.html Uploading LargeArchives in Parts (Multipart Upload)> and <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-multipart-initiate-upload.html Initiate Multipart Upload> in the /Amazon Glacier Developer Guide/.
+-- For conceptual information and underlying REST API, go to
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/uploading-archive-mpu.html Uploading Large Archives in Parts (Multipart Upload)>
+-- and
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-multipart-initiate-upload.html Initiate Multipart Upload>
+-- in the /Amazon Glacier Developer Guide/.
 --
--- <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-InitiateMultipartUpload.html>
+-- /See:/ <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-InitiateMultipartUpload.html AWS API Reference> for InitiateMultipartUpload.
 module Network.AWS.Glacier.InitiateMultipartUpload
     (
-    -- * Request
-      InitiateMultipartUpload
-    -- ** Request constructor
-    , initiateMultipartUpload
-    -- ** Request lenses
-    , imuAccountId
-    , imuArchiveDescription
+    -- * Creating a Request
+      initiateMultipartUpload
+    , InitiateMultipartUpload
+    -- * Request Lenses
     , imuPartSize
+    , imuArchiveDescription
+    , imuAccountId
     , imuVaultName
 
-    -- * Response
-    , InitiateMultipartUploadResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , initiateMultipartUploadResponse
-    -- ** Response lenses
-    , imurLocation
-    , imurUploadId
+    , InitiateMultipartUploadResponse
+    -- * Response Lenses
+    , imursLocation
+    , imursUploadId
+    , imursStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.RestJSON
-import Network.AWS.Glacier.Types
-import qualified GHC.Exts
-
-data InitiateMultipartUpload = InitiateMultipartUpload
-    { _imuAccountId          :: Text
-    , _imuArchiveDescription :: Maybe Text
-    , _imuPartSize           :: Maybe Text
-    , _imuVaultName          :: Text
-    } deriving (Eq, Ord, Read, Show)
+import           Network.AWS.Glacier.Types
+import           Network.AWS.Glacier.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
--- | 'InitiateMultipartUpload' constructor.
+-- | Provides options for initiating a multipart upload to an Amazon Glacier
+-- vault.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'initiateMultipartUpload' smart constructor.
+data InitiateMultipartUpload = InitiateMultipartUpload'
+    { _imuPartSize           :: !(Maybe Text)
+    , _imuArchiveDescription :: !(Maybe Text)
+    , _imuAccountId          :: !Text
+    , _imuVaultName          :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InitiateMultipartUpload' with the minimum fields required to make a request.
 --
--- * 'imuAccountId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'imuArchiveDescription' @::@ 'Maybe' 'Text'
+-- * 'imuPartSize'
 --
--- * 'imuPartSize' @::@ 'Maybe' 'Text'
+-- * 'imuArchiveDescription'
 --
--- * 'imuVaultName' @::@ 'Text'
+-- * 'imuAccountId'
 --
-initiateMultipartUpload :: Text -- ^ 'imuAccountId'
-                        -> Text -- ^ 'imuVaultName'
-                        -> InitiateMultipartUpload
-initiateMultipartUpload p1 p2 = InitiateMultipartUpload
-    { _imuAccountId          = p1
-    , _imuVaultName          = p2
+-- * 'imuVaultName'
+initiateMultipartUpload
+    :: Text -- ^ 'imuAccountId'
+    -> Text -- ^ 'imuVaultName'
+    -> InitiateMultipartUpload
+initiateMultipartUpload pAccountId_ pVaultName_ =
+    InitiateMultipartUpload'
+    { _imuPartSize = Nothing
     , _imuArchiveDescription = Nothing
-    , _imuPartSize           = Nothing
+    , _imuAccountId = pAccountId_
+    , _imuVaultName = pVaultName_
     }
 
--- | The 'AccountId' value is the AWS account ID of the account that owns the vault.
--- You can either specify an AWS account ID or optionally a single apos'-'apos
--- (hyphen), in which case Amazon Glacier uses the AWS account ID associated
--- with the credentials used to sign the request. If you use an account ID, do
--- not include any hyphens (apos-apos) in the ID.
-imuAccountId :: Lens' InitiateMultipartUpload Text
-imuAccountId = lens _imuAccountId (\s a -> s { _imuAccountId = a })
+-- | The size of each part except the last, in bytes. The last part can be
+-- smaller than this part size.
+imuPartSize :: Lens' InitiateMultipartUpload (Maybe Text)
+imuPartSize = lens _imuPartSize (\ s a -> s{_imuPartSize = a});
 
 -- | The archive description that you are uploading in parts.
 --
--- The part size must be a megabyte (1024 KB) multiplied by a power of 2—for
--- example, 1048576 (1 MB), 2097152 (2 MB), 4194304 (4 MB), 8388608 (8 MB), and
--- so on. The minimum allowable part size is 1 MB, and the maximum is 4 GB (4096
--- MB).
+-- The part size must be a megabyte (1024 KB) multiplied by a power of 2,
+-- for example 1048576 (1 MB), 2097152 (2 MB), 4194304 (4 MB), 8388608 (8
+-- MB), and so on. The minimum allowable part size is 1 MB, and the maximum
+-- is 4 GB (4096 MB).
 imuArchiveDescription :: Lens' InitiateMultipartUpload (Maybe Text)
-imuArchiveDescription =
-    lens _imuArchiveDescription (\s a -> s { _imuArchiveDescription = a })
+imuArchiveDescription = lens _imuArchiveDescription (\ s a -> s{_imuArchiveDescription = a});
 
--- | The size of each part except the last, in bytes. The last part can be smaller
--- than this part size.
-imuPartSize :: Lens' InitiateMultipartUpload (Maybe Text)
-imuPartSize = lens _imuPartSize (\s a -> s { _imuPartSize = a })
+-- | The 'AccountId' value is the AWS account ID of the account that owns the
+-- vault. You can either specify an AWS account ID or optionally a single
+-- apos'-'apos (hyphen), in which case Amazon Glacier uses the AWS account
+-- ID associated with the credentials used to sign the request. If you use
+-- an account ID, do not include any hyphens (apos-apos) in the ID.
+imuAccountId :: Lens' InitiateMultipartUpload Text
+imuAccountId = lens _imuAccountId (\ s a -> s{_imuAccountId = a});
 
 -- | The name of the vault.
 imuVaultName :: Lens' InitiateMultipartUpload Text
-imuVaultName = lens _imuVaultName (\s a -> s { _imuVaultName = a })
-
-data InitiateMultipartUploadResponse = InitiateMultipartUploadResponse
-    { _imurLocation :: Maybe Text
-    , _imurUploadId :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
+imuVaultName = lens _imuVaultName (\ s a -> s{_imuVaultName = a});
 
--- | 'InitiateMultipartUploadResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'imurLocation' @::@ 'Maybe' 'Text'
---
--- * 'imurUploadId' @::@ 'Maybe' 'Text'
---
-initiateMultipartUploadResponse :: InitiateMultipartUploadResponse
-initiateMultipartUploadResponse = InitiateMultipartUploadResponse
-    { _imurLocation = Nothing
-    , _imurUploadId = Nothing
-    }
+instance AWSRequest InitiateMultipartUpload where
+        type Sv InitiateMultipartUpload = Glacier
+        type Rs InitiateMultipartUpload =
+             InitiateMultipartUploadResponse
+        request = postJSON
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 InitiateMultipartUploadResponse' <$>
+                   (h .#? "Location") <*>
+                     (h .#? "x-amz-multipart-upload-id")
+                     <*> (pure (fromEnum s)))
 
--- | The relative URI path of the multipart upload ID Amazon Glacier created.
-imurLocation :: Lens' InitiateMultipartUploadResponse (Maybe Text)
-imurLocation = lens _imurLocation (\s a -> s { _imurLocation = a })
+instance ToHeaders InitiateMultipartUpload where
+        toHeaders InitiateMultipartUpload'{..}
+          = mconcat
+              ["x-amz-part-size" =# _imuPartSize,
+               "x-amz-archive-description" =#
+                 _imuArchiveDescription]
 
--- | The ID of the multipart upload. This value is also included as part of the
--- location.
-imurUploadId :: Lens' InitiateMultipartUploadResponse (Maybe Text)
-imurUploadId = lens _imurUploadId (\s a -> s { _imurUploadId = a })
+instance ToJSON InitiateMultipartUpload where
+        toJSON = const (Object mempty)
 
 instance ToPath InitiateMultipartUpload where
-    toPath InitiateMultipartUpload{..} = mconcat
-        [ "/"
-        , toText _imuAccountId
-        , "/vaults/"
-        , toText _imuVaultName
-        , "/multipart-uploads"
-        ]
+        toPath InitiateMultipartUpload'{..}
+          = mconcat
+              ["/", toBS _imuAccountId, "/vaults/",
+               toBS _imuVaultName, "/multipart-uploads"]
 
 instance ToQuery InitiateMultipartUpload where
-    toQuery = const mempty
+        toQuery = const mempty
 
-instance ToHeaders InitiateMultipartUpload where
-    toHeaders InitiateMultipartUpload{..} = mconcat
-        [ "x-amz-archive-description" =: _imuArchiveDescription
-        , "x-amz-part-size"           =: _imuPartSize
-        ]
+-- | The Amazon Glacier response to your request.
+--
+-- /See:/ 'initiateMultipartUploadResponse' smart constructor.
+data InitiateMultipartUploadResponse = InitiateMultipartUploadResponse'
+    { _imursLocation :: !(Maybe Text)
+    , _imursUploadId :: !(Maybe Text)
+    , _imursStatus   :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance ToJSON InitiateMultipartUpload where
-    toJSON = const (toJSON Empty)
+-- | Creates a value of 'InitiateMultipartUploadResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'imursLocation'
+--
+-- * 'imursUploadId'
+--
+-- * 'imursStatus'
+initiateMultipartUploadResponse
+    :: Int -- ^ 'imursStatus'
+    -> InitiateMultipartUploadResponse
+initiateMultipartUploadResponse pStatus_ =
+    InitiateMultipartUploadResponse'
+    { _imursLocation = Nothing
+    , _imursUploadId = Nothing
+    , _imursStatus = pStatus_
+    }
 
-instance AWSRequest InitiateMultipartUpload where
-    type Sv InitiateMultipartUpload = Glacier
-    type Rs InitiateMultipartUpload = InitiateMultipartUploadResponse
+-- | The relative URI path of the multipart upload ID Amazon Glacier created.
+imursLocation :: Lens' InitiateMultipartUploadResponse (Maybe Text)
+imursLocation = lens _imursLocation (\ s a -> s{_imursLocation = a});
 
-    request  = post
-    response = headerResponse $ \h -> InitiateMultipartUploadResponse
-        <$> h ~:? "Location"
-        <*> h ~:? "x-amz-multipart-upload-id"
+-- | The ID of the multipart upload. This value is also included as part of
+-- the location.
+imursUploadId :: Lens' InitiateMultipartUploadResponse (Maybe Text)
+imursUploadId = lens _imursUploadId (\ s a -> s{_imursUploadId = a});
+
+-- | The response status code.
+imursStatus :: Lens' InitiateMultipartUploadResponse Int
+imursStatus = lens _imursStatus (\ s a -> s{_imursStatus = a});
diff --git a/gen/Network/AWS/Glacier/InitiateVaultLock.hs b/gen/Network/AWS/Glacier/InitiateVaultLock.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glacier/InitiateVaultLock.hs
@@ -0,0 +1,184 @@
+{-# 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.Glacier.InitiateVaultLock
+-- 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)
+--
+-- This operation initiates the vault locking process by doing the
+-- following:
+--
+-- -   Installing a vault lock policy on the specified vault.
+--
+-- -   Setting the lock state of vault lock to 'InProgress'.
+--
+-- -   Returning a lock ID, which is used to complete the vault locking
+--     process.
+--
+-- You can set one vault lock policy for each vault and this policy can be
+-- up to 20 KB in size. For more information about vault lock policies, see
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/vault-lock-policy.html Amazon Glacier Access Control with Vault Lock Policies>.
+--
+-- You must complete the vault locking process within 24 hours after the
+-- vault lock enters the 'InProgress' state. After the 24 hour window ends,
+-- the lock ID expires, the vault automatically exits the 'InProgress'
+-- state, and the vault lock policy is removed from the vault. You call
+-- CompleteVaultLock to complete the vault locking process by setting the
+-- state of the vault lock to 'Locked'.
+--
+-- After a vault lock is in the 'Locked' state, you cannot initiate a new
+-- vault lock for the vault.
+--
+-- You can abort the vault locking process by calling AbortVaultLock. You
+-- can get the state of the vault lock by calling GetVaultLock. For more
+-- information about the vault locking process,
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/vault-lock.html Amazon Glacier Vault Lock>.
+--
+-- If this operation is called when the vault lock is in the 'InProgress'
+-- state, the operation returns an 'AccessDeniedException' error. When the
+-- vault lock is in the 'InProgress' state you must call AbortVaultLock
+-- before you can initiate a new vault lock policy.
+--
+-- /See:/ <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-InitiateVaultLock.html AWS API Reference> for InitiateVaultLock.
+module Network.AWS.Glacier.InitiateVaultLock
+    (
+    -- * Creating a Request
+      initiateVaultLock
+    , InitiateVaultLock
+    -- * Request Lenses
+    , ivlPolicy
+    , ivlAccountId
+    , ivlVaultName
+
+    -- * Destructuring the Response
+    , initiateVaultLockResponse
+    , InitiateVaultLockResponse
+    -- * Response Lenses
+    , ivlrsLockId
+    , ivlrsStatus
+    ) where
+
+import           Network.AWS.Glacier.Types
+import           Network.AWS.Glacier.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | The input values for 'InitiateVaultLock'.
+--
+-- /See:/ 'initiateVaultLock' smart constructor.
+data InitiateVaultLock = InitiateVaultLock'
+    { _ivlPolicy    :: !(Maybe VaultLockPolicy)
+    , _ivlAccountId :: !Text
+    , _ivlVaultName :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InitiateVaultLock' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ivlPolicy'
+--
+-- * 'ivlAccountId'
+--
+-- * 'ivlVaultName'
+initiateVaultLock
+    :: Text -- ^ 'ivlAccountId'
+    -> Text -- ^ 'ivlVaultName'
+    -> InitiateVaultLock
+initiateVaultLock pAccountId_ pVaultName_ =
+    InitiateVaultLock'
+    { _ivlPolicy = Nothing
+    , _ivlAccountId = pAccountId_
+    , _ivlVaultName = pVaultName_
+    }
+
+-- | The vault lock policy as a JSON string, which uses \"\\\" as an escape
+-- character.
+ivlPolicy :: Lens' InitiateVaultLock (Maybe VaultLockPolicy)
+ivlPolicy = lens _ivlPolicy (\ s a -> s{_ivlPolicy = a});
+
+-- | The 'AccountId' value is the AWS account ID. This value must match the
+-- AWS account ID associated with the credentials used to sign the request.
+-- You can either specify an AWS account ID or optionally a single
+-- apos'-'apos (hyphen), in which case Amazon Glacier uses the AWS account
+-- ID associated with the credentials used to sign the request. If you
+-- specify your account ID, do not include any hyphens (apos-apos) in the
+-- ID.
+ivlAccountId :: Lens' InitiateVaultLock Text
+ivlAccountId = lens _ivlAccountId (\ s a -> s{_ivlAccountId = a});
+
+-- | The name of the vault.
+ivlVaultName :: Lens' InitiateVaultLock Text
+ivlVaultName = lens _ivlVaultName (\ s a -> s{_ivlVaultName = a});
+
+instance AWSRequest InitiateVaultLock where
+        type Sv InitiateVaultLock = Glacier
+        type Rs InitiateVaultLock = InitiateVaultLockResponse
+        request = postJSON
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 InitiateVaultLockResponse' <$>
+                   (h .#? "x-amz-lock-id") <*> (pure (fromEnum s)))
+
+instance ToHeaders InitiateVaultLock where
+        toHeaders = const mempty
+
+instance ToJSON InitiateVaultLock where
+        toJSON InitiateVaultLock'{..}
+          = object ["policy" .= _ivlPolicy]
+
+instance ToPath InitiateVaultLock where
+        toPath InitiateVaultLock'{..}
+          = mconcat
+              ["/", toBS _ivlAccountId, "/vaults/",
+               toBS _ivlVaultName, "/lock-policy"]
+
+instance ToQuery InitiateVaultLock where
+        toQuery = const mempty
+
+-- | Contains the Amazon Glacier response to your request.
+--
+-- /See:/ 'initiateVaultLockResponse' smart constructor.
+data InitiateVaultLockResponse = InitiateVaultLockResponse'
+    { _ivlrsLockId :: !(Maybe Text)
+    , _ivlrsStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InitiateVaultLockResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ivlrsLockId'
+--
+-- * 'ivlrsStatus'
+initiateVaultLockResponse
+    :: Int -- ^ 'ivlrsStatus'
+    -> InitiateVaultLockResponse
+initiateVaultLockResponse pStatus_ =
+    InitiateVaultLockResponse'
+    { _ivlrsLockId = Nothing
+    , _ivlrsStatus = pStatus_
+    }
+
+-- | The lock ID, which is used to complete the vault locking process.
+ivlrsLockId :: Lens' InitiateVaultLockResponse (Maybe Text)
+ivlrsLockId = lens _ivlrsLockId (\ s a -> s{_ivlrsLockId = a});
+
+-- | The response status code.
+ivlrsStatus :: Lens' InitiateVaultLockResponse Int
+ivlrsStatus = lens _ivlrsStatus (\ s a -> s{_ivlrsStatus = a});
diff --git a/gen/Network/AWS/Glacier/ListJobs.hs b/gen/Network/AWS/Glacier/ListJobs.hs
--- a/gen/Network/AWS/Glacier/ListJobs.hs
+++ b/gen/Network/AWS/Glacier/ListJobs.hs
@@ -1,226 +1,239 @@
-{-# 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.Glacier.ListJobs
--- 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.
-
--- | This operation lists jobs for a vault, including jobs that are in-progress
--- and jobs that have recently finished.
+-- This operation lists jobs for a vault, including jobs that are
+-- in-progress and jobs that have recently finished.
 --
--- Amazon Glacier retains recently completed jobs for a period before deleting
--- them; however, it eventually removes completed jobs. The output of completed
--- jobs can be retrieved. Retaining completed jobs for a period of time after
--- they have completed enables you to get a job output in the event you miss the
--- job completion notification or your first attempt to download it fails. For
--- example, suppose you start an archive retrieval job to download an archive.
--- After the job completes, you start to download the archive but encounter a
--- network error. In this scenario, you can retry and download the archive while
--- the job exists.
+-- Amazon Glacier retains recently completed jobs for a period before
+-- deleting them; however, it eventually removes completed jobs. The output
+-- of completed jobs can be retrieved. Retaining completed jobs for a
+-- period of time after they have completed enables you to get a job output
+-- in the event you miss the job completion notification or your first
+-- attempt to download it fails. For example, suppose you start an archive
+-- retrieval job to download an archive. After the job completes, you start
+-- to download the archive but encounter a network error. In this scenario,
+-- you can retry and download the archive while the job exists.
 --
--- To retrieve an archive or retrieve a vault inventory from Amazon Glacier,
--- you first initiate a job, and after the job completes, you download the data.
--- For an archive retrieval, the output is the archive data, and for an
--- inventory retrieval, it is the inventory list. The List Job operation returns
--- a list of these jobs sorted by job initiation time.
+-- To retrieve an archive or retrieve a vault inventory from Amazon
+-- Glacier, you first initiate a job, and after the job completes, you
+-- download the data. For an archive retrieval, the output is the archive
+-- data, and for an inventory retrieval, it is the inventory list. The List
+-- Job operation returns a list of these jobs sorted by job initiation
+-- time.
 --
 -- This List Jobs operation supports pagination. By default, this operation
 -- returns up to 1,000 jobs in the response. You should always check the
--- response for a 'marker' at which to continue the list; if there are no more
--- items the 'marker' is 'null'. To return a list of jobs that begins at a specific
--- job, set the 'marker' request parameter to the value you obtained from a
--- previous List Jobs request. You can also limit the number of jobs returned in
--- the response by specifying the 'limit' parameter in the request.
+-- response for a 'marker' at which to continue the list; if there are no
+-- more items the 'marker' is 'null'. To return a list of jobs that begins
+-- at a specific job, set the 'marker' request parameter to the value you
+-- obtained from a previous List Jobs request. You can also limit the
+-- number of jobs returned in the response by specifying the 'limit'
+-- parameter in the request.
 --
 -- Additionally, you can filter the jobs list returned by specifying an
--- optional 'statuscode' (InProgress, Succeeded, or Failed) and 'completed' (true,
--- false) parameter. The 'statuscode' allows you to specify that only jobs that
--- match a specified status are returned. The 'completed' parameter allows you to
--- specify that only jobs in a specific completion state are returned.
+-- optional 'statuscode' (InProgress, Succeeded, or Failed) and 'completed'
+-- (true, false) parameter. The 'statuscode' allows you to specify that
+-- only jobs that match a specified status are returned. The 'completed'
+-- parameter allows you to specify that only jobs in a specific completion
+-- state are returned.
 --
 -- An AWS account has full permission to perform all operations (actions).
--- However, AWS Identity and Access Management (IAM) users don't have any
--- permissions by default. You must grant them explicit permission to perform
--- specific actions. For more information, see <http://docs.aws.amazon.com/amazonglacier/latest/dev/using-iam-with-amazon-glacier.html Access Control Using AWS Identityand Access Management (IAM)>.
+-- However, AWS Identity and Access Management (IAM) users don\'t have any
+-- permissions by default. You must grant them explicit permission to
+-- perform specific actions. For more information, see
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/using-iam-with-amazon-glacier.html Access Control Using AWS Identity and Access Management (IAM)>.
 --
--- For the underlying REST API, go to <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-jobs-get.html List Jobs >
+-- For the underlying REST API, go to
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-jobs-get.html List Jobs>
 --
--- <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-ListJobs.html>
+-- /See:/ <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-ListJobs.html AWS API Reference> for ListJobs.
 module Network.AWS.Glacier.ListJobs
     (
-    -- * Request
-      ListJobs
-    -- ** Request constructor
-    , listJobs
-    -- ** Request lenses
-    , ljAccountId
+    -- * Creating a Request
+      listJobs
+    , ListJobs
+    -- * Request Lenses
+    , ljMarker
     , ljCompleted
     , ljLimit
-    , ljMarker
     , ljStatuscode
+    , ljAccountId
     , ljVaultName
 
-    -- * Response
-    , ListJobsResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , listJobsResponse
-    -- ** Response lenses
-    , ljrJobList
-    , ljrMarker
+    , ListJobsResponse
+    -- * Response Lenses
+    , ljrsMarker
+    , ljrsJobList
+    , ljrsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.RestJSON
-import Network.AWS.Glacier.Types
-import qualified GHC.Exts
-
-data ListJobs = ListJobs
-    { _ljAccountId  :: Text
-    , _ljCompleted  :: Maybe Text
-    , _ljLimit      :: Maybe Text
-    , _ljMarker     :: Maybe Text
-    , _ljStatuscode :: Maybe Text
-    , _ljVaultName  :: Text
-    } deriving (Eq, Ord, Read, Show)
+import           Network.AWS.Glacier.Types
+import           Network.AWS.Glacier.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
--- | 'ListJobs' constructor.
+-- | Provides options for retrieving a job list for an Amazon Glacier vault.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'listJobs' smart constructor.
+data ListJobs = ListJobs'
+    { _ljMarker     :: !(Maybe Text)
+    , _ljCompleted  :: !(Maybe Text)
+    , _ljLimit      :: !(Maybe Text)
+    , _ljStatuscode :: !(Maybe Text)
+    , _ljAccountId  :: !Text
+    , _ljVaultName  :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListJobs' with the minimum fields required to make a request.
 --
--- * 'ljAccountId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'ljCompleted' @::@ 'Maybe' 'Text'
+-- * 'ljMarker'
 --
--- * 'ljLimit' @::@ 'Maybe' 'Text'
+-- * 'ljCompleted'
 --
--- * 'ljMarker' @::@ 'Maybe' 'Text'
+-- * 'ljLimit'
 --
--- * 'ljStatuscode' @::@ 'Maybe' 'Text'
+-- * 'ljStatuscode'
 --
--- * 'ljVaultName' @::@ 'Text'
+-- * 'ljAccountId'
 --
-listJobs :: Text -- ^ 'ljAccountId'
-         -> Text -- ^ 'ljVaultName'
-         -> ListJobs
-listJobs p1 p2 = ListJobs
-    { _ljAccountId  = p1
-    , _ljVaultName  = p2
-    , _ljLimit      = Nothing
-    , _ljMarker     = Nothing
+-- * 'ljVaultName'
+listJobs
+    :: Text -- ^ 'ljAccountId'
+    -> Text -- ^ 'ljVaultName'
+    -> ListJobs
+listJobs pAccountId_ pVaultName_ =
+    ListJobs'
+    { _ljMarker = Nothing
+    , _ljCompleted = Nothing
+    , _ljLimit = Nothing
     , _ljStatuscode = Nothing
-    , _ljCompleted  = Nothing
+    , _ljAccountId = pAccountId_
+    , _ljVaultName = pVaultName_
     }
 
--- | The 'AccountId' value is the AWS account ID of the account that owns the vault.
--- You can either specify an AWS account ID or optionally a single apos'-'apos
--- (hyphen), in which case Amazon Glacier uses the AWS account ID associated
--- with the credentials used to sign the request. If you use an account ID, do
--- not include any hyphens (apos-apos) in the ID.
-ljAccountId :: Lens' ListJobs Text
-ljAccountId = lens _ljAccountId (\s a -> s { _ljAccountId = a })
+-- | An opaque string used for pagination. This value specifies the job at
+-- which the listing of jobs should begin. Get the marker value from a
+-- previous List Jobs response. You need only include the marker if you are
+-- continuing the pagination of results started in a previous List Jobs
+-- request.
+ljMarker :: Lens' ListJobs (Maybe Text)
+ljMarker = lens _ljMarker (\ s a -> s{_ljMarker = a});
 
--- | Specifies the state of the jobs to return. You can specify 'true' or 'false'.
+-- | Specifies the state of the jobs to return. You can specify 'true' or
+-- 'false'.
 ljCompleted :: Lens' ListJobs (Maybe Text)
-ljCompleted = lens _ljCompleted (\s a -> s { _ljCompleted = a })
+ljCompleted = lens _ljCompleted (\ s a -> s{_ljCompleted = a});
 
--- | Specifies that the response be limited to the specified number of items or
--- fewer. If not specified, the List Jobs operation returns up to 1,000 jobs.
+-- | Specifies that the response be limited to the specified number of items
+-- or fewer. If not specified, the List Jobs operation returns up to 1,000
+-- jobs.
 ljLimit :: Lens' ListJobs (Maybe Text)
-ljLimit = lens _ljLimit (\s a -> s { _ljLimit = a })
-
--- | An opaque string used for pagination. This value specifies the job at which
--- the listing of jobs should begin. Get the marker value from a previous List
--- Jobs response. You need only include the marker if you are continuing the
--- pagination of results started in a previous List Jobs request.
-ljMarker :: Lens' ListJobs (Maybe Text)
-ljMarker = lens _ljMarker (\s a -> s { _ljMarker = a })
+ljLimit = lens _ljLimit (\ s a -> s{_ljLimit = a});
 
--- | Specifies the type of job status to return. You can specify the following
--- values: "InProgress", "Succeeded", or "Failed".
+-- | Specifies the type of job status to return. You can specify the
+-- following values: \"InProgress\", \"Succeeded\", or \"Failed\".
 ljStatuscode :: Lens' ListJobs (Maybe Text)
-ljStatuscode = lens _ljStatuscode (\s a -> s { _ljStatuscode = a })
+ljStatuscode = lens _ljStatuscode (\ s a -> s{_ljStatuscode = a});
 
+-- | The 'AccountId' value is the AWS account ID of the account that owns the
+-- vault. You can either specify an AWS account ID or optionally a single
+-- apos'-'apos (hyphen), in which case Amazon Glacier uses the AWS account
+-- ID associated with the credentials used to sign the request. If you use
+-- an account ID, do not include any hyphens (apos-apos) in the ID.
+ljAccountId :: Lens' ListJobs Text
+ljAccountId = lens _ljAccountId (\ s a -> s{_ljAccountId = a});
+
 -- | The name of the vault.
 ljVaultName :: Lens' ListJobs Text
-ljVaultName = lens _ljVaultName (\s a -> s { _ljVaultName = a })
-
-data ListJobsResponse = ListJobsResponse
-    { _ljrJobList :: List "JobList" GlacierJobDescription
-    , _ljrMarker  :: Maybe Text
-    } deriving (Eq, Read, Show)
-
--- | 'ListJobsResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'ljrJobList' @::@ ['GlacierJobDescription']
---
--- * 'ljrMarker' @::@ 'Maybe' 'Text'
---
-listJobsResponse :: ListJobsResponse
-listJobsResponse = ListJobsResponse
-    { _ljrJobList = mempty
-    , _ljrMarker  = Nothing
-    }
+ljVaultName = lens _ljVaultName (\ s a -> s{_ljVaultName = a});
 
--- | A list of job objects. Each job object contains metadata describing the job.
-ljrJobList :: Lens' ListJobsResponse [GlacierJobDescription]
-ljrJobList = lens _ljrJobList (\s a -> s { _ljrJobList = a }) . _List
+instance AWSRequest ListJobs where
+        type Sv ListJobs = Glacier
+        type Rs ListJobs = ListJobsResponse
+        request = get
+        response
+          = receiveJSON
+              (\ s h x ->
+                 ListJobsResponse' <$>
+                   (x .?> "Marker") <*> (x .?> "JobList" .!@ mempty) <*>
+                     (pure (fromEnum s)))
 
--- | An opaque string that represents where to continue pagination of the results.
--- You use this value in a new List Jobs request to obtain more jobs in the
--- list. If there are no more jobs, this value is 'null'.
-ljrMarker :: Lens' ListJobsResponse (Maybe Text)
-ljrMarker = lens _ljrMarker (\s a -> s { _ljrMarker = a })
+instance ToHeaders ListJobs where
+        toHeaders = const mempty
 
 instance ToPath ListJobs where
-    toPath ListJobs{..} = mconcat
-        [ "/"
-        , toText _ljAccountId
-        , "/vaults/"
-        , toText _ljVaultName
-        , "/jobs"
-        ]
+        toPath ListJobs'{..}
+          = mconcat
+              ["/", toBS _ljAccountId, "/vaults/",
+               toBS _ljVaultName, "/jobs"]
 
 instance ToQuery ListJobs where
-    toQuery ListJobs{..} = mconcat
-        [ "limit"      =? _ljLimit
-        , "marker"     =? _ljMarker
-        , "statuscode" =? _ljStatuscode
-        , "completed"  =? _ljCompleted
-        ]
+        toQuery ListJobs'{..}
+          = mconcat
+              ["marker" =: _ljMarker, "completed" =: _ljCompleted,
+               "limit" =: _ljLimit, "statuscode" =: _ljStatuscode]
 
-instance ToHeaders ListJobs
+-- | Contains the Amazon Glacier response to your request.
+--
+-- /See:/ 'listJobsResponse' smart constructor.
+data ListJobsResponse = ListJobsResponse'
+    { _ljrsMarker  :: !(Maybe Text)
+    , _ljrsJobList :: !(Maybe [GlacierJobDescription])
+    , _ljrsStatus  :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance ToJSON ListJobs where
-    toJSON = const (toJSON Empty)
+-- | Creates a value of 'ListJobsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ljrsMarker'
+--
+-- * 'ljrsJobList'
+--
+-- * 'ljrsStatus'
+listJobsResponse
+    :: Int -- ^ 'ljrsStatus'
+    -> ListJobsResponse
+listJobsResponse pStatus_ =
+    ListJobsResponse'
+    { _ljrsMarker = Nothing
+    , _ljrsJobList = Nothing
+    , _ljrsStatus = pStatus_
+    }
 
-instance AWSRequest ListJobs where
-    type Sv ListJobs = Glacier
-    type Rs ListJobs = ListJobsResponse
+-- | An opaque string that represents where to continue pagination of the
+-- results. You use this value in a new List Jobs request to obtain more
+-- jobs in the list. If there are no more jobs, this value is 'null'.
+ljrsMarker :: Lens' ListJobsResponse (Maybe Text)
+ljrsMarker = lens _ljrsMarker (\ s a -> s{_ljrsMarker = a});
 
-    request  = get
-    response = jsonResponse
+-- | A list of job objects. Each job object contains metadata describing the
+-- job.
+ljrsJobList :: Lens' ListJobsResponse [GlacierJobDescription]
+ljrsJobList = lens _ljrsJobList (\ s a -> s{_ljrsJobList = a}) . _Default . _Coerce;
 
-instance FromJSON ListJobsResponse where
-    parseJSON = withObject "ListJobsResponse" $ \o -> ListJobsResponse
-        <$> o .:? "JobList" .!= mempty
-        <*> o .:? "Marker"
+-- | The response status code.
+ljrsStatus :: Lens' ListJobsResponse Int
+ljrsStatus = lens _ljrsStatus (\ s a -> s{_ljrsStatus = a});
diff --git a/gen/Network/AWS/Glacier/ListMultipartUploads.hs b/gen/Network/AWS/Glacier/ListMultipartUploads.hs
--- a/gen/Network/AWS/Glacier/ListMultipartUploads.hs
+++ b/gen/Network/AWS/Glacier/ListMultipartUploads.hs
@@ -1,193 +1,209 @@
-{-# 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.Glacier.ListMultipartUploads
--- 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.
-
--- | This operation lists in-progress multipart uploads for the specified vault.
--- An in-progress multipart upload is a multipart upload that has been initiated
--- by an 'InitiateMultipartUpload' request, but has not yet been completed or
--- aborted. The list returned in the List Multipart Upload response has no
--- guaranteed order.
+-- This operation lists in-progress multipart uploads for the specified
+-- vault. An in-progress multipart upload is a multipart upload that has
+-- been initiated by an InitiateMultipartUpload request, but has not yet
+-- been completed or aborted. The list returned in the List Multipart
+-- Upload response has no guaranteed order.
 --
--- The List Multipart Uploads operation supports pagination. By default, this
--- operation returns up to 1,000 multipart uploads in the response. You should
--- always check the response for a 'marker' at which to continue the list; if
--- there are no more items the 'marker' is 'null'. To return a list of multipart
--- uploads that begins at a specific upload, set the 'marker' request parameter to
--- the value you obtained from a previous List Multipart Upload request. You can
--- also limit the number of uploads returned in the response by specifying the 'limit' parameter in the request.
+-- The List Multipart Uploads operation supports pagination. By default,
+-- this operation returns up to 1,000 multipart uploads in the response.
+-- You should always check the response for a 'marker' at which to continue
+-- the list; if there are no more items the 'marker' is 'null'. To return a
+-- list of multipart uploads that begins at a specific upload, set the
+-- 'marker' request parameter to the value you obtained from a previous
+-- List Multipart Upload request. You can also limit the number of uploads
+-- returned in the response by specifying the 'limit' parameter in the
+-- request.
 --
--- Note the difference between this operation and listing parts ('ListParts').
--- The List Multipart Uploads operation lists all multipart uploads for a vault
--- and does not require a multipart upload ID. The List Parts operation requires
--- a multipart upload ID since parts are associated with a single upload.
+-- Note the difference between this operation and listing parts
+-- (ListParts). The List Multipart Uploads operation lists all multipart
+-- uploads for a vault and does not require a multipart upload ID. The List
+-- Parts operation requires a multipart upload ID since parts are
+-- associated with a single upload.
 --
 -- An AWS account has full permission to perform all operations (actions).
--- However, AWS Identity and Access Management (IAM) users don't have any
--- permissions by default. You must grant them explicit permission to perform
--- specific actions. For more information, see <http://docs.aws.amazon.com/amazonglacier/latest/dev/using-iam-with-amazon-glacier.html Access Control Using AWS Identityand Access Management (IAM)>.
+-- However, AWS Identity and Access Management (IAM) users don\'t have any
+-- permissions by default. You must grant them explicit permission to
+-- perform specific actions. For more information, see
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/using-iam-with-amazon-glacier.html Access Control Using AWS Identity and Access Management (IAM)>.
 --
--- For conceptual information and the underlying REST API, go to <http://docs.aws.amazon.com/amazonglacier/latest/dev/working-with-archives.html Working withArchives in Amazon Glacier> and <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-multipart-list-uploads.html List Multipart Uploads > in the /Amazon GlacierDeveloper Guide/.
+-- For conceptual information and the underlying REST API, go to
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/working-with-archives.html Working with Archives in Amazon Glacier>
+-- and
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-multipart-list-uploads.html List Multipart Uploads>
+-- in the /Amazon Glacier Developer Guide/.
 --
--- <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-ListMultipartUploads.html>
+-- /See:/ <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-ListMultipartUploads.html AWS API Reference> for ListMultipartUploads.
 module Network.AWS.Glacier.ListMultipartUploads
     (
-    -- * Request
-      ListMultipartUploads
-    -- ** Request constructor
-    , listMultipartUploads
-    -- ** Request lenses
-    , lmuAccountId
-    , lmuLimit
+    -- * Creating a Request
+      listMultipartUploads
+    , ListMultipartUploads
+    -- * Request Lenses
     , lmuMarker
+    , lmuLimit
+    , lmuAccountId
     , lmuVaultName
 
-    -- * Response
-    , ListMultipartUploadsResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , listMultipartUploadsResponse
-    -- ** Response lenses
-    , lmurMarker
-    , lmurUploadsList
+    , ListMultipartUploadsResponse
+    -- * Response Lenses
+    , lmursUploadsList
+    , lmursMarker
+    , lmursStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.RestJSON
-import Network.AWS.Glacier.Types
-import qualified GHC.Exts
-
-data ListMultipartUploads = ListMultipartUploads
-    { _lmuAccountId :: Text
-    , _lmuLimit     :: Maybe Text
-    , _lmuMarker    :: Maybe Text
-    , _lmuVaultName :: Text
-    } deriving (Eq, Ord, Read, Show)
+import           Network.AWS.Glacier.Types
+import           Network.AWS.Glacier.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
--- | 'ListMultipartUploads' constructor.
+-- | Provides options for retrieving list of in-progress multipart uploads
+-- for an Amazon Glacier vault.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'listMultipartUploads' smart constructor.
+data ListMultipartUploads = ListMultipartUploads'
+    { _lmuMarker    :: !(Maybe Text)
+    , _lmuLimit     :: !(Maybe Text)
+    , _lmuAccountId :: !Text
+    , _lmuVaultName :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListMultipartUploads' with the minimum fields required to make a request.
 --
--- * 'lmuAccountId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'lmuLimit' @::@ 'Maybe' 'Text'
+-- * 'lmuMarker'
 --
--- * 'lmuMarker' @::@ 'Maybe' 'Text'
+-- * 'lmuLimit'
 --
--- * 'lmuVaultName' @::@ 'Text'
+-- * 'lmuAccountId'
 --
-listMultipartUploads :: Text -- ^ 'lmuAccountId'
-                     -> Text -- ^ 'lmuVaultName'
-                     -> ListMultipartUploads
-listMultipartUploads p1 p2 = ListMultipartUploads
-    { _lmuAccountId = p1
-    , _lmuVaultName = p2
-    , _lmuMarker    = Nothing
-    , _lmuLimit     = Nothing
+-- * 'lmuVaultName'
+listMultipartUploads
+    :: Text -- ^ 'lmuAccountId'
+    -> Text -- ^ 'lmuVaultName'
+    -> ListMultipartUploads
+listMultipartUploads pAccountId_ pVaultName_ =
+    ListMultipartUploads'
+    { _lmuMarker = Nothing
+    , _lmuLimit = Nothing
+    , _lmuAccountId = pAccountId_
+    , _lmuVaultName = pVaultName_
     }
 
--- | The 'AccountId' value is the AWS account ID of the account that owns the vault.
--- You can either specify an AWS account ID or optionally a single apos'-'apos
--- (hyphen), in which case Amazon Glacier uses the AWS account ID associated
--- with the credentials used to sign the request. If you use an account ID, do
--- not include any hyphens (apos-apos) in the ID.
-lmuAccountId :: Lens' ListMultipartUploads Text
-lmuAccountId = lens _lmuAccountId (\s a -> s { _lmuAccountId = a })
-
--- | Specifies the maximum number of uploads returned in the response body. If
--- this value is not specified, the List Uploads operation returns up to 1,000
--- uploads.
-lmuLimit :: Lens' ListMultipartUploads (Maybe Text)
-lmuLimit = lens _lmuLimit (\s a -> s { _lmuLimit = a })
-
 -- | An opaque string used for pagination. This value specifies the upload at
 -- which the listing of uploads should begin. Get the marker value from a
--- previous List Uploads response. You need only include the marker if you are
--- continuing the pagination of results started in a previous List Uploads
--- request.
+-- previous List Uploads response. You need only include the marker if you
+-- are continuing the pagination of results started in a previous List
+-- Uploads request.
 lmuMarker :: Lens' ListMultipartUploads (Maybe Text)
-lmuMarker = lens _lmuMarker (\s a -> s { _lmuMarker = a })
+lmuMarker = lens _lmuMarker (\ s a -> s{_lmuMarker = a});
 
--- | The name of the vault.
-lmuVaultName :: Lens' ListMultipartUploads Text
-lmuVaultName = lens _lmuVaultName (\s a -> s { _lmuVaultName = a })
+-- | Specifies the maximum number of uploads returned in the response body.
+-- If this value is not specified, the List Uploads operation returns up to
+-- 1,000 uploads.
+lmuLimit :: Lens' ListMultipartUploads (Maybe Text)
+lmuLimit = lens _lmuLimit (\ s a -> s{_lmuLimit = a});
 
-data ListMultipartUploadsResponse = ListMultipartUploadsResponse
-    { _lmurMarker      :: Maybe Text
-    , _lmurUploadsList :: List "UploadsList" UploadListElement
-    } deriving (Eq, Read, Show)
+-- | The 'AccountId' value is the AWS account ID of the account that owns the
+-- vault. You can either specify an AWS account ID or optionally a single
+-- apos'-'apos (hyphen), in which case Amazon Glacier uses the AWS account
+-- ID associated with the credentials used to sign the request. If you use
+-- an account ID, do not include any hyphens (apos-apos) in the ID.
+lmuAccountId :: Lens' ListMultipartUploads Text
+lmuAccountId = lens _lmuAccountId (\ s a -> s{_lmuAccountId = a});
 
--- | 'ListMultipartUploadsResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'lmurMarker' @::@ 'Maybe' 'Text'
---
--- * 'lmurUploadsList' @::@ ['UploadListElement']
---
-listMultipartUploadsResponse :: ListMultipartUploadsResponse
-listMultipartUploadsResponse = ListMultipartUploadsResponse
-    { _lmurUploadsList = mempty
-    , _lmurMarker      = Nothing
-    }
+-- | The name of the vault.
+lmuVaultName :: Lens' ListMultipartUploads Text
+lmuVaultName = lens _lmuVaultName (\ s a -> s{_lmuVaultName = a});
 
--- | An opaque string that represents where to continue pagination of the results.
--- You use the marker in a new List Multipart Uploads request to obtain more
--- uploads in the list. If there are no more uploads, this value is 'null'.
-lmurMarker :: Lens' ListMultipartUploadsResponse (Maybe Text)
-lmurMarker = lens _lmurMarker (\s a -> s { _lmurMarker = a })
+instance AWSRequest ListMultipartUploads where
+        type Sv ListMultipartUploads = Glacier
+        type Rs ListMultipartUploads =
+             ListMultipartUploadsResponse
+        request = get
+        response
+          = receiveJSON
+              (\ s h x ->
+                 ListMultipartUploadsResponse' <$>
+                   (x .?> "UploadsList" .!@ mempty) <*> (x .?> "Marker")
+                     <*> (pure (fromEnum s)))
 
--- | A list of in-progress multipart uploads.
-lmurUploadsList :: Lens' ListMultipartUploadsResponse [UploadListElement]
-lmurUploadsList = lens _lmurUploadsList (\s a -> s { _lmurUploadsList = a }) . _List
+instance ToHeaders ListMultipartUploads where
+        toHeaders = const mempty
 
 instance ToPath ListMultipartUploads where
-    toPath ListMultipartUploads{..} = mconcat
-        [ "/"
-        , toText _lmuAccountId
-        , "/vaults/"
-        , toText _lmuVaultName
-        , "/multipart-uploads"
-        ]
+        toPath ListMultipartUploads'{..}
+          = mconcat
+              ["/", toBS _lmuAccountId, "/vaults/",
+               toBS _lmuVaultName, "/multipart-uploads"]
 
 instance ToQuery ListMultipartUploads where
-    toQuery ListMultipartUploads{..} = mconcat
-        [ "marker" =? _lmuMarker
-        , "limit"  =? _lmuLimit
-        ]
+        toQuery ListMultipartUploads'{..}
+          = mconcat
+              ["marker" =: _lmuMarker, "limit" =: _lmuLimit]
 
-instance ToHeaders ListMultipartUploads
+-- | Contains the Amazon Glacier response to your request.
+--
+-- /See:/ 'listMultipartUploadsResponse' smart constructor.
+data ListMultipartUploadsResponse = ListMultipartUploadsResponse'
+    { _lmursUploadsList :: !(Maybe [UploadListElement])
+    , _lmursMarker      :: !(Maybe Text)
+    , _lmursStatus      :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance ToJSON ListMultipartUploads where
-    toJSON = const (toJSON Empty)
+-- | Creates a value of 'ListMultipartUploadsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lmursUploadsList'
+--
+-- * 'lmursMarker'
+--
+-- * 'lmursStatus'
+listMultipartUploadsResponse
+    :: Int -- ^ 'lmursStatus'
+    -> ListMultipartUploadsResponse
+listMultipartUploadsResponse pStatus_ =
+    ListMultipartUploadsResponse'
+    { _lmursUploadsList = Nothing
+    , _lmursMarker = Nothing
+    , _lmursStatus = pStatus_
+    }
 
-instance AWSRequest ListMultipartUploads where
-    type Sv ListMultipartUploads = Glacier
-    type Rs ListMultipartUploads = ListMultipartUploadsResponse
+-- | A list of in-progress multipart uploads.
+lmursUploadsList :: Lens' ListMultipartUploadsResponse [UploadListElement]
+lmursUploadsList = lens _lmursUploadsList (\ s a -> s{_lmursUploadsList = a}) . _Default . _Coerce;
 
-    request  = get
-    response = jsonResponse
+-- | An opaque string that represents where to continue pagination of the
+-- results. You use the marker in a new List Multipart Uploads request to
+-- obtain more uploads in the list. If there are no more uploads, this
+-- value is 'null'.
+lmursMarker :: Lens' ListMultipartUploadsResponse (Maybe Text)
+lmursMarker = lens _lmursMarker (\ s a -> s{_lmursMarker = a});
 
-instance FromJSON ListMultipartUploadsResponse where
-    parseJSON = withObject "ListMultipartUploadsResponse" $ \o -> ListMultipartUploadsResponse
-        <$> o .:? "Marker"
-        <*> o .:? "UploadsList" .!= mempty
+-- | The response status code.
+lmursStatus :: Lens' ListMultipartUploadsResponse Int
+lmursStatus = lens _lmursStatus (\ s a -> s{_lmursStatus = a});
diff --git a/gen/Network/AWS/Glacier/ListParts.hs b/gen/Network/AWS/Glacier/ListParts.hs
--- a/gen/Network/AWS/Glacier/ListParts.hs
+++ b/gen/Network/AWS/Glacier/ListParts.hs
@@ -1,251 +1,265 @@
-{-# 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.Glacier.ListParts
--- 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.
-
--- | This operation lists the parts of an archive that have been uploaded in a
--- specific multipart upload. You can make this request at any time during an
--- in-progress multipart upload before you complete the upload (see 'CompleteMultipartUpload'. List Parts returns an error for completed uploads. The list returned in the
--- List Parts response is sorted by part range.
+-- This operation lists the parts of an archive that have been uploaded in
+-- a specific multipart upload. You can make this request at any time
+-- during an in-progress multipart upload before you complete the upload
+-- (see CompleteMultipartUpload. List Parts returns an error for completed
+-- uploads. The list returned in the List Parts response is sorted by part
+-- range.
 --
 -- The List Parts operation supports pagination. By default, this operation
--- returns up to 1,000 uploaded parts in the response. You should always check
--- the response for a 'marker' at which to continue the list; if there are no more
--- items the 'marker' is 'null'. To return a list of parts that begins at a specific
--- part, set the 'marker' request parameter to the value you obtained from a
--- previous List Parts request. You can also limit the number of parts returned
--- in the response by specifying the 'limit' parameter in the request.
+-- returns up to 1,000 uploaded parts in the response. You should always
+-- check the response for a 'marker' at which to continue the list; if
+-- there are no more items the 'marker' is 'null'. To return a list of
+-- parts that begins at a specific part, set the 'marker' request parameter
+-- to the value you obtained from a previous List Parts request. You can
+-- also limit the number of parts returned in the response by specifying
+-- the 'limit' parameter in the request.
 --
 -- An AWS account has full permission to perform all operations (actions).
--- However, AWS Identity and Access Management (IAM) users don't have any
--- permissions by default. You must grant them explicit permission to perform
--- specific actions. For more information, see <http://docs.aws.amazon.com/amazonglacier/latest/dev/using-iam-with-amazon-glacier.html Access Control Using AWS Identityand Access Management (IAM)>.
+-- However, AWS Identity and Access Management (IAM) users don\'t have any
+-- permissions by default. You must grant them explicit permission to
+-- perform specific actions. For more information, see
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/using-iam-with-amazon-glacier.html Access Control Using AWS Identity and Access Management (IAM)>.
 --
--- For conceptual information and the underlying REST API, go to <http://docs.aws.amazon.com/amazonglacier/latest/dev/working-with-archives.html Working withArchives in Amazon Glacier> and <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-multipart-list-parts.html List Parts> in the /Amazon Glacier DeveloperGuide/.
+-- For conceptual information and the underlying REST API, go to
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/working-with-archives.html Working with Archives in Amazon Glacier>
+-- and
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-multipart-list-parts.html List Parts>
+-- in the /Amazon Glacier Developer Guide/.
 --
--- <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-ListParts.html>
+-- /See:/ <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-ListParts.html AWS API Reference> for ListParts.
 module Network.AWS.Glacier.ListParts
     (
-    -- * Request
-      ListParts
-    -- ** Request constructor
-    , listParts
-    -- ** Request lenses
-    , lpAccountId
-    , lpLimit
+    -- * Creating a Request
+      listParts
+    , ListParts
+    -- * Request Lenses
     , lpMarker
-    , lpUploadId
+    , lpLimit
+    , lpAccountId
     , lpVaultName
+    , lpUploadId
 
-    -- * Response
-    , ListPartsResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , listPartsResponse
-    -- ** Response lenses
-    , lprArchiveDescription
-    , lprCreationDate
-    , lprMarker
-    , lprMultipartUploadId
-    , lprPartSizeInBytes
-    , lprParts
-    , lprVaultARN
+    , ListPartsResponse
+    -- * Response Lenses
+    , lprsParts
+    , lprsMultipartUploadId
+    , lprsArchiveDescription
+    , lprsPartSizeInBytes
+    , lprsVaultARN
+    , lprsMarker
+    , lprsCreationDate
+    , lprsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.RestJSON
-import Network.AWS.Glacier.Types
-import qualified GHC.Exts
-
-data ListParts = ListParts
-    { _lpAccountId :: Text
-    , _lpLimit     :: Maybe Text
-    , _lpMarker    :: Maybe Text
-    , _lpUploadId  :: Text
-    , _lpVaultName :: Text
-    } deriving (Eq, Ord, Read, Show)
+import           Network.AWS.Glacier.Types
+import           Network.AWS.Glacier.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
--- | 'ListParts' constructor.
+-- | Provides options for retrieving a list of parts of an archive that have
+-- been uploaded in a specific multipart upload.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'listParts' smart constructor.
+data ListParts = ListParts'
+    { _lpMarker    :: !(Maybe Text)
+    , _lpLimit     :: !(Maybe Text)
+    , _lpAccountId :: !Text
+    , _lpVaultName :: !Text
+    , _lpUploadId  :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListParts' with the minimum fields required to make a request.
 --
--- * 'lpAccountId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'lpLimit' @::@ 'Maybe' 'Text'
+-- * 'lpMarker'
 --
--- * 'lpMarker' @::@ 'Maybe' 'Text'
+-- * 'lpLimit'
 --
--- * 'lpUploadId' @::@ 'Text'
+-- * 'lpAccountId'
 --
--- * 'lpVaultName' @::@ 'Text'
+-- * 'lpVaultName'
 --
-listParts :: Text -- ^ 'lpAccountId'
-          -> Text -- ^ 'lpVaultName'
-          -> Text -- ^ 'lpUploadId'
-          -> ListParts
-listParts p1 p2 p3 = ListParts
-    { _lpAccountId = p1
-    , _lpVaultName = p2
-    , _lpUploadId  = p3
-    , _lpMarker    = Nothing
-    , _lpLimit     = Nothing
+-- * 'lpUploadId'
+listParts
+    :: Text -- ^ 'lpAccountId'
+    -> Text -- ^ 'lpVaultName'
+    -> Text -- ^ 'lpUploadId'
+    -> ListParts
+listParts pAccountId_ pVaultName_ pUploadId_ =
+    ListParts'
+    { _lpMarker = Nothing
+    , _lpLimit = Nothing
+    , _lpAccountId = pAccountId_
+    , _lpVaultName = pVaultName_
+    , _lpUploadId = pUploadId_
     }
 
--- | The 'AccountId' value is the AWS account ID of the account that owns the vault.
--- You can either specify an AWS account ID or optionally a single apos'-'apos
--- (hyphen), in which case Amazon Glacier uses the AWS account ID associated
--- with the credentials used to sign the request. If you use an account ID, do
--- not include any hyphens (apos-apos) in the ID.
-lpAccountId :: Lens' ListParts Text
-lpAccountId = lens _lpAccountId (\s a -> s { _lpAccountId = a })
+-- | An opaque string used for pagination. This value specifies the part at
+-- which the listing of parts should begin. Get the marker value from the
+-- response of a previous List Parts response. You need only include the
+-- marker if you are continuing the pagination of results started in a
+-- previous List Parts request.
+lpMarker :: Lens' ListParts (Maybe Text)
+lpMarker = lens _lpMarker (\ s a -> s{_lpMarker = a});
 
--- | Specifies the maximum number of parts returned in the response body. If this
--- value is not specified, the List Parts operation returns up to 1,000 uploads.
+-- | Specifies the maximum number of parts returned in the response body. If
+-- this value is not specified, the List Parts operation returns up to
+-- 1,000 uploads.
 lpLimit :: Lens' ListParts (Maybe Text)
-lpLimit = lens _lpLimit (\s a -> s { _lpLimit = a })
+lpLimit = lens _lpLimit (\ s a -> s{_lpLimit = a});
 
--- | An opaque string used for pagination. This value specifies the part at which
--- the listing of parts should begin. Get the marker value from the response of
--- a previous List Parts response. You need only include the marker if you are
--- continuing the pagination of results started in a previous List Parts request.
-lpMarker :: Lens' ListParts (Maybe Text)
-lpMarker = lens _lpMarker (\s a -> s { _lpMarker = a })
+-- | The 'AccountId' value is the AWS account ID of the account that owns the
+-- vault. You can either specify an AWS account ID or optionally a single
+-- apos'-'apos (hyphen), in which case Amazon Glacier uses the AWS account
+-- ID associated with the credentials used to sign the request. If you use
+-- an account ID, do not include any hyphens (apos-apos) in the ID.
+lpAccountId :: Lens' ListParts Text
+lpAccountId = lens _lpAccountId (\ s a -> s{_lpAccountId = a});
 
+-- | The name of the vault.
+lpVaultName :: Lens' ListParts Text
+lpVaultName = lens _lpVaultName (\ s a -> s{_lpVaultName = a});
+
 -- | The upload ID of the multipart upload.
 lpUploadId :: Lens' ListParts Text
-lpUploadId = lens _lpUploadId (\s a -> s { _lpUploadId = a })
+lpUploadId = lens _lpUploadId (\ s a -> s{_lpUploadId = a});
 
--- | The name of the vault.
-lpVaultName :: Lens' ListParts Text
-lpVaultName = lens _lpVaultName (\s a -> s { _lpVaultName = a })
+instance AWSRequest ListParts where
+        type Sv ListParts = Glacier
+        type Rs ListParts = ListPartsResponse
+        request = get
+        response
+          = receiveJSON
+              (\ s h x ->
+                 ListPartsResponse' <$>
+                   (x .?> "Parts" .!@ mempty) <*>
+                     (x .?> "MultipartUploadId")
+                     <*> (x .?> "ArchiveDescription")
+                     <*> (x .?> "PartSizeInBytes")
+                     <*> (x .?> "VaultARN")
+                     <*> (x .?> "Marker")
+                     <*> (x .?> "CreationDate")
+                     <*> (pure (fromEnum s)))
 
-data ListPartsResponse = ListPartsResponse
-    { _lprArchiveDescription :: Maybe Text
-    , _lprCreationDate       :: Maybe Text
-    , _lprMarker             :: Maybe Text
-    , _lprMultipartUploadId  :: Maybe Text
-    , _lprPartSizeInBytes    :: Maybe Integer
-    , _lprParts              :: List "Parts" PartListElement
-    , _lprVaultARN           :: Maybe Text
-    } deriving (Eq, Read, Show)
+instance ToHeaders ListParts where
+        toHeaders = const mempty
 
--- | 'ListPartsResponse' constructor.
+instance ToPath ListParts where
+        toPath ListParts'{..}
+          = mconcat
+              ["/", toBS _lpAccountId, "/vaults/",
+               toBS _lpVaultName, "/multipart-uploads/",
+               toBS _lpUploadId]
+
+instance ToQuery ListParts where
+        toQuery ListParts'{..}
+          = mconcat
+              ["marker" =: _lpMarker, "limit" =: _lpLimit]
+
+-- | Contains the Amazon Glacier response to your request.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'listPartsResponse' smart constructor.
+data ListPartsResponse = ListPartsResponse'
+    { _lprsParts              :: !(Maybe [PartListElement])
+    , _lprsMultipartUploadId  :: !(Maybe Text)
+    , _lprsArchiveDescription :: !(Maybe Text)
+    , _lprsPartSizeInBytes    :: !(Maybe Integer)
+    , _lprsVaultARN           :: !(Maybe Text)
+    , _lprsMarker             :: !(Maybe Text)
+    , _lprsCreationDate       :: !(Maybe Text)
+    , _lprsStatus             :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListPartsResponse' with the minimum fields required to make a request.
 --
--- * 'lprArchiveDescription' @::@ 'Maybe' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'lprCreationDate' @::@ 'Maybe' 'Text'
+-- * 'lprsParts'
 --
--- * 'lprMarker' @::@ 'Maybe' 'Text'
+-- * 'lprsMultipartUploadId'
 --
--- * 'lprMultipartUploadId' @::@ 'Maybe' 'Text'
+-- * 'lprsArchiveDescription'
 --
--- * 'lprPartSizeInBytes' @::@ 'Maybe' 'Integer'
+-- * 'lprsPartSizeInBytes'
 --
--- * 'lprParts' @::@ ['PartListElement']
+-- * 'lprsVaultARN'
 --
--- * 'lprVaultARN' @::@ 'Maybe' 'Text'
+-- * 'lprsMarker'
 --
-listPartsResponse :: ListPartsResponse
-listPartsResponse = ListPartsResponse
-    { _lprMultipartUploadId  = Nothing
-    , _lprVaultARN           = Nothing
-    , _lprArchiveDescription = Nothing
-    , _lprPartSizeInBytes    = Nothing
-    , _lprCreationDate       = Nothing
-    , _lprParts              = mempty
-    , _lprMarker             = Nothing
+-- * 'lprsCreationDate'
+--
+-- * 'lprsStatus'
+listPartsResponse
+    :: Int -- ^ 'lprsStatus'
+    -> ListPartsResponse
+listPartsResponse pStatus_ =
+    ListPartsResponse'
+    { _lprsParts = Nothing
+    , _lprsMultipartUploadId = Nothing
+    , _lprsArchiveDescription = Nothing
+    , _lprsPartSizeInBytes = Nothing
+    , _lprsVaultARN = Nothing
+    , _lprsMarker = Nothing
+    , _lprsCreationDate = Nothing
+    , _lprsStatus = pStatus_
     }
 
--- | The description of the archive that was specified in the Initiate Multipart
--- Upload request.
-lprArchiveDescription :: Lens' ListPartsResponse (Maybe Text)
-lprArchiveDescription =
-    lens _lprArchiveDescription (\s a -> s { _lprArchiveDescription = a })
-
--- | The UTC time at which the multipart upload was initiated.
-lprCreationDate :: Lens' ListPartsResponse (Maybe Text)
-lprCreationDate = lens _lprCreationDate (\s a -> s { _lprCreationDate = a })
-
--- | An opaque string that represents where to continue pagination of the results.
--- You use the marker in a new List Parts request to obtain more jobs in the
--- list. If there are no more parts, this value is 'null'.
-lprMarker :: Lens' ListPartsResponse (Maybe Text)
-lprMarker = lens _lprMarker (\s a -> s { _lprMarker = a })
-
--- | The ID of the upload to which the parts are associated.
-lprMultipartUploadId :: Lens' ListPartsResponse (Maybe Text)
-lprMultipartUploadId =
-    lens _lprMultipartUploadId (\s a -> s { _lprMultipartUploadId = a })
-
--- | The part size in bytes.
-lprPartSizeInBytes :: Lens' ListPartsResponse (Maybe Integer)
-lprPartSizeInBytes =
-    lens _lprPartSizeInBytes (\s a -> s { _lprPartSizeInBytes = a })
-
 -- | A list of the part sizes of the multipart upload.
-lprParts :: Lens' ListPartsResponse [PartListElement]
-lprParts = lens _lprParts (\s a -> s { _lprParts = a }) . _List
-
--- | The Amazon Resource Name (ARN) of the vault to which the multipart upload was
--- initiated.
-lprVaultARN :: Lens' ListPartsResponse (Maybe Text)
-lprVaultARN = lens _lprVaultARN (\s a -> s { _lprVaultARN = a })
+lprsParts :: Lens' ListPartsResponse [PartListElement]
+lprsParts = lens _lprsParts (\ s a -> s{_lprsParts = a}) . _Default . _Coerce;
 
-instance ToPath ListParts where
-    toPath ListParts{..} = mconcat
-        [ "/"
-        , toText _lpAccountId
-        , "/vaults/"
-        , toText _lpVaultName
-        , "/multipart-uploads/"
-        , toText _lpUploadId
-        ]
+-- | The ID of the upload to which the parts are associated.
+lprsMultipartUploadId :: Lens' ListPartsResponse (Maybe Text)
+lprsMultipartUploadId = lens _lprsMultipartUploadId (\ s a -> s{_lprsMultipartUploadId = a});
 
-instance ToQuery ListParts where
-    toQuery ListParts{..} = mconcat
-        [ "marker" =? _lpMarker
-        , "limit"  =? _lpLimit
-        ]
+-- | The description of the archive that was specified in the Initiate
+-- Multipart Upload request.
+lprsArchiveDescription :: Lens' ListPartsResponse (Maybe Text)
+lprsArchiveDescription = lens _lprsArchiveDescription (\ s a -> s{_lprsArchiveDescription = a});
 
-instance ToHeaders ListParts
+-- | The part size in bytes.
+lprsPartSizeInBytes :: Lens' ListPartsResponse (Maybe Integer)
+lprsPartSizeInBytes = lens _lprsPartSizeInBytes (\ s a -> s{_lprsPartSizeInBytes = a});
 
-instance ToJSON ListParts where
-    toJSON = const (toJSON Empty)
+-- | The Amazon Resource Name (ARN) of the vault to which the multipart
+-- upload was initiated.
+lprsVaultARN :: Lens' ListPartsResponse (Maybe Text)
+lprsVaultARN = lens _lprsVaultARN (\ s a -> s{_lprsVaultARN = a});
 
-instance AWSRequest ListParts where
-    type Sv ListParts = Glacier
-    type Rs ListParts = ListPartsResponse
+-- | An opaque string that represents where to continue pagination of the
+-- results. You use the marker in a new List Parts request to obtain more
+-- jobs in the list. If there are no more parts, this value is 'null'.
+lprsMarker :: Lens' ListPartsResponse (Maybe Text)
+lprsMarker = lens _lprsMarker (\ s a -> s{_lprsMarker = a});
 
-    request  = get
-    response = jsonResponse
+-- | The UTC time at which the multipart upload was initiated.
+lprsCreationDate :: Lens' ListPartsResponse (Maybe Text)
+lprsCreationDate = lens _lprsCreationDate (\ s a -> s{_lprsCreationDate = a});
 
-instance FromJSON ListPartsResponse where
-    parseJSON = withObject "ListPartsResponse" $ \o -> ListPartsResponse
-        <$> o .:? "ArchiveDescription"
-        <*> o .:? "CreationDate"
-        <*> o .:? "Marker"
-        <*> o .:? "MultipartUploadId"
-        <*> o .:? "PartSizeInBytes"
-        <*> o .:? "Parts" .!= mempty
-        <*> o .:? "VaultARN"
+-- | The response status code.
+lprsStatus :: Lens' ListPartsResponse Int
+lprsStatus = lens _lprsStatus (\ s a -> s{_lprsStatus = a});
diff --git a/gen/Network/AWS/Glacier/ListTagsForVault.hs b/gen/Network/AWS/Glacier/ListTagsForVault.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glacier/ListTagsForVault.hs
@@ -0,0 +1,140 @@
+{-# 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.Glacier.ListTagsForVault
+-- 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)
+--
+-- This operation lists all the tags attached to a vault. The operation
+-- returns an empty map if there are no tags. For more information about
+-- tags, see
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/tagging.html Tagging Amazon Glacier Resources>.
+--
+-- /See:/ <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-ListTagsForVault.html AWS API Reference> for ListTagsForVault.
+module Network.AWS.Glacier.ListTagsForVault
+    (
+    -- * Creating a Request
+      listTagsForVault
+    , ListTagsForVault
+    -- * Request Lenses
+    , ltfvAccountId
+    , ltfvVaultName
+
+    -- * Destructuring the Response
+    , listTagsForVaultResponse
+    , ListTagsForVaultResponse
+    -- * Response Lenses
+    , ltfvrsTags
+    , ltfvrsStatus
+    ) where
+
+import           Network.AWS.Glacier.Types
+import           Network.AWS.Glacier.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | The input value for 'ListTagsForVaultInput'.
+--
+-- /See:/ 'listTagsForVault' smart constructor.
+data ListTagsForVault = ListTagsForVault'
+    { _ltfvAccountId :: !Text
+    , _ltfvVaultName :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListTagsForVault' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ltfvAccountId'
+--
+-- * 'ltfvVaultName'
+listTagsForVault
+    :: Text -- ^ 'ltfvAccountId'
+    -> Text -- ^ 'ltfvVaultName'
+    -> ListTagsForVault
+listTagsForVault pAccountId_ pVaultName_ =
+    ListTagsForVault'
+    { _ltfvAccountId = pAccountId_
+    , _ltfvVaultName = pVaultName_
+    }
+
+-- | The 'AccountId' value is the AWS account ID of the account that owns the
+-- vault. You can either specify an AWS account ID or optionally a single
+-- apos'-'apos (hyphen), in which case Amazon Glacier uses the AWS account
+-- ID associated with the credentials used to sign the request. If you use
+-- an account ID, do not include any hyphens (apos-apos) in the ID.
+ltfvAccountId :: Lens' ListTagsForVault Text
+ltfvAccountId = lens _ltfvAccountId (\ s a -> s{_ltfvAccountId = a});
+
+-- | The name of the vault.
+ltfvVaultName :: Lens' ListTagsForVault Text
+ltfvVaultName = lens _ltfvVaultName (\ s a -> s{_ltfvVaultName = a});
+
+instance AWSRequest ListTagsForVault where
+        type Sv ListTagsForVault = Glacier
+        type Rs ListTagsForVault = ListTagsForVaultResponse
+        request = get
+        response
+          = receiveJSON
+              (\ s h x ->
+                 ListTagsForVaultResponse' <$>
+                   (x .?> "Tags" .!@ mempty) <*> (pure (fromEnum s)))
+
+instance ToHeaders ListTagsForVault where
+        toHeaders = const mempty
+
+instance ToPath ListTagsForVault where
+        toPath ListTagsForVault'{..}
+          = mconcat
+              ["/", toBS _ltfvAccountId, "/vaults/",
+               toBS _ltfvVaultName, "/tags"]
+
+instance ToQuery ListTagsForVault where
+        toQuery = const mempty
+
+-- | Contains the Amazon Glacier response to your request.
+--
+-- /See:/ 'listTagsForVaultResponse' smart constructor.
+data ListTagsForVaultResponse = ListTagsForVaultResponse'
+    { _ltfvrsTags   :: !(Maybe (Map Text Text))
+    , _ltfvrsStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListTagsForVaultResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ltfvrsTags'
+--
+-- * 'ltfvrsStatus'
+listTagsForVaultResponse
+    :: Int -- ^ 'ltfvrsStatus'
+    -> ListTagsForVaultResponse
+listTagsForVaultResponse pStatus_ =
+    ListTagsForVaultResponse'
+    { _ltfvrsTags = Nothing
+    , _ltfvrsStatus = pStatus_
+    }
+
+-- | The tags attached to the vault. Each tag is composed of a key and a
+-- value.
+ltfvrsTags :: Lens' ListTagsForVaultResponse (HashMap Text Text)
+ltfvrsTags = lens _ltfvrsTags (\ s a -> s{_ltfvrsTags = a}) . _Default . _Map;
+
+-- | The response status code.
+ltfvrsStatus :: Lens' ListTagsForVaultResponse Int
+ltfvrsStatus = lens _ltfvrsStatus (\ s a -> s{_ltfvrsStatus = a});
diff --git a/gen/Network/AWS/Glacier/ListVaults.hs b/gen/Network/AWS/Glacier/ListVaults.hs
--- a/gen/Network/AWS/Glacier/ListVaults.hs
+++ b/gen/Network/AWS/Glacier/ListVaults.hs
@@ -1,170 +1,183 @@
-{-# 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.Glacier.ListVaults
--- 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.
-
--- | This operation lists all vaults owned by the calling user's account. The list
--- returned in the response is ASCII-sorted by vault name.
+-- This operation lists all vaults owned by the calling user\'s account.
+-- The list returned in the response is ASCII-sorted by vault name.
 --
 -- By default, this operation returns up to 1,000 items. If there are more
--- vaults to list, the response 'marker' field contains the vault Amazon Resource
--- Name (ARN) at which to continue the list with a new List Vaults request;
--- otherwise, the 'marker' field is 'null'. To return a list of vaults that begins
--- at a specific vault, set the 'marker' request parameter to the vault ARN you
--- obtained from a previous List Vaults request. You can also limit the number
--- of vaults returned in the response by specifying the 'limit' parameter in the
--- request.
+-- vaults to list, the response 'marker' field contains the vault Amazon
+-- Resource Name (ARN) at which to continue the list with a new List Vaults
+-- request; otherwise, the 'marker' field is 'null'. To return a list of
+-- vaults that begins at a specific vault, set the 'marker' request
+-- parameter to the vault ARN you obtained from a previous List Vaults
+-- request. You can also limit the number of vaults returned in the
+-- response by specifying the 'limit' parameter in the request.
 --
 -- An AWS account has full permission to perform all operations (actions).
--- However, AWS Identity and Access Management (IAM) users don't have any
--- permissions by default. You must grant them explicit permission to perform
--- specific actions. For more information, see <http://docs.aws.amazon.com/amazonglacier/latest/dev/using-iam-with-amazon-glacier.html Access Control Using AWS Identityand Access Management (IAM)>.
+-- However, AWS Identity and Access Management (IAM) users don\'t have any
+-- permissions by default. You must grant them explicit permission to
+-- perform specific actions. For more information, see
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/using-iam-with-amazon-glacier.html Access Control Using AWS Identity and Access Management (IAM)>.
 --
--- For conceptual information and underlying REST API, go to <http://docs.aws.amazon.com/amazonglacier/latest/dev/retrieving-vault-info.html Retrieving VaultMetadata in Amazon Glacier> and <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-vaults-get.html List Vaults > in the /Amazon Glacier DeveloperGuide/.
+-- For conceptual information and underlying REST API, go to
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/retrieving-vault-info.html Retrieving Vault Metadata in Amazon Glacier>
+-- and
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-vaults-get.html List Vaults>
+-- in the /Amazon Glacier Developer Guide/.
 --
--- <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-ListVaults.html>
+-- /See:/ <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-ListVaults.html AWS API Reference> for ListVaults.
 module Network.AWS.Glacier.ListVaults
     (
-    -- * Request
-      ListVaults
-    -- ** Request constructor
-    , listVaults
-    -- ** Request lenses
-    , lvAccountId
-    , lvLimit
+    -- * Creating a Request
+      listVaults
+    , ListVaults
+    -- * Request Lenses
     , lvMarker
+    , lvLimit
+    , lvAccountId
 
-    -- * Response
-    , ListVaultsResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , listVaultsResponse
-    -- ** Response lenses
-    , lvrMarker
-    , lvrVaultList
+    , ListVaultsResponse
+    -- * Response Lenses
+    , lvrsMarker
+    , lvrsVaultList
+    , lvrsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.RestJSON
-import Network.AWS.Glacier.Types
-import qualified GHC.Exts
-
-data ListVaults = ListVaults
-    { _lvAccountId :: Text
-    , _lvLimit     :: Maybe Text
-    , _lvMarker    :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
+import           Network.AWS.Glacier.Types
+import           Network.AWS.Glacier.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
--- | 'ListVaults' constructor.
+-- | Provides options to retrieve the vault list owned by the calling user\'s
+-- account. The list provides metadata information for each vault.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'listVaults' smart constructor.
+data ListVaults = ListVaults'
+    { _lvMarker    :: !(Maybe Text)
+    , _lvLimit     :: !(Maybe Text)
+    , _lvAccountId :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListVaults' with the minimum fields required to make a request.
 --
--- * 'lvAccountId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'lvLimit' @::@ 'Maybe' 'Text'
+-- * 'lvMarker'
 --
--- * 'lvMarker' @::@ 'Maybe' 'Text'
+-- * 'lvLimit'
 --
-listVaults :: Text -- ^ 'lvAccountId'
-           -> ListVaults
-listVaults p1 = ListVaults
-    { _lvAccountId = p1
-    , _lvMarker    = Nothing
-    , _lvLimit     = Nothing
+-- * 'lvAccountId'
+listVaults
+    :: Text -- ^ 'lvAccountId'
+    -> ListVaults
+listVaults pAccountId_ =
+    ListVaults'
+    { _lvMarker = Nothing
+    , _lvLimit = Nothing
+    , _lvAccountId = pAccountId_
     }
 
--- | The 'AccountId' value is the AWS account ID. This value must match the AWS
--- account ID associated with the credentials used to sign the request. You can
--- either specify an AWS account ID or optionally a single apos'-'apos (hyphen),
--- in which case Amazon Glacier uses the AWS account ID associated with the
--- credentials used to sign the request. If you specify your Account ID, do not
--- include any hyphens (apos-apos) in the ID.
-lvAccountId :: Lens' ListVaults Text
-lvAccountId = lens _lvAccountId (\s a -> s { _lvAccountId = a })
-
--- | The maximum number of items returned in the response. If you don't specify a
--- value, the List Vaults operation returns up to 1,000 items.
-lvLimit :: Lens' ListVaults (Maybe Text)
-lvLimit = lens _lvLimit (\s a -> s { _lvLimit = a })
-
--- | A string used for pagination. The marker specifies the vault ARN after which
--- the listing of vaults should begin.
+-- | A string used for pagination. The marker specifies the vault ARN after
+-- which the listing of vaults should begin.
 lvMarker :: Lens' ListVaults (Maybe Text)
-lvMarker = lens _lvMarker (\s a -> s { _lvMarker = a })
+lvMarker = lens _lvMarker (\ s a -> s{_lvMarker = a});
 
-data ListVaultsResponse = ListVaultsResponse
-    { _lvrMarker    :: Maybe Text
-    , _lvrVaultList :: List "VaultList" DescribeVaultOutput
-    } deriving (Eq, Read, Show)
+-- | The maximum number of items returned in the response. If you don\'t
+-- specify a value, the List Vaults operation returns up to 1,000 items.
+lvLimit :: Lens' ListVaults (Maybe Text)
+lvLimit = lens _lvLimit (\ s a -> s{_lvLimit = a});
 
--- | 'ListVaultsResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'lvrMarker' @::@ 'Maybe' 'Text'
---
--- * 'lvrVaultList' @::@ ['DescribeVaultOutput']
---
-listVaultsResponse :: ListVaultsResponse
-listVaultsResponse = ListVaultsResponse
-    { _lvrVaultList = mempty
-    , _lvrMarker    = Nothing
-    }
+-- | The 'AccountId' value is the AWS account ID. This value must match the
+-- AWS account ID associated with the credentials used to sign the request.
+-- You can either specify an AWS account ID or optionally a single
+-- apos'-'apos (hyphen), in which case Amazon Glacier uses the AWS account
+-- ID associated with the credentials used to sign the request. If you
+-- specify your account ID, do not include any hyphens (apos-apos) in the
+-- ID.
+lvAccountId :: Lens' ListVaults Text
+lvAccountId = lens _lvAccountId (\ s a -> s{_lvAccountId = a});
 
--- | The vault ARN at which to continue pagination of the results. You use the
--- marker in another List Vaults request to obtain more vaults in the list.
-lvrMarker :: Lens' ListVaultsResponse (Maybe Text)
-lvrMarker = lens _lvrMarker (\s a -> s { _lvrMarker = a })
+instance AWSRequest ListVaults where
+        type Sv ListVaults = Glacier
+        type Rs ListVaults = ListVaultsResponse
+        request = get
+        response
+          = receiveJSON
+              (\ s h x ->
+                 ListVaultsResponse' <$>
+                   (x .?> "Marker") <*> (x .?> "VaultList" .!@ mempty)
+                     <*> (pure (fromEnum s)))
 
--- | List of vaults.
-lvrVaultList :: Lens' ListVaultsResponse [DescribeVaultOutput]
-lvrVaultList = lens _lvrVaultList (\s a -> s { _lvrVaultList = a }) . _List
+instance ToHeaders ListVaults where
+        toHeaders = const mempty
 
 instance ToPath ListVaults where
-    toPath ListVaults{..} = mconcat
-        [ "/"
-        , toText _lvAccountId
-        , "/vaults"
-        ]
+        toPath ListVaults'{..}
+          = mconcat ["/", toBS _lvAccountId, "/vaults"]
 
 instance ToQuery ListVaults where
-    toQuery ListVaults{..} = mconcat
-        [ "marker" =? _lvMarker
-        , "limit"  =? _lvLimit
-        ]
+        toQuery ListVaults'{..}
+          = mconcat
+              ["marker" =: _lvMarker, "limit" =: _lvLimit]
 
-instance ToHeaders ListVaults
+-- | Contains the Amazon Glacier response to your request.
+--
+-- /See:/ 'listVaultsResponse' smart constructor.
+data ListVaultsResponse = ListVaultsResponse'
+    { _lvrsMarker    :: !(Maybe Text)
+    , _lvrsVaultList :: !(Maybe [DescribeVaultOutput])
+    , _lvrsStatus    :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance ToJSON ListVaults where
-    toJSON = const (toJSON Empty)
+-- | Creates a value of 'ListVaultsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lvrsMarker'
+--
+-- * 'lvrsVaultList'
+--
+-- * 'lvrsStatus'
+listVaultsResponse
+    :: Int -- ^ 'lvrsStatus'
+    -> ListVaultsResponse
+listVaultsResponse pStatus_ =
+    ListVaultsResponse'
+    { _lvrsMarker = Nothing
+    , _lvrsVaultList = Nothing
+    , _lvrsStatus = pStatus_
+    }
 
-instance AWSRequest ListVaults where
-    type Sv ListVaults = Glacier
-    type Rs ListVaults = ListVaultsResponse
+-- | The vault ARN at which to continue pagination of the results. You use
+-- the marker in another List Vaults request to obtain more vaults in the
+-- list.
+lvrsMarker :: Lens' ListVaultsResponse (Maybe Text)
+lvrsMarker = lens _lvrsMarker (\ s a -> s{_lvrsMarker = a});
 
-    request  = get
-    response = jsonResponse
+-- | List of vaults.
+lvrsVaultList :: Lens' ListVaultsResponse [DescribeVaultOutput]
+lvrsVaultList = lens _lvrsVaultList (\ s a -> s{_lvrsVaultList = a}) . _Default . _Coerce;
 
-instance FromJSON ListVaultsResponse where
-    parseJSON = withObject "ListVaultsResponse" $ \o -> ListVaultsResponse
-        <$> o .:? "Marker"
-        <*> o .:? "VaultList" .!= mempty
+-- | The response status code.
+lvrsStatus :: Lens' ListVaultsResponse Int
+lvrsStatus = lens _lvrsStatus (\ s a -> s{_lvrsStatus = a});
diff --git a/gen/Network/AWS/Glacier/RemoveTagsFromVault.hs b/gen/Network/AWS/Glacier/RemoveTagsFromVault.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glacier/RemoveTagsFromVault.hs
@@ -0,0 +1,126 @@
+{-# 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.Glacier.RemoveTagsFromVault
+-- 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)
+--
+-- This operation removes one or more tags from the set of tags attached to
+-- a vault. For more information about tags, see
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/tagging.html Tagging Amazon Glacier Resources>.
+-- This operation is idempotent. The operation will be successful, even if
+-- there are no tags attached to the vault.
+--
+-- /See:/ <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-RemoveTagsFromVault.html AWS API Reference> for RemoveTagsFromVault.
+module Network.AWS.Glacier.RemoveTagsFromVault
+    (
+    -- * Creating a Request
+      removeTagsFromVault
+    , RemoveTagsFromVault
+    -- * Request Lenses
+    , rtfvTagKeys
+    , rtfvAccountId
+    , rtfvVaultName
+
+    -- * Destructuring the Response
+    , removeTagsFromVaultResponse
+    , RemoveTagsFromVaultResponse
+    ) where
+
+import           Network.AWS.Glacier.Types
+import           Network.AWS.Glacier.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | The input value for 'RemoveTagsFromVaultInput'.
+--
+-- /See:/ 'removeTagsFromVault' smart constructor.
+data RemoveTagsFromVault = RemoveTagsFromVault'
+    { _rtfvTagKeys   :: !(Maybe [Text])
+    , _rtfvAccountId :: !Text
+    , _rtfvVaultName :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RemoveTagsFromVault' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rtfvTagKeys'
+--
+-- * 'rtfvAccountId'
+--
+-- * 'rtfvVaultName'
+removeTagsFromVault
+    :: Text -- ^ 'rtfvAccountId'
+    -> Text -- ^ 'rtfvVaultName'
+    -> RemoveTagsFromVault
+removeTagsFromVault pAccountId_ pVaultName_ =
+    RemoveTagsFromVault'
+    { _rtfvTagKeys = Nothing
+    , _rtfvAccountId = pAccountId_
+    , _rtfvVaultName = pVaultName_
+    }
+
+-- | A list of tag keys. Each corresponding tag is removed from the vault.
+rtfvTagKeys :: Lens' RemoveTagsFromVault [Text]
+rtfvTagKeys = lens _rtfvTagKeys (\ s a -> s{_rtfvTagKeys = a}) . _Default . _Coerce;
+
+-- | The 'AccountId' value is the AWS account ID of the account that owns the
+-- vault. You can either specify an AWS account ID or optionally a single
+-- apos'-'apos (hyphen), in which case Amazon Glacier uses the AWS account
+-- ID associated with the credentials used to sign the request. If you use
+-- an account ID, do not include any hyphens (apos-apos) in the ID.
+rtfvAccountId :: Lens' RemoveTagsFromVault Text
+rtfvAccountId = lens _rtfvAccountId (\ s a -> s{_rtfvAccountId = a});
+
+-- | The name of the vault.
+rtfvVaultName :: Lens' RemoveTagsFromVault Text
+rtfvVaultName = lens _rtfvVaultName (\ s a -> s{_rtfvVaultName = a});
+
+instance AWSRequest RemoveTagsFromVault where
+        type Sv RemoveTagsFromVault = Glacier
+        type Rs RemoveTagsFromVault =
+             RemoveTagsFromVaultResponse
+        request = postJSON
+        response = receiveNull RemoveTagsFromVaultResponse'
+
+instance ToHeaders RemoveTagsFromVault where
+        toHeaders = const mempty
+
+instance ToJSON RemoveTagsFromVault where
+        toJSON RemoveTagsFromVault'{..}
+          = object ["TagKeys" .= _rtfvTagKeys]
+
+instance ToPath RemoveTagsFromVault where
+        toPath RemoveTagsFromVault'{..}
+          = mconcat
+              ["/", toBS _rtfvAccountId, "/vaults/",
+               toBS _rtfvVaultName, "/tags"]
+
+instance ToQuery RemoveTagsFromVault where
+        toQuery = const (mconcat ["operation=remove"])
+
+-- | /See:/ 'removeTagsFromVaultResponse' smart constructor.
+data RemoveTagsFromVaultResponse =
+    RemoveTagsFromVaultResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RemoveTagsFromVaultResponse' with the minimum fields required to make a request.
+--
+removeTagsFromVaultResponse
+    :: RemoveTagsFromVaultResponse
+removeTagsFromVaultResponse = RemoveTagsFromVaultResponse'
diff --git a/gen/Network/AWS/Glacier/SetDataRetrievalPolicy.hs b/gen/Network/AWS/Glacier/SetDataRetrievalPolicy.hs
--- a/gen/Network/AWS/Glacier/SetDataRetrievalPolicy.hs
+++ b/gen/Network/AWS/Glacier/SetDataRetrievalPolicy.hs
@@ -1,119 +1,123 @@
-{-# 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.Glacier.SetDataRetrievalPolicy
--- 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.
-
--- | This operation sets and then enacts a data retrieval policy in the region
--- specified in the PUT request. You can set one policy per region for an AWS
--- account. The policy is enacted within a few minutes of a successful PUT
--- operation.
+-- This operation sets and then enacts a data retrieval policy in the
+-- region specified in the PUT request. You can set one policy per region
+-- for an AWS account. The policy is enacted within a few minutes of a
+-- successful PUT operation.
 --
 -- The set policy operation does not affect retrieval jobs that were in
 -- progress before the policy was enacted. For more information about data
--- retrieval policies, see <http://docs.aws.amazon.com/amazonglacier/latest/dev/data-retrieval-policy.html Amazon Glacier Data Retrieval Policies>.
+-- retrieval policies, see
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/data-retrieval-policy.html Amazon Glacier Data Retrieval Policies>.
 --
--- <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-SetDataRetrievalPolicy.html>
+-- /See:/ <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-SetDataRetrievalPolicy.html AWS API Reference> for SetDataRetrievalPolicy.
 module Network.AWS.Glacier.SetDataRetrievalPolicy
     (
-    -- * Request
-      SetDataRetrievalPolicy
-    -- ** Request constructor
-    , setDataRetrievalPolicy
-    -- ** Request lenses
-    , sdrpAccountId
+    -- * Creating a Request
+      setDataRetrievalPolicy
+    , SetDataRetrievalPolicy
+    -- * Request Lenses
     , sdrpPolicy
+    , sdrpAccountId
 
-    -- * Response
-    , SetDataRetrievalPolicyResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , setDataRetrievalPolicyResponse
+    , SetDataRetrievalPolicyResponse
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.RestJSON
-import Network.AWS.Glacier.Types
-import qualified GHC.Exts
-
-data SetDataRetrievalPolicy = SetDataRetrievalPolicy
-    { _sdrpAccountId :: Text
-    , _sdrpPolicy    :: Maybe DataRetrievalPolicy
-    } deriving (Eq, Read, Show)
+import           Network.AWS.Glacier.Types
+import           Network.AWS.Glacier.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
--- | 'SetDataRetrievalPolicy' constructor.
+-- | SetDataRetrievalPolicy input.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'setDataRetrievalPolicy' smart constructor.
+data SetDataRetrievalPolicy = SetDataRetrievalPolicy'
+    { _sdrpPolicy    :: !(Maybe DataRetrievalPolicy)
+    , _sdrpAccountId :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SetDataRetrievalPolicy' with the minimum fields required to make a request.
 --
--- * 'sdrpAccountId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'sdrpPolicy' @::@ 'Maybe' 'DataRetrievalPolicy'
+-- * 'sdrpPolicy'
 --
-setDataRetrievalPolicy :: Text -- ^ 'sdrpAccountId'
-                       -> SetDataRetrievalPolicy
-setDataRetrievalPolicy p1 = SetDataRetrievalPolicy
-    { _sdrpAccountId = p1
-    , _sdrpPolicy    = Nothing
+-- * 'sdrpAccountId'
+setDataRetrievalPolicy
+    :: Text -- ^ 'sdrpAccountId'
+    -> SetDataRetrievalPolicy
+setDataRetrievalPolicy pAccountId_ =
+    SetDataRetrievalPolicy'
+    { _sdrpPolicy = Nothing
+    , _sdrpAccountId = pAccountId_
     }
 
--- | The 'AccountId' value is the AWS account ID. This value must match the AWS
--- account ID associated with the credentials used to sign the request. You can
--- either specify an AWS account ID or optionally a single apos'-'apos (hyphen),
--- in which case Amazon Glacier uses the AWS account ID associated with the
--- credentials used to sign the request. If you specify your Account ID, do not
--- include any hyphens (apos-apos) in the ID.
-sdrpAccountId :: Lens' SetDataRetrievalPolicy Text
-sdrpAccountId = lens _sdrpAccountId (\s a -> s { _sdrpAccountId = a })
-
 -- | The data retrieval policy in JSON format.
 sdrpPolicy :: Lens' SetDataRetrievalPolicy (Maybe DataRetrievalPolicy)
-sdrpPolicy = lens _sdrpPolicy (\s a -> s { _sdrpPolicy = a })
+sdrpPolicy = lens _sdrpPolicy (\ s a -> s{_sdrpPolicy = a});
 
-data SetDataRetrievalPolicyResponse = SetDataRetrievalPolicyResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+-- | The 'AccountId' value is the AWS account ID. This value must match the
+-- AWS account ID associated with the credentials used to sign the request.
+-- You can either specify an AWS account ID or optionally a single
+-- apos'-'apos (hyphen), in which case Amazon Glacier uses the AWS account
+-- ID associated with the credentials used to sign the request. If you
+-- specify your account ID, do not include any hyphens (apos-apos) in the
+-- ID.
+sdrpAccountId :: Lens' SetDataRetrievalPolicy Text
+sdrpAccountId = lens _sdrpAccountId (\ s a -> s{_sdrpAccountId = a});
 
--- | 'SetDataRetrievalPolicyResponse' constructor.
-setDataRetrievalPolicyResponse :: SetDataRetrievalPolicyResponse
-setDataRetrievalPolicyResponse = SetDataRetrievalPolicyResponse
+instance AWSRequest SetDataRetrievalPolicy where
+        type Sv SetDataRetrievalPolicy = Glacier
+        type Rs SetDataRetrievalPolicy =
+             SetDataRetrievalPolicyResponse
+        request = putJSON
+        response
+          = receiveNull SetDataRetrievalPolicyResponse'
 
-instance ToPath SetDataRetrievalPolicy where
-    toPath SetDataRetrievalPolicy{..} = mconcat
-        [ "/"
-        , toText _sdrpAccountId
-        , "/policies/data-retrieval"
-        ]
+instance ToHeaders SetDataRetrievalPolicy where
+        toHeaders = const mempty
 
-instance ToQuery SetDataRetrievalPolicy where
-    toQuery = const mempty
+instance ToJSON SetDataRetrievalPolicy where
+        toJSON SetDataRetrievalPolicy'{..}
+          = object ["Policy" .= _sdrpPolicy]
 
-instance ToHeaders SetDataRetrievalPolicy
+instance ToPath SetDataRetrievalPolicy where
+        toPath SetDataRetrievalPolicy'{..}
+          = mconcat
+              ["/", toBS _sdrpAccountId,
+               "/policies/data-retrieval"]
 
-instance ToJSON SetDataRetrievalPolicy where
-    toJSON SetDataRetrievalPolicy{..} = object
-        [ "Policy" .= _sdrpPolicy
-        ]
+instance ToQuery SetDataRetrievalPolicy where
+        toQuery = const mempty
 
-instance AWSRequest SetDataRetrievalPolicy where
-    type Sv SetDataRetrievalPolicy = Glacier
-    type Rs SetDataRetrievalPolicy = SetDataRetrievalPolicyResponse
+-- | /See:/ 'setDataRetrievalPolicyResponse' smart constructor.
+data SetDataRetrievalPolicyResponse =
+    SetDataRetrievalPolicyResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = put
-    response = nullResponse SetDataRetrievalPolicyResponse
+-- | Creates a value of 'SetDataRetrievalPolicyResponse' with the minimum fields required to make a request.
+--
+setDataRetrievalPolicyResponse
+    :: SetDataRetrievalPolicyResponse
+setDataRetrievalPolicyResponse = SetDataRetrievalPolicyResponse'
diff --git a/gen/Network/AWS/Glacier/SetVaultAccessPolicy.hs b/gen/Network/AWS/Glacier/SetVaultAccessPolicy.hs
--- a/gen/Network/AWS/Glacier/SetVaultAccessPolicy.hs
+++ b/gen/Network/AWS/Glacier/SetVaultAccessPolicy.hs
@@ -1,128 +1,128 @@
-{-# 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.Glacier.SetVaultAccessPolicy
--- 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.
-
--- | This operation configures an access policy for a vault and will overwrite an
--- existing policy. To configure a vault access policy, send a PUT request to
--- the 'access-policy' subresource of the vault. An access policy is specific to a
--- vault and is also called a vault subresource. You can set one access policy
--- per vault and the policy can be up to 20 KB in size. For more information
--- about vault access policies, see <http://docs.aws.amazon.com/amazonglacier/latest/dev/vault-access-policy.html Amazon Glacier Access Control with VaultAccess Policies>.
+-- This operation configures an access policy for a vault and will
+-- overwrite an existing policy. To configure a vault access policy, send a
+-- PUT request to the 'access-policy' subresource of the vault. An access
+-- policy is specific to a vault and is also called a vault subresource.
+-- You can set one access policy per vault and the policy can be up to 20
+-- KB in size. For more information about vault access policies, see
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/vault-access-policy.html Amazon Glacier Access Control with Vault Access Policies>.
 --
--- <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-SetVaultAccessPolicy.html>
+-- /See:/ <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-SetVaultAccessPolicy.html AWS API Reference> for SetVaultAccessPolicy.
 module Network.AWS.Glacier.SetVaultAccessPolicy
     (
-    -- * Request
-      SetVaultAccessPolicy
-    -- ** Request constructor
-    , setVaultAccessPolicy
-    -- ** Request lenses
-    , svapAccountId
+    -- * Creating a Request
+      setVaultAccessPolicy
+    , SetVaultAccessPolicy
+    -- * Request Lenses
     , svapPolicy
+    , svapAccountId
     , svapVaultName
 
-    -- * Response
-    , SetVaultAccessPolicyResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , setVaultAccessPolicyResponse
+    , SetVaultAccessPolicyResponse
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.RestJSON
-import Network.AWS.Glacier.Types
-import qualified GHC.Exts
-
-data SetVaultAccessPolicy = SetVaultAccessPolicy
-    { _svapAccountId :: Text
-    , _svapPolicy    :: Maybe VaultAccessPolicy
-    , _svapVaultName :: Text
-    } deriving (Eq, Read, Show)
+import           Network.AWS.Glacier.Types
+import           Network.AWS.Glacier.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
--- | 'SetVaultAccessPolicy' constructor.
+-- | SetVaultAccessPolicy input.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'setVaultAccessPolicy' smart constructor.
+data SetVaultAccessPolicy = SetVaultAccessPolicy'
+    { _svapPolicy    :: !(Maybe VaultAccessPolicy)
+    , _svapAccountId :: !Text
+    , _svapVaultName :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SetVaultAccessPolicy' with the minimum fields required to make a request.
 --
--- * 'svapAccountId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'svapPolicy' @::@ 'Maybe' 'VaultAccessPolicy'
+-- * 'svapPolicy'
 --
--- * 'svapVaultName' @::@ 'Text'
+-- * 'svapAccountId'
 --
-setVaultAccessPolicy :: Text -- ^ 'svapAccountId'
-                     -> Text -- ^ 'svapVaultName'
-                     -> SetVaultAccessPolicy
-setVaultAccessPolicy p1 p2 = SetVaultAccessPolicy
-    { _svapAccountId = p1
-    , _svapVaultName = p2
-    , _svapPolicy    = Nothing
+-- * 'svapVaultName'
+setVaultAccessPolicy
+    :: Text -- ^ 'svapAccountId'
+    -> Text -- ^ 'svapVaultName'
+    -> SetVaultAccessPolicy
+setVaultAccessPolicy pAccountId_ pVaultName_ =
+    SetVaultAccessPolicy'
+    { _svapPolicy = Nothing
+    , _svapAccountId = pAccountId_
+    , _svapVaultName = pVaultName_
     }
 
--- | The 'AccountId' value is the AWS account ID of the account that owns the vault.
--- You can either specify an AWS account ID or optionally a single apos'-'apos
--- (hyphen), in which case Amazon Glacier uses the AWS account ID associated
--- with the credentials used to sign the request. If you use an account ID, do
--- not include any hyphens (apos-apos) in the ID.
-svapAccountId :: Lens' SetVaultAccessPolicy Text
-svapAccountId = lens _svapAccountId (\s a -> s { _svapAccountId = a })
-
 -- | The vault access policy as a JSON string.
 svapPolicy :: Lens' SetVaultAccessPolicy (Maybe VaultAccessPolicy)
-svapPolicy = lens _svapPolicy (\s a -> s { _svapPolicy = a })
+svapPolicy = lens _svapPolicy (\ s a -> s{_svapPolicy = a});
 
+-- | The 'AccountId' value is the AWS account ID of the account that owns the
+-- vault. You can either specify an AWS account ID or optionally a single
+-- apos'-'apos (hyphen), in which case Amazon Glacier uses the AWS account
+-- ID associated with the credentials used to sign the request. If you use
+-- an account ID, do not include any hyphens (apos-apos) in the ID.
+svapAccountId :: Lens' SetVaultAccessPolicy Text
+svapAccountId = lens _svapAccountId (\ s a -> s{_svapAccountId = a});
+
 -- | The name of the vault.
 svapVaultName :: Lens' SetVaultAccessPolicy Text
-svapVaultName = lens _svapVaultName (\s a -> s { _svapVaultName = a })
+svapVaultName = lens _svapVaultName (\ s a -> s{_svapVaultName = a});
 
-data SetVaultAccessPolicyResponse = SetVaultAccessPolicyResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+instance AWSRequest SetVaultAccessPolicy where
+        type Sv SetVaultAccessPolicy = Glacier
+        type Rs SetVaultAccessPolicy =
+             SetVaultAccessPolicyResponse
+        request = putJSON
+        response = receiveNull SetVaultAccessPolicyResponse'
 
--- | 'SetVaultAccessPolicyResponse' constructor.
-setVaultAccessPolicyResponse :: SetVaultAccessPolicyResponse
-setVaultAccessPolicyResponse = SetVaultAccessPolicyResponse
+instance ToHeaders SetVaultAccessPolicy where
+        toHeaders = const mempty
 
+instance ToJSON SetVaultAccessPolicy where
+        toJSON SetVaultAccessPolicy'{..}
+          = object ["policy" .= _svapPolicy]
+
 instance ToPath SetVaultAccessPolicy where
-    toPath SetVaultAccessPolicy{..} = mconcat
-        [ "/"
-        , toText _svapAccountId
-        , "/vaults/"
-        , toText _svapVaultName
-        , "/access-policy"
-        ]
+        toPath SetVaultAccessPolicy'{..}
+          = mconcat
+              ["/", toBS _svapAccountId, "/vaults/",
+               toBS _svapVaultName, "/access-policy"]
 
 instance ToQuery SetVaultAccessPolicy where
-    toQuery = const mempty
-
-instance ToHeaders SetVaultAccessPolicy
-
-instance ToJSON SetVaultAccessPolicy where
-    toJSON SetVaultAccessPolicy{..} = object
-        [ "policy" .= _svapPolicy
-        ]
+        toQuery = const mempty
 
-instance AWSRequest SetVaultAccessPolicy where
-    type Sv SetVaultAccessPolicy = Glacier
-    type Rs SetVaultAccessPolicy = SetVaultAccessPolicyResponse
+-- | /See:/ 'setVaultAccessPolicyResponse' smart constructor.
+data SetVaultAccessPolicyResponse =
+    SetVaultAccessPolicyResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = put
-    response = nullResponse SetVaultAccessPolicyResponse
+-- | Creates a value of 'SetVaultAccessPolicyResponse' with the minimum fields required to make a request.
+--
+setVaultAccessPolicyResponse
+    :: SetVaultAccessPolicyResponse
+setVaultAccessPolicyResponse = SetVaultAccessPolicyResponse'
diff --git a/gen/Network/AWS/Glacier/SetVaultNotifications.hs b/gen/Network/AWS/Glacier/SetVaultNotifications.hs
--- a/gen/Network/AWS/Glacier/SetVaultNotifications.hs
+++ b/gen/Network/AWS/Glacier/SetVaultNotifications.hs
@@ -1,149 +1,159 @@
-{-# 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.Glacier.SetVaultNotifications
--- 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.
-
--- | This operation configures notifications that will be sent when specific
--- events happen to a vault. By default, you don't get any notifications.
+-- This operation configures notifications that will be sent when specific
+-- events happen to a vault. By default, you don\'t get any notifications.
 --
--- To configure vault notifications, send a PUT request to the 'notification-configuration' subresource of the vault. The request should include a JSON document that
--- provides an Amazon SNS topic and specific events for which you want Amazon
--- Glacier to send notifications to the topic.
+-- To configure vault notifications, send a PUT request to the
+-- 'notification-configuration' subresource of the vault. The request
+-- should include a JSON document that provides an Amazon SNS topic and
+-- specific events for which you want Amazon Glacier to send notifications
+-- to the topic.
 --
 -- Amazon SNS topics must grant permission to the vault to be allowed to
--- publish notifications to the topic. You can configure a vault to publish a
--- notification for the following vault events:
+-- publish notifications to the topic. You can configure a vault to publish
+-- a notification for the following vault events:
 --
--- ArchiveRetrievalCompleted This event occurs when a job that was initiated
--- for an archive retrieval is completed ('InitiateJob'). The status of the
--- completed job can be "Succeeded" or "Failed". The notification sent to the
--- SNS topic is the same output as returned from 'DescribeJob'.   InventoryRetrievalCompleted
--- This event occurs when a job that was initiated for an inventory retrieval
--- is completed ('InitiateJob'). The status of the completed job can be
--- "Succeeded" or "Failed". The notification sent to the SNS topic is the same
--- output as returned from 'DescribeJob'.   An AWS account has full permission to
--- perform all operations (actions). However, AWS Identity and Access Management
--- (IAM) users don't have any permissions by default. You must grant them
--- explicit permission to perform specific actions. For more information, see <http://docs.aws.amazon.com/amazonglacier/latest/dev/using-iam-with-amazon-glacier.html Access Control Using AWS Identity and Access Management (IAM)>.
+-- -   __ArchiveRetrievalCompleted__ This event occurs when a job that was
+--     initiated for an archive retrieval is completed (InitiateJob). The
+--     status of the completed job can be \"Succeeded\" or \"Failed\". The
+--     notification sent to the SNS topic is the same output as returned
+--     from DescribeJob.
+-- -   __InventoryRetrievalCompleted__ This event occurs when a job that
+--     was initiated for an inventory retrieval is completed (InitiateJob).
+--     The status of the completed job can be \"Succeeded\" or \"Failed\".
+--     The notification sent to the SNS topic is the same output as
+--     returned from DescribeJob.
 --
--- For conceptual information and underlying REST API, go to <http://docs.aws.amazon.com/amazonglacier/latest/dev/configuring-notifications.html Configuring VaultNotifications in Amazon Glacier> and <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-vault-notifications-put.html Set Vault Notification Configuration > in
--- the /Amazon Glacier Developer Guide/.
+-- An AWS account has full permission to perform all operations (actions).
+-- However, AWS Identity and Access Management (IAM) users don\'t have any
+-- permissions by default. You must grant them explicit permission to
+-- perform specific actions. For more information, see
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/using-iam-with-amazon-glacier.html Access Control Using AWS Identity and Access Management (IAM)>.
 --
--- <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-SetVaultNotifications.html>
+-- For conceptual information and underlying REST API, go to
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/configuring-notifications.html Configuring Vault Notifications in Amazon Glacier>
+-- and
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-vault-notifications-put.html Set Vault Notification Configuration>
+-- in the /Amazon Glacier Developer Guide/.
+--
+-- /See:/ <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-SetVaultNotifications.html AWS API Reference> for SetVaultNotifications.
 module Network.AWS.Glacier.SetVaultNotifications
     (
-    -- * Request
-      SetVaultNotifications
-    -- ** Request constructor
-    , setVaultNotifications
-    -- ** Request lenses
+    -- * Creating a Request
+      setVaultNotifications
+    , SetVaultNotifications
+    -- * Request Lenses
+    , svnVaultNotificationConfig
     , svnAccountId
     , svnVaultName
-    , svnVaultNotificationConfig
 
-    -- * Response
-    , SetVaultNotificationsResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , setVaultNotificationsResponse
+    , SetVaultNotificationsResponse
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.RestJSON
-import Network.AWS.Glacier.Types
-import qualified GHC.Exts
-
-data SetVaultNotifications = SetVaultNotifications
-    { _svnAccountId               :: Text
-    , _svnVaultName               :: Text
-    , _svnVaultNotificationConfig :: Maybe VaultNotificationConfig
-    } deriving (Eq, Read, Show)
+import           Network.AWS.Glacier.Types
+import           Network.AWS.Glacier.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
--- | 'SetVaultNotifications' constructor.
+-- | Provides options to configure notifications that will be sent when
+-- specific events happen to a vault.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'setVaultNotifications' smart constructor.
+data SetVaultNotifications = SetVaultNotifications'
+    { _svnVaultNotificationConfig :: !(Maybe VaultNotificationConfig)
+    , _svnAccountId               :: !Text
+    , _svnVaultName               :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SetVaultNotifications' with the minimum fields required to make a request.
 --
--- * 'svnAccountId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'svnVaultName' @::@ 'Text'
+-- * 'svnVaultNotificationConfig'
 --
--- * 'svnVaultNotificationConfig' @::@ 'Maybe' 'VaultNotificationConfig'
+-- * 'svnAccountId'
 --
-setVaultNotifications :: Text -- ^ 'svnAccountId'
-                      -> Text -- ^ 'svnVaultName'
-                      -> SetVaultNotifications
-setVaultNotifications p1 p2 = SetVaultNotifications
-    { _svnAccountId               = p1
-    , _svnVaultName               = p2
-    , _svnVaultNotificationConfig = Nothing
+-- * 'svnVaultName'
+setVaultNotifications
+    :: Text -- ^ 'svnAccountId'
+    -> Text -- ^ 'svnVaultName'
+    -> SetVaultNotifications
+setVaultNotifications pAccountId_ pVaultName_ =
+    SetVaultNotifications'
+    { _svnVaultNotificationConfig = Nothing
+    , _svnAccountId = pAccountId_
+    , _svnVaultName = pVaultName_
     }
 
--- | The 'AccountId' value is the AWS account ID of the account that owns the vault.
--- You can either specify an AWS account ID or optionally a single apos'-'apos
--- (hyphen), in which case Amazon Glacier uses the AWS account ID associated
--- with the credentials used to sign the request. If you use an account ID, do
--- not include any hyphens (apos-apos) in the ID.
+-- | Provides options for specifying notification configuration.
+svnVaultNotificationConfig :: Lens' SetVaultNotifications (Maybe VaultNotificationConfig)
+svnVaultNotificationConfig = lens _svnVaultNotificationConfig (\ s a -> s{_svnVaultNotificationConfig = a});
+
+-- | The 'AccountId' value is the AWS account ID of the account that owns the
+-- vault. You can either specify an AWS account ID or optionally a single
+-- apos'-'apos (hyphen), in which case Amazon Glacier uses the AWS account
+-- ID associated with the credentials used to sign the request. If you use
+-- an account ID, do not include any hyphens (apos-apos) in the ID.
 svnAccountId :: Lens' SetVaultNotifications Text
-svnAccountId = lens _svnAccountId (\s a -> s { _svnAccountId = a })
+svnAccountId = lens _svnAccountId (\ s a -> s{_svnAccountId = a});
 
 -- | The name of the vault.
 svnVaultName :: Lens' SetVaultNotifications Text
-svnVaultName = lens _svnVaultName (\s a -> s { _svnVaultName = a })
+svnVaultName = lens _svnVaultName (\ s a -> s{_svnVaultName = a});
 
--- | Provides options for specifying notification configuration.
-svnVaultNotificationConfig :: Lens' SetVaultNotifications (Maybe VaultNotificationConfig)
-svnVaultNotificationConfig =
-    lens _svnVaultNotificationConfig
-        (\s a -> s { _svnVaultNotificationConfig = a })
+instance AWSRequest SetVaultNotifications where
+        type Sv SetVaultNotifications = Glacier
+        type Rs SetVaultNotifications =
+             SetVaultNotificationsResponse
+        request = putJSON
+        response = receiveNull SetVaultNotificationsResponse'
 
-data SetVaultNotificationsResponse = SetVaultNotificationsResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+instance ToHeaders SetVaultNotifications where
+        toHeaders = const mempty
 
--- | 'SetVaultNotificationsResponse' constructor.
-setVaultNotificationsResponse :: SetVaultNotificationsResponse
-setVaultNotificationsResponse = SetVaultNotificationsResponse
+instance ToJSON SetVaultNotifications where
+        toJSON SetVaultNotifications'{..}
+          = object
+              ["vaultNotificationConfig" .=
+                 _svnVaultNotificationConfig]
 
 instance ToPath SetVaultNotifications where
-    toPath SetVaultNotifications{..} = mconcat
-        [ "/"
-        , toText _svnAccountId
-        , "/vaults/"
-        , toText _svnVaultName
-        , "/notification-configuration"
-        ]
+        toPath SetVaultNotifications'{..}
+          = mconcat
+              ["/", toBS _svnAccountId, "/vaults/",
+               toBS _svnVaultName, "/notification-configuration"]
 
 instance ToQuery SetVaultNotifications where
-    toQuery = const mempty
-
-instance ToHeaders SetVaultNotifications
-
-instance ToJSON SetVaultNotifications where
-    toJSON SetVaultNotifications{..} = object
-        [ "vaultNotificationConfig" .= _svnVaultNotificationConfig
-        ]
+        toQuery = const mempty
 
-instance AWSRequest SetVaultNotifications where
-    type Sv SetVaultNotifications = Glacier
-    type Rs SetVaultNotifications = SetVaultNotificationsResponse
+-- | /See:/ 'setVaultNotificationsResponse' smart constructor.
+data SetVaultNotificationsResponse =
+    SetVaultNotificationsResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = put
-    response = nullResponse SetVaultNotificationsResponse
+-- | Creates a value of 'SetVaultNotificationsResponse' with the minimum fields required to make a request.
+--
+setVaultNotificationsResponse
+    :: SetVaultNotificationsResponse
+setVaultNotificationsResponse = SetVaultNotificationsResponse'
diff --git a/gen/Network/AWS/Glacier/Types.hs b/gen/Network/AWS/Glacier/Types.hs
--- a/gen/Network/AWS/Glacier/Types.hs
+++ b/gen/Network/AWS/Glacier/Types.hs
@@ -1,1123 +1,220 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
-{-# LANGUAGE ViewPatterns                #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-
--- Module      : Network.AWS.Glacier.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/.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
--- Portability : non-portable (GHC extensions)
---
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
-module Network.AWS.Glacier.Types
-    (
-    -- * Service
-      Glacier
-    -- ** Error
-    , JSONError
-
-    -- * ArchiveCreationOutput
-    , ArchiveCreationOutput
-    , archiveCreationOutput
-    , acoArchiveId
-    , acoChecksum
-    , acoLocation
-
-    -- * UploadListElement
-    , UploadListElement
-    , uploadListElement
-    , uleArchiveDescription
-    , uleCreationDate
-    , uleMultipartUploadId
-    , ulePartSizeInBytes
-    , uleVaultARN
-
-    -- * InventoryRetrievalJobDescription
-    , InventoryRetrievalJobDescription
-    , inventoryRetrievalJobDescription
-    , irjdEndDate
-    , irjdFormat
-    , irjdLimit
-    , irjdMarker
-    , irjdStartDate
-
-    -- * JobParameters
-    , JobParameters
-    , jobParameters
-    , jpArchiveId
-    , jpDescription
-    , jpFormat
-    , jpInventoryRetrievalParameters
-    , jpRetrievalByteRange
-    , jpSNSTopic
-    , jpType
-
-    -- * DescribeVaultOutput
-    , DescribeVaultOutput
-    , describeVaultOutput
-    , dvoCreationDate
-    , dvoLastInventoryDate
-    , dvoNumberOfArchives
-    , dvoSizeInBytes
-    , dvoVaultARN
-    , dvoVaultName
-
-    -- * DataRetrievalRule
-    , DataRetrievalRule
-    , dataRetrievalRule
-    , drrBytesPerHour
-    , drrStrategy
-
-    -- * ActionCode
-    , ActionCode (..)
-
-    -- * VaultNotificationConfig
-    , VaultNotificationConfig
-    , vaultNotificationConfig
-    , vncEvents
-    , vncSNSTopic
-
-    -- * InventoryRetrievalJobInput
-    , InventoryRetrievalJobInput
-    , inventoryRetrievalJobInput
-    , irjiEndDate
-    , irjiLimit
-    , irjiMarker
-    , irjiStartDate
-
-    -- * PartListElement
-    , PartListElement
-    , partListElement
-    , pleRangeInBytes
-    , pleSHA256TreeHash
-
-    -- * DataRetrievalPolicy
-    , DataRetrievalPolicy
-    , dataRetrievalPolicy
-    , drpRules
-
-    -- * GlacierJobDescription
-    , GlacierJobDescription
-    , glacierJobDescription
-    , gjdAction
-    , gjdArchiveId
-    , gjdArchiveSHA256TreeHash
-    , gjdArchiveSizeInBytes
-    , gjdCompleted
-    , gjdCompletionDate
-    , gjdCreationDate
-    , gjdInventoryRetrievalParameters
-    , gjdInventorySizeInBytes
-    , gjdJobDescription
-    , gjdJobId
-    , gjdRetrievalByteRange
-    , gjdSHA256TreeHash
-    , gjdSNSTopic
-    , gjdStatusCode
-    , gjdStatusMessage
-    , gjdVaultARN
-
-    -- * VaultAccessPolicy
-    , VaultAccessPolicy
-    , vaultAccessPolicy
-    , vapPolicy
-
-    -- * StatusCode
-    , StatusCode (..)
-    ) where
-
-import Network.AWS.Prelude
-import Network.AWS.Signing
-import qualified GHC.Exts
-
--- | Version @2012-06-01@ of the Amazon Glacier service.
-data Glacier
-
-instance AWSService Glacier where
-    type Sg Glacier = V4
-    type Er Glacier = JSONError
-
-    service = service'
-      where
-        service' :: Service Glacier
-        service' = Service
-            { _svcAbbrev       = "Glacier"
-            , _svcPrefix       = "glacier"
-            , _svcVersion      = "2012-06-01"
-            , _svcTargetPrefix = Nothing
-            , _svcJSONVersion  = Nothing
-            , _svcHandle       = handle
-            , _svcRetry        = retry
-            }
-
-        handle :: Status
-               -> Maybe (LazyByteString -> ServiceError JSONError)
-        handle = jsonError statusSuccess service'
-
-        retry :: Retry Glacier
-        retry = Exponential
-            { _retryBase     = 0.05
-            , _retryGrowth   = 2
-            , _retryAttempts = 5
-            , _retryCheck    = check
-            }
-
-        check :: Status
-              -> JSONError
-              -> Bool
-        check (statusCode -> s) (awsErrorCode -> e)
-            | s == 400 && (Just "ThrottlingException") == e = True -- Throttling
-            | s == 500  = True -- General Server Error
-            | s == 509  = True -- Limit Exceeded
-            | s == 503  = True -- Service Unavailable
-            | otherwise = False
-
-data ArchiveCreationOutput = ArchiveCreationOutput
-    { _acoArchiveId :: Maybe Text
-    , _acoChecksum  :: Maybe Text
-    , _acoLocation  :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'ArchiveCreationOutput' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'acoArchiveId' @::@ 'Maybe' 'Text'
---
--- * 'acoChecksum' @::@ 'Maybe' 'Text'
---
--- * 'acoLocation' @::@ 'Maybe' 'Text'
---
-archiveCreationOutput :: ArchiveCreationOutput
-archiveCreationOutput = ArchiveCreationOutput
-    { _acoLocation  = Nothing
-    , _acoChecksum  = Nothing
-    , _acoArchiveId = Nothing
-    }
-
--- | The ID of the archive. This value is also included as part of the location.
-acoArchiveId :: Lens' ArchiveCreationOutput (Maybe Text)
-acoArchiveId = lens _acoArchiveId (\s a -> s { _acoArchiveId = a })
-
--- | The checksum of the archive computed by Amazon Glacier.
-acoChecksum :: Lens' ArchiveCreationOutput (Maybe Text)
-acoChecksum = lens _acoChecksum (\s a -> s { _acoChecksum = a })
-
--- | The relative URI path of the newly added archive resource.
-acoLocation :: Lens' ArchiveCreationOutput (Maybe Text)
-acoLocation = lens _acoLocation (\s a -> s { _acoLocation = a })
-
-instance FromJSON ArchiveCreationOutput where
-    parseJSON = withObject "ArchiveCreationOutput" $ \o -> ArchiveCreationOutput
-        <$> o .:? "x-amz-archive-id"
-        <*> o .:? "x-amz-sha256-tree-hash"
-        <*> o .:? "Location"
-
-instance ToJSON ArchiveCreationOutput where
-    toJSON = const (toJSON Empty)
-
-data UploadListElement = UploadListElement
-    { _uleArchiveDescription :: Maybe Text
-    , _uleCreationDate       :: Maybe Text
-    , _uleMultipartUploadId  :: Maybe Text
-    , _ulePartSizeInBytes    :: Maybe Integer
-    , _uleVaultARN           :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'UploadListElement' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'uleArchiveDescription' @::@ 'Maybe' 'Text'
---
--- * 'uleCreationDate' @::@ 'Maybe' 'Text'
---
--- * 'uleMultipartUploadId' @::@ 'Maybe' 'Text'
---
--- * 'ulePartSizeInBytes' @::@ 'Maybe' 'Integer'
---
--- * 'uleVaultARN' @::@ 'Maybe' 'Text'
---
-uploadListElement :: UploadListElement
-uploadListElement = UploadListElement
-    { _uleMultipartUploadId  = Nothing
-    , _uleVaultARN           = Nothing
-    , _uleArchiveDescription = Nothing
-    , _ulePartSizeInBytes    = Nothing
-    , _uleCreationDate       = Nothing
-    }
-
--- | The description of the archive that was specified in the Initiate Multipart
--- Upload request.
-uleArchiveDescription :: Lens' UploadListElement (Maybe Text)
-uleArchiveDescription =
-    lens _uleArchiveDescription (\s a -> s { _uleArchiveDescription = a })
-
--- | The UTC time at which the multipart upload was initiated.
-uleCreationDate :: Lens' UploadListElement (Maybe Text)
-uleCreationDate = lens _uleCreationDate (\s a -> s { _uleCreationDate = a })
-
--- | The ID of a multipart upload.
-uleMultipartUploadId :: Lens' UploadListElement (Maybe Text)
-uleMultipartUploadId =
-    lens _uleMultipartUploadId (\s a -> s { _uleMultipartUploadId = a })
-
--- | The part size, in bytes, specified in the Initiate Multipart Upload request.
--- This is the size of all the parts in the upload except the last part, which
--- may be smaller than this size.
-ulePartSizeInBytes :: Lens' UploadListElement (Maybe Integer)
-ulePartSizeInBytes =
-    lens _ulePartSizeInBytes (\s a -> s { _ulePartSizeInBytes = a })
-
--- | The Amazon Resource Name (ARN) of the vault that contains the archive.
-uleVaultARN :: Lens' UploadListElement (Maybe Text)
-uleVaultARN = lens _uleVaultARN (\s a -> s { _uleVaultARN = a })
-
-instance FromJSON UploadListElement where
-    parseJSON = withObject "UploadListElement" $ \o -> UploadListElement
-        <$> o .:? "ArchiveDescription"
-        <*> o .:? "CreationDate"
-        <*> o .:? "MultipartUploadId"
-        <*> o .:? "PartSizeInBytes"
-        <*> o .:? "VaultARN"
-
-instance ToJSON UploadListElement where
-    toJSON UploadListElement{..} = object
-        [ "MultipartUploadId"  .= _uleMultipartUploadId
-        , "VaultARN"           .= _uleVaultARN
-        , "ArchiveDescription" .= _uleArchiveDescription
-        , "PartSizeInBytes"    .= _ulePartSizeInBytes
-        , "CreationDate"       .= _uleCreationDate
-        ]
-
-data InventoryRetrievalJobDescription = InventoryRetrievalJobDescription
-    { _irjdEndDate   :: Maybe Text
-    , _irjdFormat    :: Maybe Text
-    , _irjdLimit     :: Maybe Text
-    , _irjdMarker    :: Maybe Text
-    , _irjdStartDate :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'InventoryRetrievalJobDescription' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'irjdEndDate' @::@ 'Maybe' 'Text'
---
--- * 'irjdFormat' @::@ 'Maybe' 'Text'
---
--- * 'irjdLimit' @::@ 'Maybe' 'Text'
---
--- * 'irjdMarker' @::@ 'Maybe' 'Text'
---
--- * 'irjdStartDate' @::@ 'Maybe' 'Text'
---
-inventoryRetrievalJobDescription :: InventoryRetrievalJobDescription
-inventoryRetrievalJobDescription = InventoryRetrievalJobDescription
-    { _irjdFormat    = Nothing
-    , _irjdStartDate = Nothing
-    , _irjdEndDate   = Nothing
-    , _irjdLimit     = Nothing
-    , _irjdMarker    = Nothing
-    }
-
--- | The end of the date range in UTC for vault inventory retrieval that includes
--- archives created before this date. A string representation of ISO 8601 date
--- format, for example, 2013-03-20T17:03:43Z.
-irjdEndDate :: Lens' InventoryRetrievalJobDescription (Maybe Text)
-irjdEndDate = lens _irjdEndDate (\s a -> s { _irjdEndDate = a })
-
--- | The output format for the vault inventory list, which is set by the InitiateJob
--- request when initiating a job to retrieve a vault inventory. Valid values
--- are "CSV" and "JSON".
-irjdFormat :: Lens' InventoryRetrievalJobDescription (Maybe Text)
-irjdFormat = lens _irjdFormat (\s a -> s { _irjdFormat = a })
-
--- | Specifies the maximum number of inventory items returned per vault inventory
--- retrieval request. This limit is set when initiating the job with the a InitiateJob
--- request.
-irjdLimit :: Lens' InventoryRetrievalJobDescription (Maybe Text)
-irjdLimit = lens _irjdLimit (\s a -> s { _irjdLimit = a })
-
--- | An opaque string that represents where to continue pagination of the vault
--- inventory retrieval results. You use the marker in a new InitiateJob request
--- to obtain additional inventory items. If there are no more inventory items,
--- this value is 'null'. For more information, see <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-initiate-job-post.html#api-initiate-job-post-vault-inventory-list-filtering  Range Inventory Retrieval>.
-irjdMarker :: Lens' InventoryRetrievalJobDescription (Maybe Text)
-irjdMarker = lens _irjdMarker (\s a -> s { _irjdMarker = a })
-
--- | The start of the date range in UTC for vault inventory retrieval that
--- includes archives created on or after this date. A string representation of
--- ISO 8601 date format, for example, 2013-03-20T17:03:43Z.
-irjdStartDate :: Lens' InventoryRetrievalJobDescription (Maybe Text)
-irjdStartDate = lens _irjdStartDate (\s a -> s { _irjdStartDate = a })
-
-instance FromJSON InventoryRetrievalJobDescription where
-    parseJSON = withObject "InventoryRetrievalJobDescription" $ \o -> InventoryRetrievalJobDescription
-        <$> o .:? "EndDate"
-        <*> o .:? "Format"
-        <*> o .:? "Limit"
-        <*> o .:? "Marker"
-        <*> o .:? "StartDate"
-
-instance ToJSON InventoryRetrievalJobDescription where
-    toJSON InventoryRetrievalJobDescription{..} = object
-        [ "Format"    .= _irjdFormat
-        , "StartDate" .= _irjdStartDate
-        , "EndDate"   .= _irjdEndDate
-        , "Limit"     .= _irjdLimit
-        , "Marker"    .= _irjdMarker
-        ]
-
-data JobParameters = JobParameters
-    { _jpArchiveId                    :: Maybe Text
-    , _jpDescription                  :: Maybe Text
-    , _jpFormat                       :: Maybe Text
-    , _jpInventoryRetrievalParameters :: Maybe InventoryRetrievalJobInput
-    , _jpRetrievalByteRange           :: Maybe Text
-    , _jpSNSTopic                     :: Maybe Text
-    , _jpType                         :: Maybe Text
-    } deriving (Eq, Read, Show)
-
--- | 'JobParameters' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'jpArchiveId' @::@ 'Maybe' 'Text'
---
--- * 'jpDescription' @::@ 'Maybe' 'Text'
---
--- * 'jpFormat' @::@ 'Maybe' 'Text'
---
--- * 'jpInventoryRetrievalParameters' @::@ 'Maybe' 'InventoryRetrievalJobInput'
---
--- * 'jpRetrievalByteRange' @::@ 'Maybe' 'Text'
---
--- * 'jpSNSTopic' @::@ 'Maybe' 'Text'
---
--- * 'jpType' @::@ 'Maybe' 'Text'
---
-jobParameters :: JobParameters
-jobParameters = JobParameters
-    { _jpFormat                       = Nothing
-    , _jpType                         = Nothing
-    , _jpArchiveId                    = Nothing
-    , _jpDescription                  = Nothing
-    , _jpSNSTopic                     = Nothing
-    , _jpRetrievalByteRange           = Nothing
-    , _jpInventoryRetrievalParameters = Nothing
-    }
-
--- | The ID of the archive that you want to retrieve. This field is required only
--- if 'Type' is set to archive-retrieval. An error occurs if you specify this
--- request parameter for an inventory retrieval job request.
-jpArchiveId :: Lens' JobParameters (Maybe Text)
-jpArchiveId = lens _jpArchiveId (\s a -> s { _jpArchiveId = a })
-
--- | The optional description for the job. The description must be less than or
--- equal to 1,024 bytes. The allowable characters are 7-bit ASCII without
--- control codes-specifically, ASCII values 32-126 decimal or 0x20-0x7E
--- hexadecimal.
-jpDescription :: Lens' JobParameters (Maybe Text)
-jpDescription = lens _jpDescription (\s a -> s { _jpDescription = a })
-
--- | When initiating a job to retrieve a vault inventory, you can optionally add
--- this parameter to your request to specify the output format. If you are
--- initiating an inventory job and do not specify a Format field, JSON is the
--- default format. Valid values are "CSV" and "JSON".
-jpFormat :: Lens' JobParameters (Maybe Text)
-jpFormat = lens _jpFormat (\s a -> s { _jpFormat = a })
-
--- | Input parameters used for range inventory retrieval.
-jpInventoryRetrievalParameters :: Lens' JobParameters (Maybe InventoryRetrievalJobInput)
-jpInventoryRetrievalParameters =
-    lens _jpInventoryRetrievalParameters
-        (\s a -> s { _jpInventoryRetrievalParameters = a })
-
--- | The byte range to retrieve for an archive retrieval. in the form "/StartByteValue/-/EndByteValue/" If not specified, the whole archive is retrieved. If
--- specified, the byte range must be megabyte (1024*1024) aligned which means
--- that /StartByteValue/ must be divisible by 1 MB and /EndByteValue/ plus 1 must be
--- divisible by 1 MB or be the end of the archive specified as the archive byte
--- size value minus 1. If RetrievalByteRange is not megabyte aligned, this
--- operation returns a 400 response.
---
--- An error occurs if you specify this field for an inventory retrieval job
--- request.
-jpRetrievalByteRange :: Lens' JobParameters (Maybe Text)
-jpRetrievalByteRange =
-    lens _jpRetrievalByteRange (\s a -> s { _jpRetrievalByteRange = a })
-
--- | The Amazon SNS topic ARN to which Amazon Glacier sends a notification when
--- the job is completed and the output is ready for you to download. The
--- specified topic publishes the notification to its subscribers. The SNS topic
--- must exist.
-jpSNSTopic :: Lens' JobParameters (Maybe Text)
-jpSNSTopic = lens _jpSNSTopic (\s a -> s { _jpSNSTopic = a })
-
--- | The job type. You can initiate a job to retrieve an archive or get an
--- inventory of a vault. Valid values are "archive-retrieval" and
--- "inventory-retrieval".
-jpType :: Lens' JobParameters (Maybe Text)
-jpType = lens _jpType (\s a -> s { _jpType = a })
-
-instance FromJSON JobParameters where
-    parseJSON = withObject "JobParameters" $ \o -> JobParameters
-        <$> o .:? "ArchiveId"
-        <*> o .:? "Description"
-        <*> o .:? "Format"
-        <*> o .:? "InventoryRetrievalParameters"
-        <*> o .:? "RetrievalByteRange"
-        <*> o .:? "SNSTopic"
-        <*> o .:? "Type"
-
-instance ToJSON JobParameters where
-    toJSON JobParameters{..} = object
-        [ "Format"                       .= _jpFormat
-        , "Type"                         .= _jpType
-        , "ArchiveId"                    .= _jpArchiveId
-        , "Description"                  .= _jpDescription
-        , "SNSTopic"                     .= _jpSNSTopic
-        , "RetrievalByteRange"           .= _jpRetrievalByteRange
-        , "InventoryRetrievalParameters" .= _jpInventoryRetrievalParameters
-        ]
-
-data DescribeVaultOutput = DescribeVaultOutput
-    { _dvoCreationDate      :: Maybe Text
-    , _dvoLastInventoryDate :: Maybe Text
-    , _dvoNumberOfArchives  :: Maybe Integer
-    , _dvoSizeInBytes       :: Maybe Integer
-    , _dvoVaultARN          :: Maybe Text
-    , _dvoVaultName         :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'DescribeVaultOutput' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'dvoCreationDate' @::@ 'Maybe' 'Text'
---
--- * 'dvoLastInventoryDate' @::@ 'Maybe' 'Text'
---
--- * 'dvoNumberOfArchives' @::@ 'Maybe' 'Integer'
---
--- * 'dvoSizeInBytes' @::@ 'Maybe' 'Integer'
---
--- * 'dvoVaultARN' @::@ 'Maybe' 'Text'
---
--- * 'dvoVaultName' @::@ 'Maybe' 'Text'
---
-describeVaultOutput :: DescribeVaultOutput
-describeVaultOutput = DescribeVaultOutput
-    { _dvoVaultARN          = Nothing
-    , _dvoVaultName         = Nothing
-    , _dvoCreationDate      = Nothing
-    , _dvoLastInventoryDate = Nothing
-    , _dvoNumberOfArchives  = Nothing
-    , _dvoSizeInBytes       = Nothing
-    }
-
--- | The UTC date when the vault was created. A string representation of ISO 8601
--- date format, for example, "2012-03-20T17:03:43.221Z".
-dvoCreationDate :: Lens' DescribeVaultOutput (Maybe Text)
-dvoCreationDate = lens _dvoCreationDate (\s a -> s { _dvoCreationDate = a })
-
--- | The UTC date when Amazon Glacier completed the last vault inventory. A string
--- representation of ISO 8601 date format, for example,
--- "2012-03-20T17:03:43.221Z".
-dvoLastInventoryDate :: Lens' DescribeVaultOutput (Maybe Text)
-dvoLastInventoryDate =
-    lens _dvoLastInventoryDate (\s a -> s { _dvoLastInventoryDate = a })
-
--- | The number of archives in the vault as of the last inventory date. This field
--- will return 'null' if an inventory has not yet run on the vault, for example,
--- if you just created the vault.
-dvoNumberOfArchives :: Lens' DescribeVaultOutput (Maybe Integer)
-dvoNumberOfArchives =
-    lens _dvoNumberOfArchives (\s a -> s { _dvoNumberOfArchives = a })
-
--- | Total size, in bytes, of the archives in the vault as of the last inventory
--- date. This field will return null if an inventory has not yet run on the
--- vault, for example, if you just created the vault.
-dvoSizeInBytes :: Lens' DescribeVaultOutput (Maybe Integer)
-dvoSizeInBytes = lens _dvoSizeInBytes (\s a -> s { _dvoSizeInBytes = a })
-
--- | The Amazon Resource Name (ARN) of the vault.
-dvoVaultARN :: Lens' DescribeVaultOutput (Maybe Text)
-dvoVaultARN = lens _dvoVaultARN (\s a -> s { _dvoVaultARN = a })
-
--- | The name of the vault.
-dvoVaultName :: Lens' DescribeVaultOutput (Maybe Text)
-dvoVaultName = lens _dvoVaultName (\s a -> s { _dvoVaultName = a })
-
-instance FromJSON DescribeVaultOutput where
-    parseJSON = withObject "DescribeVaultOutput" $ \o -> DescribeVaultOutput
-        <$> o .:? "CreationDate"
-        <*> o .:? "LastInventoryDate"
-        <*> o .:? "NumberOfArchives"
-        <*> o .:? "SizeInBytes"
-        <*> o .:? "VaultARN"
-        <*> o .:? "VaultName"
-
-instance ToJSON DescribeVaultOutput where
-    toJSON DescribeVaultOutput{..} = object
-        [ "VaultARN"          .= _dvoVaultARN
-        , "VaultName"         .= _dvoVaultName
-        , "CreationDate"      .= _dvoCreationDate
-        , "LastInventoryDate" .= _dvoLastInventoryDate
-        , "NumberOfArchives"  .= _dvoNumberOfArchives
-        , "SizeInBytes"       .= _dvoSizeInBytes
-        ]
-
-data DataRetrievalRule = DataRetrievalRule
-    { _drrBytesPerHour :: Maybe Integer
-    , _drrStrategy     :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'DataRetrievalRule' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'drrBytesPerHour' @::@ 'Maybe' 'Integer'
---
--- * 'drrStrategy' @::@ 'Maybe' 'Text'
---
-dataRetrievalRule :: DataRetrievalRule
-dataRetrievalRule = DataRetrievalRule
-    { _drrStrategy     = Nothing
-    , _drrBytesPerHour = Nothing
-    }
-
--- | The maximum number of bytes that can be retrieved in an hour.
---
--- This field is required only if the value of the Strategy field is 'BytesPerHour'. Your PUT operation will be rejected if the Strategy field is not set to 'BytesPerHour' and you set this field.
-drrBytesPerHour :: Lens' DataRetrievalRule (Maybe Integer)
-drrBytesPerHour = lens _drrBytesPerHour (\s a -> s { _drrBytesPerHour = a })
-
--- | The type of data retrieval policy to set.
---
--- Valid values: BytesPerHour|FreeTier|None
-drrStrategy :: Lens' DataRetrievalRule (Maybe Text)
-drrStrategy = lens _drrStrategy (\s a -> s { _drrStrategy = a })
-
-instance FromJSON DataRetrievalRule where
-    parseJSON = withObject "DataRetrievalRule" $ \o -> DataRetrievalRule
-        <$> o .:? "BytesPerHour"
-        <*> o .:? "Strategy"
-
-instance ToJSON DataRetrievalRule where
-    toJSON DataRetrievalRule{..} = object
-        [ "Strategy"     .= _drrStrategy
-        , "BytesPerHour" .= _drrBytesPerHour
-        ]
-
-data ActionCode
-    = ArchiveRetrieval   -- ^ ArchiveRetrieval
-    | InventoryRetrieval -- ^ InventoryRetrieval
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
-
-instance Hashable ActionCode
-
-instance FromText ActionCode where
-    parser = takeLowerText >>= \case
-        "archiveretrieval"   -> pure ArchiveRetrieval
-        "inventoryretrieval" -> pure InventoryRetrieval
-        e                    -> fail $
-            "Failure parsing ActionCode from " ++ show e
-
-instance ToText ActionCode where
-    toText = \case
-        ArchiveRetrieval   -> "ArchiveRetrieval"
-        InventoryRetrieval -> "InventoryRetrieval"
-
-instance ToByteString ActionCode
-instance ToHeader     ActionCode
-instance ToQuery      ActionCode
-
-instance FromJSON ActionCode where
-    parseJSON = parseJSONText "ActionCode"
-
-instance ToJSON ActionCode where
-    toJSON = toJSONText
-
-data VaultNotificationConfig = VaultNotificationConfig
-    { _vncEvents   :: List "Events" Text
-    , _vncSNSTopic :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'VaultNotificationConfig' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'vncEvents' @::@ ['Text']
---
--- * 'vncSNSTopic' @::@ 'Maybe' 'Text'
---
-vaultNotificationConfig :: VaultNotificationConfig
-vaultNotificationConfig = VaultNotificationConfig
-    { _vncSNSTopic = Nothing
-    , _vncEvents   = mempty
-    }
-
--- | A list of one or more events for which Amazon Glacier will send a
--- notification to the specified Amazon SNS topic.
-vncEvents :: Lens' VaultNotificationConfig [Text]
-vncEvents = lens _vncEvents (\s a -> s { _vncEvents = a }) . _List
-
--- | The Amazon Simple Notification Service (Amazon SNS) topic Amazon Resource
--- Name (ARN).
-vncSNSTopic :: Lens' VaultNotificationConfig (Maybe Text)
-vncSNSTopic = lens _vncSNSTopic (\s a -> s { _vncSNSTopic = a })
-
-instance FromJSON VaultNotificationConfig where
-    parseJSON = withObject "VaultNotificationConfig" $ \o -> VaultNotificationConfig
-        <$> o .:? "Events" .!= mempty
-        <*> o .:? "SNSTopic"
-
-instance ToJSON VaultNotificationConfig where
-    toJSON VaultNotificationConfig{..} = object
-        [ "SNSTopic" .= _vncSNSTopic
-        , "Events"   .= _vncEvents
-        ]
-
-data InventoryRetrievalJobInput = InventoryRetrievalJobInput
-    { _irjiEndDate   :: Maybe Text
-    , _irjiLimit     :: Maybe Text
-    , _irjiMarker    :: Maybe Text
-    , _irjiStartDate :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'InventoryRetrievalJobInput' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'irjiEndDate' @::@ 'Maybe' 'Text'
---
--- * 'irjiLimit' @::@ 'Maybe' 'Text'
---
--- * 'irjiMarker' @::@ 'Maybe' 'Text'
---
--- * 'irjiStartDate' @::@ 'Maybe' 'Text'
---
-inventoryRetrievalJobInput :: InventoryRetrievalJobInput
-inventoryRetrievalJobInput = InventoryRetrievalJobInput
-    { _irjiStartDate = Nothing
-    , _irjiEndDate   = Nothing
-    , _irjiLimit     = Nothing
-    , _irjiMarker    = Nothing
-    }
-
--- | The end of the date range in UTC for vault inventory retrieval that includes
--- archives created before this date. A string representation of ISO 8601 date
--- format, for example, 2013-03-20T17:03:43Z.
-irjiEndDate :: Lens' InventoryRetrievalJobInput (Maybe Text)
-irjiEndDate = lens _irjiEndDate (\s a -> s { _irjiEndDate = a })
-
--- | Specifies the maximum number of inventory items returned per vault inventory
--- retrieval request. Valid values are greater than or equal to 1.
-irjiLimit :: Lens' InventoryRetrievalJobInput (Maybe Text)
-irjiLimit = lens _irjiLimit (\s a -> s { _irjiLimit = a })
-
--- | An opaque string that represents where to continue pagination of the vault
--- inventory retrieval results. You use the marker in a new InitiateJob request
--- to obtain additional inventory items. If there are no more inventory items,
--- this value is 'null'.
-irjiMarker :: Lens' InventoryRetrievalJobInput (Maybe Text)
-irjiMarker = lens _irjiMarker (\s a -> s { _irjiMarker = a })
-
--- | The start of the date range in UTC for vault inventory retrieval that
--- includes archives created on or after this date. A string representation of
--- ISO 8601 date format, for example, 2013-03-20T17:03:43Z.
-irjiStartDate :: Lens' InventoryRetrievalJobInput (Maybe Text)
-irjiStartDate = lens _irjiStartDate (\s a -> s { _irjiStartDate = a })
-
-instance FromJSON InventoryRetrievalJobInput where
-    parseJSON = withObject "InventoryRetrievalJobInput" $ \o -> InventoryRetrievalJobInput
-        <$> o .:? "EndDate"
-        <*> o .:? "Limit"
-        <*> o .:? "Marker"
-        <*> o .:? "StartDate"
-
-instance ToJSON InventoryRetrievalJobInput where
-    toJSON InventoryRetrievalJobInput{..} = object
-        [ "StartDate" .= _irjiStartDate
-        , "EndDate"   .= _irjiEndDate
-        , "Limit"     .= _irjiLimit
-        , "Marker"    .= _irjiMarker
-        ]
-
-data PartListElement = PartListElement
-    { _pleRangeInBytes   :: Maybe Text
-    , _pleSHA256TreeHash :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'PartListElement' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'pleRangeInBytes' @::@ 'Maybe' 'Text'
---
--- * 'pleSHA256TreeHash' @::@ 'Maybe' 'Text'
---
-partListElement :: PartListElement
-partListElement = PartListElement
-    { _pleRangeInBytes   = Nothing
-    , _pleSHA256TreeHash = Nothing
-    }
-
--- | The byte range of a part, inclusive of the upper value of the range.
-pleRangeInBytes :: Lens' PartListElement (Maybe Text)
-pleRangeInBytes = lens _pleRangeInBytes (\s a -> s { _pleRangeInBytes = a })
-
--- | The SHA256 tree hash value that Amazon Glacier calculated for the part. This
--- field is never 'null'.
-pleSHA256TreeHash :: Lens' PartListElement (Maybe Text)
-pleSHA256TreeHash =
-    lens _pleSHA256TreeHash (\s a -> s { _pleSHA256TreeHash = a })
-
-instance FromJSON PartListElement where
-    parseJSON = withObject "PartListElement" $ \o -> PartListElement
-        <$> o .:? "RangeInBytes"
-        <*> o .:? "SHA256TreeHash"
-
-instance ToJSON PartListElement where
-    toJSON PartListElement{..} = object
-        [ "RangeInBytes"   .= _pleRangeInBytes
-        , "SHA256TreeHash" .= _pleSHA256TreeHash
-        ]
-
-newtype DataRetrievalPolicy = DataRetrievalPolicy
-    { _drpRules :: List "Rules" DataRetrievalRule
-    } deriving (Eq, Read, Show, Monoid, Semigroup)
-
-instance GHC.Exts.IsList DataRetrievalPolicy where
-    type Item DataRetrievalPolicy = DataRetrievalRule
-
-    fromList = DataRetrievalPolicy . GHC.Exts.fromList
-    toList   = GHC.Exts.toList . _drpRules
-
--- | 'DataRetrievalPolicy' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'drpRules' @::@ ['DataRetrievalRule']
---
-dataRetrievalPolicy :: DataRetrievalPolicy
-dataRetrievalPolicy = DataRetrievalPolicy
-    { _drpRules = mempty
-    }
-
--- | The policy rule. Although this is a list type, currently there must be only
--- one rule, which contains a Strategy field and optionally a BytesPerHour field.
-drpRules :: Lens' DataRetrievalPolicy [DataRetrievalRule]
-drpRules = lens _drpRules (\s a -> s { _drpRules = a }) . _List
-
-instance FromJSON DataRetrievalPolicy where
-    parseJSON = withObject "DataRetrievalPolicy" $ \o -> DataRetrievalPolicy
-        <$> o .:? "Rules" .!= mempty
-
-instance ToJSON DataRetrievalPolicy where
-    toJSON DataRetrievalPolicy{..} = object
-        [ "Rules" .= _drpRules
-        ]
-
-data GlacierJobDescription = GlacierJobDescription
-    { _gjdAction                       :: Maybe ActionCode
-    , _gjdArchiveId                    :: Maybe Text
-    , _gjdArchiveSHA256TreeHash        :: Maybe Text
-    , _gjdArchiveSizeInBytes           :: Maybe Integer
-    , _gjdCompleted                    :: Maybe Bool
-    , _gjdCompletionDate               :: Maybe Text
-    , _gjdCreationDate                 :: Maybe Text
-    , _gjdInventoryRetrievalParameters :: Maybe InventoryRetrievalJobDescription
-    , _gjdInventorySizeInBytes         :: Maybe Integer
-    , _gjdJobDescription               :: Maybe Text
-    , _gjdJobId                        :: Maybe Text
-    , _gjdRetrievalByteRange           :: Maybe Text
-    , _gjdSHA256TreeHash               :: Maybe Text
-    , _gjdSNSTopic                     :: Maybe Text
-    , _gjdStatusCode                   :: Maybe StatusCode
-    , _gjdStatusMessage                :: Maybe Text
-    , _gjdVaultARN                     :: Maybe Text
-    } deriving (Eq, Read, Show)
-
--- | 'GlacierJobDescription' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'gjdAction' @::@ 'Maybe' 'ActionCode'
---
--- * 'gjdArchiveId' @::@ 'Maybe' 'Text'
---
--- * 'gjdArchiveSHA256TreeHash' @::@ 'Maybe' 'Text'
---
--- * 'gjdArchiveSizeInBytes' @::@ 'Maybe' 'Integer'
---
--- * 'gjdCompleted' @::@ 'Maybe' 'Bool'
---
--- * 'gjdCompletionDate' @::@ 'Maybe' 'Text'
---
--- * 'gjdCreationDate' @::@ 'Maybe' 'Text'
---
--- * 'gjdInventoryRetrievalParameters' @::@ 'Maybe' 'InventoryRetrievalJobDescription'
---
--- * 'gjdInventorySizeInBytes' @::@ 'Maybe' 'Integer'
---
--- * 'gjdJobDescription' @::@ 'Maybe' 'Text'
---
--- * 'gjdJobId' @::@ 'Maybe' 'Text'
---
--- * 'gjdRetrievalByteRange' @::@ 'Maybe' 'Text'
---
--- * 'gjdSHA256TreeHash' @::@ 'Maybe' 'Text'
---
--- * 'gjdSNSTopic' @::@ 'Maybe' 'Text'
---
--- * 'gjdStatusCode' @::@ 'Maybe' 'StatusCode'
---
--- * 'gjdStatusMessage' @::@ 'Maybe' 'Text'
---
--- * 'gjdVaultARN' @::@ 'Maybe' 'Text'
---
-glacierJobDescription :: GlacierJobDescription
-glacierJobDescription = GlacierJobDescription
-    { _gjdJobId                        = Nothing
-    , _gjdJobDescription               = Nothing
-    , _gjdAction                       = Nothing
-    , _gjdArchiveId                    = Nothing
-    , _gjdVaultARN                     = Nothing
-    , _gjdCreationDate                 = Nothing
-    , _gjdCompleted                    = Nothing
-    , _gjdStatusCode                   = Nothing
-    , _gjdStatusMessage                = Nothing
-    , _gjdArchiveSizeInBytes           = Nothing
-    , _gjdInventorySizeInBytes         = Nothing
-    , _gjdSNSTopic                     = Nothing
-    , _gjdCompletionDate               = Nothing
-    , _gjdSHA256TreeHash               = Nothing
-    , _gjdArchiveSHA256TreeHash        = Nothing
-    , _gjdRetrievalByteRange           = Nothing
-    , _gjdInventoryRetrievalParameters = Nothing
-    }
-
--- | The job type. It is either ArchiveRetrieval or InventoryRetrieval.
-gjdAction :: Lens' GlacierJobDescription (Maybe ActionCode)
-gjdAction = lens _gjdAction (\s a -> s { _gjdAction = a })
-
--- | For an ArchiveRetrieval job, this is the archive ID requested for download.
--- Otherwise, this field is null.
-gjdArchiveId :: Lens' GlacierJobDescription (Maybe Text)
-gjdArchiveId = lens _gjdArchiveId (\s a -> s { _gjdArchiveId = a })
-
--- | The SHA256 tree hash of the entire archive for an archive retrieval. For
--- inventory retrieval jobs, this field is null.
-gjdArchiveSHA256TreeHash :: Lens' GlacierJobDescription (Maybe Text)
-gjdArchiveSHA256TreeHash =
-    lens _gjdArchiveSHA256TreeHash
-        (\s a -> s { _gjdArchiveSHA256TreeHash = a })
-
--- | For an ArchiveRetrieval job, this is the size in bytes of the archive being
--- requested for download. For the InventoryRetrieval job, the value is null.
-gjdArchiveSizeInBytes :: Lens' GlacierJobDescription (Maybe Integer)
-gjdArchiveSizeInBytes =
-    lens _gjdArchiveSizeInBytes (\s a -> s { _gjdArchiveSizeInBytes = a })
-
--- | The job status. When a job is completed, you get the job's output.
-gjdCompleted :: Lens' GlacierJobDescription (Maybe Bool)
-gjdCompleted = lens _gjdCompleted (\s a -> s { _gjdCompleted = a })
-
--- | The UTC time that the archive retrieval request completed. While the job is
--- in progress, the value will be null.
-gjdCompletionDate :: Lens' GlacierJobDescription (Maybe Text)
-gjdCompletionDate =
-    lens _gjdCompletionDate (\s a -> s { _gjdCompletionDate = a })
-
--- | The UTC date when the job was created. A string representation of ISO 8601
--- date format, for example, "2012-03-20T17:03:43.221Z".
-gjdCreationDate :: Lens' GlacierJobDescription (Maybe Text)
-gjdCreationDate = lens _gjdCreationDate (\s a -> s { _gjdCreationDate = a })
-
--- | Parameters used for range inventory retrieval.
-gjdInventoryRetrievalParameters :: Lens' GlacierJobDescription (Maybe InventoryRetrievalJobDescription)
-gjdInventoryRetrievalParameters =
-    lens _gjdInventoryRetrievalParameters
-        (\s a -> s { _gjdInventoryRetrievalParameters = a })
-
--- | For an InventoryRetrieval job, this is the size in bytes of the inventory
--- requested for download. For the ArchiveRetrieval job, the value is null.
-gjdInventorySizeInBytes :: Lens' GlacierJobDescription (Maybe Integer)
-gjdInventorySizeInBytes =
-    lens _gjdInventorySizeInBytes (\s a -> s { _gjdInventorySizeInBytes = a })
-
--- | The job description you provided when you initiated the job.
-gjdJobDescription :: Lens' GlacierJobDescription (Maybe Text)
-gjdJobDescription =
-    lens _gjdJobDescription (\s a -> s { _gjdJobDescription = a })
-
--- | An opaque string that identifies an Amazon Glacier job.
-gjdJobId :: Lens' GlacierJobDescription (Maybe Text)
-gjdJobId = lens _gjdJobId (\s a -> s { _gjdJobId = a })
-
--- | The retrieved byte range for archive retrieval jobs in the form "/StartByteValue/-/EndByteValue/" If no range was specified in the archive retrieval, then the
--- whole archive is retrieved and /StartByteValue/ equals 0 and /EndByteValue/
--- equals the size of the archive minus 1. For inventory retrieval jobs this
--- field is null.
-gjdRetrievalByteRange :: Lens' GlacierJobDescription (Maybe Text)
-gjdRetrievalByteRange =
-    lens _gjdRetrievalByteRange (\s a -> s { _gjdRetrievalByteRange = a })
-
--- | For an ArchiveRetrieval job, it is the checksum of the archive. Otherwise,
--- the value is null.
---
--- The SHA256 tree hash value for the requested range of an archive. If the
--- Initiate a Job request for an archive specified a tree-hash aligned range,
--- then this field returns a value.
---
--- For the specific case when the whole archive is retrieved, this value is
--- the same as the ArchiveSHA256TreeHash value.
---
--- This field is null in the following situations:  Archive retrieval jobs
--- that specify a range that is not tree-hash aligned.
---
--- Archival jobs that specify a range that is equal to the whole archive and
--- the job status is InProgress.
---
--- Inventory jobs.
---
---
-gjdSHA256TreeHash :: Lens' GlacierJobDescription (Maybe Text)
-gjdSHA256TreeHash =
-    lens _gjdSHA256TreeHash (\s a -> s { _gjdSHA256TreeHash = a })
-
--- | An Amazon Simple Notification Service (Amazon SNS) topic that receives
--- notification.
-gjdSNSTopic :: Lens' GlacierJobDescription (Maybe Text)
-gjdSNSTopic = lens _gjdSNSTopic (\s a -> s { _gjdSNSTopic = a })
-
--- | The status code can be InProgress, Succeeded, or Failed, and indicates the
--- status of the job.
-gjdStatusCode :: Lens' GlacierJobDescription (Maybe StatusCode)
-gjdStatusCode = lens _gjdStatusCode (\s a -> s { _gjdStatusCode = a })
-
--- | A friendly message that describes the job status.
-gjdStatusMessage :: Lens' GlacierJobDescription (Maybe Text)
-gjdStatusMessage = lens _gjdStatusMessage (\s a -> s { _gjdStatusMessage = a })
-
--- | The Amazon Resource Name (ARN) of the vault from which the archive retrieval
--- was requested.
-gjdVaultARN :: Lens' GlacierJobDescription (Maybe Text)
-gjdVaultARN = lens _gjdVaultARN (\s a -> s { _gjdVaultARN = a })
-
-instance FromJSON GlacierJobDescription where
-    parseJSON = withObject "GlacierJobDescription" $ \o -> GlacierJobDescription
-        <$> o .:? "Action"
-        <*> o .:? "ArchiveId"
-        <*> o .:? "ArchiveSHA256TreeHash"
-        <*> o .:? "ArchiveSizeInBytes"
-        <*> o .:? "Completed"
-        <*> o .:? "CompletionDate"
-        <*> o .:? "CreationDate"
-        <*> o .:? "InventoryRetrievalParameters"
-        <*> o .:? "InventorySizeInBytes"
-        <*> o .:? "JobDescription"
-        <*> o .:? "JobId"
-        <*> o .:? "RetrievalByteRange"
-        <*> o .:? "SHA256TreeHash"
-        <*> o .:? "SNSTopic"
-        <*> o .:? "StatusCode"
-        <*> o .:? "StatusMessage"
-        <*> o .:? "VaultARN"
-
-instance ToJSON GlacierJobDescription where
-    toJSON GlacierJobDescription{..} = object
-        [ "JobId"                        .= _gjdJobId
-        , "JobDescription"               .= _gjdJobDescription
-        , "Action"                       .= _gjdAction
-        , "ArchiveId"                    .= _gjdArchiveId
-        , "VaultARN"                     .= _gjdVaultARN
-        , "CreationDate"                 .= _gjdCreationDate
-        , "Completed"                    .= _gjdCompleted
-        , "StatusCode"                   .= _gjdStatusCode
-        , "StatusMessage"                .= _gjdStatusMessage
-        , "ArchiveSizeInBytes"           .= _gjdArchiveSizeInBytes
-        , "InventorySizeInBytes"         .= _gjdInventorySizeInBytes
-        , "SNSTopic"                     .= _gjdSNSTopic
-        , "CompletionDate"               .= _gjdCompletionDate
-        , "SHA256TreeHash"               .= _gjdSHA256TreeHash
-        , "ArchiveSHA256TreeHash"        .= _gjdArchiveSHA256TreeHash
-        , "RetrievalByteRange"           .= _gjdRetrievalByteRange
-        , "InventoryRetrievalParameters" .= _gjdInventoryRetrievalParameters
-        ]
-
-newtype VaultAccessPolicy = VaultAccessPolicy
-    { _vapPolicy :: Maybe Text
-    } deriving (Eq, Ord, Read, Show, Monoid)
-
--- | 'VaultAccessPolicy' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'vapPolicy' @::@ 'Maybe' 'Text'
---
-vaultAccessPolicy :: VaultAccessPolicy
-vaultAccessPolicy = VaultAccessPolicy
-    { _vapPolicy = Nothing
-    }
-
--- | The vault access policy.
-vapPolicy :: Lens' VaultAccessPolicy (Maybe Text)
-vapPolicy = lens _vapPolicy (\s a -> s { _vapPolicy = a })
-
-instance FromJSON VaultAccessPolicy where
-    parseJSON = withObject "VaultAccessPolicy" $ \o -> VaultAccessPolicy
-        <$> o .:? "Policy"
-
-instance ToJSON VaultAccessPolicy where
-    toJSON VaultAccessPolicy{..} = object
-        [ "Policy" .= _vapPolicy
-        ]
-
-data StatusCode
-    = Failed     -- ^ Failed
-    | InProgress -- ^ InProgress
-    | Succeeded  -- ^ Succeeded
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
-
-instance Hashable StatusCode
-
-instance FromText StatusCode where
-    parser = takeLowerText >>= \case
-        "failed"     -> pure Failed
-        "inprogress" -> pure InProgress
-        "succeeded"  -> pure Succeeded
-        e            -> fail $
-            "Failure parsing StatusCode from " ++ show e
-
-instance ToText StatusCode where
-    toText = \case
-        Failed     -> "Failed"
-        InProgress -> "InProgress"
-        Succeeded  -> "Succeeded"
-
-instance ToByteString StatusCode
-instance ToHeader     StatusCode
-instance ToQuery      StatusCode
-
-instance FromJSON StatusCode where
-    parseJSON = parseJSONText "StatusCode"
-
-instance ToJSON StatusCode where
-    toJSON = toJSONText
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE TypeFamilies      #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glacier.Types
+-- 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.Glacier.Types
+    (
+    -- * Service
+      Glacier
+
+    -- * Errors
+    , _PolicyEnforcedException
+    , _InvalidParameterValueException
+    , _RequestTimeoutException
+    , _ServiceUnavailableException
+    , _ResourceNotFoundException
+    , _LimitExceededException
+    , _MissingParameterValueException
+
+    -- * ActionCode
+    , ActionCode (..)
+
+    -- * StatusCode
+    , StatusCode (..)
+
+    -- * ArchiveCreationOutput
+    , ArchiveCreationOutput
+    , archiveCreationOutput
+    , acoArchiveId
+    , acoChecksum
+    , acoLocation
+
+    -- * DataRetrievalPolicy
+    , DataRetrievalPolicy
+    , dataRetrievalPolicy
+    , drpRules
+
+    -- * DataRetrievalRule
+    , DataRetrievalRule
+    , dataRetrievalRule
+    , drrStrategy
+    , drrBytesPerHour
+
+    -- * DescribeVaultOutput
+    , DescribeVaultOutput
+    , describeVaultOutput
+    , dvoVaultName
+    , dvoSizeInBytes
+    , dvoLastInventoryDate
+    , dvoVaultARN
+    , dvoCreationDate
+    , dvoNumberOfArchives
+
+    -- * GlacierJobDescription
+    , GlacierJobDescription
+    , glacierJobDescription
+    , gjdArchiveId
+    , gjdSHA256TreeHash
+    , gjdJobId
+    , gjdRetrievalByteRange
+    , gjdInventoryRetrievalParameters
+    , gjdAction
+    , gjdJobDescription
+    , gjdSNSTopic
+    , gjdVaultARN
+    , gjdStatusMessage
+    , gjdArchiveSHA256TreeHash
+    , gjdCreationDate
+    , gjdCompleted
+    , gjdCompletionDate
+    , gjdArchiveSizeInBytes
+    , gjdStatusCode
+    , gjdInventorySizeInBytes
+
+    -- * InventoryRetrievalJobDescription
+    , InventoryRetrievalJobDescription
+    , inventoryRetrievalJobDescription
+    , irjdFormat
+    , irjdEndDate
+    , irjdStartDate
+    , irjdMarker
+    , irjdLimit
+
+    -- * InventoryRetrievalJobInput
+    , InventoryRetrievalJobInput
+    , inventoryRetrievalJobInput
+    , irjiEndDate
+    , irjiStartDate
+    , irjiMarker
+    , irjiLimit
+
+    -- * JobParameters
+    , JobParameters
+    , jobParameters
+    , jpArchiveId
+    , jpRetrievalByteRange
+    , jpFormat
+    , jpInventoryRetrievalParameters
+    , jpSNSTopic
+    , jpType
+    , jpDescription
+
+    -- * PartListElement
+    , PartListElement
+    , partListElement
+    , pleSHA256TreeHash
+    , pleRangeInBytes
+
+    -- * UploadListElement
+    , UploadListElement
+    , uploadListElement
+    , uleMultipartUploadId
+    , uleArchiveDescription
+    , ulePartSizeInBytes
+    , uleVaultARN
+    , uleCreationDate
+
+    -- * VaultAccessPolicy
+    , VaultAccessPolicy
+    , vaultAccessPolicy
+    , vapPolicy
+
+    -- * VaultLockPolicy
+    , VaultLockPolicy
+    , vaultLockPolicy
+    , vlpPolicy
+
+    -- * VaultNotificationConfig
+    , VaultNotificationConfig
+    , vaultNotificationConfig
+    , vncSNSTopic
+    , vncEvents
+    ) where
+
+import           Network.AWS.Glacier.Types.Product
+import           Network.AWS.Glacier.Types.Sum
+import           Network.AWS.Prelude
+import           Network.AWS.Sign.V4
+
+-- | Version @2012-06-01@ of the Amazon Glacier SDK.
+data Glacier
+
+instance AWSService Glacier where
+    type Sg Glacier = V4
+    service = const svc
+      where
+        svc =
+            Service
+            { _svcAbbrev = "Glacier"
+            , _svcPrefix = "glacier"
+            , _svcVersion = "2012-06-01"
+            , _svcEndpoint = defaultEndpoint svc
+            , _svcTimeout = Just 70
+            , _svcStatus = statusSuccess
+            , _svcError = parseJSONError
+            , _svcRetry = retry
+            }
+        retry =
+            Exponential
+            { _retryBase = 5.0e-2
+            , _retryGrowth = 2
+            , _retryAttempts = 5
+            , _retryCheck = check
+            }
+        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
+
+-- | Returned if a retrieval job would exceed the current data policy\'s
+-- retrieval rate limit. For more information about data retrieval
+-- policies,
+_PolicyEnforcedException :: AsError a => Getting (First ServiceError) a ServiceError
+_PolicyEnforcedException =
+    _ServiceError . hasStatus 400 . hasCode "PolicyEnforcedException"
+
+-- | Returned if a parameter of the request is incorrectly specified.
+_InvalidParameterValueException :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidParameterValueException =
+    _ServiceError . hasStatus 400 . hasCode "InvalidParameterValueException"
+
+-- | Returned if, when uploading an archive, Amazon Glacier times out while
+-- receiving the upload.
+_RequestTimeoutException :: AsError a => Getting (First ServiceError) a ServiceError
+_RequestTimeoutException =
+    _ServiceError . hasStatus 408 . hasCode "RequestTimeoutException"
+
+-- | Returned if the service cannot complete the request.
+_ServiceUnavailableException :: AsError a => Getting (First ServiceError) a ServiceError
+_ServiceUnavailableException =
+    _ServiceError . hasStatus 500 . hasCode "ServiceUnavailableException"
+
+-- | Returned if the specified resource, such as a vault, upload ID, or job
+-- ID, does not exist.
+_ResourceNotFoundException :: AsError a => Getting (First ServiceError) a ServiceError
+_ResourceNotFoundException =
+    _ServiceError . hasStatus 404 . hasCode "ResourceNotFoundException"
+
+-- | Returned if the request results in a vault or account limit being
+-- exceeded.
+_LimitExceededException :: AsError a => Getting (First ServiceError) a ServiceError
+_LimitExceededException =
+    _ServiceError . hasStatus 400 . hasCode "LimitExceededException"
+
+-- | Returned if a required header or parameter is missing from the request.
+_MissingParameterValueException :: AsError a => Getting (First ServiceError) a ServiceError
+_MissingParameterValueException =
+    _ServiceError . hasStatus 400 . hasCode "MissingParameterValueException"
diff --git a/gen/Network/AWS/Glacier/Types/Product.hs b/gen/Network/AWS/Glacier/Types/Product.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glacier/Types/Product.hs
@@ -0,0 +1,908 @@
+{-# 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.Glacier.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.Glacier.Types.Product where
+
+import           Network.AWS.Glacier.Types.Sum
+import           Network.AWS.Prelude
+
+-- | Contains the Amazon Glacier response to your request.
+--
+-- For information about the underlying REST API, go to
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-archive-post.html Upload Archive>.
+-- For conceptual information, go to
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/working-with-archives.html Working with Archives in Amazon Glacier>.
+--
+-- /See:/ 'archiveCreationOutput' smart constructor.
+data ArchiveCreationOutput = ArchiveCreationOutput'
+    { _acoArchiveId :: !(Maybe Text)
+    , _acoChecksum  :: !(Maybe Text)
+    , _acoLocation  :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ArchiveCreationOutput' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'acoArchiveId'
+--
+-- * 'acoChecksum'
+--
+-- * 'acoLocation'
+archiveCreationOutput
+    :: ArchiveCreationOutput
+archiveCreationOutput =
+    ArchiveCreationOutput'
+    { _acoArchiveId = Nothing
+    , _acoChecksum = Nothing
+    , _acoLocation = Nothing
+    }
+
+-- | The ID of the archive. This value is also included as part of the
+-- location.
+acoArchiveId :: Lens' ArchiveCreationOutput (Maybe Text)
+acoArchiveId = lens _acoArchiveId (\ s a -> s{_acoArchiveId = a});
+
+-- | The checksum of the archive computed by Amazon Glacier.
+acoChecksum :: Lens' ArchiveCreationOutput (Maybe Text)
+acoChecksum = lens _acoChecksum (\ s a -> s{_acoChecksum = a});
+
+-- | The relative URI path of the newly added archive resource.
+acoLocation :: Lens' ArchiveCreationOutput (Maybe Text)
+acoLocation = lens _acoLocation (\ s a -> s{_acoLocation = a});
+
+instance FromJSON ArchiveCreationOutput where
+        parseJSON
+          = withObject "ArchiveCreationOutput"
+              (\ x ->
+                 ArchiveCreationOutput' <$>
+                   (x .:? "x-amz-archive-id") <*>
+                     (x .:? "x-amz-sha256-tree-hash")
+                     <*> (x .:? "Location"))
+
+-- | Data retrieval policy.
+--
+-- /See:/ 'dataRetrievalPolicy' smart constructor.
+newtype DataRetrievalPolicy = DataRetrievalPolicy'
+    { _drpRules :: Maybe [DataRetrievalRule]
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DataRetrievalPolicy' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'drpRules'
+dataRetrievalPolicy
+    :: DataRetrievalPolicy
+dataRetrievalPolicy =
+    DataRetrievalPolicy'
+    { _drpRules = Nothing
+    }
+
+-- | The policy rule. Although this is a list type, currently there must be
+-- only one rule, which contains a Strategy field and optionally a
+-- BytesPerHour field.
+drpRules :: Lens' DataRetrievalPolicy [DataRetrievalRule]
+drpRules = lens _drpRules (\ s a -> s{_drpRules = a}) . _Default . _Coerce;
+
+instance FromJSON DataRetrievalPolicy where
+        parseJSON
+          = withObject "DataRetrievalPolicy"
+              (\ x ->
+                 DataRetrievalPolicy' <$> (x .:? "Rules" .!= mempty))
+
+instance ToJSON DataRetrievalPolicy where
+        toJSON DataRetrievalPolicy'{..}
+          = object ["Rules" .= _drpRules]
+
+-- | Data retrieval policy rule.
+--
+-- /See:/ 'dataRetrievalRule' smart constructor.
+data DataRetrievalRule = DataRetrievalRule'
+    { _drrStrategy     :: !(Maybe Text)
+    , _drrBytesPerHour :: !(Maybe Integer)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DataRetrievalRule' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'drrStrategy'
+--
+-- * 'drrBytesPerHour'
+dataRetrievalRule
+    :: DataRetrievalRule
+dataRetrievalRule =
+    DataRetrievalRule'
+    { _drrStrategy = Nothing
+    , _drrBytesPerHour = Nothing
+    }
+
+-- | The type of data retrieval policy to set.
+--
+-- Valid values: BytesPerHour|FreeTier|None
+drrStrategy :: Lens' DataRetrievalRule (Maybe Text)
+drrStrategy = lens _drrStrategy (\ s a -> s{_drrStrategy = a});
+
+-- | The maximum number of bytes that can be retrieved in an hour.
+--
+-- This field is required only if the value of the Strategy field is
+-- 'BytesPerHour'. Your PUT operation will be rejected if the Strategy
+-- field is not set to 'BytesPerHour' and you set this field.
+drrBytesPerHour :: Lens' DataRetrievalRule (Maybe Integer)
+drrBytesPerHour = lens _drrBytesPerHour (\ s a -> s{_drrBytesPerHour = a});
+
+instance FromJSON DataRetrievalRule where
+        parseJSON
+          = withObject "DataRetrievalRule"
+              (\ x ->
+                 DataRetrievalRule' <$>
+                   (x .:? "Strategy") <*> (x .:? "BytesPerHour"))
+
+instance ToJSON DataRetrievalRule where
+        toJSON DataRetrievalRule'{..}
+          = object
+              ["Strategy" .= _drrStrategy,
+               "BytesPerHour" .= _drrBytesPerHour]
+
+-- | Contains the Amazon Glacier response to your request.
+--
+-- /See:/ 'describeVaultOutput' smart constructor.
+data DescribeVaultOutput = DescribeVaultOutput'
+    { _dvoVaultName         :: !(Maybe Text)
+    , _dvoSizeInBytes       :: !(Maybe Integer)
+    , _dvoLastInventoryDate :: !(Maybe Text)
+    , _dvoVaultARN          :: !(Maybe Text)
+    , _dvoCreationDate      :: !(Maybe Text)
+    , _dvoNumberOfArchives  :: !(Maybe Integer)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeVaultOutput' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dvoVaultName'
+--
+-- * 'dvoSizeInBytes'
+--
+-- * 'dvoLastInventoryDate'
+--
+-- * 'dvoVaultARN'
+--
+-- * 'dvoCreationDate'
+--
+-- * 'dvoNumberOfArchives'
+describeVaultOutput
+    :: DescribeVaultOutput
+describeVaultOutput =
+    DescribeVaultOutput'
+    { _dvoVaultName = Nothing
+    , _dvoSizeInBytes = Nothing
+    , _dvoLastInventoryDate = Nothing
+    , _dvoVaultARN = Nothing
+    , _dvoCreationDate = Nothing
+    , _dvoNumberOfArchives = Nothing
+    }
+
+-- | The name of the vault.
+dvoVaultName :: Lens' DescribeVaultOutput (Maybe Text)
+dvoVaultName = lens _dvoVaultName (\ s a -> s{_dvoVaultName = a});
+
+-- | Total size, in bytes, of the archives in the vault as of the last
+-- inventory date. This field will return null if an inventory has not yet
+-- run on the vault, for example, if you just created the vault.
+dvoSizeInBytes :: Lens' DescribeVaultOutput (Maybe Integer)
+dvoSizeInBytes = lens _dvoSizeInBytes (\ s a -> s{_dvoSizeInBytes = a});
+
+-- | The UTC date when Amazon Glacier completed the last vault inventory. A
+-- string representation of ISO 8601 date format, for example,
+-- \"2012-03-20T17:03:43.221Z\".
+dvoLastInventoryDate :: Lens' DescribeVaultOutput (Maybe Text)
+dvoLastInventoryDate = lens _dvoLastInventoryDate (\ s a -> s{_dvoLastInventoryDate = a});
+
+-- | The Amazon Resource Name (ARN) of the vault.
+dvoVaultARN :: Lens' DescribeVaultOutput (Maybe Text)
+dvoVaultARN = lens _dvoVaultARN (\ s a -> s{_dvoVaultARN = a});
+
+-- | The UTC date when the vault was created. A string representation of ISO
+-- 8601 date format, for example, \"2012-03-20T17:03:43.221Z\".
+dvoCreationDate :: Lens' DescribeVaultOutput (Maybe Text)
+dvoCreationDate = lens _dvoCreationDate (\ s a -> s{_dvoCreationDate = a});
+
+-- | The number of archives in the vault as of the last inventory date. This
+-- field will return 'null' if an inventory has not yet run on the vault,
+-- for example, if you just created the vault.
+dvoNumberOfArchives :: Lens' DescribeVaultOutput (Maybe Integer)
+dvoNumberOfArchives = lens _dvoNumberOfArchives (\ s a -> s{_dvoNumberOfArchives = a});
+
+instance FromJSON DescribeVaultOutput where
+        parseJSON
+          = withObject "DescribeVaultOutput"
+              (\ x ->
+                 DescribeVaultOutput' <$>
+                   (x .:? "VaultName") <*> (x .:? "SizeInBytes") <*>
+                     (x .:? "LastInventoryDate")
+                     <*> (x .:? "VaultARN")
+                     <*> (x .:? "CreationDate")
+                     <*> (x .:? "NumberOfArchives"))
+
+-- | Describes an Amazon Glacier job.
+--
+-- /See:/ 'glacierJobDescription' smart constructor.
+data GlacierJobDescription = GlacierJobDescription'
+    { _gjdArchiveId                    :: !(Maybe Text)
+    , _gjdSHA256TreeHash               :: !(Maybe Text)
+    , _gjdJobId                        :: !(Maybe Text)
+    , _gjdRetrievalByteRange           :: !(Maybe Text)
+    , _gjdInventoryRetrievalParameters :: !(Maybe InventoryRetrievalJobDescription)
+    , _gjdAction                       :: !(Maybe ActionCode)
+    , _gjdJobDescription               :: !(Maybe Text)
+    , _gjdSNSTopic                     :: !(Maybe Text)
+    , _gjdVaultARN                     :: !(Maybe Text)
+    , _gjdStatusMessage                :: !(Maybe Text)
+    , _gjdArchiveSHA256TreeHash        :: !(Maybe Text)
+    , _gjdCreationDate                 :: !(Maybe Text)
+    , _gjdCompleted                    :: !(Maybe Bool)
+    , _gjdCompletionDate               :: !(Maybe Text)
+    , _gjdArchiveSizeInBytes           :: !(Maybe Integer)
+    , _gjdStatusCode                   :: !(Maybe StatusCode)
+    , _gjdInventorySizeInBytes         :: !(Maybe Integer)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GlacierJobDescription' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gjdArchiveId'
+--
+-- * 'gjdSHA256TreeHash'
+--
+-- * 'gjdJobId'
+--
+-- * 'gjdRetrievalByteRange'
+--
+-- * 'gjdInventoryRetrievalParameters'
+--
+-- * 'gjdAction'
+--
+-- * 'gjdJobDescription'
+--
+-- * 'gjdSNSTopic'
+--
+-- * 'gjdVaultARN'
+--
+-- * 'gjdStatusMessage'
+--
+-- * 'gjdArchiveSHA256TreeHash'
+--
+-- * 'gjdCreationDate'
+--
+-- * 'gjdCompleted'
+--
+-- * 'gjdCompletionDate'
+--
+-- * 'gjdArchiveSizeInBytes'
+--
+-- * 'gjdStatusCode'
+--
+-- * 'gjdInventorySizeInBytes'
+glacierJobDescription
+    :: GlacierJobDescription
+glacierJobDescription =
+    GlacierJobDescription'
+    { _gjdArchiveId = Nothing
+    , _gjdSHA256TreeHash = Nothing
+    , _gjdJobId = Nothing
+    , _gjdRetrievalByteRange = Nothing
+    , _gjdInventoryRetrievalParameters = Nothing
+    , _gjdAction = Nothing
+    , _gjdJobDescription = Nothing
+    , _gjdSNSTopic = Nothing
+    , _gjdVaultARN = Nothing
+    , _gjdStatusMessage = Nothing
+    , _gjdArchiveSHA256TreeHash = Nothing
+    , _gjdCreationDate = Nothing
+    , _gjdCompleted = Nothing
+    , _gjdCompletionDate = Nothing
+    , _gjdArchiveSizeInBytes = Nothing
+    , _gjdStatusCode = Nothing
+    , _gjdInventorySizeInBytes = Nothing
+    }
+
+-- | For an ArchiveRetrieval job, this is the archive ID requested for
+-- download. Otherwise, this field is null.
+gjdArchiveId :: Lens' GlacierJobDescription (Maybe Text)
+gjdArchiveId = lens _gjdArchiveId (\ s a -> s{_gjdArchiveId = a});
+
+-- | For an ArchiveRetrieval job, it is the checksum of the archive.
+-- Otherwise, the value is null.
+--
+-- The SHA256 tree hash value for the requested range of an archive. If the
+-- Initiate a Job request for an archive specified a tree-hash aligned
+-- range, then this field returns a value.
+--
+-- For the specific case when the whole archive is retrieved, this value is
+-- the same as the ArchiveSHA256TreeHash value.
+--
+-- This field is null in the following situations:
+--
+-- -   Archive retrieval jobs that specify a range that is not tree-hash
+--     aligned.
+--
+-- -   Archival jobs that specify a range that is equal to the whole
+--     archive and the job status is InProgress.
+--
+-- -   Inventory jobs.
+--
+gjdSHA256TreeHash :: Lens' GlacierJobDescription (Maybe Text)
+gjdSHA256TreeHash = lens _gjdSHA256TreeHash (\ s a -> s{_gjdSHA256TreeHash = a});
+
+-- | An opaque string that identifies an Amazon Glacier job.
+gjdJobId :: Lens' GlacierJobDescription (Maybe Text)
+gjdJobId = lens _gjdJobId (\ s a -> s{_gjdJobId = a});
+
+-- | The retrieved byte range for archive retrieval jobs in the form
+-- \"/StartByteValue/-/EndByteValue/\" If no range was specified in the
+-- archive retrieval, then the whole archive is retrieved and
+-- /StartByteValue/ equals 0 and /EndByteValue/ equals the size of the
+-- archive minus 1. For inventory retrieval jobs this field is null.
+gjdRetrievalByteRange :: Lens' GlacierJobDescription (Maybe Text)
+gjdRetrievalByteRange = lens _gjdRetrievalByteRange (\ s a -> s{_gjdRetrievalByteRange = a});
+
+-- | Parameters used for range inventory retrieval.
+gjdInventoryRetrievalParameters :: Lens' GlacierJobDescription (Maybe InventoryRetrievalJobDescription)
+gjdInventoryRetrievalParameters = lens _gjdInventoryRetrievalParameters (\ s a -> s{_gjdInventoryRetrievalParameters = a});
+
+-- | The job type. It is either ArchiveRetrieval or InventoryRetrieval.
+gjdAction :: Lens' GlacierJobDescription (Maybe ActionCode)
+gjdAction = lens _gjdAction (\ s a -> s{_gjdAction = a});
+
+-- | The job description you provided when you initiated the job.
+gjdJobDescription :: Lens' GlacierJobDescription (Maybe Text)
+gjdJobDescription = lens _gjdJobDescription (\ s a -> s{_gjdJobDescription = a});
+
+-- | An Amazon Simple Notification Service (Amazon SNS) topic that receives
+-- notification.
+gjdSNSTopic :: Lens' GlacierJobDescription (Maybe Text)
+gjdSNSTopic = lens _gjdSNSTopic (\ s a -> s{_gjdSNSTopic = a});
+
+-- | The Amazon Resource Name (ARN) of the vault from which the archive
+-- retrieval was requested.
+gjdVaultARN :: Lens' GlacierJobDescription (Maybe Text)
+gjdVaultARN = lens _gjdVaultARN (\ s a -> s{_gjdVaultARN = a});
+
+-- | A friendly message that describes the job status.
+gjdStatusMessage :: Lens' GlacierJobDescription (Maybe Text)
+gjdStatusMessage = lens _gjdStatusMessage (\ s a -> s{_gjdStatusMessage = a});
+
+-- | The SHA256 tree hash of the entire archive for an archive retrieval. For
+-- inventory retrieval jobs, this field is null.
+gjdArchiveSHA256TreeHash :: Lens' GlacierJobDescription (Maybe Text)
+gjdArchiveSHA256TreeHash = lens _gjdArchiveSHA256TreeHash (\ s a -> s{_gjdArchiveSHA256TreeHash = a});
+
+-- | The UTC date when the job was created. A string representation of ISO
+-- 8601 date format, for example, \"2012-03-20T17:03:43.221Z\".
+gjdCreationDate :: Lens' GlacierJobDescription (Maybe Text)
+gjdCreationDate = lens _gjdCreationDate (\ s a -> s{_gjdCreationDate = a});
+
+-- | The job status. When a job is completed, you get the job\'s output.
+gjdCompleted :: Lens' GlacierJobDescription (Maybe Bool)
+gjdCompleted = lens _gjdCompleted (\ s a -> s{_gjdCompleted = a});
+
+-- | The UTC time that the archive retrieval request completed. While the job
+-- is in progress, the value will be null.
+gjdCompletionDate :: Lens' GlacierJobDescription (Maybe Text)
+gjdCompletionDate = lens _gjdCompletionDate (\ s a -> s{_gjdCompletionDate = a});
+
+-- | For an ArchiveRetrieval job, this is the size in bytes of the archive
+-- being requested for download. For the InventoryRetrieval job, the value
+-- is null.
+gjdArchiveSizeInBytes :: Lens' GlacierJobDescription (Maybe Integer)
+gjdArchiveSizeInBytes = lens _gjdArchiveSizeInBytes (\ s a -> s{_gjdArchiveSizeInBytes = a});
+
+-- | The status code can be InProgress, Succeeded, or Failed, and indicates
+-- the status of the job.
+gjdStatusCode :: Lens' GlacierJobDescription (Maybe StatusCode)
+gjdStatusCode = lens _gjdStatusCode (\ s a -> s{_gjdStatusCode = a});
+
+-- | For an InventoryRetrieval job, this is the size in bytes of the
+-- inventory requested for download. For the ArchiveRetrieval job, the
+-- value is null.
+gjdInventorySizeInBytes :: Lens' GlacierJobDescription (Maybe Integer)
+gjdInventorySizeInBytes = lens _gjdInventorySizeInBytes (\ s a -> s{_gjdInventorySizeInBytes = a});
+
+instance FromJSON GlacierJobDescription where
+        parseJSON
+          = withObject "GlacierJobDescription"
+              (\ x ->
+                 GlacierJobDescription' <$>
+                   (x .:? "ArchiveId") <*> (x .:? "SHA256TreeHash") <*>
+                     (x .:? "JobId")
+                     <*> (x .:? "RetrievalByteRange")
+                     <*> (x .:? "InventoryRetrievalParameters")
+                     <*> (x .:? "Action")
+                     <*> (x .:? "JobDescription")
+                     <*> (x .:? "SNSTopic")
+                     <*> (x .:? "VaultARN")
+                     <*> (x .:? "StatusMessage")
+                     <*> (x .:? "ArchiveSHA256TreeHash")
+                     <*> (x .:? "CreationDate")
+                     <*> (x .:? "Completed")
+                     <*> (x .:? "CompletionDate")
+                     <*> (x .:? "ArchiveSizeInBytes")
+                     <*> (x .:? "StatusCode")
+                     <*> (x .:? "InventorySizeInBytes"))
+
+-- | Describes the options for a range inventory retrieval job.
+--
+-- /See:/ 'inventoryRetrievalJobDescription' smart constructor.
+data InventoryRetrievalJobDescription = InventoryRetrievalJobDescription'
+    { _irjdFormat    :: !(Maybe Text)
+    , _irjdEndDate   :: !(Maybe Text)
+    , _irjdStartDate :: !(Maybe Text)
+    , _irjdMarker    :: !(Maybe Text)
+    , _irjdLimit     :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InventoryRetrievalJobDescription' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'irjdFormat'
+--
+-- * 'irjdEndDate'
+--
+-- * 'irjdStartDate'
+--
+-- * 'irjdMarker'
+--
+-- * 'irjdLimit'
+inventoryRetrievalJobDescription
+    :: InventoryRetrievalJobDescription
+inventoryRetrievalJobDescription =
+    InventoryRetrievalJobDescription'
+    { _irjdFormat = Nothing
+    , _irjdEndDate = Nothing
+    , _irjdStartDate = Nothing
+    , _irjdMarker = Nothing
+    , _irjdLimit = Nothing
+    }
+
+-- | The output format for the vault inventory list, which is set by the
+-- __InitiateJob__ request when initiating a job to retrieve a vault
+-- inventory. Valid values are \"CSV\" and \"JSON\".
+irjdFormat :: Lens' InventoryRetrievalJobDescription (Maybe Text)
+irjdFormat = lens _irjdFormat (\ s a -> s{_irjdFormat = a});
+
+-- | The end of the date range in UTC for vault inventory retrieval that
+-- includes archives created before this date. A string representation of
+-- ISO 8601 date format, for example, 2013-03-20T17:03:43Z.
+irjdEndDate :: Lens' InventoryRetrievalJobDescription (Maybe Text)
+irjdEndDate = lens _irjdEndDate (\ s a -> s{_irjdEndDate = a});
+
+-- | The start of the date range in UTC for vault inventory retrieval that
+-- includes archives created on or after this date. A string representation
+-- of ISO 8601 date format, for example, 2013-03-20T17:03:43Z.
+irjdStartDate :: Lens' InventoryRetrievalJobDescription (Maybe Text)
+irjdStartDate = lens _irjdStartDate (\ s a -> s{_irjdStartDate = a});
+
+-- | An opaque string that represents where to continue pagination of the
+-- vault inventory retrieval results. You use the marker in a new
+-- __InitiateJob__ request to obtain additional inventory items. If there
+-- are no more inventory items, this value is 'null'. For more information,
+-- see
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-initiate-job-post.html#api-initiate-job-post-vault-inventory-list-filtering Range Inventory Retrieval>.
+irjdMarker :: Lens' InventoryRetrievalJobDescription (Maybe Text)
+irjdMarker = lens _irjdMarker (\ s a -> s{_irjdMarker = a});
+
+-- | Specifies the maximum number of inventory items returned per vault
+-- inventory retrieval request. This limit is set when initiating the job
+-- with the a __InitiateJob__ request.
+irjdLimit :: Lens' InventoryRetrievalJobDescription (Maybe Text)
+irjdLimit = lens _irjdLimit (\ s a -> s{_irjdLimit = a});
+
+instance FromJSON InventoryRetrievalJobDescription
+         where
+        parseJSON
+          = withObject "InventoryRetrievalJobDescription"
+              (\ x ->
+                 InventoryRetrievalJobDescription' <$>
+                   (x .:? "Format") <*> (x .:? "EndDate") <*>
+                     (x .:? "StartDate")
+                     <*> (x .:? "Marker")
+                     <*> (x .:? "Limit"))
+
+-- | Provides options for specifying a range inventory retrieval job.
+--
+-- /See:/ 'inventoryRetrievalJobInput' smart constructor.
+data InventoryRetrievalJobInput = InventoryRetrievalJobInput'
+    { _irjiEndDate   :: !(Maybe Text)
+    , _irjiStartDate :: !(Maybe Text)
+    , _irjiMarker    :: !(Maybe Text)
+    , _irjiLimit     :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InventoryRetrievalJobInput' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'irjiEndDate'
+--
+-- * 'irjiStartDate'
+--
+-- * 'irjiMarker'
+--
+-- * 'irjiLimit'
+inventoryRetrievalJobInput
+    :: InventoryRetrievalJobInput
+inventoryRetrievalJobInput =
+    InventoryRetrievalJobInput'
+    { _irjiEndDate = Nothing
+    , _irjiStartDate = Nothing
+    , _irjiMarker = Nothing
+    , _irjiLimit = Nothing
+    }
+
+-- | The end of the date range in UTC for vault inventory retrieval that
+-- includes archives created before this date. A string representation of
+-- ISO 8601 date format, for example, 2013-03-20T17:03:43Z.
+irjiEndDate :: Lens' InventoryRetrievalJobInput (Maybe Text)
+irjiEndDate = lens _irjiEndDate (\ s a -> s{_irjiEndDate = a});
+
+-- | The start of the date range in UTC for vault inventory retrieval that
+-- includes archives created on or after this date. A string representation
+-- of ISO 8601 date format, for example, 2013-03-20T17:03:43Z.
+irjiStartDate :: Lens' InventoryRetrievalJobInput (Maybe Text)
+irjiStartDate = lens _irjiStartDate (\ s a -> s{_irjiStartDate = a});
+
+-- | An opaque string that represents where to continue pagination of the
+-- vault inventory retrieval results. You use the marker in a new
+-- __InitiateJob__ request to obtain additional inventory items. If there
+-- are no more inventory items, this value is 'null'.
+irjiMarker :: Lens' InventoryRetrievalJobInput (Maybe Text)
+irjiMarker = lens _irjiMarker (\ s a -> s{_irjiMarker = a});
+
+-- | Specifies the maximum number of inventory items returned per vault
+-- inventory retrieval request. Valid values are greater than or equal to
+-- 1.
+irjiLimit :: Lens' InventoryRetrievalJobInput (Maybe Text)
+irjiLimit = lens _irjiLimit (\ s a -> s{_irjiLimit = a});
+
+instance ToJSON InventoryRetrievalJobInput where
+        toJSON InventoryRetrievalJobInput'{..}
+          = object
+              ["EndDate" .= _irjiEndDate,
+               "StartDate" .= _irjiStartDate,
+               "Marker" .= _irjiMarker, "Limit" .= _irjiLimit]
+
+-- | Provides options for defining a job.
+--
+-- /See:/ 'jobParameters' smart constructor.
+data JobParameters = JobParameters'
+    { _jpArchiveId                    :: !(Maybe Text)
+    , _jpRetrievalByteRange           :: !(Maybe Text)
+    , _jpFormat                       :: !(Maybe Text)
+    , _jpInventoryRetrievalParameters :: !(Maybe InventoryRetrievalJobInput)
+    , _jpSNSTopic                     :: !(Maybe Text)
+    , _jpType                         :: !(Maybe Text)
+    , _jpDescription                  :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'JobParameters' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'jpArchiveId'
+--
+-- * 'jpRetrievalByteRange'
+--
+-- * 'jpFormat'
+--
+-- * 'jpInventoryRetrievalParameters'
+--
+-- * 'jpSNSTopic'
+--
+-- * 'jpType'
+--
+-- * 'jpDescription'
+jobParameters
+    :: JobParameters
+jobParameters =
+    JobParameters'
+    { _jpArchiveId = Nothing
+    , _jpRetrievalByteRange = Nothing
+    , _jpFormat = Nothing
+    , _jpInventoryRetrievalParameters = Nothing
+    , _jpSNSTopic = Nothing
+    , _jpType = Nothing
+    , _jpDescription = Nothing
+    }
+
+-- | The ID of the archive that you want to retrieve. This field is required
+-- only if 'Type' is set to archive-retrieval. An error occurs if you
+-- specify this request parameter for an inventory retrieval job request.
+jpArchiveId :: Lens' JobParameters (Maybe Text)
+jpArchiveId = lens _jpArchiveId (\ s a -> s{_jpArchiveId = a});
+
+-- | The byte range to retrieve for an archive retrieval. in the form
+-- \"/StartByteValue/-/EndByteValue/\" If not specified, the whole archive
+-- is retrieved. If specified, the byte range must be megabyte (1024*1024)
+-- aligned which means that /StartByteValue/ must be divisible by 1 MB and
+-- /EndByteValue/ plus 1 must be divisible by 1 MB or be the end of the
+-- archive specified as the archive byte size value minus 1. If
+-- RetrievalByteRange is not megabyte aligned, this operation returns a 400
+-- response.
+--
+-- An error occurs if you specify this field for an inventory retrieval job
+-- request.
+jpRetrievalByteRange :: Lens' JobParameters (Maybe Text)
+jpRetrievalByteRange = lens _jpRetrievalByteRange (\ s a -> s{_jpRetrievalByteRange = a});
+
+-- | When initiating a job to retrieve a vault inventory, you can optionally
+-- add this parameter to your request to specify the output format. If you
+-- are initiating an inventory job and do not specify a Format field, JSON
+-- is the default format. Valid values are \"CSV\" and \"JSON\".
+jpFormat :: Lens' JobParameters (Maybe Text)
+jpFormat = lens _jpFormat (\ s a -> s{_jpFormat = a});
+
+-- | Input parameters used for range inventory retrieval.
+jpInventoryRetrievalParameters :: Lens' JobParameters (Maybe InventoryRetrievalJobInput)
+jpInventoryRetrievalParameters = lens _jpInventoryRetrievalParameters (\ s a -> s{_jpInventoryRetrievalParameters = a});
+
+-- | The Amazon SNS topic ARN to which Amazon Glacier sends a notification
+-- when the job is completed and the output is ready for you to download.
+-- The specified topic publishes the notification to its subscribers. The
+-- SNS topic must exist.
+jpSNSTopic :: Lens' JobParameters (Maybe Text)
+jpSNSTopic = lens _jpSNSTopic (\ s a -> s{_jpSNSTopic = a});
+
+-- | The job type. You can initiate a job to retrieve an archive or get an
+-- inventory of a vault. Valid values are \"archive-retrieval\" and
+-- \"inventory-retrieval\".
+jpType :: Lens' JobParameters (Maybe Text)
+jpType = lens _jpType (\ s a -> s{_jpType = a});
+
+-- | The optional description for the job. The description must be less than
+-- or equal to 1,024 bytes. The allowable characters are 7-bit ASCII
+-- without control codes-specifically, ASCII values 32-126 decimal or
+-- 0x20-0x7E hexadecimal.
+jpDescription :: Lens' JobParameters (Maybe Text)
+jpDescription = lens _jpDescription (\ s a -> s{_jpDescription = a});
+
+instance ToJSON JobParameters where
+        toJSON JobParameters'{..}
+          = object
+              ["ArchiveId" .= _jpArchiveId,
+               "RetrievalByteRange" .= _jpRetrievalByteRange,
+               "Format" .= _jpFormat,
+               "InventoryRetrievalParameters" .=
+                 _jpInventoryRetrievalParameters,
+               "SNSTopic" .= _jpSNSTopic, "Type" .= _jpType,
+               "Description" .= _jpDescription]
+
+-- | A list of the part sizes of the multipart upload.
+--
+-- /See:/ 'partListElement' smart constructor.
+data PartListElement = PartListElement'
+    { _pleSHA256TreeHash :: !(Maybe Text)
+    , _pleRangeInBytes   :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PartListElement' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pleSHA256TreeHash'
+--
+-- * 'pleRangeInBytes'
+partListElement
+    :: PartListElement
+partListElement =
+    PartListElement'
+    { _pleSHA256TreeHash = Nothing
+    , _pleRangeInBytes = Nothing
+    }
+
+-- | The SHA256 tree hash value that Amazon Glacier calculated for the part.
+-- This field is never 'null'.
+pleSHA256TreeHash :: Lens' PartListElement (Maybe Text)
+pleSHA256TreeHash = lens _pleSHA256TreeHash (\ s a -> s{_pleSHA256TreeHash = a});
+
+-- | The byte range of a part, inclusive of the upper value of the range.
+pleRangeInBytes :: Lens' PartListElement (Maybe Text)
+pleRangeInBytes = lens _pleRangeInBytes (\ s a -> s{_pleRangeInBytes = a});
+
+instance FromJSON PartListElement where
+        parseJSON
+          = withObject "PartListElement"
+              (\ x ->
+                 PartListElement' <$>
+                   (x .:? "SHA256TreeHash") <*> (x .:? "RangeInBytes"))
+
+-- | A list of in-progress multipart uploads for a vault.
+--
+-- /See:/ 'uploadListElement' smart constructor.
+data UploadListElement = UploadListElement'
+    { _uleMultipartUploadId  :: !(Maybe Text)
+    , _uleArchiveDescription :: !(Maybe Text)
+    , _ulePartSizeInBytes    :: !(Maybe Integer)
+    , _uleVaultARN           :: !(Maybe Text)
+    , _uleCreationDate       :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UploadListElement' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uleMultipartUploadId'
+--
+-- * 'uleArchiveDescription'
+--
+-- * 'ulePartSizeInBytes'
+--
+-- * 'uleVaultARN'
+--
+-- * 'uleCreationDate'
+uploadListElement
+    :: UploadListElement
+uploadListElement =
+    UploadListElement'
+    { _uleMultipartUploadId = Nothing
+    , _uleArchiveDescription = Nothing
+    , _ulePartSizeInBytes = Nothing
+    , _uleVaultARN = Nothing
+    , _uleCreationDate = Nothing
+    }
+
+-- | The ID of a multipart upload.
+uleMultipartUploadId :: Lens' UploadListElement (Maybe Text)
+uleMultipartUploadId = lens _uleMultipartUploadId (\ s a -> s{_uleMultipartUploadId = a});
+
+-- | The description of the archive that was specified in the Initiate
+-- Multipart Upload request.
+uleArchiveDescription :: Lens' UploadListElement (Maybe Text)
+uleArchiveDescription = lens _uleArchiveDescription (\ s a -> s{_uleArchiveDescription = a});
+
+-- | The part size, in bytes, specified in the Initiate Multipart Upload
+-- request. This is the size of all the parts in the upload except the last
+-- part, which may be smaller than this size.
+ulePartSizeInBytes :: Lens' UploadListElement (Maybe Integer)
+ulePartSizeInBytes = lens _ulePartSizeInBytes (\ s a -> s{_ulePartSizeInBytes = a});
+
+-- | The Amazon Resource Name (ARN) of the vault that contains the archive.
+uleVaultARN :: Lens' UploadListElement (Maybe Text)
+uleVaultARN = lens _uleVaultARN (\ s a -> s{_uleVaultARN = a});
+
+-- | The UTC time at which the multipart upload was initiated.
+uleCreationDate :: Lens' UploadListElement (Maybe Text)
+uleCreationDate = lens _uleCreationDate (\ s a -> s{_uleCreationDate = a});
+
+instance FromJSON UploadListElement where
+        parseJSON
+          = withObject "UploadListElement"
+              (\ x ->
+                 UploadListElement' <$>
+                   (x .:? "MultipartUploadId") <*>
+                     (x .:? "ArchiveDescription")
+                     <*> (x .:? "PartSizeInBytes")
+                     <*> (x .:? "VaultARN")
+                     <*> (x .:? "CreationDate"))
+
+-- | Contains the vault access policy.
+--
+-- /See:/ 'vaultAccessPolicy' smart constructor.
+newtype VaultAccessPolicy = VaultAccessPolicy'
+    { _vapPolicy :: Maybe Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VaultAccessPolicy' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vapPolicy'
+vaultAccessPolicy
+    :: VaultAccessPolicy
+vaultAccessPolicy =
+    VaultAccessPolicy'
+    { _vapPolicy = Nothing
+    }
+
+-- | The vault access policy.
+vapPolicy :: Lens' VaultAccessPolicy (Maybe Text)
+vapPolicy = lens _vapPolicy (\ s a -> s{_vapPolicy = a});
+
+instance FromJSON VaultAccessPolicy where
+        parseJSON
+          = withObject "VaultAccessPolicy"
+              (\ x -> VaultAccessPolicy' <$> (x .:? "Policy"))
+
+instance ToJSON VaultAccessPolicy where
+        toJSON VaultAccessPolicy'{..}
+          = object ["Policy" .= _vapPolicy]
+
+-- | Contains the vault lock policy.
+--
+-- /See:/ 'vaultLockPolicy' smart constructor.
+newtype VaultLockPolicy = VaultLockPolicy'
+    { _vlpPolicy :: Maybe Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VaultLockPolicy' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vlpPolicy'
+vaultLockPolicy
+    :: VaultLockPolicy
+vaultLockPolicy =
+    VaultLockPolicy'
+    { _vlpPolicy = Nothing
+    }
+
+-- | The vault lock policy.
+vlpPolicy :: Lens' VaultLockPolicy (Maybe Text)
+vlpPolicy = lens _vlpPolicy (\ s a -> s{_vlpPolicy = a});
+
+instance ToJSON VaultLockPolicy where
+        toJSON VaultLockPolicy'{..}
+          = object ["Policy" .= _vlpPolicy]
+
+-- | Represents a vault\'s notification configuration.
+--
+-- /See:/ 'vaultNotificationConfig' smart constructor.
+data VaultNotificationConfig = VaultNotificationConfig'
+    { _vncSNSTopic :: !(Maybe Text)
+    , _vncEvents   :: !(Maybe [Text])
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VaultNotificationConfig' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vncSNSTopic'
+--
+-- * 'vncEvents'
+vaultNotificationConfig
+    :: VaultNotificationConfig
+vaultNotificationConfig =
+    VaultNotificationConfig'
+    { _vncSNSTopic = Nothing
+    , _vncEvents = Nothing
+    }
+
+-- | The Amazon Simple Notification Service (Amazon SNS) topic Amazon
+-- Resource Name (ARN).
+vncSNSTopic :: Lens' VaultNotificationConfig (Maybe Text)
+vncSNSTopic = lens _vncSNSTopic (\ s a -> s{_vncSNSTopic = a});
+
+-- | A list of one or more events for which Amazon Glacier will send a
+-- notification to the specified Amazon SNS topic.
+vncEvents :: Lens' VaultNotificationConfig [Text]
+vncEvents = lens _vncEvents (\ s a -> s{_vncEvents = a}) . _Default . _Coerce;
+
+instance FromJSON VaultNotificationConfig where
+        parseJSON
+          = withObject "VaultNotificationConfig"
+              (\ x ->
+                 VaultNotificationConfig' <$>
+                   (x .:? "SNSTopic") <*> (x .:? "Events" .!= mempty))
+
+instance ToJSON VaultNotificationConfig where
+        toJSON VaultNotificationConfig'{..}
+          = object
+              ["SNSTopic" .= _vncSNSTopic, "Events" .= _vncEvents]
diff --git a/gen/Network/AWS/Glacier/Types/Sum.hs b/gen/Network/AWS/Glacier/Types/Sum.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glacier/Types/Sum.hs
@@ -0,0 +1,73 @@
+{-# 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.Glacier.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.Glacier.Types.Sum where
+
+import           Network.AWS.Prelude
+
+data ActionCode
+    = ArchiveRetrieval
+    | InventoryRetrieval
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText ActionCode where
+    parser = takeLowerText >>= \case
+        "archiveretrieval" -> pure ArchiveRetrieval
+        "inventoryretrieval" -> pure InventoryRetrieval
+        e -> fromTextError $ "Failure parsing ActionCode from value: '" <> e
+           <> "'. Accepted values: archiveretrieval, inventoryretrieval"
+
+instance ToText ActionCode where
+    toText = \case
+        ArchiveRetrieval -> "archiveretrieval"
+        InventoryRetrieval -> "inventoryretrieval"
+
+instance Hashable     ActionCode
+instance ToByteString ActionCode
+instance ToQuery      ActionCode
+instance ToHeader     ActionCode
+
+instance FromJSON ActionCode where
+    parseJSON = parseJSONText "ActionCode"
+
+data StatusCode
+    = Failed
+    | InProgress
+    | Succeeded
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText StatusCode where
+    parser = takeLowerText >>= \case
+        "failed" -> pure Failed
+        "inprogress" -> pure InProgress
+        "succeeded" -> pure Succeeded
+        e -> fromTextError $ "Failure parsing StatusCode from value: '" <> e
+           <> "'. Accepted values: failed, inprogress, succeeded"
+
+instance ToText StatusCode where
+    toText = \case
+        Failed -> "failed"
+        InProgress -> "inprogress"
+        Succeeded -> "succeeded"
+
+instance Hashable     StatusCode
+instance ToByteString StatusCode
+instance ToQuery      StatusCode
+instance ToHeader     StatusCode
+
+instance FromJSON StatusCode where
+    parseJSON = parseJSONText "StatusCode"
diff --git a/gen/Network/AWS/Glacier/UploadArchive.hs b/gen/Network/AWS/Glacier/UploadArchive.hs
--- a/gen/Network/AWS/Glacier/UploadArchive.hs
+++ b/gen/Network/AWS/Glacier/UploadArchive.hs
@@ -1,210 +1,181 @@
-{-# 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.Glacier.UploadArchive
--- 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.
-
--- | This operation adds an archive to a vault. This is a synchronous operation,
--- and for a successful upload, your data is durably persisted. Amazon Glacier
--- returns the archive ID in the 'x-amz-archive-id' header of the response.
+-- This operation adds an archive to a vault. This is a synchronous
+-- operation, and for a successful upload, your data is durably persisted.
+-- Amazon Glacier returns the archive ID in the 'x-amz-archive-id' header
+-- of the response.
 --
--- You must use the archive ID to access your data in Amazon Glacier. After you
--- upload an archive, you should save the archive ID returned so that you can
--- retrieve or delete the archive later. Besides saving the archive ID, you can
--- also index it and give it a friendly name to allow for better searching. You
--- can also use the optional archive description field to specify how the
--- archive is referred to in an external index of archives, such as you might
--- create in Amazon DynamoDB. You can also get the vault inventory to obtain a
--- list of archive IDs in a vault. For more information, see 'InitiateJob'.
+-- You must use the archive ID to access your data in Amazon Glacier. After
+-- you upload an archive, you should save the archive ID returned so that
+-- you can retrieve or delete the archive later. Besides saving the archive
+-- ID, you can also index it and give it a friendly name to allow for
+-- better searching. You can also use the optional archive description
+-- field to specify how the archive is referred to in an external index of
+-- archives, such as you might create in Amazon DynamoDB. You can also get
+-- the vault inventory to obtain a list of archive IDs in a vault. For more
+-- information, see InitiateJob.
 --
 -- You must provide a SHA256 tree hash of the data you are uploading. For
--- information about computing a SHA256 tree hash, see <http://docs.aws.amazon.com/amazonglacier/latest/dev/checksum-calculations.html Computing Checksums>.
+-- information about computing a SHA256 tree hash, see
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/checksum-calculations.html Computing Checksums>.
 --
--- You can optionally specify an archive description of up to 1,024 printable
--- ASCII characters. You can get the archive description when you either
--- retrieve the archive or get the vault inventory. For more information, see 'InitiateJob'. Amazon Glacier does not interpret the description in any way. An archive
--- description does not need to be unique. You cannot use the description to
--- retrieve or sort the archive list.
+-- You can optionally specify an archive description of up to 1,024
+-- printable ASCII characters. You can get the archive description when you
+-- either retrieve the archive or get the vault inventory. For more
+-- information, see InitiateJob. Amazon Glacier does not interpret the
+-- description in any way. An archive description does not need to be
+-- unique. You cannot use the description to retrieve or sort the archive
+-- list.
 --
 -- Archives are immutable. After you upload an archive, you cannot edit the
 -- archive or its description.
 --
 -- An AWS account has full permission to perform all operations (actions).
--- However, AWS Identity and Access Management (IAM) users don't have any
--- permissions by default. You must grant them explicit permission to perform
--- specific actions. For more information, see <http://docs.aws.amazon.com/amazonglacier/latest/dev/using-iam-with-amazon-glacier.html Access Control Using AWS Identityand Access Management (IAM)>.
+-- However, AWS Identity and Access Management (IAM) users don\'t have any
+-- permissions by default. You must grant them explicit permission to
+-- perform specific actions. For more information, see
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/using-iam-with-amazon-glacier.html Access Control Using AWS Identity and Access Management (IAM)>.
 --
--- For conceptual information and underlying REST API, go to <http://docs.aws.amazon.com/amazonglacier/latest/dev/uploading-an-archive.html Uploading anArchive in Amazon Glacier> and <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-archive-post.html Upload Archive> in the /Amazon Glacier DeveloperGuide/.
+-- For conceptual information and underlying REST API, go to
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/uploading-an-archive.html Uploading an Archive in Amazon Glacier>
+-- and
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-archive-post.html Upload Archive>
+-- in the /Amazon Glacier Developer Guide/.
 --
--- <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-UploadArchive.html>
+-- /See:/ <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-UploadArchive.html AWS API Reference> for UploadArchive.
 module Network.AWS.Glacier.UploadArchive
     (
-    -- * Request
-      UploadArchive
-    -- ** Request constructor
-    , uploadArchive
-    -- ** Request lenses
-    , uaAccountId
-    , uaArchiveDescription
-    , uaBody
+    -- * Creating a Request
+      uploadArchive
+    , UploadArchive
+    -- * Request Lenses
     , uaChecksum
+    , uaArchiveDescription
     , uaVaultName
+    , uaAccountId
+    , uaBody
 
-    -- * Response
-    , UploadArchiveResponse
-    -- ** Response constructor
-    , uploadArchiveResponse
-    -- ** Response lenses
-    , uarArchiveId
-    , uarChecksum
-    , uarLocation
+    -- * Destructuring the Response
+    , archiveCreationOutput
+    , ArchiveCreationOutput
+    -- * Response Lenses
+    , acoArchiveId
+    , acoChecksum
+    , acoLocation
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.RestJSON
-import Network.AWS.Glacier.Types
-import qualified GHC.Exts
-
-data UploadArchive = UploadArchive
-    { _uaAccountId          :: Text
-    , _uaArchiveDescription :: Maybe Text
-    , _uaBody               :: RqBody
-    , _uaChecksum           :: Maybe Text
-    , _uaVaultName          :: Text
-    } deriving (Show)
+import           Network.AWS.Glacier.Types
+import           Network.AWS.Glacier.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
--- | 'UploadArchive' constructor.
+-- | Provides options to add an archive to a vault.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'uploadArchive' smart constructor.
+data UploadArchive = UploadArchive'
+    { _uaChecksum           :: !(Maybe Text)
+    , _uaArchiveDescription :: !(Maybe Text)
+    , _uaVaultName          :: !Text
+    , _uaAccountId          :: !Text
+    , _uaBody               :: !RqBody
+    } deriving (Show,Generic)
+
+-- | Creates a value of 'UploadArchive' with the minimum fields required to make a request.
 --
--- * 'uaAccountId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'uaArchiveDescription' @::@ 'Maybe' 'Text'
+-- * 'uaChecksum'
 --
--- * 'uaBody' @::@ 'RqBody'
+-- * 'uaArchiveDescription'
 --
--- * 'uaChecksum' @::@ 'Maybe' 'Text'
+-- * 'uaVaultName'
 --
--- * 'uaVaultName' @::@ 'Text'
+-- * 'uaAccountId'
 --
-uploadArchive :: Text -- ^ 'uaVaultName'
-              -> Text -- ^ 'uaAccountId'
-              -> RqBody -- ^ 'uaBody'
-              -> UploadArchive
-uploadArchive p1 p2 p3 = UploadArchive
-    { _uaVaultName          = p1
-    , _uaAccountId          = p2
-    , _uaBody               = p3
+-- * 'uaBody'
+uploadArchive
+    :: Text -- ^ 'uaVaultName'
+    -> Text -- ^ 'uaAccountId'
+    -> RqBody -- ^ 'uaBody'
+    -> UploadArchive
+uploadArchive pVaultName_ pAccountId_ pBody_ =
+    UploadArchive'
+    { _uaChecksum = Nothing
     , _uaArchiveDescription = Nothing
-    , _uaChecksum           = Nothing
+    , _uaVaultName = pVaultName_
+    , _uaAccountId = pAccountId_
+    , _uaBody = pBody_
     }
 
--- | The 'AccountId' value is the AWS account ID of the account that owns the vault.
--- You can either specify an AWS account ID or optionally a single apos'-'apos
--- (hyphen), in which case Amazon Glacier uses the AWS account ID associated
--- with the credentials used to sign the request. If you use an account ID, do
--- not include any hyphens (apos-apos) in the ID.
-uaAccountId :: Lens' UploadArchive Text
-uaAccountId = lens _uaAccountId (\s a -> s { _uaAccountId = a })
+-- | The SHA256 tree hash of the data being uploaded.
+uaChecksum :: Lens' UploadArchive (Maybe Text)
+uaChecksum = lens _uaChecksum (\ s a -> s{_uaChecksum = a});
 
 -- | The optional description of the archive you are uploading.
 uaArchiveDescription :: Lens' UploadArchive (Maybe Text)
-uaArchiveDescription =
-    lens _uaArchiveDescription (\s a -> s { _uaArchiveDescription = a })
-
--- | The data to upload.
-uaBody :: Lens' UploadArchive RqBody
-uaBody = lens _uaBody (\s a -> s { _uaBody = a })
-
--- | The SHA256 tree hash of the data being uploaded.
-uaChecksum :: Lens' UploadArchive (Maybe Text)
-uaChecksum = lens _uaChecksum (\s a -> s { _uaChecksum = a })
+uaArchiveDescription = lens _uaArchiveDescription (\ s a -> s{_uaArchiveDescription = a});
 
 -- | The name of the vault.
 uaVaultName :: Lens' UploadArchive Text
-uaVaultName = lens _uaVaultName (\s a -> s { _uaVaultName = a })
+uaVaultName = lens _uaVaultName (\ s a -> s{_uaVaultName = a});
 
-data UploadArchiveResponse = UploadArchiveResponse
-    { _uarArchiveId :: Maybe Text
-    , _uarChecksum  :: Maybe Text
-    , _uarLocation  :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
+-- | The 'AccountId' value is the AWS account ID of the account that owns the
+-- vault. You can either specify an AWS account ID or optionally a single
+-- apos'-'apos (hyphen), in which case Amazon Glacier uses the AWS account
+-- ID associated with the credentials used to sign the request. If you use
+-- an account ID, do not include any hyphens (apos-apos) in the ID.
+uaAccountId :: Lens' UploadArchive Text
+uaAccountId = lens _uaAccountId (\ s a -> s{_uaAccountId = a});
 
--- | 'UploadArchiveResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'uarArchiveId' @::@ 'Maybe' 'Text'
---
--- * 'uarChecksum' @::@ 'Maybe' 'Text'
---
--- * 'uarLocation' @::@ 'Maybe' 'Text'
---
-uploadArchiveResponse :: UploadArchiveResponse
-uploadArchiveResponse = UploadArchiveResponse
-    { _uarLocation  = Nothing
-    , _uarChecksum  = Nothing
-    , _uarArchiveId = Nothing
-    }
+-- | The data to upload.
+uaBody :: Lens' UploadArchive RqBody
+uaBody = lens _uaBody (\ s a -> s{_uaBody = a});
 
--- | The ID of the archive. This value is also included as part of the location.
-uarArchiveId :: Lens' UploadArchiveResponse (Maybe Text)
-uarArchiveId = lens _uarArchiveId (\s a -> s { _uarArchiveId = a })
+instance AWSRequest UploadArchive where
+        type Sv UploadArchive = Glacier
+        type Rs UploadArchive = ArchiveCreationOutput
+        request = postBody
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 ArchiveCreationOutput' <$>
+                   (h .#? "x-amz-archive-id") <*>
+                     (h .#? "x-amz-sha256-tree-hash")
+                     <*> (h .#? "Location"))
 
--- | The checksum of the archive computed by Amazon Glacier.
-uarChecksum :: Lens' UploadArchiveResponse (Maybe Text)
-uarChecksum = lens _uarChecksum (\s a -> s { _uarChecksum = a })
+instance ToBody UploadArchive where
+        toBody = _uaBody
 
--- | The relative URI path of the newly added archive resource.
-uarLocation :: Lens' UploadArchiveResponse (Maybe Text)
-uarLocation = lens _uarLocation (\s a -> s { _uarLocation = a })
+instance ToHeaders UploadArchive where
+        toHeaders UploadArchive'{..}
+          = mconcat
+              ["x-amz-sha256-tree-hash" =# _uaChecksum,
+               "x-amz-archive-description" =# _uaArchiveDescription]
 
 instance ToPath UploadArchive where
-    toPath UploadArchive{..} = mconcat
-        [ "/"
-        , toText _uaAccountId
-        , "/vaults/"
-        , toText _uaVaultName
-        , "/archives"
-        ]
+        toPath UploadArchive'{..}
+          = mconcat
+              ["/", toBS _uaAccountId, "/vaults/",
+               toBS _uaVaultName, "/archives"]
 
 instance ToQuery UploadArchive where
-    toQuery = const mempty
-
-instance ToHeaders UploadArchive where
-    toHeaders UploadArchive{..} = mconcat
-        [ "x-amz-archive-description" =: _uaArchiveDescription
-        , "x-amz-sha256-tree-hash"    =: _uaChecksum
-        ]
-
-instance ToBody UploadArchive where
-    toBody = toBody . _uaBody
-
-instance AWSRequest UploadArchive where
-    type Sv UploadArchive = Glacier
-    type Rs UploadArchive = UploadArchiveResponse
-
-    request  = stream POST
-    response = headerResponse $ \h -> UploadArchiveResponse
-        <$> h ~:? "x-amz-archive-id"
-        <*> h ~:? "x-amz-sha256-tree-hash"
-        <*> h ~:? "Location"
+        toQuery = const mempty
diff --git a/gen/Network/AWS/Glacier/UploadMultipartPart.hs b/gen/Network/AWS/Glacier/UploadMultipartPart.hs
--- a/gen/Network/AWS/Glacier/UploadMultipartPart.hs
+++ b/gen/Network/AWS/Glacier/UploadMultipartPart.hs
@@ -1,210 +1,234 @@
-{-# 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.Glacier.UploadMultipartPart
--- 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.
-
--- | This operation uploads a part of an archive. You can upload archive parts in
--- any order. You can also upload them in parallel. You can upload up to 10,000
--- parts for a multipart upload.
+-- This operation uploads a part of an archive. You can upload archive
+-- parts in any order. You can also upload them in parallel. You can upload
+-- up to 10,000 parts for a multipart upload.
 --
 -- Amazon Glacier rejects your upload part request if any of the following
 -- conditions is true:
 --
--- SHA256 tree hash does not matchTo ensure that part data is not corrupted
--- in transmission, you compute a SHA256 tree hash of the part and include it in
--- your request. Upon receiving the part data, Amazon Glacier also computes a
--- SHA256 tree hash. If these hash values don't match, the operation fails. For
--- information about computing a SHA256 tree hash, see <http://docs.aws.amazon.com/amazonglacier/latest/dev/checksum-calculations.html Computing Checksums>.
+-- -   __SHA256 tree hash does not match__To ensure that part data is not
+--     corrupted in transmission, you compute a SHA256 tree hash of the
+--     part and include it in your request. Upon receiving the part data,
+--     Amazon Glacier also computes a SHA256 tree hash. If these hash
+--     values don\'t match, the operation fails. For information about
+--     computing a SHA256 tree hash, see
+--     <http://docs.aws.amazon.com/amazonglacier/latest/dev/checksum-calculations.html Computing Checksums>.
 --
--- Part size does not matchThe size of each part except the last must match
--- the size specified in the corresponding 'InitiateMultipartUpload' request. The
--- size of the last part must be the same size as, or smaller than, the
--- specified size.
+-- -   __Part size does not match__The size of each part except the last
+--     must match the size specified in the corresponding
+--     InitiateMultipartUpload request. The size of the last part must be
+--     the same size as, or smaller than, the specified size.
 --
--- If you upload a part whose size is smaller than the part size you specified
--- in your initiate multipart upload request and that part is not the last part,
--- then the upload part request will succeed. However, the subsequent Complete
--- Multipart Upload request will fail.
+--     If you upload a part whose size is smaller than the part size you
+--     specified in your initiate multipart upload request and that part is
+--     not the last part, then the upload part request will succeed.
+--     However, the subsequent Complete Multipart Upload request will fail.
 --
--- Range does not alignThe byte range value in the request does not align
--- with the part size specified in the corresponding initiate request. For
--- example, if you specify a part size of 4194304 bytes (4 MB), then 0 to
--- 4194303 bytes (4 MB - 1) and 4194304 (4 MB) to 8388607 (8 MB - 1) are valid
--- part ranges. However, if you set a range value of 2 MB to 6 MB, the range
--- does not align with the part size and the upload will fail.   This operation
--- is idempotent. If you upload the same part multiple times, the data included
--- in the most recent request overwrites the previously uploaded data.
+-- -   __Range does not align__The byte range value in the request does not
+--     align with the part size specified in the corresponding initiate
+--     request. For example, if you specify a part size of 4194304 bytes (4
+--     MB), then 0 to 4194303 bytes (4 MB - 1) and 4194304 (4 MB) to
+--     8388607 (8 MB - 1) are valid part ranges. However, if you set a
+--     range value of 2 MB to 6 MB, the range does not align with the part
+--     size and the upload will fail.
 --
+-- This operation is idempotent. If you upload the same part multiple
+-- times, the data included in the most recent request overwrites the
+-- previously uploaded data.
+--
 -- An AWS account has full permission to perform all operations (actions).
--- However, AWS Identity and Access Management (IAM) users don't have any
--- permissions by default. You must grant them explicit permission to perform
--- specific actions. For more information, see <http://docs.aws.amazon.com/amazonglacier/latest/dev/using-iam-with-amazon-glacier.html Access Control Using AWS Identityand Access Management (IAM)>.
+-- However, AWS Identity and Access Management (IAM) users don\'t have any
+-- permissions by default. You must grant them explicit permission to
+-- perform specific actions. For more information, see
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/using-iam-with-amazon-glacier.html Access Control Using AWS Identity and Access Management (IAM)>.
 --
--- For conceptual information and underlying REST API, go to <http://docs.aws.amazon.com/amazonglacier/latest/dev/uploading-archive-mpu.html Uploading LargeArchives in Parts (Multipart Upload)> and <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-upload-part.html Upload Part > in the /Amazon GlacierDeveloper Guide/.
+-- For conceptual information and underlying REST API, go to
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/uploading-archive-mpu.html Uploading Large Archives in Parts (Multipart Upload)>
+-- and
+-- <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-upload-part.html Upload Part>
+-- in the /Amazon Glacier Developer Guide/.
 --
--- <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-UploadMultipartPart.html>
+-- /See:/ <http://docs.aws.amazon.com/amazonglacier/latest/dev/api-UploadMultipartPart.html AWS API Reference> for UploadMultipartPart.
 module Network.AWS.Glacier.UploadMultipartPart
     (
-    -- * Request
-      UploadMultipartPart
-    -- ** Request constructor
-    , uploadMultipartPart
-    -- ** Request lenses
-    , umpAccountId
-    , umpBody
+    -- * Creating a Request
+      uploadMultipartPart
+    , UploadMultipartPart
+    -- * Request Lenses
     , umpChecksum
     , umpRange
-    , umpUploadId
+    , umpAccountId
     , umpVaultName
+    , umpUploadId
+    , umpBody
 
-    -- * Response
-    , UploadMultipartPartResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , uploadMultipartPartResponse
-    -- ** Response lenses
-    , umprChecksum
+    , UploadMultipartPartResponse
+    -- * Response Lenses
+    , umprsChecksum
+    , umprsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.RestJSON
-import Network.AWS.Glacier.Types
-import qualified GHC.Exts
-
-data UploadMultipartPart = UploadMultipartPart
-    { _umpAccountId :: Text
-    , _umpBody      :: RqBody
-    , _umpChecksum  :: Maybe Text
-    , _umpRange     :: Maybe Text
-    , _umpUploadId  :: Text
-    , _umpVaultName :: Text
-    } deriving (Show)
+import           Network.AWS.Glacier.Types
+import           Network.AWS.Glacier.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
--- | 'UploadMultipartPart' constructor.
+-- | Provides options to upload a part of an archive in a multipart upload
+-- operation.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'uploadMultipartPart' smart constructor.
+data UploadMultipartPart = UploadMultipartPart'
+    { _umpChecksum  :: !(Maybe Text)
+    , _umpRange     :: !(Maybe Text)
+    , _umpAccountId :: !Text
+    , _umpVaultName :: !Text
+    , _umpUploadId  :: !Text
+    , _umpBody      :: !RqBody
+    } deriving (Show,Generic)
+
+-- | Creates a value of 'UploadMultipartPart' with the minimum fields required to make a request.
 --
--- * 'umpAccountId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'umpBody' @::@ 'RqBody'
+-- * 'umpChecksum'
 --
--- * 'umpChecksum' @::@ 'Maybe' 'Text'
+-- * 'umpRange'
 --
--- * 'umpRange' @::@ 'Maybe' 'Text'
+-- * 'umpAccountId'
 --
--- * 'umpUploadId' @::@ 'Text'
+-- * 'umpVaultName'
 --
--- * 'umpVaultName' @::@ 'Text'
+-- * 'umpUploadId'
 --
-uploadMultipartPart :: Text -- ^ 'umpAccountId'
-                    -> Text -- ^ 'umpVaultName'
-                    -> Text -- ^ 'umpUploadId'
-                    -> RqBody -- ^ 'umpBody'
-                    -> UploadMultipartPart
-uploadMultipartPart p1 p2 p3 p4 = UploadMultipartPart
-    { _umpAccountId = p1
-    , _umpVaultName = p2
-    , _umpUploadId  = p3
-    , _umpBody      = p4
-    , _umpChecksum  = Nothing
-    , _umpRange     = Nothing
+-- * 'umpBody'
+uploadMultipartPart
+    :: Text -- ^ 'umpAccountId'
+    -> Text -- ^ 'umpVaultName'
+    -> Text -- ^ 'umpUploadId'
+    -> RqBody -- ^ 'umpBody'
+    -> UploadMultipartPart
+uploadMultipartPart pAccountId_ pVaultName_ pUploadId_ pBody_ =
+    UploadMultipartPart'
+    { _umpChecksum = Nothing
+    , _umpRange = Nothing
+    , _umpAccountId = pAccountId_
+    , _umpVaultName = pVaultName_
+    , _umpUploadId = pUploadId_
+    , _umpBody = pBody_
     }
 
--- | The 'AccountId' value is the AWS account ID of the account that owns the vault.
--- You can either specify an AWS account ID or optionally a single apos'-'apos
--- (hyphen), in which case Amazon Glacier uses the AWS account ID associated
--- with the credentials used to sign the request. If you use an account ID, do
--- not include any hyphens (apos-apos) in the ID.
-umpAccountId :: Lens' UploadMultipartPart Text
-umpAccountId = lens _umpAccountId (\s a -> s { _umpAccountId = a })
-
--- | The data to upload.
-umpBody :: Lens' UploadMultipartPart RqBody
-umpBody = lens _umpBody (\s a -> s { _umpBody = a })
-
 -- | The SHA256 tree hash of the data being uploaded.
 umpChecksum :: Lens' UploadMultipartPart (Maybe Text)
-umpChecksum = lens _umpChecksum (\s a -> s { _umpChecksum = a })
+umpChecksum = lens _umpChecksum (\ s a -> s{_umpChecksum = a});
 
--- | Identifies the range of bytes in the assembled archive that will be uploaded
--- in this part. Amazon Glacier uses this information to assemble the archive in
--- the proper sequence. The format of this header follows RFC 2616. An example
--- header is Content-Range:bytes 0-4194303/*.
+-- | Identifies the range of bytes in the assembled archive that will be
+-- uploaded in this part. Amazon Glacier uses this information to assemble
+-- the archive in the proper sequence. The format of this header follows
+-- RFC 2616. An example header is Content-Range:bytes 0-4194303\/*.
 umpRange :: Lens' UploadMultipartPart (Maybe Text)
-umpRange = lens _umpRange (\s a -> s { _umpRange = a })
+umpRange = lens _umpRange (\ s a -> s{_umpRange = a});
 
--- | The upload ID of the multipart upload.
-umpUploadId :: Lens' UploadMultipartPart Text
-umpUploadId = lens _umpUploadId (\s a -> s { _umpUploadId = a })
+-- | The 'AccountId' value is the AWS account ID of the account that owns the
+-- vault. You can either specify an AWS account ID or optionally a single
+-- apos'-'apos (hyphen), in which case Amazon Glacier uses the AWS account
+-- ID associated with the credentials used to sign the request. If you use
+-- an account ID, do not include any hyphens (apos-apos) in the ID.
+umpAccountId :: Lens' UploadMultipartPart Text
+umpAccountId = lens _umpAccountId (\ s a -> s{_umpAccountId = a});
 
 -- | The name of the vault.
 umpVaultName :: Lens' UploadMultipartPart Text
-umpVaultName = lens _umpVaultName (\s a -> s { _umpVaultName = a })
+umpVaultName = lens _umpVaultName (\ s a -> s{_umpVaultName = a});
 
-newtype UploadMultipartPartResponse = UploadMultipartPartResponse
-    { _umprChecksum :: Maybe Text
-    } deriving (Eq, Ord, Read, Show, Monoid)
+-- | The upload ID of the multipart upload.
+umpUploadId :: Lens' UploadMultipartPart Text
+umpUploadId = lens _umpUploadId (\ s a -> s{_umpUploadId = a});
 
--- | 'UploadMultipartPartResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'umprChecksum' @::@ 'Maybe' 'Text'
---
-uploadMultipartPartResponse :: UploadMultipartPartResponse
-uploadMultipartPartResponse = UploadMultipartPartResponse
-    { _umprChecksum = Nothing
-    }
+-- | The data to upload.
+umpBody :: Lens' UploadMultipartPart RqBody
+umpBody = lens _umpBody (\ s a -> s{_umpBody = a});
 
--- | The SHA256 tree hash that Amazon Glacier computed for the uploaded part.
-umprChecksum :: Lens' UploadMultipartPartResponse (Maybe Text)
-umprChecksum = lens _umprChecksum (\s a -> s { _umprChecksum = a })
+instance AWSRequest UploadMultipartPart where
+        type Sv UploadMultipartPart = Glacier
+        type Rs UploadMultipartPart =
+             UploadMultipartPartResponse
+        request = putBody
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 UploadMultipartPartResponse' <$>
+                   (h .#? "x-amz-sha256-tree-hash") <*>
+                     (pure (fromEnum s)))
 
+instance ToBody UploadMultipartPart where
+        toBody = _umpBody
+
+instance ToHeaders UploadMultipartPart where
+        toHeaders UploadMultipartPart'{..}
+          = mconcat
+              ["x-amz-sha256-tree-hash" =# _umpChecksum,
+               "Content-Range" =# _umpRange]
+
 instance ToPath UploadMultipartPart where
-    toPath UploadMultipartPart{..} = mconcat
-        [ "/"
-        , toText _umpAccountId
-        , "/vaults/"
-        , toText _umpVaultName
-        , "/multipart-uploads/"
-        , toText _umpUploadId
-        ]
+        toPath UploadMultipartPart'{..}
+          = mconcat
+              ["/", toBS _umpAccountId, "/vaults/",
+               toBS _umpVaultName, "/multipart-uploads/",
+               toBS _umpUploadId]
 
 instance ToQuery UploadMultipartPart where
-    toQuery = const mempty
+        toQuery = const mempty
 
-instance ToHeaders UploadMultipartPart where
-    toHeaders UploadMultipartPart{..} = mconcat
-        [ "x-amz-sha256-tree-hash" =: _umpChecksum
-        , "Content-Range"          =: _umpRange
-        ]
+-- | Contains the Amazon Glacier response to your request.
+--
+-- /See:/ 'uploadMultipartPartResponse' smart constructor.
+data UploadMultipartPartResponse = UploadMultipartPartResponse'
+    { _umprsChecksum :: !(Maybe Text)
+    , _umprsStatus   :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance ToBody UploadMultipartPart where
-    toBody = toBody . _umpBody
+-- | Creates a value of 'UploadMultipartPartResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'umprsChecksum'
+--
+-- * 'umprsStatus'
+uploadMultipartPartResponse
+    :: Int -- ^ 'umprsStatus'
+    -> UploadMultipartPartResponse
+uploadMultipartPartResponse pStatus_ =
+    UploadMultipartPartResponse'
+    { _umprsChecksum = Nothing
+    , _umprsStatus = pStatus_
+    }
 
-instance AWSRequest UploadMultipartPart where
-    type Sv UploadMultipartPart = Glacier
-    type Rs UploadMultipartPart = UploadMultipartPartResponse
+-- | The SHA256 tree hash that Amazon Glacier computed for the uploaded part.
+umprsChecksum :: Lens' UploadMultipartPartResponse (Maybe Text)
+umprsChecksum = lens _umprsChecksum (\ s a -> s{_umprsChecksum = a});
 
-    request  = stream PUT
-    response = headerResponse $ \h -> UploadMultipartPartResponse
-        <$> h ~:? "x-amz-sha256-tree-hash"
+-- | The response status code.
+umprsStatus :: Lens' UploadMultipartPartResponse Int
+umprsStatus = lens _umprsStatus (\ s a -> s{_umprsStatus = a});
diff --git a/gen/Network/AWS/Glacier/Waiters.hs b/gen/Network/AWS/Glacier/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glacier/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.Glacier.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.Glacier.Waiters where
+
+import           Network.AWS.Glacier.Types
+import           Network.AWS.Prelude
+import           Network.AWS.Waiter
diff --git a/test/Main.hs b/test/Main.hs
new file mode 100644
--- /dev/null
+++ b/test/Main.hs
@@ -0,0 +1,21 @@
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Main
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Main (main) where
+
+import Test.Tasty
+import Test.AWS.Glacier
+import Test.AWS.Glacier.Internal
+
+main :: IO ()
+main = defaultMain $ testGroup "Glacier"
+    [ testGroup "tests"    tests
+    , testGroup "fixtures" fixtures
+    ]
diff --git a/test/Test/AWS/Gen/Glacier.hs b/test/Test/AWS/Gen/Glacier.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/Gen/Glacier.hs
@@ -0,0 +1,550 @@
+{-# 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.Glacier
+-- 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.Glacier where
+
+import Data.Proxy
+import Test.AWS.Fixture
+import Test.AWS.Prelude
+import Test.Tasty
+import Network.AWS.Glacier
+import Test.AWS.Glacier.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"
+--         [ testSetVaultAccessPolicy $
+--             setVaultAccessPolicy
+--
+--         , testInitiateJob $
+--             initiateJob
+--
+--         , testSetDataRetrievalPolicy $
+--             setDataRetrievalPolicy
+--
+--         , testDeleteVaultAccessPolicy $
+--             deleteVaultAccessPolicy
+--
+--         , testListTagsForVault $
+--             listTagsForVault
+--
+--         , testGetVaultNotifications $
+--             getVaultNotifications
+--
+--         , testUploadMultipartPart $
+--             uploadMultipartPart
+--
+--         , testDeleteVaultNotifications $
+--             deleteVaultNotifications
+--
+--         , testCompleteVaultLock $
+--             completeVaultLock
+--
+--         , testAbortVaultLock $
+--             abortVaultLock
+--
+--         , testListVaults $
+--             listVaults
+--
+--         , testGetJobOutput $
+--             getJobOutput
+--
+--         , testListJobs $
+--             listJobs
+--
+--         , testSetVaultNotifications $
+--             setVaultNotifications
+--
+--         , testCompleteMultipartUpload $
+--             completeMultipartUpload
+--
+--         , testListMultipartUploads $
+--             listMultipartUploads
+--
+--         , testDescribeVault $
+--             describeVault
+--
+--         , testAbortMultipartUpload $
+--             abortMultipartUpload
+--
+--         , testGetVaultLock $
+--             getVaultLock
+--
+--         , testDescribeJob $
+--             describeJob
+--
+--         , testInitiateVaultLock $
+--             initiateVaultLock
+--
+--         , testGetVaultAccessPolicy $
+--             getVaultAccessPolicy
+--
+--         , testGetDataRetrievalPolicy $
+--             getDataRetrievalPolicy
+--
+--         , testRemoveTagsFromVault $
+--             removeTagsFromVault
+--
+--         , testDeleteArchive $
+--             deleteArchive
+--
+--         , testDeleteVault $
+--             deleteVault
+--
+--         , testInitiateMultipartUpload $
+--             initiateMultipartUpload
+--
+--         , testListParts $
+--             listParts
+--
+--         , testCreateVault $
+--             createVault
+--
+--         , testAddTagsToVault $
+--             addTagsToVault
+--
+--         , testUploadArchive $
+--             uploadArchive
+--
+--           ]
+
+--     , testGroup "response"
+--         [ testSetVaultAccessPolicyResponse $
+--             setVaultAccessPolicyResponse
+--
+--         , testInitiateJobResponse $
+--             initiateJobResponse
+--
+--         , testSetDataRetrievalPolicyResponse $
+--             setDataRetrievalPolicyResponse
+--
+--         , testDeleteVaultAccessPolicyResponse $
+--             deleteVaultAccessPolicyResponse
+--
+--         , testListTagsForVaultResponse $
+--             listTagsForVaultResponse
+--
+--         , testGetVaultNotificationsResponse $
+--             getVaultNotificationsResponse
+--
+--         , testUploadMultipartPartResponse $
+--             uploadMultipartPartResponse
+--
+--         , testDeleteVaultNotificationsResponse $
+--             deleteVaultNotificationsResponse
+--
+--         , testCompleteVaultLockResponse $
+--             completeVaultLockResponse
+--
+--         , testAbortVaultLockResponse $
+--             abortVaultLockResponse
+--
+--         , testListVaultsResponse $
+--             listVaultsResponse
+--
+--         , testGetJobOutputResponse $
+--             getJobOutputResponse
+--
+--         , testListJobsResponse $
+--             listJobsResponse
+--
+--         , testSetVaultNotificationsResponse $
+--             setVaultNotificationsResponse
+--
+--         , testCompleteMultipartUploadResponse $
+--             archiveCreationOutput
+--
+--         , testListMultipartUploadsResponse $
+--             listMultipartUploadsResponse
+--
+--         , testDescribeVaultResponse $
+--             describeVaultOutput
+--
+--         , testAbortMultipartUploadResponse $
+--             abortMultipartUploadResponse
+--
+--         , testGetVaultLockResponse $
+--             getVaultLockResponse
+--
+--         , testDescribeJobResponse $
+--             glacierJobDescription
+--
+--         , testInitiateVaultLockResponse $
+--             initiateVaultLockResponse
+--
+--         , testGetVaultAccessPolicyResponse $
+--             getVaultAccessPolicyResponse
+--
+--         , testGetDataRetrievalPolicyResponse $
+--             getDataRetrievalPolicyResponse
+--
+--         , testRemoveTagsFromVaultResponse $
+--             removeTagsFromVaultResponse
+--
+--         , testDeleteArchiveResponse $
+--             deleteArchiveResponse
+--
+--         , testDeleteVaultResponse $
+--             deleteVaultResponse
+--
+--         , testInitiateMultipartUploadResponse $
+--             initiateMultipartUploadResponse
+--
+--         , testListPartsResponse $
+--             listPartsResponse
+--
+--         , testCreateVaultResponse $
+--             createVaultResponse
+--
+--         , testAddTagsToVaultResponse $
+--             addTagsToVaultResponse
+--
+--         , testUploadArchiveResponse $
+--             archiveCreationOutput
+--
+--           ]
+--     ]
+
+-- Requests
+
+testSetVaultAccessPolicy :: SetVaultAccessPolicy -> TestTree
+testSetVaultAccessPolicy = req
+    "SetVaultAccessPolicy"
+    "fixture/SetVaultAccessPolicy"
+
+testInitiateJob :: InitiateJob -> TestTree
+testInitiateJob = req
+    "InitiateJob"
+    "fixture/InitiateJob"
+
+testSetDataRetrievalPolicy :: SetDataRetrievalPolicy -> TestTree
+testSetDataRetrievalPolicy = req
+    "SetDataRetrievalPolicy"
+    "fixture/SetDataRetrievalPolicy"
+
+testDeleteVaultAccessPolicy :: DeleteVaultAccessPolicy -> TestTree
+testDeleteVaultAccessPolicy = req
+    "DeleteVaultAccessPolicy"
+    "fixture/DeleteVaultAccessPolicy"
+
+testListTagsForVault :: ListTagsForVault -> TestTree
+testListTagsForVault = req
+    "ListTagsForVault"
+    "fixture/ListTagsForVault"
+
+testGetVaultNotifications :: GetVaultNotifications -> TestTree
+testGetVaultNotifications = req
+    "GetVaultNotifications"
+    "fixture/GetVaultNotifications"
+
+testDeleteVaultNotifications :: DeleteVaultNotifications -> TestTree
+testDeleteVaultNotifications = req
+    "DeleteVaultNotifications"
+    "fixture/DeleteVaultNotifications"
+
+testCompleteVaultLock :: CompleteVaultLock -> TestTree
+testCompleteVaultLock = req
+    "CompleteVaultLock"
+    "fixture/CompleteVaultLock"
+
+testAbortVaultLock :: AbortVaultLock -> TestTree
+testAbortVaultLock = req
+    "AbortVaultLock"
+    "fixture/AbortVaultLock"
+
+testListVaults :: ListVaults -> TestTree
+testListVaults = req
+    "ListVaults"
+    "fixture/ListVaults"
+
+testGetJobOutput :: GetJobOutput -> TestTree
+testGetJobOutput = req
+    "GetJobOutput"
+    "fixture/GetJobOutput"
+
+testListJobs :: ListJobs -> TestTree
+testListJobs = req
+    "ListJobs"
+    "fixture/ListJobs"
+
+testSetVaultNotifications :: SetVaultNotifications -> TestTree
+testSetVaultNotifications = req
+    "SetVaultNotifications"
+    "fixture/SetVaultNotifications"
+
+testCompleteMultipartUpload :: CompleteMultipartUpload -> TestTree
+testCompleteMultipartUpload = req
+    "CompleteMultipartUpload"
+    "fixture/CompleteMultipartUpload"
+
+testListMultipartUploads :: ListMultipartUploads -> TestTree
+testListMultipartUploads = req
+    "ListMultipartUploads"
+    "fixture/ListMultipartUploads"
+
+testDescribeVault :: DescribeVault -> TestTree
+testDescribeVault = req
+    "DescribeVault"
+    "fixture/DescribeVault"
+
+testAbortMultipartUpload :: AbortMultipartUpload -> TestTree
+testAbortMultipartUpload = req
+    "AbortMultipartUpload"
+    "fixture/AbortMultipartUpload"
+
+testGetVaultLock :: GetVaultLock -> TestTree
+testGetVaultLock = req
+    "GetVaultLock"
+    "fixture/GetVaultLock"
+
+testDescribeJob :: DescribeJob -> TestTree
+testDescribeJob = req
+    "DescribeJob"
+    "fixture/DescribeJob"
+
+testInitiateVaultLock :: InitiateVaultLock -> TestTree
+testInitiateVaultLock = req
+    "InitiateVaultLock"
+    "fixture/InitiateVaultLock"
+
+testGetVaultAccessPolicy :: GetVaultAccessPolicy -> TestTree
+testGetVaultAccessPolicy = req
+    "GetVaultAccessPolicy"
+    "fixture/GetVaultAccessPolicy"
+
+testGetDataRetrievalPolicy :: GetDataRetrievalPolicy -> TestTree
+testGetDataRetrievalPolicy = req
+    "GetDataRetrievalPolicy"
+    "fixture/GetDataRetrievalPolicy"
+
+testRemoveTagsFromVault :: RemoveTagsFromVault -> TestTree
+testRemoveTagsFromVault = req
+    "RemoveTagsFromVault"
+    "fixture/RemoveTagsFromVault"
+
+testDeleteArchive :: DeleteArchive -> TestTree
+testDeleteArchive = req
+    "DeleteArchive"
+    "fixture/DeleteArchive"
+
+testDeleteVault :: DeleteVault -> TestTree
+testDeleteVault = req
+    "DeleteVault"
+    "fixture/DeleteVault"
+
+testInitiateMultipartUpload :: InitiateMultipartUpload -> TestTree
+testInitiateMultipartUpload = req
+    "InitiateMultipartUpload"
+    "fixture/InitiateMultipartUpload"
+
+testListParts :: ListParts -> TestTree
+testListParts = req
+    "ListParts"
+    "fixture/ListParts"
+
+testCreateVault :: CreateVault -> TestTree
+testCreateVault = req
+    "CreateVault"
+    "fixture/CreateVault"
+
+testAddTagsToVault :: AddTagsToVault -> TestTree
+testAddTagsToVault = req
+    "AddTagsToVault"
+    "fixture/AddTagsToVault"
+
+-- Responses
+
+testSetVaultAccessPolicyResponse :: SetVaultAccessPolicyResponse -> TestTree
+testSetVaultAccessPolicyResponse = res
+    "SetVaultAccessPolicyResponse"
+    "fixture/SetVaultAccessPolicyResponse"
+    (Proxy :: Proxy SetVaultAccessPolicy)
+
+testInitiateJobResponse :: InitiateJobResponse -> TestTree
+testInitiateJobResponse = res
+    "InitiateJobResponse"
+    "fixture/InitiateJobResponse"
+    (Proxy :: Proxy InitiateJob)
+
+testSetDataRetrievalPolicyResponse :: SetDataRetrievalPolicyResponse -> TestTree
+testSetDataRetrievalPolicyResponse = res
+    "SetDataRetrievalPolicyResponse"
+    "fixture/SetDataRetrievalPolicyResponse"
+    (Proxy :: Proxy SetDataRetrievalPolicy)
+
+testDeleteVaultAccessPolicyResponse :: DeleteVaultAccessPolicyResponse -> TestTree
+testDeleteVaultAccessPolicyResponse = res
+    "DeleteVaultAccessPolicyResponse"
+    "fixture/DeleteVaultAccessPolicyResponse"
+    (Proxy :: Proxy DeleteVaultAccessPolicy)
+
+testListTagsForVaultResponse :: ListTagsForVaultResponse -> TestTree
+testListTagsForVaultResponse = res
+    "ListTagsForVaultResponse"
+    "fixture/ListTagsForVaultResponse"
+    (Proxy :: Proxy ListTagsForVault)
+
+testGetVaultNotificationsResponse :: GetVaultNotificationsResponse -> TestTree
+testGetVaultNotificationsResponse = res
+    "GetVaultNotificationsResponse"
+    "fixture/GetVaultNotificationsResponse"
+    (Proxy :: Proxy GetVaultNotifications)
+
+testUploadMultipartPartResponse :: UploadMultipartPartResponse -> TestTree
+testUploadMultipartPartResponse = res
+    "UploadMultipartPartResponse"
+    "fixture/UploadMultipartPartResponse"
+    (Proxy :: Proxy UploadMultipartPart)
+
+testDeleteVaultNotificationsResponse :: DeleteVaultNotificationsResponse -> TestTree
+testDeleteVaultNotificationsResponse = res
+    "DeleteVaultNotificationsResponse"
+    "fixture/DeleteVaultNotificationsResponse"
+    (Proxy :: Proxy DeleteVaultNotifications)
+
+testCompleteVaultLockResponse :: CompleteVaultLockResponse -> TestTree
+testCompleteVaultLockResponse = res
+    "CompleteVaultLockResponse"
+    "fixture/CompleteVaultLockResponse"
+    (Proxy :: Proxy CompleteVaultLock)
+
+testAbortVaultLockResponse :: AbortVaultLockResponse -> TestTree
+testAbortVaultLockResponse = res
+    "AbortVaultLockResponse"
+    "fixture/AbortVaultLockResponse"
+    (Proxy :: Proxy AbortVaultLock)
+
+testListVaultsResponse :: ListVaultsResponse -> TestTree
+testListVaultsResponse = res
+    "ListVaultsResponse"
+    "fixture/ListVaultsResponse"
+    (Proxy :: Proxy ListVaults)
+
+testListJobsResponse :: ListJobsResponse -> TestTree
+testListJobsResponse = res
+    "ListJobsResponse"
+    "fixture/ListJobsResponse"
+    (Proxy :: Proxy ListJobs)
+
+testSetVaultNotificationsResponse :: SetVaultNotificationsResponse -> TestTree
+testSetVaultNotificationsResponse = res
+    "SetVaultNotificationsResponse"
+    "fixture/SetVaultNotificationsResponse"
+    (Proxy :: Proxy SetVaultNotifications)
+
+testCompleteMultipartUploadResponse :: ArchiveCreationOutput -> TestTree
+testCompleteMultipartUploadResponse = res
+    "CompleteMultipartUploadResponse"
+    "fixture/CompleteMultipartUploadResponse"
+    (Proxy :: Proxy CompleteMultipartUpload)
+
+testListMultipartUploadsResponse :: ListMultipartUploadsResponse -> TestTree
+testListMultipartUploadsResponse = res
+    "ListMultipartUploadsResponse"
+    "fixture/ListMultipartUploadsResponse"
+    (Proxy :: Proxy ListMultipartUploads)
+
+testDescribeVaultResponse :: DescribeVaultOutput -> TestTree
+testDescribeVaultResponse = res
+    "DescribeVaultResponse"
+    "fixture/DescribeVaultResponse"
+    (Proxy :: Proxy DescribeVault)
+
+testAbortMultipartUploadResponse :: AbortMultipartUploadResponse -> TestTree
+testAbortMultipartUploadResponse = res
+    "AbortMultipartUploadResponse"
+    "fixture/AbortMultipartUploadResponse"
+    (Proxy :: Proxy AbortMultipartUpload)
+
+testGetVaultLockResponse :: GetVaultLockResponse -> TestTree
+testGetVaultLockResponse = res
+    "GetVaultLockResponse"
+    "fixture/GetVaultLockResponse"
+    (Proxy :: Proxy GetVaultLock)
+
+testDescribeJobResponse :: GlacierJobDescription -> TestTree
+testDescribeJobResponse = res
+    "DescribeJobResponse"
+    "fixture/DescribeJobResponse"
+    (Proxy :: Proxy DescribeJob)
+
+testInitiateVaultLockResponse :: InitiateVaultLockResponse -> TestTree
+testInitiateVaultLockResponse = res
+    "InitiateVaultLockResponse"
+    "fixture/InitiateVaultLockResponse"
+    (Proxy :: Proxy InitiateVaultLock)
+
+testGetVaultAccessPolicyResponse :: GetVaultAccessPolicyResponse -> TestTree
+testGetVaultAccessPolicyResponse = res
+    "GetVaultAccessPolicyResponse"
+    "fixture/GetVaultAccessPolicyResponse"
+    (Proxy :: Proxy GetVaultAccessPolicy)
+
+testGetDataRetrievalPolicyResponse :: GetDataRetrievalPolicyResponse -> TestTree
+testGetDataRetrievalPolicyResponse = res
+    "GetDataRetrievalPolicyResponse"
+    "fixture/GetDataRetrievalPolicyResponse"
+    (Proxy :: Proxy GetDataRetrievalPolicy)
+
+testRemoveTagsFromVaultResponse :: RemoveTagsFromVaultResponse -> TestTree
+testRemoveTagsFromVaultResponse = res
+    "RemoveTagsFromVaultResponse"
+    "fixture/RemoveTagsFromVaultResponse"
+    (Proxy :: Proxy RemoveTagsFromVault)
+
+testDeleteArchiveResponse :: DeleteArchiveResponse -> TestTree
+testDeleteArchiveResponse = res
+    "DeleteArchiveResponse"
+    "fixture/DeleteArchiveResponse"
+    (Proxy :: Proxy DeleteArchive)
+
+testDeleteVaultResponse :: DeleteVaultResponse -> TestTree
+testDeleteVaultResponse = res
+    "DeleteVaultResponse"
+    "fixture/DeleteVaultResponse"
+    (Proxy :: Proxy DeleteVault)
+
+testInitiateMultipartUploadResponse :: InitiateMultipartUploadResponse -> TestTree
+testInitiateMultipartUploadResponse = res
+    "InitiateMultipartUploadResponse"
+    "fixture/InitiateMultipartUploadResponse"
+    (Proxy :: Proxy InitiateMultipartUpload)
+
+testListPartsResponse :: ListPartsResponse -> TestTree
+testListPartsResponse = res
+    "ListPartsResponse"
+    "fixture/ListPartsResponse"
+    (Proxy :: Proxy ListParts)
+
+testCreateVaultResponse :: CreateVaultResponse -> TestTree
+testCreateVaultResponse = res
+    "CreateVaultResponse"
+    "fixture/CreateVaultResponse"
+    (Proxy :: Proxy CreateVault)
+
+testAddTagsToVaultResponse :: AddTagsToVaultResponse -> TestTree
+testAddTagsToVaultResponse = res
+    "AddTagsToVaultResponse"
+    "fixture/AddTagsToVaultResponse"
+    (Proxy :: Proxy AddTagsToVault)
+
+testUploadArchiveResponse :: ArchiveCreationOutput -> TestTree
+testUploadArchiveResponse = res
+    "UploadArchiveResponse"
+    "fixture/UploadArchiveResponse"
+    (Proxy :: Proxy UploadArchive)
diff --git a/test/Test/AWS/Glacier.hs b/test/Test/AWS/Glacier.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/Glacier.hs
@@ -0,0 +1,26 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+-- Module      : Test.AWS.Glacier
+-- 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.Glacier
+    ( tests
+    , fixtures
+    ) where
+
+import           Network.AWS.Glacier
+import           Test.AWS.Gen.Glacier
+import           Test.Tasty
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/AWS/Glacier/Internal.hs b/test/Test/AWS/Glacier/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/Glacier/Internal.hs
@@ -0,0 +1,16 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Test.AWS.Glacier.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.Glacier.Internal where
+
+import Test.AWS.Prelude
