diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,373 @@
+Mozilla Public License Version 2.0
+==================================
+
+1. Definitions
+--------------
+
+1.1. "Contributor"
+    means each individual or legal entity that creates, contributes to
+    the creation of, or owns Covered Software.
+
+1.2. "Contributor Version"
+    means the combination of the Contributions of others (if any) used
+    by a Contributor and that particular Contributor's Contribution.
+
+1.3. "Contribution"
+    means Covered Software of a particular Contributor.
+
+1.4. "Covered Software"
+    means Source Code Form to which the initial Contributor has attached
+    the notice in Exhibit A, the Executable Form of such Source Code
+    Form, and Modifications of such Source Code Form, in each case
+    including portions thereof.
+
+1.5. "Incompatible With Secondary Licenses"
+    means
+
+    (a) that the initial Contributor has attached the notice described
+        in Exhibit B to the Covered Software; or
+
+    (b) that the Covered Software was made available under the terms of
+        version 1.1 or earlier of the License, but not also under the
+        terms of a Secondary License.
+
+1.6. "Executable Form"
+    means any form of the work other than Source Code Form.
+
+1.7. "Larger Work"
+    means a work that combines Covered Software with other material, in
+    a separate file or files, that is not Covered Software.
+
+1.8. "License"
+    means this document.
+
+1.9. "Licensable"
+    means having the right to grant, to the maximum extent possible,
+    whether at the time of the initial grant or subsequently, any and
+    all of the rights conveyed by this License.
+
+1.10. "Modifications"
+    means any of the following:
+
+    (a) any file in Source Code Form that results from an addition to,
+        deletion from, or modification of the contents of Covered
+        Software; or
+
+    (b) any new file in Source Code Form that contains any Covered
+        Software.
+
+1.11. "Patent Claims" of a Contributor
+    means any patent claim(s), including without limitation, method,
+    process, and apparatus claims, in any patent Licensable by such
+    Contributor that would be infringed, but for the grant of the
+    License, by the making, using, selling, offering for sale, having
+    made, import, or transfer of either its Contributions or its
+    Contributor Version.
+
+1.12. "Secondary License"
+    means either the GNU General Public License, Version 2.0, the GNU
+    Lesser General Public License, Version 2.1, the GNU Affero General
+    Public License, Version 3.0, or any later versions of those
+    licenses.
+
+1.13. "Source Code Form"
+    means the form of the work preferred for making modifications.
+
+1.14. "You" (or "Your")
+    means an individual or a legal entity exercising rights under this
+    License. For legal entities, "You" includes any entity that
+    controls, is controlled by, or is under common control with You. For
+    purposes of this definition, "control" means (a) the power, direct
+    or indirect, to cause the direction or management of such entity,
+    whether by contract or otherwise, or (b) ownership of more than
+    fifty percent (50%) of the outstanding shares or beneficial
+    ownership of such entity.
+
+2. License Grants and Conditions
+--------------------------------
+
+2.1. Grants
+
+Each Contributor hereby grants You a world-wide, royalty-free,
+non-exclusive license:
+
+(a) under intellectual property rights (other than patent or trademark)
+    Licensable by such Contributor to use, reproduce, make available,
+    modify, display, perform, distribute, and otherwise exploit its
+    Contributions, either on an unmodified basis, with Modifications, or
+    as part of a Larger Work; and
+
+(b) under Patent Claims of such Contributor to make, use, sell, offer
+    for sale, have made, import, and otherwise transfer either its
+    Contributions or its Contributor Version.
+
+2.2. Effective Date
+
+The licenses granted in Section 2.1 with respect to any Contribution
+become effective for each Contribution on the date the Contributor first
+distributes such Contribution.
+
+2.3. Limitations on Grant Scope
+
+The licenses granted in this Section 2 are the only rights granted under
+this License. No additional rights or licenses will be implied from the
+distribution or licensing of Covered Software under this License.
+Notwithstanding Section 2.1(b) above, no patent license is granted by a
+Contributor:
+
+(a) for any code that a Contributor has removed from Covered Software;
+    or
+
+(b) for infringements caused by: (i) Your and any other third party's
+    modifications of Covered Software, or (ii) the combination of its
+    Contributions with other software (except as part of its Contributor
+    Version); or
+
+(c) under Patent Claims infringed by Covered Software in the absence of
+    its Contributions.
+
+This License does not grant any rights in the trademarks, service marks,
+or logos of any Contributor (except as may be necessary to comply with
+the notice requirements in Section 3.4).
+
+2.4. Subsequent Licenses
+
+No Contributor makes additional grants as a result of Your choice to
+distribute the Covered Software under a subsequent version of this
+License (see Section 10.2) or under the terms of a Secondary License (if
+permitted under the terms of Section 3.3).
+
+2.5. Representation
+
+Each Contributor represents that the Contributor believes its
+Contributions are its original creation(s) or it has sufficient rights
+to grant the rights to its Contributions conveyed by this License.
+
+2.6. Fair Use
+
+This License is not intended to limit any rights You have under
+applicable copyright doctrines of fair use, fair dealing, or other
+equivalents.
+
+2.7. Conditions
+
+Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
+in Section 2.1.
+
+3. Responsibilities
+-------------------
+
+3.1. Distribution of Source Form
+
+All distribution of Covered Software in Source Code Form, including any
+Modifications that You create or to which You contribute, must be under
+the terms of this License. You must inform recipients that the Source
+Code Form of the Covered Software is governed by the terms of this
+License, and how they can obtain a copy of this License. You may not
+attempt to alter or restrict the recipients' rights in the Source Code
+Form.
+
+3.2. Distribution of Executable Form
+
+If You distribute Covered Software in Executable Form then:
+
+(a) such Covered Software must also be made available in Source Code
+    Form, as described in Section 3.1, and You must inform recipients of
+    the Executable Form how they can obtain a copy of such Source Code
+    Form by reasonable means in a timely manner, at a charge no more
+    than the cost of distribution to the recipient; and
+
+(b) You may distribute such Executable Form under the terms of this
+    License, or sublicense it under different terms, provided that the
+    license for the Executable Form does not attempt to limit or alter
+    the recipients' rights in the Source Code Form under this License.
+
+3.3. Distribution of a Larger Work
+
+You may create and distribute a Larger Work under terms of Your choice,
+provided that You also comply with the requirements of this License for
+the Covered Software. If the Larger Work is a combination of Covered
+Software with a work governed by one or more Secondary Licenses, and the
+Covered Software is not Incompatible With Secondary Licenses, this
+License permits You to additionally distribute such Covered Software
+under the terms of such Secondary License(s), so that the recipient of
+the Larger Work may, at their option, further distribute the Covered
+Software under the terms of either this License or such Secondary
+License(s).
+
+3.4. Notices
+
+You may not remove or alter the substance of any license notices
+(including copyright notices, patent notices, disclaimers of warranty,
+or limitations of liability) contained within the Source Code Form of
+the Covered Software, except that You may alter any license notices to
+the extent required to remedy known factual inaccuracies.
+
+3.5. Application of Additional Terms
+
+You may choose to offer, and to charge a fee for, warranty, support,
+indemnity or liability obligations to one or more recipients of Covered
+Software. However, You may do so only on Your own behalf, and not on
+behalf of any Contributor. You must make it absolutely clear that any
+such warranty, support, indemnity, or liability obligation is offered by
+You alone, and You hereby agree to indemnify every Contributor for any
+liability incurred by such Contributor as a result of warranty, support,
+indemnity or liability terms You offer. You may include additional
+disclaimers of warranty and limitations of liability specific to any
+jurisdiction.
+
+4. Inability to Comply Due to Statute or Regulation
+---------------------------------------------------
+
+If it is impossible for You to comply with any of the terms of this
+License with respect to some or all of the Covered Software due to
+statute, judicial order, or regulation then You must: (a) comply with
+the terms of this License to the maximum extent possible; and (b)
+describe the limitations and the code they affect. Such description must
+be placed in a text file included with all distributions of the Covered
+Software under this License. Except to the extent prohibited by statute
+or regulation, such description must be sufficiently detailed for a
+recipient of ordinary skill to be able to understand it.
+
+5. Termination
+--------------
+
+5.1. The rights granted under this License will terminate automatically
+if You fail to comply with any of its terms. However, if You become
+compliant, then the rights granted under this License from a particular
+Contributor are reinstated (a) provisionally, unless and until such
+Contributor explicitly and finally terminates Your grants, and (b) on an
+ongoing basis, if such Contributor fails to notify You of the
+non-compliance by some reasonable means prior to 60 days after You have
+come back into compliance. Moreover, Your grants from a particular
+Contributor are reinstated on an ongoing basis if such Contributor
+notifies You of the non-compliance by some reasonable means, this is the
+first time You have received notice of non-compliance with this License
+from such Contributor, and You become compliant prior to 30 days after
+Your receipt of the notice.
+
+5.2. If You initiate litigation against any entity by asserting a patent
+infringement claim (excluding declaratory judgment actions,
+counter-claims, and cross-claims) alleging that a Contributor Version
+directly or indirectly infringes any patent, then the rights granted to
+You by any and all Contributors for the Covered Software under Section
+2.1 of this License shall terminate.
+
+5.3. In the event of termination under Sections 5.1 or 5.2 above, all
+end user license agreements (excluding distributors and resellers) which
+have been validly granted by You or Your distributors under this License
+prior to termination shall survive termination.
+
+************************************************************************
+*                                                                      *
+*  6. Disclaimer of Warranty                                           *
+*  -------------------------                                           *
+*                                                                      *
+*  Covered Software is provided under this License on an "as is"       *
+*  basis, without warranty of any kind, either expressed, implied, or  *
+*  statutory, including, without limitation, warranties that the       *
+*  Covered Software is free of defects, merchantable, fit for a        *
+*  particular purpose or non-infringing. The entire risk as to the     *
+*  quality and performance of the Covered Software is with You.        *
+*  Should any Covered Software prove defective in any respect, You     *
+*  (not any Contributor) assume the cost of any necessary servicing,   *
+*  repair, or correction. This disclaimer of warranty constitutes an   *
+*  essential part of this License. No use of any Covered Software is   *
+*  authorized under this License except under this disclaimer.         *
+*                                                                      *
+************************************************************************
+
+************************************************************************
+*                                                                      *
+*  7. Limitation of Liability                                          *
+*  --------------------------                                          *
+*                                                                      *
+*  Under no circumstances and under no legal theory, whether tort      *
+*  (including negligence), contract, or otherwise, shall any           *
+*  Contributor, or anyone who distributes Covered Software as          *
+*  permitted above, be liable to You for any direct, indirect,         *
+*  special, incidental, or consequential damages of any character      *
+*  including, without limitation, damages for lost profits, loss of    *
+*  goodwill, work stoppage, computer failure or malfunction, or any    *
+*  and all other commercial damages or losses, even if such party      *
+*  shall have been informed of the possibility of such damages. This   *
+*  limitation of liability shall not apply to liability for death or   *
+*  personal injury resulting from such party's negligence to the       *
+*  extent applicable law prohibits such limitation. Some               *
+*  jurisdictions do not allow the exclusion or limitation of           *
+*  incidental or consequential damages, so this exclusion and          *
+*  limitation may not apply to You.                                    *
+*                                                                      *
+************************************************************************
+
+8. Litigation
+-------------
+
+Any litigation relating to this License may be brought only in the
+courts of a jurisdiction where the defendant maintains its principal
+place of business and such litigation shall be governed by laws of that
+jurisdiction, without reference to its conflict-of-law provisions.
+Nothing in this Section shall prevent a party's ability to bring
+cross-claims or counter-claims.
+
+9. Miscellaneous
+----------------
+
+This License represents the complete agreement concerning the subject
+matter hereof. If any provision of this License is held to be
+unenforceable, such provision shall be reformed only to the extent
+necessary to make it enforceable. Any law or regulation which provides
+that the language of a contract shall be construed against the drafter
+shall not be used to construe this License against a Contributor.
+
+10. Versions of the License
+---------------------------
+
+10.1. New Versions
+
+Mozilla Foundation is the license steward. Except as provided in Section
+10.3, no one other than the license steward has the right to modify or
+publish new versions of this License. Each version will be given a
+distinguishing version number.
+
+10.2. Effect of New Versions
+
+You may distribute the Covered Software under the terms of the version
+of the License under which You originally received the Covered Software,
+or under the terms of any subsequent version published by the license
+steward.
+
+10.3. Modified Versions
+
+If you create software not governed by this License, and you want to
+create a new license for such software, you may create and use a
+modified version of this License if you rename the license and remove
+any references to the name of the license steward (except to note that
+such modified license differs from this License).
+
+10.4. Distributing Source Code Form that is Incompatible With Secondary
+Licenses
+
+If You choose to distribute Source Code Form that is Incompatible With
+Secondary Licenses under the terms of this version of the License, the
+notice described in Exhibit B of this License must be attached.
+
+Exhibit A - Source Code Form License Notice
+-------------------------------------------
+
+  This Source Code Form is subject to the terms of the Mozilla Public
+  License, v. 2.0. If a copy of the MPL was not distributed with this
+  file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+If it is not possible or desirable to put the notice in a particular
+file, then You may include the notice in a location (such as a LICENSE
+file in a relevant directory) where a recipient would be likely to look
+for such a notice.
+
+You may add additional accurate notices of copyright ownership.
+
+Exhibit B - "Incompatible With Secondary Licenses" Notice
+---------------------------------------------------------
+
+  This Source Code Form is "Incompatible With Secondary Licenses", as
+  defined by the Mozilla Public License, v. 2.0.
diff --git a/README.md b/README.md
new file mode 100644
--- /dev/null
+++ b/README.md
@@ -0,0 +1,32 @@
+# Amazon CloudHSM SDK
+
+> _Warning:_ This is an experimental preview release which is still under heavy development and not intended for public consumption, _caveat emptor_!
+
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+## Description
+
+The AWS CloudHSM service helps you meet corporate, contractual and regulatory
+compliance requirements for data security by using dedicated Hardware
+Security Module (HSM) appliances within the AWS cloud. With CloudHSM, you
+control the encryption keys and cryptographic operations performed by the HSM.
+
+Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-cloudhsm)
+and the [AWS API Reference](http://docs.aws.amazon.com/cloudhsm/latest/dg/welcome.html).
+
+
+## Contribute
+
+For any problems, comments, or feedback please create an issue [here on GitHub](https://github.com/brendanhay/amazonka/issues).
+
+> _Note:_ this library is an auto-generated Haskell package. Please see `amazonka-gen` for more information.
+
+
+## Licence
+
+`amazonka-cloudhsm` is released under the [Mozilla Public License Version 2.0](http://www.mozilla.org/MPL/).
+
+Parts of the code are derived from AWS service descriptions, licensed under Apache 2.0.
+Source files subject to this contain an additional licensing clause in their header.
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,2 @@
+import Distribution.Simple
+main = defaultMain
diff --git a/amazonka-cloudhsm.cabal b/amazonka-cloudhsm.cabal
new file mode 100644
--- /dev/null
+++ b/amazonka-cloudhsm.cabal
@@ -0,0 +1,62 @@
+name:                  amazonka-cloudhsm
+version:               0.2.1
+synopsis:              Amazon CloudHSM 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
+category:              Network, AWS, Cloud, Distributed Computing
+build-type:            Simple
+extra-source-files:    README.md
+cabal-version:         >= 1.10
+
+description:
+    The AWS CloudHSM service helps you meet corporate, contractual and regulatory
+    compliance requirements for data security by using dedicated Hardware
+    Security Module (HSM) appliances within the AWS cloud. With CloudHSM, you
+    control the encryption keys and cryptographic operations performed by the HSM.
+
+    .
+    /See:/ <http://docs.aws.amazon.com/cloudhsm/latest/dg/welcome.html AWS API Reference>
+    .
+    /Warning:/ This is an experimental preview release which is still under
+    heavy development and not intended for public consumption, caveat emptor!
+
+source-repository head
+    type:     git
+    location: git://github.com/brendanhay/amazonka.git
+
+library
+    default-language:  Haskell2010
+    hs-source-dirs:    src gen
+
+    ghc-options:       -Wall
+
+    exposed-modules:
+          Network.AWS.CloudHSM
+        , Network.AWS.CloudHSM.CreateHapg
+        , Network.AWS.CloudHSM.CreateHsm
+        , Network.AWS.CloudHSM.CreateLunaClient
+        , Network.AWS.CloudHSM.DeleteHapg
+        , Network.AWS.CloudHSM.DeleteHsm
+        , Network.AWS.CloudHSM.DeleteLunaClient
+        , Network.AWS.CloudHSM.DescribeHapg
+        , Network.AWS.CloudHSM.DescribeHsm
+        , Network.AWS.CloudHSM.DescribeLunaClient
+        , Network.AWS.CloudHSM.GetConfig
+        , Network.AWS.CloudHSM.ListAvailableZones
+        , Network.AWS.CloudHSM.ListHapgs
+        , Network.AWS.CloudHSM.ListHsms
+        , Network.AWS.CloudHSM.ListLunaClients
+        , Network.AWS.CloudHSM.ModifyHapg
+        , Network.AWS.CloudHSM.ModifyHsm
+        , Network.AWS.CloudHSM.ModifyLunaClient
+        , Network.AWS.CloudHSM.Types
+
+    other-modules:
+
+    build-depends:
+          amazonka-core == 0.2.1.*
+        , base          >= 4.7     && < 5
diff --git a/gen/Network/AWS/CloudHSM.hs b/gen/Network/AWS/CloudHSM.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CloudHSM.hs
@@ -0,0 +1,55 @@
+-- Module      : Network.AWS.CloudHSM
+-- 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.
+
+-- | The AWS CloudHSM service helps you meet corporate, contractual and regulatory
+-- compliance requirements for data security by using dedicated Hardware
+-- Security Module (HSM) appliances within the AWS cloud. With CloudHSM, you
+-- control the encryption keys and cryptographic operations performed by the HSM.
+module Network.AWS.CloudHSM
+    ( module Network.AWS.CloudHSM.CreateHapg
+    , module Network.AWS.CloudHSM.CreateHsm
+    , module Network.AWS.CloudHSM.CreateLunaClient
+    , module Network.AWS.CloudHSM.DeleteHapg
+    , module Network.AWS.CloudHSM.DeleteHsm
+    , module Network.AWS.CloudHSM.DeleteLunaClient
+    , module Network.AWS.CloudHSM.DescribeHapg
+    , module Network.AWS.CloudHSM.DescribeHsm
+    , module Network.AWS.CloudHSM.DescribeLunaClient
+    , module Network.AWS.CloudHSM.GetConfig
+    , module Network.AWS.CloudHSM.ListAvailableZones
+    , module Network.AWS.CloudHSM.ListHapgs
+    , module Network.AWS.CloudHSM.ListHsms
+    , module Network.AWS.CloudHSM.ListLunaClients
+    , module Network.AWS.CloudHSM.ModifyHapg
+    , module Network.AWS.CloudHSM.ModifyHsm
+    , module Network.AWS.CloudHSM.ModifyLunaClient
+    , module Network.AWS.CloudHSM.Types
+    ) where
+
+import Network.AWS.CloudHSM.CreateHapg
+import Network.AWS.CloudHSM.CreateHsm
+import Network.AWS.CloudHSM.CreateLunaClient
+import Network.AWS.CloudHSM.DeleteHapg
+import Network.AWS.CloudHSM.DeleteHsm
+import Network.AWS.CloudHSM.DeleteLunaClient
+import Network.AWS.CloudHSM.DescribeHapg
+import Network.AWS.CloudHSM.DescribeHsm
+import Network.AWS.CloudHSM.DescribeLunaClient
+import Network.AWS.CloudHSM.GetConfig
+import Network.AWS.CloudHSM.ListAvailableZones
+import Network.AWS.CloudHSM.ListHapgs
+import Network.AWS.CloudHSM.ListHsms
+import Network.AWS.CloudHSM.ListLunaClients
+import Network.AWS.CloudHSM.ModifyHapg
+import Network.AWS.CloudHSM.ModifyHsm
+import Network.AWS.CloudHSM.ModifyLunaClient
+import Network.AWS.CloudHSM.Types
diff --git a/gen/Network/AWS/CloudHSM/CreateHapg.hs b/gen/Network/AWS/CloudHSM/CreateHapg.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CloudHSM/CreateHapg.hs
@@ -0,0 +1,112 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.CloudHSM.CreateHapg
+-- 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.
+
+-- | Creates a high-availability partition group. A high-availability partition
+-- group is a group of partitions that spans multiple physical HSMs.
+--
+-- <http://docs.aws.amazon.com/cloudhsm/latest/dg/API_CreateHapg.html>
+module Network.AWS.CloudHSM.CreateHapg
+    (
+    -- * Request
+      CreateHapg
+    -- ** Request constructor
+    , createHapg
+    -- ** Request lenses
+    , chLabel
+
+    -- * Response
+    , CreateHapgResponse
+    -- ** Response constructor
+    , createHapgResponse
+    -- ** Response lenses
+    , chrHapgArn
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.JSON
+import Network.AWS.CloudHSM.Types
+import qualified GHC.Exts
+
+newtype CreateHapg = CreateHapg
+    { _chLabel :: Text
+    } deriving (Eq, Ord, Show, Monoid, IsString)
+
+-- | 'CreateHapg' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'chLabel' @::@ 'Text'
+--
+createHapg :: Text -- ^ 'chLabel'
+           -> CreateHapg
+createHapg p1 = CreateHapg
+    { _chLabel = p1
+    }
+
+-- | The label of the new high-availability partition group.
+chLabel :: Lens' CreateHapg Text
+chLabel = lens _chLabel (\s a -> s { _chLabel = a })
+
+newtype CreateHapgResponse = CreateHapgResponse
+    { _chrHapgArn :: Maybe Text
+    } deriving (Eq, Ord, Show, Monoid)
+
+-- | 'CreateHapgResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'chrHapgArn' @::@ 'Maybe' 'Text'
+--
+createHapgResponse :: CreateHapgResponse
+createHapgResponse = CreateHapgResponse
+    { _chrHapgArn = Nothing
+    }
+
+-- | The ARN of the high-availability partition group.
+chrHapgArn :: Lens' CreateHapgResponse (Maybe Text)
+chrHapgArn = lens _chrHapgArn (\s a -> s { _chrHapgArn = a })
+
+instance ToPath CreateHapg where
+    toPath = const "/"
+
+instance ToQuery CreateHapg where
+    toQuery = const mempty
+
+instance ToHeaders CreateHapg
+
+instance ToJSON CreateHapg where
+    toJSON CreateHapg{..} = object
+        [ "Label" .= _chLabel
+        ]
+
+instance AWSRequest CreateHapg where
+    type Sv CreateHapg = CloudHSM
+    type Rs CreateHapg = CreateHapgResponse
+
+    request  = post "CreateHapg"
+    response = jsonResponse
+
+instance FromJSON CreateHapgResponse where
+    parseJSON = withObject "CreateHapgResponse" $ \o -> CreateHapgResponse
+        <$> o .:? "HapgArn"
diff --git a/gen/Network/AWS/CloudHSM/CreateHsm.hs b/gen/Network/AWS/CloudHSM/CreateHsm.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CloudHSM/CreateHsm.hs
@@ -0,0 +1,188 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.CloudHSM.CreateHsm
+-- 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.
+
+-- | Creates an uninitialized HSM instance. Running this command provisions an HSM
+-- appliance and will result in charges to your AWS account for the HSM.
+--
+-- <http://docs.aws.amazon.com/cloudhsm/latest/dg/API_CreateHsm.html>
+module Network.AWS.CloudHSM.CreateHsm
+    (
+    -- * Request
+      CreateHsm
+    -- ** Request constructor
+    , createHsm
+    -- ** Request lenses
+    , chClientToken
+    , chEniIp
+    , chExternalId
+    , chIamRoleArn
+    , chSshKey
+    , chSubnetId
+    , chSubscriptionType
+    , chSyslogIp
+
+    -- * Response
+    , CreateHsmResponse
+    -- ** Response constructor
+    , createHsmResponse
+    -- ** Response lenses
+    , chrHsmArn
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.JSON
+import Network.AWS.CloudHSM.Types
+import qualified GHC.Exts
+
+data CreateHsm = CreateHsm
+    { _chClientToken      :: Maybe Text
+    , _chEniIp            :: Maybe Text
+    , _chExternalId       :: Maybe Text
+    , _chIamRoleArn       :: Text
+    , _chSshKey           :: Text
+    , _chSubnetId         :: Text
+    , _chSubscriptionType :: SubscriptionType
+    , _chSyslogIp         :: Maybe Text
+    } deriving (Eq, Show)
+
+-- | 'CreateHsm' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'chClientToken' @::@ 'Maybe' 'Text'
+--
+-- * 'chEniIp' @::@ 'Maybe' 'Text'
+--
+-- * 'chExternalId' @::@ 'Maybe' 'Text'
+--
+-- * 'chIamRoleArn' @::@ 'Text'
+--
+-- * 'chSshKey' @::@ 'Text'
+--
+-- * 'chSubnetId' @::@ 'Text'
+--
+-- * 'chSubscriptionType' @::@ 'SubscriptionType'
+--
+-- * 'chSyslogIp' @::@ 'Maybe' 'Text'
+--
+createHsm :: Text -- ^ 'chSubnetId'
+          -> Text -- ^ 'chSshKey'
+          -> Text -- ^ 'chIamRoleArn'
+          -> SubscriptionType -- ^ 'chSubscriptionType'
+          -> CreateHsm
+createHsm p1 p2 p3 p4 = CreateHsm
+    { _chSubnetId         = p1
+    , _chSshKey           = p2
+    , _chIamRoleArn       = p3
+    , _chSubscriptionType = p4
+    , _chEniIp            = Nothing
+    , _chExternalId       = Nothing
+    , _chClientToken      = Nothing
+    , _chSyslogIp         = Nothing
+    }
+
+-- | A user-defined token to ensure idempotence. Subsequent calls to this action
+-- with the same token will be ignored.
+chClientToken :: Lens' CreateHsm (Maybe Text)
+chClientToken = lens _chClientToken (\s a -> s { _chClientToken = a })
+
+-- | The IP address to assign to the HSM's ENI.
+chEniIp :: Lens' CreateHsm (Maybe Text)
+chEniIp = lens _chEniIp (\s a -> s { _chEniIp = a })
+
+-- | The external ID from IamRoleArn, if present.
+chExternalId :: Lens' CreateHsm (Maybe Text)
+chExternalId = lens _chExternalId (\s a -> s { _chExternalId = a })
+
+-- | The ARN of an IAM role to enable the AWS CloudHSM service to allocate an ENI
+-- on your behalf.
+chIamRoleArn :: Lens' CreateHsm Text
+chIamRoleArn = lens _chIamRoleArn (\s a -> s { _chIamRoleArn = a })
+
+-- | The SSH public key to install on the HSM.
+chSshKey :: Lens' CreateHsm Text
+chSshKey = lens _chSshKey (\s a -> s { _chSshKey = a })
+
+-- | The identifier of the subnet in your VPC in which to place the HSM.
+chSubnetId :: Lens' CreateHsm Text
+chSubnetId = lens _chSubnetId (\s a -> s { _chSubnetId = a })
+
+-- | The subscription type.
+chSubscriptionType :: Lens' CreateHsm SubscriptionType
+chSubscriptionType =
+    lens _chSubscriptionType (\s a -> s { _chSubscriptionType = a })
+
+-- | The IP address for the syslog monitoring server.
+chSyslogIp :: Lens' CreateHsm (Maybe Text)
+chSyslogIp = lens _chSyslogIp (\s a -> s { _chSyslogIp = a })
+
+newtype CreateHsmResponse = CreateHsmResponse
+    { _chrHsmArn :: Maybe Text
+    } deriving (Eq, Ord, Show, Monoid)
+
+-- | 'CreateHsmResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'chrHsmArn' @::@ 'Maybe' 'Text'
+--
+createHsmResponse :: CreateHsmResponse
+createHsmResponse = CreateHsmResponse
+    { _chrHsmArn = Nothing
+    }
+
+-- | The ARN of the HSM.
+chrHsmArn :: Lens' CreateHsmResponse (Maybe Text)
+chrHsmArn = lens _chrHsmArn (\s a -> s { _chrHsmArn = a })
+
+instance ToPath CreateHsm where
+    toPath = const "/"
+
+instance ToQuery CreateHsm where
+    toQuery = const mempty
+
+instance ToHeaders CreateHsm
+
+instance ToJSON CreateHsm where
+    toJSON CreateHsm{..} = object
+        [ "SubnetId"         .= _chSubnetId
+        , "SshKey"           .= _chSshKey
+        , "EniIp"            .= _chEniIp
+        , "IamRoleArn"       .= _chIamRoleArn
+        , "ExternalId"       .= _chExternalId
+        , "SubscriptionType" .= _chSubscriptionType
+        , "ClientToken"      .= _chClientToken
+        , "SyslogIp"         .= _chSyslogIp
+        ]
+
+instance AWSRequest CreateHsm where
+    type Sv CreateHsm = CloudHSM
+    type Rs CreateHsm = CreateHsmResponse
+
+    request  = post "CreateHsm"
+    response = jsonResponse
+
+instance FromJSON CreateHsmResponse where
+    parseJSON = withObject "CreateHsmResponse" $ \o -> CreateHsmResponse
+        <$> o .:? "HsmArn"
diff --git a/gen/Network/AWS/CloudHSM/CreateLunaClient.hs b/gen/Network/AWS/CloudHSM/CreateLunaClient.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CloudHSM/CreateLunaClient.hs
@@ -0,0 +1,122 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.CloudHSM.CreateLunaClient
+-- 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.
+
+-- | Creates an HSM client.
+--
+-- <http://docs.aws.amazon.com/cloudhsm/latest/dg/API_CreateLunaClient.html>
+module Network.AWS.CloudHSM.CreateLunaClient
+    (
+    -- * Request
+      CreateLunaClient
+    -- ** Request constructor
+    , createLunaClient
+    -- ** Request lenses
+    , clcCertificate
+    , clcLabel
+
+    -- * Response
+    , CreateLunaClientResponse
+    -- ** Response constructor
+    , createLunaClientResponse
+    -- ** Response lenses
+    , clcrClientArn
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.JSON
+import Network.AWS.CloudHSM.Types
+import qualified GHC.Exts
+
+data CreateLunaClient = CreateLunaClient
+    { _clcCertificate :: Text
+    , _clcLabel       :: Maybe Text
+    } deriving (Eq, Ord, Show)
+
+-- | 'CreateLunaClient' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'clcCertificate' @::@ 'Text'
+--
+-- * 'clcLabel' @::@ 'Maybe' 'Text'
+--
+createLunaClient :: Text -- ^ 'clcCertificate'
+                 -> CreateLunaClient
+createLunaClient p1 = CreateLunaClient
+    { _clcCertificate = p1
+    , _clcLabel       = Nothing
+    }
+
+-- | The contents of a Base64-Encoded X.509 v3 certificate to be installed on the
+-- HSMs used by this client.
+clcCertificate :: Lens' CreateLunaClient Text
+clcCertificate = lens _clcCertificate (\s a -> s { _clcCertificate = a })
+
+-- | The label for the client.
+clcLabel :: Lens' CreateLunaClient (Maybe Text)
+clcLabel = lens _clcLabel (\s a -> s { _clcLabel = a })
+
+newtype CreateLunaClientResponse = CreateLunaClientResponse
+    { _clcrClientArn :: Maybe Text
+    } deriving (Eq, Ord, Show, Monoid)
+
+-- | 'CreateLunaClientResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'clcrClientArn' @::@ 'Maybe' 'Text'
+--
+createLunaClientResponse :: CreateLunaClientResponse
+createLunaClientResponse = CreateLunaClientResponse
+    { _clcrClientArn = Nothing
+    }
+
+-- | The ARN of the client.
+clcrClientArn :: Lens' CreateLunaClientResponse (Maybe Text)
+clcrClientArn = lens _clcrClientArn (\s a -> s { _clcrClientArn = a })
+
+instance ToPath CreateLunaClient where
+    toPath = const "/"
+
+instance ToQuery CreateLunaClient where
+    toQuery = const mempty
+
+instance ToHeaders CreateLunaClient
+
+instance ToJSON CreateLunaClient where
+    toJSON CreateLunaClient{..} = object
+        [ "Label"       .= _clcLabel
+        , "Certificate" .= _clcCertificate
+        ]
+
+instance AWSRequest CreateLunaClient where
+    type Sv CreateLunaClient = CloudHSM
+    type Rs CreateLunaClient = CreateLunaClientResponse
+
+    request  = post "CreateLunaClient"
+    response = jsonResponse
+
+instance FromJSON CreateLunaClientResponse where
+    parseJSON = withObject "CreateLunaClientResponse" $ \o -> CreateLunaClientResponse
+        <$> o .:? "ClientArn"
diff --git a/gen/Network/AWS/CloudHSM/DeleteHapg.hs b/gen/Network/AWS/CloudHSM/DeleteHapg.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CloudHSM/DeleteHapg.hs
@@ -0,0 +1,112 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.CloudHSM.DeleteHapg
+-- 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.
+
+-- | Deletes a high-availability partition group.
+--
+-- <http://docs.aws.amazon.com/cloudhsm/latest/dg/API_DeleteHapg.html>
+module Network.AWS.CloudHSM.DeleteHapg
+    (
+    -- * Request
+      DeleteHapg
+    -- ** Request constructor
+    , deleteHapg
+    -- ** Request lenses
+    , dhHapgArn
+
+    -- * Response
+    , DeleteHapgResponse
+    -- ** Response constructor
+    , deleteHapgResponse
+    -- ** Response lenses
+    , dhrStatus
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.JSON
+import Network.AWS.CloudHSM.Types
+import qualified GHC.Exts
+
+newtype DeleteHapg = DeleteHapg
+    { _dhHapgArn :: Text
+    } deriving (Eq, Ord, Show, Monoid, IsString)
+
+-- | 'DeleteHapg' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'dhHapgArn' @::@ 'Text'
+--
+deleteHapg :: Text -- ^ 'dhHapgArn'
+           -> DeleteHapg
+deleteHapg p1 = DeleteHapg
+    { _dhHapgArn = p1
+    }
+
+-- | The ARN of the high-availability partition group to delete.
+dhHapgArn :: Lens' DeleteHapg Text
+dhHapgArn = lens _dhHapgArn (\s a -> s { _dhHapgArn = a })
+
+newtype DeleteHapgResponse = DeleteHapgResponse
+    { _dhrStatus :: Text
+    } deriving (Eq, Ord, Show, Monoid, IsString)
+
+-- | 'DeleteHapgResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'dhrStatus' @::@ 'Text'
+--
+deleteHapgResponse :: Text -- ^ 'dhrStatus'
+                   -> DeleteHapgResponse
+deleteHapgResponse p1 = DeleteHapgResponse
+    { _dhrStatus = p1
+    }
+
+-- | The status of the action.
+dhrStatus :: Lens' DeleteHapgResponse Text
+dhrStatus = lens _dhrStatus (\s a -> s { _dhrStatus = a })
+
+instance ToPath DeleteHapg where
+    toPath = const "/"
+
+instance ToQuery DeleteHapg where
+    toQuery = const mempty
+
+instance ToHeaders DeleteHapg
+
+instance ToJSON DeleteHapg where
+    toJSON DeleteHapg{..} = object
+        [ "HapgArn" .= _dhHapgArn
+        ]
+
+instance AWSRequest DeleteHapg where
+    type Sv DeleteHapg = CloudHSM
+    type Rs DeleteHapg = DeleteHapgResponse
+
+    request  = post "DeleteHapg"
+    response = jsonResponse
+
+instance FromJSON DeleteHapgResponse where
+    parseJSON = withObject "DeleteHapgResponse" $ \o -> DeleteHapgResponse
+        <$> o .:  "Status"
diff --git a/gen/Network/AWS/CloudHSM/DeleteHsm.hs b/gen/Network/AWS/CloudHSM/DeleteHsm.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CloudHSM/DeleteHsm.hs
@@ -0,0 +1,113 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.CloudHSM.DeleteHsm
+-- 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.
+
+-- | Deletes an HSM. Once complete, this operation cannot be undone and your key
+-- material cannot be recovered.
+--
+-- <http://docs.aws.amazon.com/cloudhsm/latest/dg/API_DeleteHsm.html>
+module Network.AWS.CloudHSM.DeleteHsm
+    (
+    -- * Request
+      DeleteHsm
+    -- ** Request constructor
+    , deleteHsm
+    -- ** Request lenses
+    , dhHsmArn
+
+    -- * Response
+    , DeleteHsmResponse
+    -- ** Response constructor
+    , deleteHsmResponse
+    -- ** Response lenses
+    , dhr1Status
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.JSON
+import Network.AWS.CloudHSM.Types
+import qualified GHC.Exts
+
+newtype DeleteHsm = DeleteHsm
+    { _dhHsmArn :: Text
+    } deriving (Eq, Ord, Show, Monoid, IsString)
+
+-- | 'DeleteHsm' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'dhHsmArn' @::@ 'Text'
+--
+deleteHsm :: Text -- ^ 'dhHsmArn'
+          -> DeleteHsm
+deleteHsm p1 = DeleteHsm
+    { _dhHsmArn = p1
+    }
+
+-- | The ARN of the HSM to delete.
+dhHsmArn :: Lens' DeleteHsm Text
+dhHsmArn = lens _dhHsmArn (\s a -> s { _dhHsmArn = a })
+
+newtype DeleteHsmResponse = DeleteHsmResponse
+    { _dhr1Status :: Text
+    } deriving (Eq, Ord, Show, Monoid, IsString)
+
+-- | 'DeleteHsmResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'dhr1Status' @::@ 'Text'
+--
+deleteHsmResponse :: Text -- ^ 'dhr1Status'
+                  -> DeleteHsmResponse
+deleteHsmResponse p1 = DeleteHsmResponse
+    { _dhr1Status = p1
+    }
+
+-- | The status of the action.
+dhr1Status :: Lens' DeleteHsmResponse Text
+dhr1Status = lens _dhr1Status (\s a -> s { _dhr1Status = a })
+
+instance ToPath DeleteHsm where
+    toPath = const "/"
+
+instance ToQuery DeleteHsm where
+    toQuery = const mempty
+
+instance ToHeaders DeleteHsm
+
+instance ToJSON DeleteHsm where
+    toJSON DeleteHsm{..} = object
+        [ "HsmArn" .= _dhHsmArn
+        ]
+
+instance AWSRequest DeleteHsm where
+    type Sv DeleteHsm = CloudHSM
+    type Rs DeleteHsm = DeleteHsmResponse
+
+    request  = post "DeleteHsm"
+    response = jsonResponse
+
+instance FromJSON DeleteHsmResponse where
+    parseJSON = withObject "DeleteHsmResponse" $ \o -> DeleteHsmResponse
+        <$> o .:  "Status"
diff --git a/gen/Network/AWS/CloudHSM/DeleteLunaClient.hs b/gen/Network/AWS/CloudHSM/DeleteLunaClient.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CloudHSM/DeleteLunaClient.hs
@@ -0,0 +1,112 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.CloudHSM.DeleteLunaClient
+-- 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.
+
+-- | Deletes a client.
+--
+-- <http://docs.aws.amazon.com/cloudhsm/latest/dg/API_DeleteLunaClient.html>
+module Network.AWS.CloudHSM.DeleteLunaClient
+    (
+    -- * Request
+      DeleteLunaClient
+    -- ** Request constructor
+    , deleteLunaClient
+    -- ** Request lenses
+    , dlc1ClientArn
+
+    -- * Response
+    , DeleteLunaClientResponse
+    -- ** Response constructor
+    , deleteLunaClientResponse
+    -- ** Response lenses
+    , dlcrStatus
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.JSON
+import Network.AWS.CloudHSM.Types
+import qualified GHC.Exts
+
+newtype DeleteLunaClient = DeleteLunaClient
+    { _dlc1ClientArn :: Text
+    } deriving (Eq, Ord, Show, Monoid, IsString)
+
+-- | 'DeleteLunaClient' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'dlc1ClientArn' @::@ 'Text'
+--
+deleteLunaClient :: Text -- ^ 'dlc1ClientArn'
+                 -> DeleteLunaClient
+deleteLunaClient p1 = DeleteLunaClient
+    { _dlc1ClientArn = p1
+    }
+
+-- | The ARN of the client to delete.
+dlc1ClientArn :: Lens' DeleteLunaClient Text
+dlc1ClientArn = lens _dlc1ClientArn (\s a -> s { _dlc1ClientArn = a })
+
+newtype DeleteLunaClientResponse = DeleteLunaClientResponse
+    { _dlcrStatus :: Text
+    } deriving (Eq, Ord, Show, Monoid, IsString)
+
+-- | 'DeleteLunaClientResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'dlcrStatus' @::@ 'Text'
+--
+deleteLunaClientResponse :: Text -- ^ 'dlcrStatus'
+                         -> DeleteLunaClientResponse
+deleteLunaClientResponse p1 = DeleteLunaClientResponse
+    { _dlcrStatus = p1
+    }
+
+-- | The status of the action.
+dlcrStatus :: Lens' DeleteLunaClientResponse Text
+dlcrStatus = lens _dlcrStatus (\s a -> s { _dlcrStatus = a })
+
+instance ToPath DeleteLunaClient where
+    toPath = const "/"
+
+instance ToQuery DeleteLunaClient where
+    toQuery = const mempty
+
+instance ToHeaders DeleteLunaClient
+
+instance ToJSON DeleteLunaClient where
+    toJSON DeleteLunaClient{..} = object
+        [ "ClientArn" .= _dlc1ClientArn
+        ]
+
+instance AWSRequest DeleteLunaClient where
+    type Sv DeleteLunaClient = CloudHSM
+    type Rs DeleteLunaClient = DeleteLunaClientResponse
+
+    request  = post "DeleteLunaClient"
+    response = jsonResponse
+
+instance FromJSON DeleteLunaClientResponse where
+    parseJSON = withObject "DeleteLunaClientResponse" $ \o -> DeleteLunaClientResponse
+        <$> o .:  "Status"
diff --git a/gen/Network/AWS/CloudHSM/DescribeHapg.hs b/gen/Network/AWS/CloudHSM/DescribeHapg.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CloudHSM/DescribeHapg.hs
@@ -0,0 +1,200 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.CloudHSM.DescribeHapg
+-- 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.
+
+-- | Retrieves information about a high-availability partition group.
+--
+-- <http://docs.aws.amazon.com/cloudhsm/latest/dg/API_DescribeHapg.html>
+module Network.AWS.CloudHSM.DescribeHapg
+    (
+    -- * Request
+      DescribeHapg
+    -- ** Request constructor
+    , describeHapg
+    -- ** Request lenses
+    , dh1HapgArn
+
+    -- * Response
+    , DescribeHapgResponse
+    -- ** Response constructor
+    , describeHapgResponse
+    -- ** Response lenses
+    , dhrHapgArn
+    , dhrHapgSerial
+    , dhrHsmsLastActionFailed
+    , dhrHsmsPendingDeletion
+    , dhrHsmsPendingRegistration
+    , dhrLabel
+    , dhrLastModifiedTimestamp
+    , dhrPartitionSerialList
+    , dhrState
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.JSON
+import Network.AWS.CloudHSM.Types
+import qualified GHC.Exts
+
+newtype DescribeHapg = DescribeHapg
+    { _dh1HapgArn :: Text
+    } deriving (Eq, Ord, Show, Monoid, IsString)
+
+-- | 'DescribeHapg' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'dh1HapgArn' @::@ 'Text'
+--
+describeHapg :: Text -- ^ 'dh1HapgArn'
+             -> DescribeHapg
+describeHapg p1 = DescribeHapg
+    { _dh1HapgArn = p1
+    }
+
+-- | The ARN of the high-availability partition group to describe.
+dh1HapgArn :: Lens' DescribeHapg Text
+dh1HapgArn = lens _dh1HapgArn (\s a -> s { _dh1HapgArn = a })
+
+data DescribeHapgResponse = DescribeHapgResponse
+    { _dhrHapgArn                 :: Maybe Text
+    , _dhrHapgSerial              :: Maybe Text
+    , _dhrHsmsLastActionFailed    :: List "HsmsLastActionFailed" Text
+    , _dhrHsmsPendingDeletion     :: List "HsmsPendingDeletion" Text
+    , _dhrHsmsPendingRegistration :: List "HsmsPendingRegistration" Text
+    , _dhrLabel                   :: Maybe Text
+    , _dhrLastModifiedTimestamp   :: Maybe Text
+    , _dhrPartitionSerialList     :: List "PartitionSerialList" Text
+    , _dhrState                   :: Maybe CloudHsmObjectState
+    } deriving (Eq, Show)
+
+-- | 'DescribeHapgResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'dhrHapgArn' @::@ 'Maybe' 'Text'
+--
+-- * 'dhrHapgSerial' @::@ 'Maybe' 'Text'
+--
+-- * 'dhrHsmsLastActionFailed' @::@ ['Text']
+--
+-- * 'dhrHsmsPendingDeletion' @::@ ['Text']
+--
+-- * 'dhrHsmsPendingRegistration' @::@ ['Text']
+--
+-- * 'dhrLabel' @::@ 'Maybe' 'Text'
+--
+-- * 'dhrLastModifiedTimestamp' @::@ 'Maybe' 'Text'
+--
+-- * 'dhrPartitionSerialList' @::@ ['Text']
+--
+-- * 'dhrState' @::@ 'Maybe' 'CloudHsmObjectState'
+--
+describeHapgResponse :: DescribeHapgResponse
+describeHapgResponse = DescribeHapgResponse
+    { _dhrHapgArn                 = Nothing
+    , _dhrHapgSerial              = Nothing
+    , _dhrHsmsLastActionFailed    = mempty
+    , _dhrHsmsPendingDeletion     = mempty
+    , _dhrHsmsPendingRegistration = mempty
+    , _dhrLabel                   = Nothing
+    , _dhrLastModifiedTimestamp   = Nothing
+    , _dhrPartitionSerialList     = mempty
+    , _dhrState                   = Nothing
+    }
+
+-- | The ARN of the high-availability partition group.
+dhrHapgArn :: Lens' DescribeHapgResponse (Maybe Text)
+dhrHapgArn = lens _dhrHapgArn (\s a -> s { _dhrHapgArn = a })
+
+-- | The serial number of the high-availability partition group.
+dhrHapgSerial :: Lens' DescribeHapgResponse (Maybe Text)
+dhrHapgSerial = lens _dhrHapgSerial (\s a -> s { _dhrHapgSerial = a })
+
+dhrHsmsLastActionFailed :: Lens' DescribeHapgResponse [Text]
+dhrHsmsLastActionFailed =
+    lens _dhrHsmsLastActionFailed (\s a -> s { _dhrHsmsLastActionFailed = a })
+        . _List
+
+dhrHsmsPendingDeletion :: Lens' DescribeHapgResponse [Text]
+dhrHsmsPendingDeletion =
+    lens _dhrHsmsPendingDeletion (\s a -> s { _dhrHsmsPendingDeletion = a })
+        . _List
+
+dhrHsmsPendingRegistration :: Lens' DescribeHapgResponse [Text]
+dhrHsmsPendingRegistration =
+    lens _dhrHsmsPendingRegistration
+        (\s a -> s { _dhrHsmsPendingRegistration = a })
+            . _List
+
+-- | The label for the high-availability partition group.
+dhrLabel :: Lens' DescribeHapgResponse (Maybe Text)
+dhrLabel = lens _dhrLabel (\s a -> s { _dhrLabel = a })
+
+-- | The date and time the high-availability partition group was last modified.
+dhrLastModifiedTimestamp :: Lens' DescribeHapgResponse (Maybe Text)
+dhrLastModifiedTimestamp =
+    lens _dhrLastModifiedTimestamp
+        (\s a -> s { _dhrLastModifiedTimestamp = a })
+
+-- | The list of partition serial numbers that belong to the high-availability
+-- partition group.
+dhrPartitionSerialList :: Lens' DescribeHapgResponse [Text]
+dhrPartitionSerialList =
+    lens _dhrPartitionSerialList (\s a -> s { _dhrPartitionSerialList = a })
+        . _List
+
+-- | The state of the high-availability partition group.
+dhrState :: Lens' DescribeHapgResponse (Maybe CloudHsmObjectState)
+dhrState = lens _dhrState (\s a -> s { _dhrState = a })
+
+instance ToPath DescribeHapg where
+    toPath = const "/"
+
+instance ToQuery DescribeHapg where
+    toQuery = const mempty
+
+instance ToHeaders DescribeHapg
+
+instance ToJSON DescribeHapg where
+    toJSON DescribeHapg{..} = object
+        [ "HapgArn" .= _dh1HapgArn
+        ]
+
+instance AWSRequest DescribeHapg where
+    type Sv DescribeHapg = CloudHSM
+    type Rs DescribeHapg = DescribeHapgResponse
+
+    request  = post "DescribeHapg"
+    response = jsonResponse
+
+instance FromJSON DescribeHapgResponse where
+    parseJSON = withObject "DescribeHapgResponse" $ \o -> DescribeHapgResponse
+        <$> o .:? "HapgArn"
+        <*> o .:? "HapgSerial"
+        <*> o .:? "HsmsLastActionFailed" .!= mempty
+        <*> o .:? "HsmsPendingDeletion" .!= mempty
+        <*> o .:? "HsmsPendingRegistration" .!= mempty
+        <*> o .:? "Label"
+        <*> o .:? "LastModifiedTimestamp"
+        <*> o .:? "PartitionSerialList" .!= mempty
+        <*> o .:? "State"
diff --git a/gen/Network/AWS/CloudHSM/DescribeHsm.hs b/gen/Network/AWS/CloudHSM/DescribeHsm.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CloudHSM/DescribeHsm.hs
@@ -0,0 +1,335 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.CloudHSM.DescribeHsm
+-- 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.
+
+-- | Retrieves information about an HSM. You can identify the HSM by its ARN or
+-- its serial number.
+--
+-- <http://docs.aws.amazon.com/cloudhsm/latest/dg/API_DescribeHsm.html>
+module Network.AWS.CloudHSM.DescribeHsm
+    (
+    -- * Request
+      DescribeHsm
+    -- ** Request constructor
+    , describeHsm
+    -- ** Request lenses
+    , dh1HsmArn
+    , dh1HsmSerialNumber
+
+    -- * Response
+    , DescribeHsmResponse
+    -- ** Response constructor
+    , describeHsmResponse
+    -- ** Response lenses
+    , dhr2AvailabilityZone
+    , dhr2EniId
+    , dhr2EniIp
+    , dhr2HsmArn
+    , dhr2HsmType
+    , dhr2IamRoleArn
+    , dhr2Partitions
+    , dhr2SerialNumber
+    , dhr2ServerCertLastUpdated
+    , dhr2ServerCertUri
+    , dhr2SoftwareVersion
+    , dhr2SshKeyLastUpdated
+    , dhr2SshPublicKey
+    , dhr2Status
+    , dhr2StatusDetails
+    , dhr2SubnetId
+    , dhr2SubscriptionEndDate
+    , dhr2SubscriptionStartDate
+    , dhr2SubscriptionType
+    , dhr2VendorName
+    , dhr2VpcId
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.JSON
+import Network.AWS.CloudHSM.Types
+import qualified GHC.Exts
+
+data DescribeHsm = DescribeHsm
+    { _dh1HsmArn          :: Maybe Text
+    , _dh1HsmSerialNumber :: Maybe Text
+    } deriving (Eq, Ord, Show)
+
+-- | 'DescribeHsm' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'dh1HsmArn' @::@ 'Maybe' 'Text'
+--
+-- * 'dh1HsmSerialNumber' @::@ 'Maybe' 'Text'
+--
+describeHsm :: DescribeHsm
+describeHsm = DescribeHsm
+    { _dh1HsmArn          = Nothing
+    , _dh1HsmSerialNumber = Nothing
+    }
+
+-- | The ARN of the HSM. Either the /HsmArn/ or the /SerialNumber/ parameter must be
+-- specified.
+dh1HsmArn :: Lens' DescribeHsm (Maybe Text)
+dh1HsmArn = lens _dh1HsmArn (\s a -> s { _dh1HsmArn = a })
+
+-- | The serial number of the HSM. Either the /HsmArn/ or the /HsmSerialNumber/
+-- parameter must be specified.
+dh1HsmSerialNumber :: Lens' DescribeHsm (Maybe Text)
+dh1HsmSerialNumber =
+    lens _dh1HsmSerialNumber (\s a -> s { _dh1HsmSerialNumber = a })
+
+data DescribeHsmResponse = DescribeHsmResponse
+    { _dhr2AvailabilityZone      :: Maybe Text
+    , _dhr2EniId                 :: Maybe Text
+    , _dhr2EniIp                 :: Maybe Text
+    , _dhr2HsmArn                :: Maybe Text
+    , _dhr2HsmType               :: Maybe Text
+    , _dhr2IamRoleArn            :: Maybe Text
+    , _dhr2Partitions            :: List "Partitions" Text
+    , _dhr2SerialNumber          :: Maybe Text
+    , _dhr2ServerCertLastUpdated :: Maybe Text
+    , _dhr2ServerCertUri         :: Maybe Text
+    , _dhr2SoftwareVersion       :: Maybe Text
+    , _dhr2SshKeyLastUpdated     :: Maybe Text
+    , _dhr2SshPublicKey          :: Maybe Text
+    , _dhr2Status                :: Maybe HsmStatus
+    , _dhr2StatusDetails         :: Maybe Text
+    , _dhr2SubnetId              :: Maybe Text
+    , _dhr2SubscriptionEndDate   :: Maybe Text
+    , _dhr2SubscriptionStartDate :: Maybe Text
+    , _dhr2SubscriptionType      :: Maybe SubscriptionType
+    , _dhr2VendorName            :: Maybe Text
+    , _dhr2VpcId                 :: Maybe Text
+    } deriving (Eq, Show)
+
+-- | 'DescribeHsmResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'dhr2AvailabilityZone' @::@ 'Maybe' 'Text'
+--
+-- * 'dhr2EniId' @::@ 'Maybe' 'Text'
+--
+-- * 'dhr2EniIp' @::@ 'Maybe' 'Text'
+--
+-- * 'dhr2HsmArn' @::@ 'Maybe' 'Text'
+--
+-- * 'dhr2HsmType' @::@ 'Maybe' 'Text'
+--
+-- * 'dhr2IamRoleArn' @::@ 'Maybe' 'Text'
+--
+-- * 'dhr2Partitions' @::@ ['Text']
+--
+-- * 'dhr2SerialNumber' @::@ 'Maybe' 'Text'
+--
+-- * 'dhr2ServerCertLastUpdated' @::@ 'Maybe' 'Text'
+--
+-- * 'dhr2ServerCertUri' @::@ 'Maybe' 'Text'
+--
+-- * 'dhr2SoftwareVersion' @::@ 'Maybe' 'Text'
+--
+-- * 'dhr2SshKeyLastUpdated' @::@ 'Maybe' 'Text'
+--
+-- * 'dhr2SshPublicKey' @::@ 'Maybe' 'Text'
+--
+-- * 'dhr2Status' @::@ 'Maybe' 'HsmStatus'
+--
+-- * 'dhr2StatusDetails' @::@ 'Maybe' 'Text'
+--
+-- * 'dhr2SubnetId' @::@ 'Maybe' 'Text'
+--
+-- * 'dhr2SubscriptionEndDate' @::@ 'Maybe' 'Text'
+--
+-- * 'dhr2SubscriptionStartDate' @::@ 'Maybe' 'Text'
+--
+-- * 'dhr2SubscriptionType' @::@ 'Maybe' 'SubscriptionType'
+--
+-- * 'dhr2VendorName' @::@ 'Maybe' 'Text'
+--
+-- * 'dhr2VpcId' @::@ 'Maybe' 'Text'
+--
+describeHsmResponse :: DescribeHsmResponse
+describeHsmResponse = DescribeHsmResponse
+    { _dhr2HsmArn                = Nothing
+    , _dhr2Status                = Nothing
+    , _dhr2StatusDetails         = Nothing
+    , _dhr2AvailabilityZone      = Nothing
+    , _dhr2EniId                 = Nothing
+    , _dhr2EniIp                 = Nothing
+    , _dhr2SubscriptionType      = Nothing
+    , _dhr2SubscriptionStartDate = Nothing
+    , _dhr2SubscriptionEndDate   = Nothing
+    , _dhr2VpcId                 = Nothing
+    , _dhr2SubnetId              = Nothing
+    , _dhr2IamRoleArn            = Nothing
+    , _dhr2SerialNumber          = Nothing
+    , _dhr2VendorName            = Nothing
+    , _dhr2HsmType               = Nothing
+    , _dhr2SoftwareVersion       = Nothing
+    , _dhr2SshPublicKey          = Nothing
+    , _dhr2SshKeyLastUpdated     = Nothing
+    , _dhr2ServerCertUri         = Nothing
+    , _dhr2ServerCertLastUpdated = Nothing
+    , _dhr2Partitions            = mempty
+    }
+
+-- | The Availability Zone that the HSM is in.
+dhr2AvailabilityZone :: Lens' DescribeHsmResponse (Maybe Text)
+dhr2AvailabilityZone =
+    lens _dhr2AvailabilityZone (\s a -> s { _dhr2AvailabilityZone = a })
+
+-- | The identifier of the elastic network interface (ENI) attached to the HSM.
+dhr2EniId :: Lens' DescribeHsmResponse (Maybe Text)
+dhr2EniId = lens _dhr2EniId (\s a -> s { _dhr2EniId = a })
+
+-- | The IP address assigned to the HSM's ENI.
+dhr2EniIp :: Lens' DescribeHsmResponse (Maybe Text)
+dhr2EniIp = lens _dhr2EniIp (\s a -> s { _dhr2EniIp = a })
+
+-- | The ARN of the HSM.
+dhr2HsmArn :: Lens' DescribeHsmResponse (Maybe Text)
+dhr2HsmArn = lens _dhr2HsmArn (\s a -> s { _dhr2HsmArn = a })
+
+-- | The HSM model type.
+dhr2HsmType :: Lens' DescribeHsmResponse (Maybe Text)
+dhr2HsmType = lens _dhr2HsmType (\s a -> s { _dhr2HsmType = a })
+
+-- | The ARN of the IAM role assigned to the HSM.
+dhr2IamRoleArn :: Lens' DescribeHsmResponse (Maybe Text)
+dhr2IamRoleArn = lens _dhr2IamRoleArn (\s a -> s { _dhr2IamRoleArn = a })
+
+-- | The list of partitions on the HSM.
+dhr2Partitions :: Lens' DescribeHsmResponse [Text]
+dhr2Partitions = lens _dhr2Partitions (\s a -> s { _dhr2Partitions = a }) . _List
+
+-- | The serial number of the HSM.
+dhr2SerialNumber :: Lens' DescribeHsmResponse (Maybe Text)
+dhr2SerialNumber = lens _dhr2SerialNumber (\s a -> s { _dhr2SerialNumber = a })
+
+-- | The date and time the server certificate was last updated.
+dhr2ServerCertLastUpdated :: Lens' DescribeHsmResponse (Maybe Text)
+dhr2ServerCertLastUpdated =
+    lens _dhr2ServerCertLastUpdated
+        (\s a -> s { _dhr2ServerCertLastUpdated = a })
+
+-- | The URI of the certificate server.
+dhr2ServerCertUri :: Lens' DescribeHsmResponse (Maybe Text)
+dhr2ServerCertUri =
+    lens _dhr2ServerCertUri (\s a -> s { _dhr2ServerCertUri = a })
+
+-- | The HSM software version.
+dhr2SoftwareVersion :: Lens' DescribeHsmResponse (Maybe Text)
+dhr2SoftwareVersion =
+    lens _dhr2SoftwareVersion (\s a -> s { _dhr2SoftwareVersion = a })
+
+-- | The date and time the SSH key was last updated.
+dhr2SshKeyLastUpdated :: Lens' DescribeHsmResponse (Maybe Text)
+dhr2SshKeyLastUpdated =
+    lens _dhr2SshKeyLastUpdated (\s a -> s { _dhr2SshKeyLastUpdated = a })
+
+-- | The public SSH key.
+dhr2SshPublicKey :: Lens' DescribeHsmResponse (Maybe Text)
+dhr2SshPublicKey = lens _dhr2SshPublicKey (\s a -> s { _dhr2SshPublicKey = a })
+
+-- | The status of the HSM.
+dhr2Status :: Lens' DescribeHsmResponse (Maybe HsmStatus)
+dhr2Status = lens _dhr2Status (\s a -> s { _dhr2Status = a })
+
+-- | Contains additional information about the status of the HSM.
+dhr2StatusDetails :: Lens' DescribeHsmResponse (Maybe Text)
+dhr2StatusDetails =
+    lens _dhr2StatusDetails (\s a -> s { _dhr2StatusDetails = a })
+
+-- | The identifier of the subnet the HSM is in.
+dhr2SubnetId :: Lens' DescribeHsmResponse (Maybe Text)
+dhr2SubnetId = lens _dhr2SubnetId (\s a -> s { _dhr2SubnetId = a })
+
+-- | The subscription end date.
+dhr2SubscriptionEndDate :: Lens' DescribeHsmResponse (Maybe Text)
+dhr2SubscriptionEndDate =
+    lens _dhr2SubscriptionEndDate (\s a -> s { _dhr2SubscriptionEndDate = a })
+
+-- | The subscription start date.
+dhr2SubscriptionStartDate :: Lens' DescribeHsmResponse (Maybe Text)
+dhr2SubscriptionStartDate =
+    lens _dhr2SubscriptionStartDate
+        (\s a -> s { _dhr2SubscriptionStartDate = a })
+
+-- | The subscription type.
+dhr2SubscriptionType :: Lens' DescribeHsmResponse (Maybe SubscriptionType)
+dhr2SubscriptionType =
+    lens _dhr2SubscriptionType (\s a -> s { _dhr2SubscriptionType = a })
+
+-- | The name of the HSM vendor.
+dhr2VendorName :: Lens' DescribeHsmResponse (Maybe Text)
+dhr2VendorName = lens _dhr2VendorName (\s a -> s { _dhr2VendorName = a })
+
+-- | The identifier of the VPC that the HSM is in.
+dhr2VpcId :: Lens' DescribeHsmResponse (Maybe Text)
+dhr2VpcId = lens _dhr2VpcId (\s a -> s { _dhr2VpcId = a })
+
+instance ToPath DescribeHsm where
+    toPath = const "/"
+
+instance ToQuery DescribeHsm where
+    toQuery = const mempty
+
+instance ToHeaders DescribeHsm
+
+instance ToJSON DescribeHsm where
+    toJSON DescribeHsm{..} = object
+        [ "HsmArn"          .= _dh1HsmArn
+        , "HsmSerialNumber" .= _dh1HsmSerialNumber
+        ]
+
+instance AWSRequest DescribeHsm where
+    type Sv DescribeHsm = CloudHSM
+    type Rs DescribeHsm = DescribeHsmResponse
+
+    request  = post "DescribeHsm"
+    response = jsonResponse
+
+instance FromJSON DescribeHsmResponse where
+    parseJSON = withObject "DescribeHsmResponse" $ \o -> DescribeHsmResponse
+        <$> o .:? "AvailabilityZone"
+        <*> o .:? "EniId"
+        <*> o .:? "EniIp"
+        <*> o .:? "HsmArn"
+        <*> o .:? "HsmType"
+        <*> o .:? "IamRoleArn"
+        <*> o .:? "Partitions" .!= mempty
+        <*> o .:? "SerialNumber"
+        <*> o .:? "ServerCertLastUpdated"
+        <*> o .:? "ServerCertUri"
+        <*> o .:? "SoftwareVersion"
+        <*> o .:? "SshKeyLastUpdated"
+        <*> o .:? "SshPublicKey"
+        <*> o .:? "Status"
+        <*> o .:? "StatusDetails"
+        <*> o .:? "SubnetId"
+        <*> o .:? "SubscriptionEndDate"
+        <*> o .:? "SubscriptionStartDate"
+        <*> o .:? "SubscriptionType"
+        <*> o .:? "VendorName"
+        <*> o .:? "VpcId"
diff --git a/gen/Network/AWS/CloudHSM/DescribeLunaClient.hs b/gen/Network/AWS/CloudHSM/DescribeLunaClient.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CloudHSM/DescribeLunaClient.hs
@@ -0,0 +1,166 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.CloudHSM.DescribeLunaClient
+-- 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.
+
+-- | Retrieves information about an HSM client.
+--
+-- <http://docs.aws.amazon.com/cloudhsm/latest/dg/API_DescribeLunaClient.html>
+module Network.AWS.CloudHSM.DescribeLunaClient
+    (
+    -- * Request
+      DescribeLunaClient
+    -- ** Request constructor
+    , describeLunaClient
+    -- ** Request lenses
+    , dlcCertificateFingerprint
+    , dlcClientArn
+
+    -- * Response
+    , DescribeLunaClientResponse
+    -- ** Response constructor
+    , describeLunaClientResponse
+    -- ** Response lenses
+    , dlcrCertificate
+    , dlcrCertificateFingerprint
+    , dlcrClientArn
+    , dlcrLabel
+    , dlcrLastModifiedTimestamp
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.JSON
+import Network.AWS.CloudHSM.Types
+import qualified GHC.Exts
+
+data DescribeLunaClient = DescribeLunaClient
+    { _dlcCertificateFingerprint :: Maybe Text
+    , _dlcClientArn              :: Maybe Text
+    } deriving (Eq, Ord, Show)
+
+-- | 'DescribeLunaClient' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'dlcCertificateFingerprint' @::@ 'Maybe' 'Text'
+--
+-- * 'dlcClientArn' @::@ 'Maybe' 'Text'
+--
+describeLunaClient :: DescribeLunaClient
+describeLunaClient = DescribeLunaClient
+    { _dlcClientArn              = Nothing
+    , _dlcCertificateFingerprint = Nothing
+    }
+
+-- | The certificate fingerprint.
+dlcCertificateFingerprint :: Lens' DescribeLunaClient (Maybe Text)
+dlcCertificateFingerprint =
+    lens _dlcCertificateFingerprint
+        (\s a -> s { _dlcCertificateFingerprint = a })
+
+-- | The ARN of the client.
+dlcClientArn :: Lens' DescribeLunaClient (Maybe Text)
+dlcClientArn = lens _dlcClientArn (\s a -> s { _dlcClientArn = a })
+
+data DescribeLunaClientResponse = DescribeLunaClientResponse
+    { _dlcrCertificate            :: Maybe Text
+    , _dlcrCertificateFingerprint :: Maybe Text
+    , _dlcrClientArn              :: Maybe Text
+    , _dlcrLabel                  :: Maybe Text
+    , _dlcrLastModifiedTimestamp  :: Maybe Text
+    } deriving (Eq, Ord, Show)
+
+-- | 'DescribeLunaClientResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'dlcrCertificate' @::@ 'Maybe' 'Text'
+--
+-- * 'dlcrCertificateFingerprint' @::@ 'Maybe' 'Text'
+--
+-- * 'dlcrClientArn' @::@ 'Maybe' 'Text'
+--
+-- * 'dlcrLabel' @::@ 'Maybe' 'Text'
+--
+-- * 'dlcrLastModifiedTimestamp' @::@ 'Maybe' 'Text'
+--
+describeLunaClientResponse :: DescribeLunaClientResponse
+describeLunaClientResponse = DescribeLunaClientResponse
+    { _dlcrClientArn              = Nothing
+    , _dlcrCertificate            = Nothing
+    , _dlcrCertificateFingerprint = Nothing
+    , _dlcrLastModifiedTimestamp  = Nothing
+    , _dlcrLabel                  = Nothing
+    }
+
+-- | The certificate installed on the HSMs used by this client.
+dlcrCertificate :: Lens' DescribeLunaClientResponse (Maybe Text)
+dlcrCertificate = lens _dlcrCertificate (\s a -> s { _dlcrCertificate = a })
+
+-- | The certificate fingerprint.
+dlcrCertificateFingerprint :: Lens' DescribeLunaClientResponse (Maybe Text)
+dlcrCertificateFingerprint =
+    lens _dlcrCertificateFingerprint
+        (\s a -> s { _dlcrCertificateFingerprint = a })
+
+-- | The ARN of the client.
+dlcrClientArn :: Lens' DescribeLunaClientResponse (Maybe Text)
+dlcrClientArn = lens _dlcrClientArn (\s a -> s { _dlcrClientArn = a })
+
+-- | The label of the client.
+dlcrLabel :: Lens' DescribeLunaClientResponse (Maybe Text)
+dlcrLabel = lens _dlcrLabel (\s a -> s { _dlcrLabel = a })
+
+-- | The date and time the client was last modified.
+dlcrLastModifiedTimestamp :: Lens' DescribeLunaClientResponse (Maybe Text)
+dlcrLastModifiedTimestamp =
+    lens _dlcrLastModifiedTimestamp
+        (\s a -> s { _dlcrLastModifiedTimestamp = a })
+
+instance ToPath DescribeLunaClient where
+    toPath = const "/"
+
+instance ToQuery DescribeLunaClient where
+    toQuery = const mempty
+
+instance ToHeaders DescribeLunaClient
+
+instance ToJSON DescribeLunaClient where
+    toJSON DescribeLunaClient{..} = object
+        [ "ClientArn"              .= _dlcClientArn
+        , "CertificateFingerprint" .= _dlcCertificateFingerprint
+        ]
+
+instance AWSRequest DescribeLunaClient where
+    type Sv DescribeLunaClient = CloudHSM
+    type Rs DescribeLunaClient = DescribeLunaClientResponse
+
+    request  = post "DescribeLunaClient"
+    response = jsonResponse
+
+instance FromJSON DescribeLunaClientResponse where
+    parseJSON = withObject "DescribeLunaClientResponse" $ \o -> DescribeLunaClientResponse
+        <$> o .:? "Certificate"
+        <*> o .:? "CertificateFingerprint"
+        <*> o .:? "ClientArn"
+        <*> o .:? "Label"
+        <*> o .:? "LastModifiedTimestamp"
diff --git a/gen/Network/AWS/CloudHSM/GetConfig.hs b/gen/Network/AWS/CloudHSM/GetConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CloudHSM/GetConfig.hs
@@ -0,0 +1,154 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.CloudHSM.GetConfig
+-- 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.
+
+-- | Gets the configuration files necessary to connect to all high availability
+-- partition groups the client is associated with.
+--
+-- <http://docs.aws.amazon.com/cloudhsm/latest/dg/API_GetConfig.html>
+module Network.AWS.CloudHSM.GetConfig
+    (
+    -- * Request
+      GetConfig
+    -- ** Request constructor
+    , getConfig
+    -- ** Request lenses
+    , gcClientArn
+    , gcClientVersion
+    , gcHapgList
+
+    -- * Response
+    , GetConfigResponse
+    -- ** Response constructor
+    , getConfigResponse
+    -- ** Response lenses
+    , gcrConfigCred
+    , gcrConfigFile
+    , gcrConfigType
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.JSON
+import Network.AWS.CloudHSM.Types
+import qualified GHC.Exts
+
+data GetConfig = GetConfig
+    { _gcClientArn     :: Text
+    , _gcClientVersion :: ClientVersion
+    , _gcHapgList      :: List "HapgList" Text
+    } deriving (Eq, Show)
+
+-- | 'GetConfig' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'gcClientArn' @::@ 'Text'
+--
+-- * 'gcClientVersion' @::@ 'ClientVersion'
+--
+-- * 'gcHapgList' @::@ ['Text']
+--
+getConfig :: Text -- ^ 'gcClientArn'
+          -> ClientVersion -- ^ 'gcClientVersion'
+          -> GetConfig
+getConfig p1 p2 = GetConfig
+    { _gcClientArn     = p1
+    , _gcClientVersion = p2
+    , _gcHapgList      = mempty
+    }
+
+-- | The ARN of the client.
+gcClientArn :: Lens' GetConfig Text
+gcClientArn = lens _gcClientArn (\s a -> s { _gcClientArn = a })
+
+-- | The client version.
+gcClientVersion :: Lens' GetConfig ClientVersion
+gcClientVersion = lens _gcClientVersion (\s a -> s { _gcClientVersion = a })
+
+-- | A list of ARNs that identify the high-availability partition groups that are
+-- associated with the client.
+gcHapgList :: Lens' GetConfig [Text]
+gcHapgList = lens _gcHapgList (\s a -> s { _gcHapgList = a }) . _List
+
+data GetConfigResponse = GetConfigResponse
+    { _gcrConfigCred :: Maybe Text
+    , _gcrConfigFile :: Maybe Text
+    , _gcrConfigType :: Maybe Text
+    } deriving (Eq, Ord, Show)
+
+-- | 'GetConfigResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'gcrConfigCred' @::@ 'Maybe' 'Text'
+--
+-- * 'gcrConfigFile' @::@ 'Maybe' 'Text'
+--
+-- * 'gcrConfigType' @::@ 'Maybe' 'Text'
+--
+getConfigResponse :: GetConfigResponse
+getConfigResponse = GetConfigResponse
+    { _gcrConfigType = Nothing
+    , _gcrConfigFile = Nothing
+    , _gcrConfigCred = Nothing
+    }
+
+-- | The certificate file containing the server.pem files of the HSMs.
+gcrConfigCred :: Lens' GetConfigResponse (Maybe Text)
+gcrConfigCred = lens _gcrConfigCred (\s a -> s { _gcrConfigCred = a })
+
+-- | The chrystoki.conf configuration file.
+gcrConfigFile :: Lens' GetConfigResponse (Maybe Text)
+gcrConfigFile = lens _gcrConfigFile (\s a -> s { _gcrConfigFile = a })
+
+-- | The type of credentials.
+gcrConfigType :: Lens' GetConfigResponse (Maybe Text)
+gcrConfigType = lens _gcrConfigType (\s a -> s { _gcrConfigType = a })
+
+instance ToPath GetConfig where
+    toPath = const "/"
+
+instance ToQuery GetConfig where
+    toQuery = const mempty
+
+instance ToHeaders GetConfig
+
+instance ToJSON GetConfig where
+    toJSON GetConfig{..} = object
+        [ "ClientArn"     .= _gcClientArn
+        , "ClientVersion" .= _gcClientVersion
+        , "HapgList"      .= _gcHapgList
+        ]
+
+instance AWSRequest GetConfig where
+    type Sv GetConfig = CloudHSM
+    type Rs GetConfig = GetConfigResponse
+
+    request  = post "GetConfig"
+    response = jsonResponse
+
+instance FromJSON GetConfigResponse where
+    parseJSON = withObject "GetConfigResponse" $ \o -> GetConfigResponse
+        <$> o .:? "ConfigCred"
+        <*> o .:? "ConfigFile"
+        <*> o .:? "ConfigType"
diff --git a/gen/Network/AWS/CloudHSM/ListAvailableZones.hs b/gen/Network/AWS/CloudHSM/ListAvailableZones.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CloudHSM/ListAvailableZones.hs
@@ -0,0 +1,100 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.CloudHSM.ListAvailableZones
+-- 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.
+
+-- | Lists the Availability Zones that have available AWS CloudHSM capacity.
+--
+-- <http://docs.aws.amazon.com/cloudhsm/latest/dg/API_ListAvailableZones.html>
+module Network.AWS.CloudHSM.ListAvailableZones
+    (
+    -- * Request
+      ListAvailableZones
+    -- ** Request constructor
+    , listAvailableZones
+
+    -- * Response
+    , ListAvailableZonesResponse
+    -- ** Response constructor
+    , listAvailableZonesResponse
+    -- ** Response lenses
+    , lazrAZList
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.JSON
+import Network.AWS.CloudHSM.Types
+import qualified GHC.Exts
+
+data ListAvailableZones = ListAvailableZones
+    deriving (Eq, Ord, Show, Generic)
+
+-- | 'ListAvailableZones' constructor.
+listAvailableZones :: ListAvailableZones
+listAvailableZones = ListAvailableZones
+
+newtype ListAvailableZonesResponse = ListAvailableZonesResponse
+    { _lazrAZList :: List "AZList" Text
+    } deriving (Eq, Ord, Show, Monoid, Semigroup)
+
+instance GHC.Exts.IsList ListAvailableZonesResponse where
+    type Item ListAvailableZonesResponse = Text
+
+    fromList = ListAvailableZonesResponse . GHC.Exts.fromList
+    toList   = GHC.Exts.toList . _lazrAZList
+
+-- | 'ListAvailableZonesResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'lazrAZList' @::@ ['Text']
+--
+listAvailableZonesResponse :: ListAvailableZonesResponse
+listAvailableZonesResponse = ListAvailableZonesResponse
+    { _lazrAZList = mempty
+    }
+
+-- | The list of Availability Zones that have available AWS CloudHSM capacity.
+lazrAZList :: Lens' ListAvailableZonesResponse [Text]
+lazrAZList = lens _lazrAZList (\s a -> s { _lazrAZList = a }) . _List
+
+instance ToPath ListAvailableZones where
+    toPath = const "/"
+
+instance ToQuery ListAvailableZones where
+    toQuery = const mempty
+
+instance ToHeaders ListAvailableZones
+
+instance ToJSON ListAvailableZones where
+    toJSON = const (toJSON Empty)
+
+instance AWSRequest ListAvailableZones where
+    type Sv ListAvailableZones = CloudHSM
+    type Rs ListAvailableZones = ListAvailableZonesResponse
+
+    request  = post "ListAvailableZones"
+    response = jsonResponse
+
+instance FromJSON ListAvailableZonesResponse where
+    parseJSON = withObject "ListAvailableZonesResponse" $ \o -> ListAvailableZonesResponse
+        <$> o .:? "AZList" .!= mempty
diff --git a/gen/Network/AWS/CloudHSM/ListHapgs.hs b/gen/Network/AWS/CloudHSM/ListHapgs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CloudHSM/ListHapgs.hs
@@ -0,0 +1,127 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.CloudHSM.ListHapgs
+-- 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.
+
+-- | Lists the high-availability partition groups for the account.
+--
+-- This operation supports pagination with the use of the /NextToken/ member. If
+-- more results are available, the /NextToken/ member of the response contains a
+-- token that you pass in the next call to 'ListHapgs' to retrieve the next set of
+-- items.
+--
+-- <http://docs.aws.amazon.com/cloudhsm/latest/dg/API_ListHapgs.html>
+module Network.AWS.CloudHSM.ListHapgs
+    (
+    -- * Request
+      ListHapgs
+    -- ** Request constructor
+    , listHapgs
+    -- ** Request lenses
+    , lhNextToken
+
+    -- * Response
+    , ListHapgsResponse
+    -- ** Response constructor
+    , listHapgsResponse
+    -- ** Response lenses
+    , lhr1HapgList
+    , lhr1NextToken
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.JSON
+import Network.AWS.CloudHSM.Types
+import qualified GHC.Exts
+
+newtype ListHapgs = ListHapgs
+    { _lhNextToken :: Maybe Text
+    } deriving (Eq, Ord, Show, Monoid)
+
+-- | 'ListHapgs' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'lhNextToken' @::@ 'Maybe' 'Text'
+--
+listHapgs :: ListHapgs
+listHapgs = ListHapgs
+    { _lhNextToken = Nothing
+    }
+
+-- | The /NextToken/ value from a previous call to 'ListHapgs'. Pass null if this is
+-- the first call.
+lhNextToken :: Lens' ListHapgs (Maybe Text)
+lhNextToken = lens _lhNextToken (\s a -> s { _lhNextToken = a })
+
+data ListHapgsResponse = ListHapgsResponse
+    { _lhr1HapgList  :: List "HapgList" Text
+    , _lhr1NextToken :: Maybe Text
+    } deriving (Eq, Ord, Show)
+
+-- | 'ListHapgsResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'lhr1HapgList' @::@ ['Text']
+--
+-- * 'lhr1NextToken' @::@ 'Maybe' 'Text'
+--
+listHapgsResponse :: ListHapgsResponse
+listHapgsResponse = ListHapgsResponse
+    { _lhr1HapgList  = mempty
+    , _lhr1NextToken = Nothing
+    }
+
+-- | The list of high-availability partition groups.
+lhr1HapgList :: Lens' ListHapgsResponse [Text]
+lhr1HapgList = lens _lhr1HapgList (\s a -> s { _lhr1HapgList = a }) . _List
+
+-- | If not null, more results are available. Pass this value to 'ListHapgs' to
+-- retrieve the next set of items.
+lhr1NextToken :: Lens' ListHapgsResponse (Maybe Text)
+lhr1NextToken = lens _lhr1NextToken (\s a -> s { _lhr1NextToken = a })
+
+instance ToPath ListHapgs where
+    toPath = const "/"
+
+instance ToQuery ListHapgs where
+    toQuery = const mempty
+
+instance ToHeaders ListHapgs
+
+instance ToJSON ListHapgs where
+    toJSON ListHapgs{..} = object
+        [ "NextToken" .= _lhNextToken
+        ]
+
+instance AWSRequest ListHapgs where
+    type Sv ListHapgs = CloudHSM
+    type Rs ListHapgs = ListHapgsResponse
+
+    request  = post "ListHapgs"
+    response = jsonResponse
+
+instance FromJSON ListHapgsResponse where
+    parseJSON = withObject "ListHapgsResponse" $ \o -> ListHapgsResponse
+        <$> o .:? "HapgList" .!= mempty
+        <*> o .:? "NextToken"
diff --git a/gen/Network/AWS/CloudHSM/ListHsms.hs b/gen/Network/AWS/CloudHSM/ListHsms.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CloudHSM/ListHsms.hs
@@ -0,0 +1,128 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.CloudHSM.ListHsms
+-- 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.
+
+-- | Retrieves the identifiers of all of the HSMs provisioned for the current
+-- customer.
+--
+-- This operation supports pagination with the use of the /NextToken/ member. If
+-- more results are available, the /NextToken/ member of the response contains a
+-- token that you pass in the next call to 'ListHsms' to retrieve the next set of
+-- items.
+--
+-- <http://docs.aws.amazon.com/cloudhsm/latest/dg/API_ListHsms.html>
+module Network.AWS.CloudHSM.ListHsms
+    (
+    -- * Request
+      ListHsms
+    -- ** Request constructor
+    , listHsms
+    -- ** Request lenses
+    , lh1NextToken
+
+    -- * Response
+    , ListHsmsResponse
+    -- ** Response constructor
+    , listHsmsResponse
+    -- ** Response lenses
+    , lhrHsmList
+    , lhrNextToken
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.JSON
+import Network.AWS.CloudHSM.Types
+import qualified GHC.Exts
+
+newtype ListHsms = ListHsms
+    { _lh1NextToken :: Maybe Text
+    } deriving (Eq, Ord, Show, Monoid)
+
+-- | 'ListHsms' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'lh1NextToken' @::@ 'Maybe' 'Text'
+--
+listHsms :: ListHsms
+listHsms = ListHsms
+    { _lh1NextToken = Nothing
+    }
+
+-- | The /NextToken/ value from a previous call to 'ListHsms'. Pass null if this is
+-- the first call.
+lh1NextToken :: Lens' ListHsms (Maybe Text)
+lh1NextToken = lens _lh1NextToken (\s a -> s { _lh1NextToken = a })
+
+data ListHsmsResponse = ListHsmsResponse
+    { _lhrHsmList   :: List "HsmList" Text
+    , _lhrNextToken :: Maybe Text
+    } deriving (Eq, Ord, Show)
+
+-- | 'ListHsmsResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'lhrHsmList' @::@ ['Text']
+--
+-- * 'lhrNextToken' @::@ 'Maybe' 'Text'
+--
+listHsmsResponse :: ListHsmsResponse
+listHsmsResponse = ListHsmsResponse
+    { _lhrHsmList   = mempty
+    , _lhrNextToken = Nothing
+    }
+
+-- | The list of ARNs that identify the HSMs.
+lhrHsmList :: Lens' ListHsmsResponse [Text]
+lhrHsmList = lens _lhrHsmList (\s a -> s { _lhrHsmList = a }) . _List
+
+-- | If not null, more results are available. Pass this value to 'ListHsms' to
+-- retrieve the next set of items.
+lhrNextToken :: Lens' ListHsmsResponse (Maybe Text)
+lhrNextToken = lens _lhrNextToken (\s a -> s { _lhrNextToken = a })
+
+instance ToPath ListHsms where
+    toPath = const "/"
+
+instance ToQuery ListHsms where
+    toQuery = const mempty
+
+instance ToHeaders ListHsms
+
+instance ToJSON ListHsms where
+    toJSON ListHsms{..} = object
+        [ "NextToken" .= _lh1NextToken
+        ]
+
+instance AWSRequest ListHsms where
+    type Sv ListHsms = CloudHSM
+    type Rs ListHsms = ListHsmsResponse
+
+    request  = post "ListHsms"
+    response = jsonResponse
+
+instance FromJSON ListHsmsResponse where
+    parseJSON = withObject "ListHsmsResponse" $ \o -> ListHsmsResponse
+        <$> o .:? "HsmList" .!= mempty
+        <*> o .:? "NextToken"
diff --git a/gen/Network/AWS/CloudHSM/ListLunaClients.hs b/gen/Network/AWS/CloudHSM/ListLunaClients.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CloudHSM/ListLunaClients.hs
@@ -0,0 +1,127 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.CloudHSM.ListLunaClients
+-- 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.
+
+-- | Lists all of the clients.
+--
+-- This operation supports pagination with the use of the /NextToken/ member. If
+-- more results are available, the /NextToken/ member of the response contains a
+-- token that you pass in the next call to 'ListLunaClients' to retrieve the next
+-- set of items.
+--
+-- <http://docs.aws.amazon.com/cloudhsm/latest/dg/API_ListLunaClients.html>
+module Network.AWS.CloudHSM.ListLunaClients
+    (
+    -- * Request
+      ListLunaClients
+    -- ** Request constructor
+    , listLunaClients
+    -- ** Request lenses
+    , llcNextToken
+
+    -- * Response
+    , ListLunaClientsResponse
+    -- ** Response constructor
+    , listLunaClientsResponse
+    -- ** Response lenses
+    , llcrClientList
+    , llcrNextToken
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.JSON
+import Network.AWS.CloudHSM.Types
+import qualified GHC.Exts
+
+newtype ListLunaClients = ListLunaClients
+    { _llcNextToken :: Maybe Text
+    } deriving (Eq, Ord, Show, Monoid)
+
+-- | 'ListLunaClients' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'llcNextToken' @::@ 'Maybe' 'Text'
+--
+listLunaClients :: ListLunaClients
+listLunaClients = ListLunaClients
+    { _llcNextToken = Nothing
+    }
+
+-- | The /NextToken/ value from a previous call to 'ListLunaClients'. Pass null if
+-- this is the first call.
+llcNextToken :: Lens' ListLunaClients (Maybe Text)
+llcNextToken = lens _llcNextToken (\s a -> s { _llcNextToken = a })
+
+data ListLunaClientsResponse = ListLunaClientsResponse
+    { _llcrClientList :: List "ClientList" Text
+    , _llcrNextToken  :: Maybe Text
+    } deriving (Eq, Ord, Show)
+
+-- | 'ListLunaClientsResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'llcrClientList' @::@ ['Text']
+--
+-- * 'llcrNextToken' @::@ 'Maybe' 'Text'
+--
+listLunaClientsResponse :: ListLunaClientsResponse
+listLunaClientsResponse = ListLunaClientsResponse
+    { _llcrClientList = mempty
+    , _llcrNextToken  = Nothing
+    }
+
+-- | The list of clients.
+llcrClientList :: Lens' ListLunaClientsResponse [Text]
+llcrClientList = lens _llcrClientList (\s a -> s { _llcrClientList = a }) . _List
+
+-- | If not null, more results are available. Pass this to 'ListLunaClients' to
+-- retrieve the next set of items.
+llcrNextToken :: Lens' ListLunaClientsResponse (Maybe Text)
+llcrNextToken = lens _llcrNextToken (\s a -> s { _llcrNextToken = a })
+
+instance ToPath ListLunaClients where
+    toPath = const "/"
+
+instance ToQuery ListLunaClients where
+    toQuery = const mempty
+
+instance ToHeaders ListLunaClients
+
+instance ToJSON ListLunaClients where
+    toJSON ListLunaClients{..} = object
+        [ "NextToken" .= _llcNextToken
+        ]
+
+instance AWSRequest ListLunaClients where
+    type Sv ListLunaClients = CloudHSM
+    type Rs ListLunaClients = ListLunaClientsResponse
+
+    request  = post "ListLunaClients"
+    response = jsonResponse
+
+instance FromJSON ListLunaClientsResponse where
+    parseJSON = withObject "ListLunaClientsResponse" $ \o -> ListLunaClientsResponse
+        <$> o .:? "ClientList" .!= mempty
+        <*> o .:? "NextToken"
diff --git a/gen/Network/AWS/CloudHSM/ModifyHapg.hs b/gen/Network/AWS/CloudHSM/ModifyHapg.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CloudHSM/ModifyHapg.hs
@@ -0,0 +1,134 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.CloudHSM.ModifyHapg
+-- 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.
+
+-- | Modifies an existing high-availability partition group.
+--
+-- <http://docs.aws.amazon.com/cloudhsm/latest/dg/API_ModifyHapg.html>
+module Network.AWS.CloudHSM.ModifyHapg
+    (
+    -- * Request
+      ModifyHapg
+    -- ** Request constructor
+    , modifyHapg
+    -- ** Request lenses
+    , mhHapgArn
+    , mhLabel
+    , mhPartitionSerialList
+
+    -- * Response
+    , ModifyHapgResponse
+    -- ** Response constructor
+    , modifyHapgResponse
+    -- ** Response lenses
+    , mhrHapgArn
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.JSON
+import Network.AWS.CloudHSM.Types
+import qualified GHC.Exts
+
+data ModifyHapg = ModifyHapg
+    { _mhHapgArn             :: Text
+    , _mhLabel               :: Maybe Text
+    , _mhPartitionSerialList :: List "PartitionSerialList" Text
+    } deriving (Eq, Ord, Show)
+
+-- | 'ModifyHapg' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'mhHapgArn' @::@ 'Text'
+--
+-- * 'mhLabel' @::@ 'Maybe' 'Text'
+--
+-- * 'mhPartitionSerialList' @::@ ['Text']
+--
+modifyHapg :: Text -- ^ 'mhHapgArn'
+           -> ModifyHapg
+modifyHapg p1 = ModifyHapg
+    { _mhHapgArn             = p1
+    , _mhLabel               = Nothing
+    , _mhPartitionSerialList = mempty
+    }
+
+-- | The ARN of the high-availability partition group to modify.
+mhHapgArn :: Lens' ModifyHapg Text
+mhHapgArn = lens _mhHapgArn (\s a -> s { _mhHapgArn = a })
+
+-- | The new label for the high-availability partition group.
+mhLabel :: Lens' ModifyHapg (Maybe Text)
+mhLabel = lens _mhLabel (\s a -> s { _mhLabel = a })
+
+-- | The list of partition serial numbers to make members of the high-availability
+-- partition group.
+mhPartitionSerialList :: Lens' ModifyHapg [Text]
+mhPartitionSerialList =
+    lens _mhPartitionSerialList (\s a -> s { _mhPartitionSerialList = a })
+        . _List
+
+newtype ModifyHapgResponse = ModifyHapgResponse
+    { _mhrHapgArn :: Maybe Text
+    } deriving (Eq, Ord, Show, Monoid)
+
+-- | 'ModifyHapgResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'mhrHapgArn' @::@ 'Maybe' 'Text'
+--
+modifyHapgResponse :: ModifyHapgResponse
+modifyHapgResponse = ModifyHapgResponse
+    { _mhrHapgArn = Nothing
+    }
+
+-- | The ARN of the high-availability partition group.
+mhrHapgArn :: Lens' ModifyHapgResponse (Maybe Text)
+mhrHapgArn = lens _mhrHapgArn (\s a -> s { _mhrHapgArn = a })
+
+instance ToPath ModifyHapg where
+    toPath = const "/"
+
+instance ToQuery ModifyHapg where
+    toQuery = const mempty
+
+instance ToHeaders ModifyHapg
+
+instance ToJSON ModifyHapg where
+    toJSON ModifyHapg{..} = object
+        [ "HapgArn"             .= _mhHapgArn
+        , "Label"               .= _mhLabel
+        , "PartitionSerialList" .= _mhPartitionSerialList
+        ]
+
+instance AWSRequest ModifyHapg where
+    type Sv ModifyHapg = CloudHSM
+    type Rs ModifyHapg = ModifyHapgResponse
+
+    request  = post "ModifyHapg"
+    response = jsonResponse
+
+instance FromJSON ModifyHapgResponse where
+    parseJSON = withObject "ModifyHapgResponse" $ \o -> ModifyHapgResponse
+        <$> o .:? "HapgArn"
diff --git a/gen/Network/AWS/CloudHSM/ModifyHsm.hs b/gen/Network/AWS/CloudHSM/ModifyHsm.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CloudHSM/ModifyHsm.hs
@@ -0,0 +1,161 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.CloudHSM.ModifyHsm
+-- 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.
+
+-- | Modifies an HSM.
+--
+-- <http://docs.aws.amazon.com/cloudhsm/latest/dg/API_ModifyHsm.html>
+module Network.AWS.CloudHSM.ModifyHsm
+    (
+    -- * Request
+      ModifyHsm
+    -- ** Request constructor
+    , modifyHsm
+    -- ** Request lenses
+    , mhEniIp
+    , mhExternalId
+    , mhHsmArn
+    , mhIamRoleArn
+    , mhSubnetId
+    , mhSyslogIp
+
+    -- * Response
+    , ModifyHsmResponse
+    -- ** Response constructor
+    , modifyHsmResponse
+    -- ** Response lenses
+    , mhrHsmArn
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.JSON
+import Network.AWS.CloudHSM.Types
+import qualified GHC.Exts
+
+data ModifyHsm = ModifyHsm
+    { _mhEniIp      :: Maybe Text
+    , _mhExternalId :: Maybe Text
+    , _mhHsmArn     :: Text
+    , _mhIamRoleArn :: Maybe Text
+    , _mhSubnetId   :: Maybe Text
+    , _mhSyslogIp   :: Maybe Text
+    } deriving (Eq, Ord, Show)
+
+-- | 'ModifyHsm' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'mhEniIp' @::@ 'Maybe' 'Text'
+--
+-- * 'mhExternalId' @::@ 'Maybe' 'Text'
+--
+-- * 'mhHsmArn' @::@ 'Text'
+--
+-- * 'mhIamRoleArn' @::@ 'Maybe' 'Text'
+--
+-- * 'mhSubnetId' @::@ 'Maybe' 'Text'
+--
+-- * 'mhSyslogIp' @::@ 'Maybe' 'Text'
+--
+modifyHsm :: Text -- ^ 'mhHsmArn'
+          -> ModifyHsm
+modifyHsm p1 = ModifyHsm
+    { _mhHsmArn     = p1
+    , _mhSubnetId   = Nothing
+    , _mhEniIp      = Nothing
+    , _mhIamRoleArn = Nothing
+    , _mhExternalId = Nothing
+    , _mhSyslogIp   = Nothing
+    }
+
+-- | The new IP address for the elastic network interface attached to the HSM.
+mhEniIp :: Lens' ModifyHsm (Maybe Text)
+mhEniIp = lens _mhEniIp (\s a -> s { _mhEniIp = a })
+
+-- | The new external ID.
+mhExternalId :: Lens' ModifyHsm (Maybe Text)
+mhExternalId = lens _mhExternalId (\s a -> s { _mhExternalId = a })
+
+-- | The ARN of the HSM to modify.
+mhHsmArn :: Lens' ModifyHsm Text
+mhHsmArn = lens _mhHsmArn (\s a -> s { _mhHsmArn = a })
+
+-- | The new IAM role ARN.
+mhIamRoleArn :: Lens' ModifyHsm (Maybe Text)
+mhIamRoleArn = lens _mhIamRoleArn (\s a -> s { _mhIamRoleArn = a })
+
+-- | The new identifier of the subnet that the HSM is in.
+mhSubnetId :: Lens' ModifyHsm (Maybe Text)
+mhSubnetId = lens _mhSubnetId (\s a -> s { _mhSubnetId = a })
+
+-- | The new IP address for the syslog monitoring server.
+mhSyslogIp :: Lens' ModifyHsm (Maybe Text)
+mhSyslogIp = lens _mhSyslogIp (\s a -> s { _mhSyslogIp = a })
+
+newtype ModifyHsmResponse = ModifyHsmResponse
+    { _mhrHsmArn :: Maybe Text
+    } deriving (Eq, Ord, Show, Monoid)
+
+-- | 'ModifyHsmResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'mhrHsmArn' @::@ 'Maybe' 'Text'
+--
+modifyHsmResponse :: ModifyHsmResponse
+modifyHsmResponse = ModifyHsmResponse
+    { _mhrHsmArn = Nothing
+    }
+
+-- | The ARN of the HSM.
+mhrHsmArn :: Lens' ModifyHsmResponse (Maybe Text)
+mhrHsmArn = lens _mhrHsmArn (\s a -> s { _mhrHsmArn = a })
+
+instance ToPath ModifyHsm where
+    toPath = const "/"
+
+instance ToQuery ModifyHsm where
+    toQuery = const mempty
+
+instance ToHeaders ModifyHsm
+
+instance ToJSON ModifyHsm where
+    toJSON ModifyHsm{..} = object
+        [ "HsmArn"     .= _mhHsmArn
+        , "SubnetId"   .= _mhSubnetId
+        , "EniIp"      .= _mhEniIp
+        , "IamRoleArn" .= _mhIamRoleArn
+        , "ExternalId" .= _mhExternalId
+        , "SyslogIp"   .= _mhSyslogIp
+        ]
+
+instance AWSRequest ModifyHsm where
+    type Sv ModifyHsm = CloudHSM
+    type Rs ModifyHsm = ModifyHsmResponse
+
+    request  = post "ModifyHsm"
+    response = jsonResponse
+
+instance FromJSON ModifyHsmResponse where
+    parseJSON = withObject "ModifyHsmResponse" $ \o -> ModifyHsmResponse
+        <$> o .:? "HsmArn"
diff --git a/gen/Network/AWS/CloudHSM/ModifyLunaClient.hs b/gen/Network/AWS/CloudHSM/ModifyLunaClient.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CloudHSM/ModifyLunaClient.hs
@@ -0,0 +1,125 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.CloudHSM.ModifyLunaClient
+-- 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.
+
+-- | Modifies the certificate used by the client.
+--
+-- This action can potentially start a workflow to install the new certificate
+-- on the client's HSMs.
+--
+-- <http://docs.aws.amazon.com/cloudhsm/latest/dg/API_ModifyLunaClient.html>
+module Network.AWS.CloudHSM.ModifyLunaClient
+    (
+    -- * Request
+      ModifyLunaClient
+    -- ** Request constructor
+    , modifyLunaClient
+    -- ** Request lenses
+    , mlcCertificate
+    , mlcClientArn
+
+    -- * Response
+    , ModifyLunaClientResponse
+    -- ** Response constructor
+    , modifyLunaClientResponse
+    -- ** Response lenses
+    , mlcrClientArn
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.JSON
+import Network.AWS.CloudHSM.Types
+import qualified GHC.Exts
+
+data ModifyLunaClient = ModifyLunaClient
+    { _mlcCertificate :: Text
+    , _mlcClientArn   :: Text
+    } deriving (Eq, Ord, Show)
+
+-- | 'ModifyLunaClient' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'mlcCertificate' @::@ 'Text'
+--
+-- * 'mlcClientArn' @::@ 'Text'
+--
+modifyLunaClient :: Text -- ^ 'mlcClientArn'
+                 -> Text -- ^ 'mlcCertificate'
+                 -> ModifyLunaClient
+modifyLunaClient p1 p2 = ModifyLunaClient
+    { _mlcClientArn   = p1
+    , _mlcCertificate = p2
+    }
+
+-- | The new certificate for the client.
+mlcCertificate :: Lens' ModifyLunaClient Text
+mlcCertificate = lens _mlcCertificate (\s a -> s { _mlcCertificate = a })
+
+-- | The ARN of the client.
+mlcClientArn :: Lens' ModifyLunaClient Text
+mlcClientArn = lens _mlcClientArn (\s a -> s { _mlcClientArn = a })
+
+newtype ModifyLunaClientResponse = ModifyLunaClientResponse
+    { _mlcrClientArn :: Maybe Text
+    } deriving (Eq, Ord, Show, Monoid)
+
+-- | 'ModifyLunaClientResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'mlcrClientArn' @::@ 'Maybe' 'Text'
+--
+modifyLunaClientResponse :: ModifyLunaClientResponse
+modifyLunaClientResponse = ModifyLunaClientResponse
+    { _mlcrClientArn = Nothing
+    }
+
+-- | The ARN of the client.
+mlcrClientArn :: Lens' ModifyLunaClientResponse (Maybe Text)
+mlcrClientArn = lens _mlcrClientArn (\s a -> s { _mlcrClientArn = a })
+
+instance ToPath ModifyLunaClient where
+    toPath = const "/"
+
+instance ToQuery ModifyLunaClient where
+    toQuery = const mempty
+
+instance ToHeaders ModifyLunaClient
+
+instance ToJSON ModifyLunaClient where
+    toJSON ModifyLunaClient{..} = object
+        [ "ClientArn"   .= _mlcClientArn
+        , "Certificate" .= _mlcCertificate
+        ]
+
+instance AWSRequest ModifyLunaClient where
+    type Sv ModifyLunaClient = CloudHSM
+    type Rs ModifyLunaClient = ModifyLunaClientResponse
+
+    request  = post "ModifyLunaClient"
+    response = jsonResponse
+
+instance FromJSON ModifyLunaClientResponse where
+    parseJSON = withObject "ModifyLunaClientResponse" $ \o -> ModifyLunaClientResponse
+        <$> o .:? "ClientArn"
diff --git a/gen/Network/AWS/CloudHSM/Types.hs b/gen/Network/AWS/CloudHSM/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CloudHSM/Types.hs
@@ -0,0 +1,219 @@
+{-# 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.CloudHSM.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.CloudHSM.Types
+    (
+    -- * Service
+      CloudHSM
+    -- ** Error
+    , JSONError
+
+    -- * CloudHsmObjectState
+    , CloudHsmObjectState (..)
+
+    -- * SubscriptionType
+    , SubscriptionType (..)
+
+    -- * HsmStatus
+    , HsmStatus (..)
+
+    -- * ClientVersion
+    , ClientVersion (..)
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Signing
+import qualified GHC.Exts
+
+-- | Version @2014-05-30@ of the Amazon CloudHSM service.
+data CloudHSM
+
+instance AWSService CloudHSM where
+    type Sg CloudHSM = V4
+    type Er CloudHSM = JSONError
+
+    service = service'
+      where
+        service' :: Service CloudHSM
+        service' = Service
+            { _svcAbbrev       = "CloudHSM"
+            , _svcPrefix       = "cloudhsm"
+            , _svcVersion      = "2014-05-30"
+            , _svcTargetPrefix = Just "CloudHsmFrontendService"
+            , _svcJSONVersion  = Just "1.1"
+            , _svcHandle       = handle
+            , _svcRetry        = retry
+            }
+
+        handle :: Status
+               -> Maybe (LazyByteString -> ServiceError JSONError)
+        handle = jsonError statusSuccess service'
+
+        retry :: Retry CloudHSM
+        retry = Exponential
+            { _retryBase     = 0.05
+            , _retryGrowth   = 2
+            , _retryAttempts = 5
+            , _retryCheck    = check
+            }
+
+        check :: Status
+              -> JSONError
+              -> Bool
+        check (statusCode -> s) (awsErrorCode -> e)
+            | s == 500  = True -- General Server Error
+            | s == 509  = True -- Limit Exceeded
+            | s == 503  = True -- Service Unavailable
+            | otherwise = False
+
+data CloudHsmObjectState
+    = Degraded -- ^ DEGRADED
+    | Ready    -- ^ READY
+    | Updating -- ^ UPDATING
+      deriving (Eq, Ord, Show, Generic, Enum)
+
+instance Hashable CloudHsmObjectState
+
+instance FromText CloudHsmObjectState where
+    parser = takeLowerText >>= \case
+        "degraded" -> pure Degraded
+        "ready"    -> pure Ready
+        "updating" -> pure Updating
+        e          -> fail $
+            "Failure parsing CloudHsmObjectState from " ++ show e
+
+instance ToText CloudHsmObjectState where
+    toText = \case
+        Degraded -> "DEGRADED"
+        Ready    -> "READY"
+        Updating -> "UPDATING"
+
+instance ToByteString CloudHsmObjectState
+instance ToHeader     CloudHsmObjectState
+instance ToQuery      CloudHsmObjectState
+
+instance FromJSON CloudHsmObjectState where
+    parseJSON = parseJSONText "CloudHsmObjectState"
+
+instance ToJSON CloudHsmObjectState where
+    toJSON = toJSONText
+
+data SubscriptionType
+    = Production -- ^ PRODUCTION
+      deriving (Eq, Ord, Show, Generic, Enum)
+
+instance Hashable SubscriptionType
+
+instance FromText SubscriptionType where
+    parser = takeLowerText >>= \case
+        "production" -> pure Production
+        e            -> fail $
+            "Failure parsing SubscriptionType from " ++ show e
+
+instance ToText SubscriptionType where
+    toText Production = "PRODUCTION"
+
+instance ToByteString SubscriptionType
+instance ToHeader     SubscriptionType
+instance ToQuery      SubscriptionType
+
+instance FromJSON SubscriptionType where
+    parseJSON = parseJSONText "SubscriptionType"
+
+instance ToJSON SubscriptionType where
+    toJSON = toJSONText
+
+data HsmStatus
+    = HSDegraded    -- ^ DEGRADED
+    | HSPending     -- ^ PENDING
+    | HSRunning     -- ^ RUNNING
+    | HSSuspended   -- ^ SUSPENDED
+    | HSTerminated  -- ^ TERMINATED
+    | HSTerminating -- ^ TERMINATING
+    | HSUpdating    -- ^ UPDATING
+      deriving (Eq, Ord, Show, Generic, Enum)
+
+instance Hashable HsmStatus
+
+instance FromText HsmStatus where
+    parser = takeLowerText >>= \case
+        "degraded"    -> pure HSDegraded
+        "pending"     -> pure HSPending
+        "running"     -> pure HSRunning
+        "suspended"   -> pure HSSuspended
+        "terminated"  -> pure HSTerminated
+        "terminating" -> pure HSTerminating
+        "updating"    -> pure HSUpdating
+        e             -> fail $
+            "Failure parsing HsmStatus from " ++ show e
+
+instance ToText HsmStatus where
+    toText = \case
+        HSDegraded    -> "DEGRADED"
+        HSPending     -> "PENDING"
+        HSRunning     -> "RUNNING"
+        HSSuspended   -> "SUSPENDED"
+        HSTerminated  -> "TERMINATED"
+        HSTerminating -> "TERMINATING"
+        HSUpdating    -> "UPDATING"
+
+instance ToByteString HsmStatus
+instance ToHeader     HsmStatus
+instance ToQuery      HsmStatus
+
+instance FromJSON HsmStatus where
+    parseJSON = parseJSONText "HsmStatus"
+
+instance ToJSON HsmStatus where
+    toJSON = toJSONText
+
+data ClientVersion
+    = V51 -- ^ 5.1
+    | V53 -- ^ 5.3
+      deriving (Eq, Ord, Show, Generic, Enum)
+
+instance Hashable ClientVersion
+
+instance FromText ClientVersion where
+    parser = takeLowerText >>= \case
+        "5.1" -> pure V51
+        "5.3" -> pure V53
+        e     -> fail $
+            "Failure parsing ClientVersion from " ++ show e
+
+instance ToText ClientVersion where
+    toText = \case
+        V51 -> "5.1"
+        V53 -> "5.3"
+
+instance ToByteString ClientVersion
+instance ToHeader     ClientVersion
+instance ToQuery      ClientVersion
+
+instance FromJSON ClientVersion where
+    parseJSON = parseJSONText "ClientVersion"
+
+instance ToJSON ClientVersion where
+    toJSON = toJSONText
