diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -8,7 +8,7 @@
 
 ## Version
 
-`1.5.0`
+`1.6.0`
 
 
 ## Description
diff --git a/amazonka-workspaces.cabal b/amazonka-workspaces.cabal
--- a/amazonka-workspaces.cabal
+++ b/amazonka-workspaces.cabal
@@ -1,5 +1,5 @@
 name:                  amazonka-workspaces
-version:               1.5.0
+version:               1.6.0
 synopsis:              Amazon WorkSpaces SDK.
 homepage:              https://github.com/brendanhay/amazonka
 bug-reports:           https://github.com/brendanhay/amazonka/issues
@@ -7,7 +7,7 @@
 license-file:          LICENSE
 author:                Brendan Hay
 maintainer:            Brendan Hay <brendan.g.hay+amazonka@gmail.com>
-copyright:             Copyright (c) 2013-2017 Brendan Hay
+copyright:             Copyright (c) 2013-2018 Brendan Hay
 category:              Network, AWS, Cloud, Distributed Computing
 build-type:            Simple
 cabal-version:         >= 1.10
@@ -45,21 +45,30 @@
 
     exposed-modules:
           Network.AWS.WorkSpaces
+        , Network.AWS.WorkSpaces.AssociateIPGroups
+        , Network.AWS.WorkSpaces.AuthorizeIPRules
+        , Network.AWS.WorkSpaces.CreateIPGroup
         , Network.AWS.WorkSpaces.CreateTags
         , Network.AWS.WorkSpaces.CreateWorkspaces
+        , Network.AWS.WorkSpaces.DeleteIPGroup
         , Network.AWS.WorkSpaces.DeleteTags
+        , Network.AWS.WorkSpaces.DescribeIPGroups
         , Network.AWS.WorkSpaces.DescribeTags
         , Network.AWS.WorkSpaces.DescribeWorkspaceBundles
         , Network.AWS.WorkSpaces.DescribeWorkspaceDirectories
         , Network.AWS.WorkSpaces.DescribeWorkspaces
         , Network.AWS.WorkSpaces.DescribeWorkspacesConnectionStatus
+        , Network.AWS.WorkSpaces.DisassociateIPGroups
         , Network.AWS.WorkSpaces.ModifyWorkspaceProperties
+        , Network.AWS.WorkSpaces.ModifyWorkspaceState
         , Network.AWS.WorkSpaces.RebootWorkspaces
         , Network.AWS.WorkSpaces.RebuildWorkspaces
+        , Network.AWS.WorkSpaces.RevokeIPRules
         , Network.AWS.WorkSpaces.StartWorkspaces
         , Network.AWS.WorkSpaces.StopWorkspaces
         , Network.AWS.WorkSpaces.TerminateWorkspaces
         , Network.AWS.WorkSpaces.Types
+        , Network.AWS.WorkSpaces.UpdateRulesOfIPGroup
         , Network.AWS.WorkSpaces.Waiters
 
     other-modules:
@@ -67,7 +76,7 @@
         , Network.AWS.WorkSpaces.Types.Sum
 
     build-depends:
-          amazonka-core == 1.5.0.*
+          amazonka-core == 1.6.0.*
         , base          >= 4.7     && < 5
 
 test-suite amazonka-workspaces-test
@@ -87,8 +96,8 @@
         , Test.AWS.WorkSpaces.Internal
 
     build-depends:
-          amazonka-core == 1.5.0.*
-        , amazonka-test == 1.5.0.*
+          amazonka-core == 1.6.0.*
+        , amazonka-test == 1.6.0.*
         , amazonka-workspaces
         , base
         , bytestring
diff --git a/fixture/AssociateIPGroups.yaml b/fixture/AssociateIPGroups.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateIPGroups.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/AssociateIPGroupsResponse.proto b/fixture/AssociateIPGroupsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateIPGroupsResponse.proto
diff --git a/fixture/AuthorizeIPRules.yaml b/fixture/AuthorizeIPRules.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AuthorizeIPRules.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/AuthorizeIPRulesResponse.proto b/fixture/AuthorizeIPRulesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AuthorizeIPRulesResponse.proto
diff --git a/fixture/CreateIPGroup.yaml b/fixture/CreateIPGroup.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateIPGroup.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateIPGroupResponse.proto b/fixture/CreateIPGroupResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateIPGroupResponse.proto
diff --git a/fixture/DeleteIPGroup.yaml b/fixture/DeleteIPGroup.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteIPGroup.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteIPGroupResponse.proto b/fixture/DeleteIPGroupResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteIPGroupResponse.proto
diff --git a/fixture/DescribeIPGroups.yaml b/fixture/DescribeIPGroups.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeIPGroups.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeIPGroupsResponse.proto b/fixture/DescribeIPGroupsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeIPGroupsResponse.proto
diff --git a/fixture/DisassociateIPGroups.yaml b/fixture/DisassociateIPGroups.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateIPGroups.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DisassociateIPGroupsResponse.proto b/fixture/DisassociateIPGroupsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateIPGroupsResponse.proto
diff --git a/fixture/ModifyWorkspaceState.yaml b/fixture/ModifyWorkspaceState.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyWorkspaceState.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifyWorkspaceStateResponse.proto b/fixture/ModifyWorkspaceStateResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyWorkspaceStateResponse.proto
diff --git a/fixture/RevokeIPRules.yaml b/fixture/RevokeIPRules.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/RevokeIPRules.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/RevokeIPRulesResponse.proto b/fixture/RevokeIPRulesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/RevokeIPRulesResponse.proto
diff --git a/fixture/UpdateRulesOfIPGroup.yaml b/fixture/UpdateRulesOfIPGroup.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateRulesOfIPGroup.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateRulesOfIPGroupResponse.proto b/fixture/UpdateRulesOfIPGroupResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateRulesOfIPGroupResponse.proto
diff --git a/gen/Network/AWS/WorkSpaces.hs b/gen/Network/AWS/WorkSpaces.hs
--- a/gen/Network/AWS/WorkSpaces.hs
+++ b/gen/Network/AWS/WorkSpaces.hs
@@ -5,7 +5,7 @@
 
 -- |
 -- Module      : Network.AWS.WorkSpaces
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -13,7 +13,7 @@
 --
 -- __Amazon WorkSpaces Service__
 --
--- This reference provides detailed information about the Amazon WorkSpaces operations.
+-- Amazon WorkSpaces enables you to provision virtual, cloud-based Microsoft Windows desktops for your users.
 --
 module Network.AWS.WorkSpaces
     (
@@ -26,21 +26,33 @@
     -- ** AccessDeniedException
     , _AccessDeniedException
 
+    -- ** ResourceCreationFailedException
+    , _ResourceCreationFailedException
+
     -- ** ResourceUnavailableException
     , _ResourceUnavailableException
 
     -- ** InvalidParameterValuesException
     , _InvalidParameterValuesException
 
+    -- ** ResourceAssociatedException
+    , _ResourceAssociatedException
+
     -- ** OperationInProgressException
     , _OperationInProgressException
 
+    -- ** ResourceAlreadyExistsException
+    , _ResourceAlreadyExistsException
+
     -- ** ResourceLimitExceededException
     , _ResourceLimitExceededException
 
     -- ** InvalidResourceStateException
     , _InvalidResourceStateException
 
+    -- ** OperationNotSupportedException
+    , _OperationNotSupportedException
+
     -- ** UnsupportedWorkspaceConfigurationException
     , _UnsupportedWorkspaceConfigurationException
 
@@ -53,6 +65,9 @@
     -- * Operations
     -- $operations
 
+    -- ** RevokeIPRules
+    , module Network.AWS.WorkSpaces.RevokeIPRules
+
     -- ** ModifyWorkspaceProperties
     , module Network.AWS.WorkSpaces.ModifyWorkspaceProperties
 
@@ -62,33 +77,57 @@
     -- ** DescribeWorkspaceDirectories (Paginated)
     , module Network.AWS.WorkSpaces.DescribeWorkspaceDirectories
 
+    -- ** DisassociateIPGroups
+    , module Network.AWS.WorkSpaces.DisassociateIPGroups
+
     -- ** DescribeWorkspaceBundles (Paginated)
     , module Network.AWS.WorkSpaces.DescribeWorkspaceBundles
 
+    -- ** AuthorizeIPRules
+    , module Network.AWS.WorkSpaces.AuthorizeIPRules
+
     -- ** RebuildWorkspaces
     , module Network.AWS.WorkSpaces.RebuildWorkspaces
 
+    -- ** ModifyWorkspaceState
+    , module Network.AWS.WorkSpaces.ModifyWorkspaceState
+
+    -- ** CreateIPGroup
+    , module Network.AWS.WorkSpaces.CreateIPGroup
+
     -- ** CreateTags
     , module Network.AWS.WorkSpaces.CreateTags
 
     -- ** DeleteTags
     , module Network.AWS.WorkSpaces.DeleteTags
 
+    -- ** UpdateRulesOfIPGroup
+    , module Network.AWS.WorkSpaces.UpdateRulesOfIPGroup
+
     -- ** StopWorkspaces
     , module Network.AWS.WorkSpaces.StopWorkspaces
 
+    -- ** AssociateIPGroups
+    , module Network.AWS.WorkSpaces.AssociateIPGroups
+
     -- ** DescribeWorkspacesConnectionStatus
     , module Network.AWS.WorkSpaces.DescribeWorkspacesConnectionStatus
 
     -- ** RebootWorkspaces
     , module Network.AWS.WorkSpaces.RebootWorkspaces
 
+    -- ** DeleteIPGroup
+    , module Network.AWS.WorkSpaces.DeleteIPGroup
+
     -- ** TerminateWorkspaces
     , module Network.AWS.WorkSpaces.TerminateWorkspaces
 
     -- ** CreateWorkspaces
     , module Network.AWS.WorkSpaces.CreateWorkspaces
 
+    -- ** DescribeIPGroups
+    , module Network.AWS.WorkSpaces.DescribeIPGroups
+
     -- ** DescribeWorkspaces (Paginated)
     , module Network.AWS.WorkSpaces.DescribeWorkspaces
 
@@ -103,9 +142,18 @@
     -- ** ConnectionState
     , ConnectionState (..)
 
+    -- ** ModificationResourceEnum
+    , ModificationResourceEnum (..)
+
+    -- ** ModificationStateEnum
+    , ModificationStateEnum (..)
+
     -- ** RunningMode
     , RunningMode (..)
 
+    -- ** TargetWorkspaceState
+    , TargetWorkspaceState (..)
+
     -- ** WorkspaceDirectoryState
     , WorkspaceDirectoryState (..)
 
@@ -143,6 +191,18 @@
     , fwcrWorkspaceId
     , fwcrErrorMessage
 
+    -- ** IPRuleItem
+    , IPRuleItem
+    , ipRuleItem
+    , iriRuleDesc
+    , iriIpRule
+
+    -- ** ModificationState
+    , ModificationState
+    , modificationState
+    , msState
+    , msResource
+
     -- ** RebootRequest
     , RebootRequest
     , rebootRequest
@@ -153,6 +213,11 @@
     , rebuildRequest
     , rrWorkspaceId
 
+    -- ** RootStorage
+    , RootStorage
+    , rootStorage
+    , rsCapacity
+
     -- ** StartRequest
     , StartRequest
     , startRequest
@@ -185,6 +250,7 @@
     , wDirectoryId
     , wState
     , wIPAddress
+    , wModificationStates
     , wUserName
     , wSubnetId
     , wBundleId
@@ -202,6 +268,7 @@
     , workspaceBundle
     , wbBundleId
     , wbOwner
+    , wbRootStorage
     , wbName
     , wbComputeType
     , wbUserStorage
@@ -224,6 +291,7 @@
     , wdState
     , wdCustomerUserName
     , wdSubnetIds
+    , wdIpGroupIds
     , wdAlias
     , wdWorkspaceSecurityGroupId
     , wdDirectoryType
@@ -234,8 +302,11 @@
     -- ** WorkspaceProperties
     , WorkspaceProperties
     , workspaceProperties
+    , wpComputeTypeName
     , wpRunningMode
+    , wpRootVolumeSizeGib
     , wpRunningModeAutoStopTimeoutInMinutes
+    , wpUserVolumeSizeGib
 
     -- ** WorkspaceRequest
     , WorkspaceRequest
@@ -248,23 +319,40 @@
     , wrDirectoryId
     , wrUserName
     , wrBundleId
+
+    -- ** WorkspacesIPGroup
+    , WorkspacesIPGroup
+    , workspacesIPGroup
+    , wigGroupDesc
+    , wigUserRules
+    , wigGroupId
+    , wigGroupName
     ) where
 
+import Network.AWS.WorkSpaces.AssociateIPGroups
+import Network.AWS.WorkSpaces.AuthorizeIPRules
+import Network.AWS.WorkSpaces.CreateIPGroup
 import Network.AWS.WorkSpaces.CreateTags
 import Network.AWS.WorkSpaces.CreateWorkspaces
+import Network.AWS.WorkSpaces.DeleteIPGroup
 import Network.AWS.WorkSpaces.DeleteTags
+import Network.AWS.WorkSpaces.DescribeIPGroups
 import Network.AWS.WorkSpaces.DescribeTags
 import Network.AWS.WorkSpaces.DescribeWorkspaceBundles
 import Network.AWS.WorkSpaces.DescribeWorkspaceDirectories
 import Network.AWS.WorkSpaces.DescribeWorkspaces
 import Network.AWS.WorkSpaces.DescribeWorkspacesConnectionStatus
+import Network.AWS.WorkSpaces.DisassociateIPGroups
 import Network.AWS.WorkSpaces.ModifyWorkspaceProperties
+import Network.AWS.WorkSpaces.ModifyWorkspaceState
 import Network.AWS.WorkSpaces.RebootWorkspaces
 import Network.AWS.WorkSpaces.RebuildWorkspaces
+import Network.AWS.WorkSpaces.RevokeIPRules
 import Network.AWS.WorkSpaces.StartWorkspaces
 import Network.AWS.WorkSpaces.StopWorkspaces
 import Network.AWS.WorkSpaces.TerminateWorkspaces
 import Network.AWS.WorkSpaces.Types
+import Network.AWS.WorkSpaces.UpdateRulesOfIPGroup
 import Network.AWS.WorkSpaces.Waiters
 
 {- $errors
diff --git a/gen/Network/AWS/WorkSpaces/AssociateIPGroups.hs b/gen/Network/AWS/WorkSpaces/AssociateIPGroups.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/WorkSpaces/AssociateIPGroups.hs
@@ -0,0 +1,133 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.WorkSpaces.AssociateIPGroups
+-- Copyright   : (c) 2013-2018 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Associates the specified IP access control group with the specified directory.
+--
+--
+module Network.AWS.WorkSpaces.AssociateIPGroups
+    (
+    -- * Creating a Request
+      associateIPGroups
+    , AssociateIPGroups
+    -- * Request Lenses
+    , aigDirectoryId
+    , aigGroupIds
+
+    -- * Destructuring the Response
+    , associateIPGroupsResponse
+    , AssociateIPGroupsResponse
+    -- * Response Lenses
+    , aigrsResponseStatus
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.WorkSpaces.Types
+import Network.AWS.WorkSpaces.Types.Product
+
+-- | /See:/ 'associateIPGroups' smart constructor.
+data AssociateIPGroups = AssociateIPGroups'
+  { _aigDirectoryId :: !Text
+  , _aigGroupIds    :: ![Text]
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'AssociateIPGroups' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aigDirectoryId' - The ID of the directory.
+--
+-- * 'aigGroupIds' - The IDs of one or more IP access control groups.
+associateIPGroups
+    :: Text -- ^ 'aigDirectoryId'
+    -> AssociateIPGroups
+associateIPGroups pDirectoryId_ =
+  AssociateIPGroups' {_aigDirectoryId = pDirectoryId_, _aigGroupIds = mempty}
+
+
+-- | The ID of the directory.
+aigDirectoryId :: Lens' AssociateIPGroups Text
+aigDirectoryId = lens _aigDirectoryId (\ s a -> s{_aigDirectoryId = a})
+
+-- | The IDs of one or more IP access control groups.
+aigGroupIds :: Lens' AssociateIPGroups [Text]
+aigGroupIds = lens _aigGroupIds (\ s a -> s{_aigGroupIds = a}) . _Coerce
+
+instance AWSRequest AssociateIPGroups where
+        type Rs AssociateIPGroups = AssociateIPGroupsResponse
+        request = postJSON workSpaces
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 AssociateIPGroupsResponse' <$> (pure (fromEnum s)))
+
+instance Hashable AssociateIPGroups where
+
+instance NFData AssociateIPGroups where
+
+instance ToHeaders AssociateIPGroups where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("WorkspacesService.AssociateIpGroups" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON AssociateIPGroups where
+        toJSON AssociateIPGroups'{..}
+          = object
+              (catMaybes
+                 [Just ("DirectoryId" .= _aigDirectoryId),
+                  Just ("GroupIds" .= _aigGroupIds)])
+
+instance ToPath AssociateIPGroups where
+        toPath = const "/"
+
+instance ToQuery AssociateIPGroups where
+        toQuery = const mempty
+
+-- | /See:/ 'associateIPGroupsResponse' smart constructor.
+newtype AssociateIPGroupsResponse = AssociateIPGroupsResponse'
+  { _aigrsResponseStatus :: Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'AssociateIPGroupsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aigrsResponseStatus' - -- | The response status code.
+associateIPGroupsResponse
+    :: Int -- ^ 'aigrsResponseStatus'
+    -> AssociateIPGroupsResponse
+associateIPGroupsResponse pResponseStatus_ =
+  AssociateIPGroupsResponse' {_aigrsResponseStatus = pResponseStatus_}
+
+
+-- | -- | The response status code.
+aigrsResponseStatus :: Lens' AssociateIPGroupsResponse Int
+aigrsResponseStatus = lens _aigrsResponseStatus (\ s a -> s{_aigrsResponseStatus = a})
+
+instance NFData AssociateIPGroupsResponse where
diff --git a/gen/Network/AWS/WorkSpaces/AuthorizeIPRules.hs b/gen/Network/AWS/WorkSpaces/AuthorizeIPRules.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/WorkSpaces/AuthorizeIPRules.hs
@@ -0,0 +1,134 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.WorkSpaces.AuthorizeIPRules
+-- Copyright   : (c) 2013-2018 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Adds one or more rules to the specified IP access control group.
+--
+--
+-- This action gives users permission to access their WorkSpaces from the CIDR address ranges specified in the rules.
+--
+module Network.AWS.WorkSpaces.AuthorizeIPRules
+    (
+    -- * Creating a Request
+      authorizeIPRules
+    , AuthorizeIPRules
+    -- * Request Lenses
+    , airGroupId
+    , airUserRules
+
+    -- * Destructuring the Response
+    , authorizeIPRulesResponse
+    , AuthorizeIPRulesResponse
+    -- * Response Lenses
+    , airrsResponseStatus
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.WorkSpaces.Types
+import Network.AWS.WorkSpaces.Types.Product
+
+-- | /See:/ 'authorizeIPRules' smart constructor.
+data AuthorizeIPRules = AuthorizeIPRules'
+  { _airGroupId   :: !Text
+  , _airUserRules :: ![IPRuleItem]
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'AuthorizeIPRules' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'airGroupId' - The ID of the group.
+--
+-- * 'airUserRules' - The rules to add to the group.
+authorizeIPRules
+    :: Text -- ^ 'airGroupId'
+    -> AuthorizeIPRules
+authorizeIPRules pGroupId_ =
+  AuthorizeIPRules' {_airGroupId = pGroupId_, _airUserRules = mempty}
+
+
+-- | The ID of the group.
+airGroupId :: Lens' AuthorizeIPRules Text
+airGroupId = lens _airGroupId (\ s a -> s{_airGroupId = a})
+
+-- | The rules to add to the group.
+airUserRules :: Lens' AuthorizeIPRules [IPRuleItem]
+airUserRules = lens _airUserRules (\ s a -> s{_airUserRules = a}) . _Coerce
+
+instance AWSRequest AuthorizeIPRules where
+        type Rs AuthorizeIPRules = AuthorizeIPRulesResponse
+        request = postJSON workSpaces
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 AuthorizeIPRulesResponse' <$> (pure (fromEnum s)))
+
+instance Hashable AuthorizeIPRules where
+
+instance NFData AuthorizeIPRules where
+
+instance ToHeaders AuthorizeIPRules where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("WorkspacesService.AuthorizeIpRules" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON AuthorizeIPRules where
+        toJSON AuthorizeIPRules'{..}
+          = object
+              (catMaybes
+                 [Just ("GroupId" .= _airGroupId),
+                  Just ("UserRules" .= _airUserRules)])
+
+instance ToPath AuthorizeIPRules where
+        toPath = const "/"
+
+instance ToQuery AuthorizeIPRules where
+        toQuery = const mempty
+
+-- | /See:/ 'authorizeIPRulesResponse' smart constructor.
+newtype AuthorizeIPRulesResponse = AuthorizeIPRulesResponse'
+  { _airrsResponseStatus :: Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'AuthorizeIPRulesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'airrsResponseStatus' - -- | The response status code.
+authorizeIPRulesResponse
+    :: Int -- ^ 'airrsResponseStatus'
+    -> AuthorizeIPRulesResponse
+authorizeIPRulesResponse pResponseStatus_ =
+  AuthorizeIPRulesResponse' {_airrsResponseStatus = pResponseStatus_}
+
+
+-- | -- | The response status code.
+airrsResponseStatus :: Lens' AuthorizeIPRulesResponse Int
+airrsResponseStatus = lens _airrsResponseStatus (\ s a -> s{_airrsResponseStatus = a})
+
+instance NFData AuthorizeIPRulesResponse where
diff --git a/gen/Network/AWS/WorkSpaces/CreateIPGroup.hs b/gen/Network/AWS/WorkSpaces/CreateIPGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/WorkSpaces/CreateIPGroup.hs
@@ -0,0 +1,159 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.WorkSpaces.CreateIPGroup
+-- Copyright   : (c) 2013-2018 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates an IP access control group.
+--
+--
+-- An IP access control group provides you with the ability to control the IP addresses from which users are allowed to access their WorkSpaces. To specify the CIDR address ranges, add rules to your IP access control group and then associate the group with your directory. You can add rules when you create the group or at any time using 'AuthorizeIpRules' .
+--
+-- There is a default IP access control group associated with your directory. If you don't associate an IP access control group with your directory, the default group is used. The default group includes a default rule that allows users to access their WorkSpaces from anywhere. You cannot modify the default IP access control group for your directory.
+--
+module Network.AWS.WorkSpaces.CreateIPGroup
+    (
+    -- * Creating a Request
+      createIPGroup
+    , CreateIPGroup
+    -- * Request Lenses
+    , cigGroupDesc
+    , cigUserRules
+    , cigGroupName
+
+    -- * Destructuring the Response
+    , createIPGroupResponse
+    , CreateIPGroupResponse
+    -- * Response Lenses
+    , cigrsGroupId
+    , cigrsResponseStatus
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.WorkSpaces.Types
+import Network.AWS.WorkSpaces.Types.Product
+
+-- | /See:/ 'createIPGroup' smart constructor.
+data CreateIPGroup = CreateIPGroup'
+  { _cigGroupDesc :: !(Maybe Text)
+  , _cigUserRules :: !(Maybe [IPRuleItem])
+  , _cigGroupName :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CreateIPGroup' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cigGroupDesc' - The description of the group.
+--
+-- * 'cigUserRules' - The rules to add to the group.
+--
+-- * 'cigGroupName' - The name of the group.
+createIPGroup
+    :: Text -- ^ 'cigGroupName'
+    -> CreateIPGroup
+createIPGroup pGroupName_ =
+  CreateIPGroup'
+    { _cigGroupDesc = Nothing
+    , _cigUserRules = Nothing
+    , _cigGroupName = pGroupName_
+    }
+
+
+-- | The description of the group.
+cigGroupDesc :: Lens' CreateIPGroup (Maybe Text)
+cigGroupDesc = lens _cigGroupDesc (\ s a -> s{_cigGroupDesc = a})
+
+-- | The rules to add to the group.
+cigUserRules :: Lens' CreateIPGroup [IPRuleItem]
+cigUserRules = lens _cigUserRules (\ s a -> s{_cigUserRules = a}) . _Default . _Coerce
+
+-- | The name of the group.
+cigGroupName :: Lens' CreateIPGroup Text
+cigGroupName = lens _cigGroupName (\ s a -> s{_cigGroupName = a})
+
+instance AWSRequest CreateIPGroup where
+        type Rs CreateIPGroup = CreateIPGroupResponse
+        request = postJSON workSpaces
+        response
+          = receiveJSON
+              (\ s h x ->
+                 CreateIPGroupResponse' <$>
+                   (x .?> "GroupId") <*> (pure (fromEnum s)))
+
+instance Hashable CreateIPGroup where
+
+instance NFData CreateIPGroup where
+
+instance ToHeaders CreateIPGroup where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("WorkspacesService.CreateIpGroup" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON CreateIPGroup where
+        toJSON CreateIPGroup'{..}
+          = object
+              (catMaybes
+                 [("GroupDesc" .=) <$> _cigGroupDesc,
+                  ("UserRules" .=) <$> _cigUserRules,
+                  Just ("GroupName" .= _cigGroupName)])
+
+instance ToPath CreateIPGroup where
+        toPath = const "/"
+
+instance ToQuery CreateIPGroup where
+        toQuery = const mempty
+
+-- | /See:/ 'createIPGroupResponse' smart constructor.
+data CreateIPGroupResponse = CreateIPGroupResponse'
+  { _cigrsGroupId        :: !(Maybe Text)
+  , _cigrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CreateIPGroupResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cigrsGroupId' - The ID of the group.
+--
+-- * 'cigrsResponseStatus' - -- | The response status code.
+createIPGroupResponse
+    :: Int -- ^ 'cigrsResponseStatus'
+    -> CreateIPGroupResponse
+createIPGroupResponse pResponseStatus_ =
+  CreateIPGroupResponse'
+    {_cigrsGroupId = Nothing, _cigrsResponseStatus = pResponseStatus_}
+
+
+-- | The ID of the group.
+cigrsGroupId :: Lens' CreateIPGroupResponse (Maybe Text)
+cigrsGroupId = lens _cigrsGroupId (\ s a -> s{_cigrsGroupId = a})
+
+-- | -- | The response status code.
+cigrsResponseStatus :: Lens' CreateIPGroupResponse Int
+cigrsResponseStatus = lens _cigrsResponseStatus (\ s a -> s{_cigrsResponseStatus = a})
+
+instance NFData CreateIPGroupResponse where
diff --git a/gen/Network/AWS/WorkSpaces/CreateTags.hs b/gen/Network/AWS/WorkSpaces/CreateTags.hs
--- a/gen/Network/AWS/WorkSpaces/CreateTags.hs
+++ b/gen/Network/AWS/WorkSpaces/CreateTags.hs
@@ -12,13 +12,13 @@
 
 -- |
 -- Module      : Network.AWS.WorkSpaces.CreateTags
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Creates tags for a WorkSpace.
+-- Creates the specified tags for the specified WorkSpace.
 --
 --
 module Network.AWS.WorkSpaces.CreateTags
@@ -44,11 +44,7 @@
 import Network.AWS.WorkSpaces.Types
 import Network.AWS.WorkSpaces.Types.Product
 
--- | The request of the 'CreateTags' operation.
---
---
---
--- /See:/ 'createTags' smart constructor.
+-- | /See:/ 'createTags' smart constructor.
 data CreateTags = CreateTags'
   { _ctResourceId :: !Text
   , _ctTags       :: ![Tag]
@@ -59,9 +55,9 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'ctResourceId' - The resource ID of the request.
+-- * 'ctResourceId' - The ID of the WorkSpace. To find this ID, use 'DescribeWorkspaces' .
 --
--- * 'ctTags' - The tags of the request.
+-- * 'ctTags' - The tags. Each WorkSpace can have a maximum of 50 tags.
 createTags
     :: Text -- ^ 'ctResourceId'
     -> CreateTags
@@ -69,13 +65,13 @@
   CreateTags' {_ctResourceId = pResourceId_, _ctTags = mempty}
 
 
--- | The resource ID of the request.
+-- | The ID of the WorkSpace. To find this ID, use 'DescribeWorkspaces' .
 ctResourceId :: Lens' CreateTags Text
-ctResourceId = lens _ctResourceId (\ s a -> s{_ctResourceId = a});
+ctResourceId = lens _ctResourceId (\ s a -> s{_ctResourceId = a})
 
--- | The tags of the request.
+-- | The tags. Each WorkSpace can have a maximum of 50 tags.
 ctTags :: Lens' CreateTags [Tag]
-ctTags = lens _ctTags (\ s a -> s{_ctTags = a}) . _Coerce;
+ctTags = lens _ctTags (\ s a -> s{_ctTags = a}) . _Coerce
 
 instance AWSRequest CreateTags where
         type Rs CreateTags = CreateTagsResponse
@@ -111,11 +107,7 @@
 instance ToQuery CreateTags where
         toQuery = const mempty
 
--- | The result of the 'CreateTags' operation.
---
---
---
--- /See:/ 'createTagsResponse' smart constructor.
+-- | /See:/ 'createTagsResponse' smart constructor.
 newtype CreateTagsResponse = CreateTagsResponse'
   { _ctrsResponseStatus :: Int
   } deriving (Eq, Read, Show, Data, Typeable, Generic)
@@ -135,6 +127,6 @@
 
 -- | -- | The response status code.
 ctrsResponseStatus :: Lens' CreateTagsResponse Int
-ctrsResponseStatus = lens _ctrsResponseStatus (\ s a -> s{_ctrsResponseStatus = a});
+ctrsResponseStatus = lens _ctrsResponseStatus (\ s a -> s{_ctrsResponseStatus = a})
 
 instance NFData CreateTagsResponse where
diff --git a/gen/Network/AWS/WorkSpaces/CreateWorkspaces.hs b/gen/Network/AWS/WorkSpaces/CreateWorkspaces.hs
--- a/gen/Network/AWS/WorkSpaces/CreateWorkspaces.hs
+++ b/gen/Network/AWS/WorkSpaces/CreateWorkspaces.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.WorkSpaces.CreateWorkspaces
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -21,6 +21,8 @@
 -- Creates one or more WorkSpaces.
 --
 --
+-- This operation is asynchronous and returns before the WorkSpaces are created.
+--
 module Network.AWS.WorkSpaces.CreateWorkspaces
     (
     -- * Creating a Request
@@ -45,11 +47,7 @@
 import Network.AWS.WorkSpaces.Types
 import Network.AWS.WorkSpaces.Types.Product
 
--- | Contains the inputs for the 'CreateWorkspaces' operation.
---
---
---
--- /See:/ 'createWorkspaces' smart constructor.
+-- | /See:/ 'createWorkspaces' smart constructor.
 newtype CreateWorkspaces = CreateWorkspaces'
   { _cwWorkspaces :: List1 WorkspaceRequest
   } deriving (Eq, Read, Show, Data, Typeable, Generic)
@@ -59,7 +57,7 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'cwWorkspaces' - An array of structures that specify the WorkSpaces to create.
+-- * 'cwWorkspaces' - The WorkSpaces to create. You can specify up to 25 WorkSpaces.
 createWorkspaces
     :: NonEmpty WorkspaceRequest -- ^ 'cwWorkspaces'
     -> CreateWorkspaces
@@ -67,9 +65,9 @@
   CreateWorkspaces' {_cwWorkspaces = _List1 # pWorkspaces_}
 
 
--- | An array of structures that specify the WorkSpaces to create.
+-- | The WorkSpaces to create. You can specify up to 25 WorkSpaces.
 cwWorkspaces :: Lens' CreateWorkspaces (NonEmpty WorkspaceRequest)
-cwWorkspaces = lens _cwWorkspaces (\ s a -> s{_cwWorkspaces = a}) . _List1;
+cwWorkspaces = lens _cwWorkspaces (\ s a -> s{_cwWorkspaces = a}) . _List1
 
 instance AWSRequest CreateWorkspaces where
         type Rs CreateWorkspaces = CreateWorkspacesResponse
@@ -106,11 +104,7 @@
 instance ToQuery CreateWorkspaces where
         toQuery = const mempty
 
--- | Contains the result of the 'CreateWorkspaces' operation.
---
---
---
--- /See:/ 'createWorkspacesResponse' smart constructor.
+-- | /See:/ 'createWorkspacesResponse' smart constructor.
 data CreateWorkspacesResponse = CreateWorkspacesResponse'
   { _cwrsFailedRequests  :: !(Maybe [FailedCreateWorkspaceRequest])
   , _cwrsPendingRequests :: !(Maybe [Workspace])
@@ -122,9 +116,9 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'cwrsFailedRequests' - An array of structures that represent the WorkSpaces that could not be created.
+-- * 'cwrsFailedRequests' - Information about the WorkSpaces that could not be created.
 --
--- * 'cwrsPendingRequests' - An array of structures that represent the WorkSpaces that were created. Because this operation is asynchronous, the identifier in @WorkspaceId@ is not immediately available. If you immediately call 'DescribeWorkspaces' with this identifier, no information will be returned.
+-- * 'cwrsPendingRequests' - Information about the WorkSpaces that were created. Because this operation is asynchronous, the identifier returned is not immediately available for use with other operations. For example, if you call 'DescribeWorkspaces' before the WorkSpace is created, the information returned can be incomplete.
 --
 -- * 'cwrsResponseStatus' - -- | The response status code.
 createWorkspacesResponse
@@ -132,22 +126,22 @@
     -> CreateWorkspacesResponse
 createWorkspacesResponse pResponseStatus_ =
   CreateWorkspacesResponse'
-  { _cwrsFailedRequests = Nothing
-  , _cwrsPendingRequests = Nothing
-  , _cwrsResponseStatus = pResponseStatus_
-  }
+    { _cwrsFailedRequests = Nothing
+    , _cwrsPendingRequests = Nothing
+    , _cwrsResponseStatus = pResponseStatus_
+    }
 
 
--- | An array of structures that represent the WorkSpaces that could not be created.
+-- | Information about the WorkSpaces that could not be created.
 cwrsFailedRequests :: Lens' CreateWorkspacesResponse [FailedCreateWorkspaceRequest]
-cwrsFailedRequests = lens _cwrsFailedRequests (\ s a -> s{_cwrsFailedRequests = a}) . _Default . _Coerce;
+cwrsFailedRequests = lens _cwrsFailedRequests (\ s a -> s{_cwrsFailedRequests = a}) . _Default . _Coerce
 
--- | An array of structures that represent the WorkSpaces that were created. Because this operation is asynchronous, the identifier in @WorkspaceId@ is not immediately available. If you immediately call 'DescribeWorkspaces' with this identifier, no information will be returned.
+-- | Information about the WorkSpaces that were created. Because this operation is asynchronous, the identifier returned is not immediately available for use with other operations. For example, if you call 'DescribeWorkspaces' before the WorkSpace is created, the information returned can be incomplete.
 cwrsPendingRequests :: Lens' CreateWorkspacesResponse [Workspace]
-cwrsPendingRequests = lens _cwrsPendingRequests (\ s a -> s{_cwrsPendingRequests = a}) . _Default . _Coerce;
+cwrsPendingRequests = lens _cwrsPendingRequests (\ s a -> s{_cwrsPendingRequests = a}) . _Default . _Coerce
 
 -- | -- | The response status code.
 cwrsResponseStatus :: Lens' CreateWorkspacesResponse Int
-cwrsResponseStatus = lens _cwrsResponseStatus (\ s a -> s{_cwrsResponseStatus = a});
+cwrsResponseStatus = lens _cwrsResponseStatus (\ s a -> s{_cwrsResponseStatus = a})
 
 instance NFData CreateWorkspacesResponse where
diff --git a/gen/Network/AWS/WorkSpaces/DeleteIPGroup.hs b/gen/Network/AWS/WorkSpaces/DeleteIPGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/WorkSpaces/DeleteIPGroup.hs
@@ -0,0 +1,123 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.WorkSpaces.DeleteIPGroup
+-- Copyright   : (c) 2013-2018 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified IP access control group.
+--
+--
+-- You cannot delete an IP access control group that is associated with a directory.
+--
+module Network.AWS.WorkSpaces.DeleteIPGroup
+    (
+    -- * Creating a Request
+      deleteIPGroup
+    , DeleteIPGroup
+    -- * Request Lenses
+    , digGroupId
+
+    -- * Destructuring the Response
+    , deleteIPGroupResponse
+    , DeleteIPGroupResponse
+    -- * Response Lenses
+    , dipgrsResponseStatus
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.WorkSpaces.Types
+import Network.AWS.WorkSpaces.Types.Product
+
+-- | /See:/ 'deleteIPGroup' smart constructor.
+newtype DeleteIPGroup = DeleteIPGroup'
+  { _digGroupId :: Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteIPGroup' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'digGroupId' - The ID of the IP access control group.
+deleteIPGroup
+    :: Text -- ^ 'digGroupId'
+    -> DeleteIPGroup
+deleteIPGroup pGroupId_ = DeleteIPGroup' {_digGroupId = pGroupId_}
+
+
+-- | The ID of the IP access control group.
+digGroupId :: Lens' DeleteIPGroup Text
+digGroupId = lens _digGroupId (\ s a -> s{_digGroupId = a})
+
+instance AWSRequest DeleteIPGroup where
+        type Rs DeleteIPGroup = DeleteIPGroupResponse
+        request = postJSON workSpaces
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 DeleteIPGroupResponse' <$> (pure (fromEnum s)))
+
+instance Hashable DeleteIPGroup where
+
+instance NFData DeleteIPGroup where
+
+instance ToHeaders DeleteIPGroup where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("WorkspacesService.DeleteIpGroup" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON DeleteIPGroup where
+        toJSON DeleteIPGroup'{..}
+          = object
+              (catMaybes [Just ("GroupId" .= _digGroupId)])
+
+instance ToPath DeleteIPGroup where
+        toPath = const "/"
+
+instance ToQuery DeleteIPGroup where
+        toQuery = const mempty
+
+-- | /See:/ 'deleteIPGroupResponse' smart constructor.
+newtype DeleteIPGroupResponse = DeleteIPGroupResponse'
+  { _dipgrsResponseStatus :: Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteIPGroupResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dipgrsResponseStatus' - -- | The response status code.
+deleteIPGroupResponse
+    :: Int -- ^ 'dipgrsResponseStatus'
+    -> DeleteIPGroupResponse
+deleteIPGroupResponse pResponseStatus_ =
+  DeleteIPGroupResponse' {_dipgrsResponseStatus = pResponseStatus_}
+
+
+-- | -- | The response status code.
+dipgrsResponseStatus :: Lens' DeleteIPGroupResponse Int
+dipgrsResponseStatus = lens _dipgrsResponseStatus (\ s a -> s{_dipgrsResponseStatus = a})
+
+instance NFData DeleteIPGroupResponse where
diff --git a/gen/Network/AWS/WorkSpaces/DeleteTags.hs b/gen/Network/AWS/WorkSpaces/DeleteTags.hs
--- a/gen/Network/AWS/WorkSpaces/DeleteTags.hs
+++ b/gen/Network/AWS/WorkSpaces/DeleteTags.hs
@@ -12,13 +12,13 @@
 
 -- |
 -- Module      : Network.AWS.WorkSpaces.DeleteTags
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Deletes tags from a WorkSpace.
+-- Deletes the specified tags from the specified WorkSpace.
 --
 --
 module Network.AWS.WorkSpaces.DeleteTags
@@ -44,11 +44,7 @@
 import Network.AWS.WorkSpaces.Types
 import Network.AWS.WorkSpaces.Types.Product
 
--- | The request of the 'DeleteTags' operation.
---
---
---
--- /See:/ 'deleteTags' smart constructor.
+-- | /See:/ 'deleteTags' smart constructor.
 data DeleteTags = DeleteTags'
   { _dResourceId :: !Text
   , _dTagKeys    :: ![Text]
@@ -59,9 +55,9 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'dResourceId' - The resource ID of the request.
+-- * 'dResourceId' - The ID of the WorkSpace. To find this ID, use 'DescribeWorkspaces' .
 --
--- * 'dTagKeys' - The tag keys of the request.
+-- * 'dTagKeys' - The tag keys.
 deleteTags
     :: Text -- ^ 'dResourceId'
     -> DeleteTags
@@ -69,13 +65,13 @@
   DeleteTags' {_dResourceId = pResourceId_, _dTagKeys = mempty}
 
 
--- | The resource ID of the request.
+-- | The ID of the WorkSpace. To find this ID, use 'DescribeWorkspaces' .
 dResourceId :: Lens' DeleteTags Text
-dResourceId = lens _dResourceId (\ s a -> s{_dResourceId = a});
+dResourceId = lens _dResourceId (\ s a -> s{_dResourceId = a})
 
--- | The tag keys of the request.
+-- | The tag keys.
 dTagKeys :: Lens' DeleteTags [Text]
-dTagKeys = lens _dTagKeys (\ s a -> s{_dTagKeys = a}) . _Coerce;
+dTagKeys = lens _dTagKeys (\ s a -> s{_dTagKeys = a}) . _Coerce
 
 instance AWSRequest DeleteTags where
         type Rs DeleteTags = DeleteTagsResponse
@@ -111,11 +107,7 @@
 instance ToQuery DeleteTags where
         toQuery = const mempty
 
--- | The result of the 'DeleteTags' operation.
---
---
---
--- /See:/ 'deleteTagsResponse' smart constructor.
+-- | /See:/ 'deleteTagsResponse' smart constructor.
 newtype DeleteTagsResponse = DeleteTagsResponse'
   { _drsResponseStatus :: Int
   } deriving (Eq, Read, Show, Data, Typeable, Generic)
@@ -135,6 +127,6 @@
 
 -- | -- | The response status code.
 drsResponseStatus :: Lens' DeleteTagsResponse Int
-drsResponseStatus = lens _drsResponseStatus (\ s a -> s{_drsResponseStatus = a});
+drsResponseStatus = lens _drsResponseStatus (\ s a -> s{_drsResponseStatus = a})
 
 instance NFData DeleteTagsResponse where
diff --git a/gen/Network/AWS/WorkSpaces/DescribeIPGroups.hs b/gen/Network/AWS/WorkSpaces/DescribeIPGroups.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/WorkSpaces/DescribeIPGroups.hs
@@ -0,0 +1,166 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.WorkSpaces.DescribeIPGroups
+-- Copyright   : (c) 2013-2018 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes one or more of your IP access control groups.
+--
+--
+module Network.AWS.WorkSpaces.DescribeIPGroups
+    (
+    -- * Creating a Request
+      describeIPGroups
+    , DescribeIPGroups
+    -- * Request Lenses
+    , dipgGroupIds
+    , dipgNextToken
+    , dipgMaxResults
+
+    -- * Destructuring the Response
+    , describeIPGroupsResponse
+    , DescribeIPGroupsResponse
+    -- * Response Lenses
+    , digsrsResult
+    , digsrsNextToken
+    , digsrsResponseStatus
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.WorkSpaces.Types
+import Network.AWS.WorkSpaces.Types.Product
+
+-- | /See:/ 'describeIPGroups' smart constructor.
+data DescribeIPGroups = DescribeIPGroups'
+  { _dipgGroupIds   :: !(Maybe [Text])
+  , _dipgNextToken  :: !(Maybe Text)
+  , _dipgMaxResults :: !(Maybe Nat)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DescribeIPGroups' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dipgGroupIds' - The IDs of one or more IP access control groups.
+--
+-- * 'dipgNextToken' - The token for the next set of results. (You received this token from a previous call.)
+--
+-- * 'dipgMaxResults' - The maximum number of items to return.
+describeIPGroups
+    :: DescribeIPGroups
+describeIPGroups =
+  DescribeIPGroups'
+    { _dipgGroupIds = Nothing
+    , _dipgNextToken = Nothing
+    , _dipgMaxResults = Nothing
+    }
+
+
+-- | The IDs of one or more IP access control groups.
+dipgGroupIds :: Lens' DescribeIPGroups [Text]
+dipgGroupIds = lens _dipgGroupIds (\ s a -> s{_dipgGroupIds = a}) . _Default . _Coerce
+
+-- | The token for the next set of results. (You received this token from a previous call.)
+dipgNextToken :: Lens' DescribeIPGroups (Maybe Text)
+dipgNextToken = lens _dipgNextToken (\ s a -> s{_dipgNextToken = a})
+
+-- | The maximum number of items to return.
+dipgMaxResults :: Lens' DescribeIPGroups (Maybe Natural)
+dipgMaxResults = lens _dipgMaxResults (\ s a -> s{_dipgMaxResults = a}) . mapping _Nat
+
+instance AWSRequest DescribeIPGroups where
+        type Rs DescribeIPGroups = DescribeIPGroupsResponse
+        request = postJSON workSpaces
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DescribeIPGroupsResponse' <$>
+                   (x .?> "Result" .!@ mempty) <*> (x .?> "NextToken")
+                     <*> (pure (fromEnum s)))
+
+instance Hashable DescribeIPGroups where
+
+instance NFData DescribeIPGroups where
+
+instance ToHeaders DescribeIPGroups where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("WorkspacesService.DescribeIpGroups" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON DescribeIPGroups where
+        toJSON DescribeIPGroups'{..}
+          = object
+              (catMaybes
+                 [("GroupIds" .=) <$> _dipgGroupIds,
+                  ("NextToken" .=) <$> _dipgNextToken,
+                  ("MaxResults" .=) <$> _dipgMaxResults])
+
+instance ToPath DescribeIPGroups where
+        toPath = const "/"
+
+instance ToQuery DescribeIPGroups where
+        toQuery = const mempty
+
+-- | /See:/ 'describeIPGroupsResponse' smart constructor.
+data DescribeIPGroupsResponse = DescribeIPGroupsResponse'
+  { _digsrsResult         :: !(Maybe [WorkspacesIPGroup])
+  , _digsrsNextToken      :: !(Maybe Text)
+  , _digsrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DescribeIPGroupsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'digsrsResult' - Information about the IP access control groups.
+--
+-- * 'digsrsNextToken' - The token to use to retrieve the next set of results, or null if there are no more results available. This token is valid for one day and must be used within that time frame.
+--
+-- * 'digsrsResponseStatus' - -- | The response status code.
+describeIPGroupsResponse
+    :: Int -- ^ 'digsrsResponseStatus'
+    -> DescribeIPGroupsResponse
+describeIPGroupsResponse pResponseStatus_ =
+  DescribeIPGroupsResponse'
+    { _digsrsResult = Nothing
+    , _digsrsNextToken = Nothing
+    , _digsrsResponseStatus = pResponseStatus_
+    }
+
+
+-- | Information about the IP access control groups.
+digsrsResult :: Lens' DescribeIPGroupsResponse [WorkspacesIPGroup]
+digsrsResult = lens _digsrsResult (\ s a -> s{_digsrsResult = a}) . _Default . _Coerce
+
+-- | The token to use to retrieve the next set of results, or null if there are no more results available. This token is valid for one day and must be used within that time frame.
+digsrsNextToken :: Lens' DescribeIPGroupsResponse (Maybe Text)
+digsrsNextToken = lens _digsrsNextToken (\ s a -> s{_digsrsNextToken = a})
+
+-- | -- | The response status code.
+digsrsResponseStatus :: Lens' DescribeIPGroupsResponse Int
+digsrsResponseStatus = lens _digsrsResponseStatus (\ s a -> s{_digsrsResponseStatus = a})
+
+instance NFData DescribeIPGroupsResponse where
diff --git a/gen/Network/AWS/WorkSpaces/DescribeTags.hs b/gen/Network/AWS/WorkSpaces/DescribeTags.hs
--- a/gen/Network/AWS/WorkSpaces/DescribeTags.hs
+++ b/gen/Network/AWS/WorkSpaces/DescribeTags.hs
@@ -12,13 +12,13 @@
 
 -- |
 -- Module      : Network.AWS.WorkSpaces.DescribeTags
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Describes tags for a WorkSpace.
+-- Describes the specified tags for the specified WorkSpace.
 --
 --
 module Network.AWS.WorkSpaces.DescribeTags
@@ -44,11 +44,7 @@
 import Network.AWS.WorkSpaces.Types
 import Network.AWS.WorkSpaces.Types.Product
 
--- | The request of the 'DescribeTags' operation.
---
---
---
--- /See:/ 'describeTags' smart constructor.
+-- | /See:/ 'describeTags' smart constructor.
 newtype DescribeTags = DescribeTags'
   { _dtResourceId :: Text
   } deriving (Eq, Read, Show, Data, Typeable, Generic)
@@ -58,16 +54,16 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'dtResourceId' - The resource ID of the request.
+-- * 'dtResourceId' - The ID of the WorkSpace. To find this ID, use 'DescribeWorkspaces' .
 describeTags
     :: Text -- ^ 'dtResourceId'
     -> DescribeTags
 describeTags pResourceId_ = DescribeTags' {_dtResourceId = pResourceId_}
 
 
--- | The resource ID of the request.
+-- | The ID of the WorkSpace. To find this ID, use 'DescribeWorkspaces' .
 dtResourceId :: Lens' DescribeTags Text
-dtResourceId = lens _dtResourceId (\ s a -> s{_dtResourceId = a});
+dtResourceId = lens _dtResourceId (\ s a -> s{_dtResourceId = a})
 
 instance AWSRequest DescribeTags where
         type Rs DescribeTags = DescribeTagsResponse
@@ -102,11 +98,7 @@
 instance ToQuery DescribeTags where
         toQuery = const mempty
 
--- | The result of the 'DescribeTags' operation.
---
---
---
--- /See:/ 'describeTagsResponse' smart constructor.
+-- | /See:/ 'describeTagsResponse' smart constructor.
 data DescribeTagsResponse = DescribeTagsResponse'
   { _dtrsTagList        :: !(Maybe [Tag])
   , _dtrsResponseStatus :: !Int
@@ -117,7 +109,7 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'dtrsTagList' - The list of tags.
+-- * 'dtrsTagList' - The tags.
 --
 -- * 'dtrsResponseStatus' - -- | The response status code.
 describeTagsResponse
@@ -125,15 +117,15 @@
     -> DescribeTagsResponse
 describeTagsResponse pResponseStatus_ =
   DescribeTagsResponse'
-  {_dtrsTagList = Nothing, _dtrsResponseStatus = pResponseStatus_}
+    {_dtrsTagList = Nothing, _dtrsResponseStatus = pResponseStatus_}
 
 
--- | The list of tags.
+-- | The tags.
 dtrsTagList :: Lens' DescribeTagsResponse [Tag]
-dtrsTagList = lens _dtrsTagList (\ s a -> s{_dtrsTagList = a}) . _Default . _Coerce;
+dtrsTagList = lens _dtrsTagList (\ s a -> s{_dtrsTagList = a}) . _Default . _Coerce
 
 -- | -- | The response status code.
 dtrsResponseStatus :: Lens' DescribeTagsResponse Int
-dtrsResponseStatus = lens _dtrsResponseStatus (\ s a -> s{_dtrsResponseStatus = a});
+dtrsResponseStatus = lens _dtrsResponseStatus (\ s a -> s{_dtrsResponseStatus = a})
 
 instance NFData DescribeTagsResponse where
diff --git a/gen/Network/AWS/WorkSpaces/DescribeWorkspaceBundles.hs b/gen/Network/AWS/WorkSpaces/DescribeWorkspaceBundles.hs
--- a/gen/Network/AWS/WorkSpaces/DescribeWorkspaceBundles.hs
+++ b/gen/Network/AWS/WorkSpaces/DescribeWorkspaceBundles.hs
@@ -12,18 +12,16 @@
 
 -- |
 -- Module      : Network.AWS.WorkSpaces.DescribeWorkspaceBundles
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Obtains information about the WorkSpace bundles that are available to your account in the specified region.
+-- Describes the available WorkSpace bundles.
 --
 --
--- You can filter the results with either the @BundleIds@ parameter, or the @Owner@ parameter, but not both.
---
--- This operation supports pagination with the use of the @NextToken@ request and response parameters. If more results are available, the @NextToken@ response member contains a token that you pass in the next call to this operation to retrieve the next set of items.
+-- You can filter the results using either bundle ID or owner, but not both.
 --
 --
 -- This operation returns paginated results.
@@ -54,11 +52,7 @@
 import Network.AWS.WorkSpaces.Types
 import Network.AWS.WorkSpaces.Types.Product
 
--- | Contains the inputs for the 'DescribeWorkspaceBundles' operation.
---
---
---
--- /See:/ 'describeWorkspaceBundles' smart constructor.
+-- | /See:/ 'describeWorkspaceBundles' smart constructor.
 data DescribeWorkspaceBundles = DescribeWorkspaceBundles'
   { _dwbBundleIds :: !(Maybe (List1 Text))
   , _dwbOwner     :: !(Maybe Text)
@@ -70,29 +64,29 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'dwbBundleIds' - An array of strings that contains the identifiers of the bundles to retrieve. This parameter cannot be combined with any other filter parameter.
+-- * 'dwbBundleIds' - The IDs of the bundles. This parameter cannot be combined with any other filter.
 --
--- * 'dwbOwner' - The owner of the bundles to retrieve. This parameter cannot be combined with any other filter parameter. This contains one of the following values:     * null- Retrieves the bundles that belong to the account making the call.     * @AMAZON@ - Retrieves the bundles that are provided by AWS.
+-- * 'dwbOwner' - The owner of the bundles. This parameter cannot be combined with any other filter. Specify @AMAZON@ to describe the bundles provided by AWS or null to describe the bundles that belong to your account.
 --
--- * 'dwbNextToken' - The @NextToken@ value from a previous call to this operation. Pass null if this is the first call.
+-- * 'dwbNextToken' - The token for the next set of results. (You received this token from a previous call.)
 describeWorkspaceBundles
     :: DescribeWorkspaceBundles
 describeWorkspaceBundles =
   DescribeWorkspaceBundles'
-  {_dwbBundleIds = Nothing, _dwbOwner = Nothing, _dwbNextToken = Nothing}
+    {_dwbBundleIds = Nothing, _dwbOwner = Nothing, _dwbNextToken = Nothing}
 
 
--- | An array of strings that contains the identifiers of the bundles to retrieve. This parameter cannot be combined with any other filter parameter.
+-- | The IDs of the bundles. This parameter cannot be combined with any other filter.
 dwbBundleIds :: Lens' DescribeWorkspaceBundles (Maybe (NonEmpty Text))
-dwbBundleIds = lens _dwbBundleIds (\ s a -> s{_dwbBundleIds = a}) . mapping _List1;
+dwbBundleIds = lens _dwbBundleIds (\ s a -> s{_dwbBundleIds = a}) . mapping _List1
 
--- | The owner of the bundles to retrieve. This parameter cannot be combined with any other filter parameter. This contains one of the following values:     * null- Retrieves the bundles that belong to the account making the call.     * @AMAZON@ - Retrieves the bundles that are provided by AWS.
+-- | The owner of the bundles. This parameter cannot be combined with any other filter. Specify @AMAZON@ to describe the bundles provided by AWS or null to describe the bundles that belong to your account.
 dwbOwner :: Lens' DescribeWorkspaceBundles (Maybe Text)
-dwbOwner = lens _dwbOwner (\ s a -> s{_dwbOwner = a});
+dwbOwner = lens _dwbOwner (\ s a -> s{_dwbOwner = a})
 
--- | The @NextToken@ value from a previous call to this operation. Pass null if this is the first call.
+-- | The token for the next set of results. (You received this token from a previous call.)
 dwbNextToken :: Lens' DescribeWorkspaceBundles (Maybe Text)
-dwbNextToken = lens _dwbNextToken (\ s a -> s{_dwbNextToken = a});
+dwbNextToken = lens _dwbNextToken (\ s a -> s{_dwbNextToken = a})
 
 instance AWSPager DescribeWorkspaceBundles where
         page rq rs
@@ -140,11 +134,7 @@
 instance ToQuery DescribeWorkspaceBundles where
         toQuery = const mempty
 
--- | Contains the results of the 'DescribeWorkspaceBundles' operation.
---
---
---
--- /See:/ 'describeWorkspaceBundlesResponse' smart constructor.
+-- | /See:/ 'describeWorkspaceBundlesResponse' smart constructor.
 data DescribeWorkspaceBundlesResponse = DescribeWorkspaceBundlesResponse'
   { _dwbrsBundles        :: !(Maybe [WorkspaceBundle])
   , _dwbrsNextToken      :: !(Maybe Text)
@@ -156,9 +146,9 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'dwbrsBundles' - An array of structures that contain information about the bundles.
+-- * 'dwbrsBundles' - Information about the bundles.
 --
--- * 'dwbrsNextToken' - If not null, more results are available. Pass this value for the @NextToken@ parameter in a subsequent call to this operation to retrieve the next set of items. This token is valid for one day and must be used within that time frame.
+-- * 'dwbrsNextToken' - The token to use to retrieve the next set of results, or null if there are no more results available. This token is valid for one day and must be used within that time frame.
 --
 -- * 'dwbrsResponseStatus' - -- | The response status code.
 describeWorkspaceBundlesResponse
@@ -166,23 +156,23 @@
     -> DescribeWorkspaceBundlesResponse
 describeWorkspaceBundlesResponse pResponseStatus_ =
   DescribeWorkspaceBundlesResponse'
-  { _dwbrsBundles = Nothing
-  , _dwbrsNextToken = Nothing
-  , _dwbrsResponseStatus = pResponseStatus_
-  }
+    { _dwbrsBundles = Nothing
+    , _dwbrsNextToken = Nothing
+    , _dwbrsResponseStatus = pResponseStatus_
+    }
 
 
--- | An array of structures that contain information about the bundles.
+-- | Information about the bundles.
 dwbrsBundles :: Lens' DescribeWorkspaceBundlesResponse [WorkspaceBundle]
-dwbrsBundles = lens _dwbrsBundles (\ s a -> s{_dwbrsBundles = a}) . _Default . _Coerce;
+dwbrsBundles = lens _dwbrsBundles (\ s a -> s{_dwbrsBundles = a}) . _Default . _Coerce
 
--- | If not null, more results are available. Pass this value for the @NextToken@ parameter in a subsequent call to this operation to retrieve the next set of items. This token is valid for one day and must be used within that time frame.
+-- | The token to use to retrieve the next set of results, or null if there are no more results available. This token is valid for one day and must be used within that time frame.
 dwbrsNextToken :: Lens' DescribeWorkspaceBundlesResponse (Maybe Text)
-dwbrsNextToken = lens _dwbrsNextToken (\ s a -> s{_dwbrsNextToken = a});
+dwbrsNextToken = lens _dwbrsNextToken (\ s a -> s{_dwbrsNextToken = a})
 
 -- | -- | The response status code.
 dwbrsResponseStatus :: Lens' DescribeWorkspaceBundlesResponse Int
-dwbrsResponseStatus = lens _dwbrsResponseStatus (\ s a -> s{_dwbrsResponseStatus = a});
+dwbrsResponseStatus = lens _dwbrsResponseStatus (\ s a -> s{_dwbrsResponseStatus = a})
 
 instance NFData DescribeWorkspaceBundlesResponse
          where
diff --git a/gen/Network/AWS/WorkSpaces/DescribeWorkspaceDirectories.hs b/gen/Network/AWS/WorkSpaces/DescribeWorkspaceDirectories.hs
--- a/gen/Network/AWS/WorkSpaces/DescribeWorkspaceDirectories.hs
+++ b/gen/Network/AWS/WorkSpaces/DescribeWorkspaceDirectories.hs
@@ -12,18 +12,16 @@
 
 -- |
 -- Module      : Network.AWS.WorkSpaces.DescribeWorkspaceDirectories
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Retrieves information about the AWS Directory Service directories in the region that are registered with Amazon WorkSpaces and are available to your account.
+-- Describes the available AWS Directory Service directories that are registered with Amazon WorkSpaces.
 --
 --
--- This operation supports pagination with the use of the @NextToken@ request and response parameters. If more results are available, the @NextToken@ response member contains a token that you pass in the next call to this operation to retrieve the next set of items.
 --
---
 -- This operation returns paginated results.
 module Network.AWS.WorkSpaces.DescribeWorkspaceDirectories
     (
@@ -51,11 +49,7 @@
 import Network.AWS.WorkSpaces.Types
 import Network.AWS.WorkSpaces.Types.Product
 
--- | Contains the inputs for the 'DescribeWorkspaceDirectories' operation.
---
---
---
--- /See:/ 'describeWorkspaceDirectories' smart constructor.
+-- | /See:/ 'describeWorkspaceDirectories' smart constructor.
 data DescribeWorkspaceDirectories = DescribeWorkspaceDirectories'
   { _dwdNextToken    :: !(Maybe Text)
   , _dwdDirectoryIds :: !(Maybe (List1 Text))
@@ -66,23 +60,23 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'dwdNextToken' - The @NextToken@ value from a previous call to this operation. Pass null if this is the first call.
+-- * 'dwdNextToken' - The token for the next set of results. (You received this token from a previous call.)
 --
--- * 'dwdDirectoryIds' - An array of strings that contains the directory identifiers to retrieve information for. If this member is null, all directories are retrieved.
+-- * 'dwdDirectoryIds' - The identifiers of the directories. If the value is null, all directories are retrieved.
 describeWorkspaceDirectories
     :: DescribeWorkspaceDirectories
 describeWorkspaceDirectories =
   DescribeWorkspaceDirectories'
-  {_dwdNextToken = Nothing, _dwdDirectoryIds = Nothing}
+    {_dwdNextToken = Nothing, _dwdDirectoryIds = Nothing}
 
 
--- | The @NextToken@ value from a previous call to this operation. Pass null if this is the first call.
+-- | The token for the next set of results. (You received this token from a previous call.)
 dwdNextToken :: Lens' DescribeWorkspaceDirectories (Maybe Text)
-dwdNextToken = lens _dwdNextToken (\ s a -> s{_dwdNextToken = a});
+dwdNextToken = lens _dwdNextToken (\ s a -> s{_dwdNextToken = a})
 
--- | An array of strings that contains the directory identifiers to retrieve information for. If this member is null, all directories are retrieved.
+-- | The identifiers of the directories. If the value is null, all directories are retrieved.
 dwdDirectoryIds :: Lens' DescribeWorkspaceDirectories (Maybe (NonEmpty Text))
-dwdDirectoryIds = lens _dwdDirectoryIds (\ s a -> s{_dwdDirectoryIds = a}) . mapping _List1;
+dwdDirectoryIds = lens _dwdDirectoryIds (\ s a -> s{_dwdDirectoryIds = a}) . mapping _List1
 
 instance AWSPager DescribeWorkspaceDirectories where
         page rq rs
@@ -131,11 +125,7 @@
 instance ToQuery DescribeWorkspaceDirectories where
         toQuery = const mempty
 
--- | Contains the results of the 'DescribeWorkspaceDirectories' operation.
---
---
---
--- /See:/ 'describeWorkspaceDirectoriesResponse' smart constructor.
+-- | /See:/ 'describeWorkspaceDirectoriesResponse' smart constructor.
 data DescribeWorkspaceDirectoriesResponse = DescribeWorkspaceDirectoriesResponse'
   { _dwdrsDirectories    :: !(Maybe [WorkspaceDirectory])
   , _dwdrsNextToken      :: !(Maybe Text)
@@ -147,9 +137,9 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'dwdrsDirectories' - An array of structures that contain information about the directories.
+-- * 'dwdrsDirectories' - Information about the directories.
 --
--- * 'dwdrsNextToken' - If not null, more results are available. Pass this value for the @NextToken@ parameter in a subsequent call to this operation to retrieve the next set of items. This token is valid for one day and must be used within that time frame.
+-- * 'dwdrsNextToken' - The token to use to retrieve the next set of results, or null if there are no more results available. This token is valid for one day and must be used within that time frame.
 --
 -- * 'dwdrsResponseStatus' - -- | The response status code.
 describeWorkspaceDirectoriesResponse
@@ -157,23 +147,23 @@
     -> DescribeWorkspaceDirectoriesResponse
 describeWorkspaceDirectoriesResponse pResponseStatus_ =
   DescribeWorkspaceDirectoriesResponse'
-  { _dwdrsDirectories = Nothing
-  , _dwdrsNextToken = Nothing
-  , _dwdrsResponseStatus = pResponseStatus_
-  }
+    { _dwdrsDirectories = Nothing
+    , _dwdrsNextToken = Nothing
+    , _dwdrsResponseStatus = pResponseStatus_
+    }
 
 
--- | An array of structures that contain information about the directories.
+-- | Information about the directories.
 dwdrsDirectories :: Lens' DescribeWorkspaceDirectoriesResponse [WorkspaceDirectory]
-dwdrsDirectories = lens _dwdrsDirectories (\ s a -> s{_dwdrsDirectories = a}) . _Default . _Coerce;
+dwdrsDirectories = lens _dwdrsDirectories (\ s a -> s{_dwdrsDirectories = a}) . _Default . _Coerce
 
--- | If not null, more results are available. Pass this value for the @NextToken@ parameter in a subsequent call to this operation to retrieve the next set of items. This token is valid for one day and must be used within that time frame.
+-- | The token to use to retrieve the next set of results, or null if there are no more results available. This token is valid for one day and must be used within that time frame.
 dwdrsNextToken :: Lens' DescribeWorkspaceDirectoriesResponse (Maybe Text)
-dwdrsNextToken = lens _dwdrsNextToken (\ s a -> s{_dwdrsNextToken = a});
+dwdrsNextToken = lens _dwdrsNextToken (\ s a -> s{_dwdrsNextToken = a})
 
 -- | -- | The response status code.
 dwdrsResponseStatus :: Lens' DescribeWorkspaceDirectoriesResponse Int
-dwdrsResponseStatus = lens _dwdrsResponseStatus (\ s a -> s{_dwdrsResponseStatus = a});
+dwdrsResponseStatus = lens _dwdrsResponseStatus (\ s a -> s{_dwdrsResponseStatus = a})
 
 instance NFData DescribeWorkspaceDirectoriesResponse
          where
diff --git a/gen/Network/AWS/WorkSpaces/DescribeWorkspaces.hs b/gen/Network/AWS/WorkSpaces/DescribeWorkspaces.hs
--- a/gen/Network/AWS/WorkSpaces/DescribeWorkspaces.hs
+++ b/gen/Network/AWS/WorkSpaces/DescribeWorkspaces.hs
@@ -12,18 +12,16 @@
 
 -- |
 -- Module      : Network.AWS.WorkSpaces.DescribeWorkspaces
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Obtains information about the specified WorkSpaces.
+-- Describes the specified WorkSpaces.
 --
 --
--- Only one of the filter parameters, such as @BundleId@ , @DirectoryId@ , or @WorkspaceIds@ , can be specified at a time.
---
--- This operation supports pagination with the use of the @NextToken@ request and response parameters. If more results are available, the @NextToken@ response member contains a token that you pass in the next call to this operation to retrieve the next set of items.
+-- You can filter the results using bundle ID, directory ID, or owner, but you can specify only one filter at a time.
 --
 --
 -- This operation returns paginated results.
@@ -57,11 +55,7 @@
 import Network.AWS.WorkSpaces.Types
 import Network.AWS.WorkSpaces.Types.Product
 
--- | Contains the inputs for the 'DescribeWorkspaces' operation.
---
---
---
--- /See:/ 'describeWorkspaces' smart constructor.
+-- | /See:/ 'describeWorkspaces' smart constructor.
 data DescribeWorkspaces = DescribeWorkspaces'
   { _dwDirectoryId  :: !(Maybe Text)
   , _dwWorkspaceIds :: !(Maybe (List1 Text))
@@ -76,53 +70,53 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'dwDirectoryId' - Specifies the directory identifier to which to limit the WorkSpaces. Optionally, you can specify a specific directory user with the @UserName@ parameter. This parameter cannot be combined with any other filter parameter.
+-- * 'dwDirectoryId' - The ID of the directory. In addition, you can optionally specify a specific directory user (see @UserName@ ). This parameter cannot be combined with any other filter.
 --
--- * 'dwWorkspaceIds' - An array of strings that contain the identifiers of the WorkSpaces for which to retrieve information. This parameter cannot be combined with any other filter parameter. Because the 'CreateWorkspaces' operation is asynchronous, the identifier it returns is not immediately available. If you immediately call 'DescribeWorkspaces' with this identifier, no information is returned.
+-- * 'dwWorkspaceIds' - The IDs of the WorkSpaces. This parameter cannot be combined with any other filter. Because the 'CreateWorkspaces' operation is asynchronous, the identifier it returns is not immediately available. If you immediately call 'DescribeWorkspaces' with this identifier, no information is returned.
 --
--- * 'dwUserName' - Used with the @DirectoryId@ parameter to specify the directory user for whom to obtain the WorkSpace.
+-- * 'dwUserName' - The name of the directory user. You must specify this parameter with @DirectoryId@ .
 --
--- * 'dwBundleId' - The identifier of a bundle to obtain the WorkSpaces for. All WorkSpaces that are created from this bundle will be retrieved. This parameter cannot be combined with any other filter parameter.
+-- * 'dwBundleId' - The ID of the bundle. All WorkSpaces that are created from this bundle are retrieved. This parameter cannot be combined with any other filter.
 --
--- * 'dwNextToken' - The @NextToken@ value from a previous call to this operation. Pass null if this is the first call.
+-- * 'dwNextToken' - The token for the next set of results. (You received this token from a previous call.)
 --
 -- * 'dwLimit' - The maximum number of items to return.
 describeWorkspaces
     :: DescribeWorkspaces
 describeWorkspaces =
   DescribeWorkspaces'
-  { _dwDirectoryId = Nothing
-  , _dwWorkspaceIds = Nothing
-  , _dwUserName = Nothing
-  , _dwBundleId = Nothing
-  , _dwNextToken = Nothing
-  , _dwLimit = Nothing
-  }
+    { _dwDirectoryId = Nothing
+    , _dwWorkspaceIds = Nothing
+    , _dwUserName = Nothing
+    , _dwBundleId = Nothing
+    , _dwNextToken = Nothing
+    , _dwLimit = Nothing
+    }
 
 
--- | Specifies the directory identifier to which to limit the WorkSpaces. Optionally, you can specify a specific directory user with the @UserName@ parameter. This parameter cannot be combined with any other filter parameter.
+-- | The ID of the directory. In addition, you can optionally specify a specific directory user (see @UserName@ ). This parameter cannot be combined with any other filter.
 dwDirectoryId :: Lens' DescribeWorkspaces (Maybe Text)
-dwDirectoryId = lens _dwDirectoryId (\ s a -> s{_dwDirectoryId = a});
+dwDirectoryId = lens _dwDirectoryId (\ s a -> s{_dwDirectoryId = a})
 
--- | An array of strings that contain the identifiers of the WorkSpaces for which to retrieve information. This parameter cannot be combined with any other filter parameter. Because the 'CreateWorkspaces' operation is asynchronous, the identifier it returns is not immediately available. If you immediately call 'DescribeWorkspaces' with this identifier, no information is returned.
+-- | The IDs of the WorkSpaces. This parameter cannot be combined with any other filter. Because the 'CreateWorkspaces' operation is asynchronous, the identifier it returns is not immediately available. If you immediately call 'DescribeWorkspaces' with this identifier, no information is returned.
 dwWorkspaceIds :: Lens' DescribeWorkspaces (Maybe (NonEmpty Text))
-dwWorkspaceIds = lens _dwWorkspaceIds (\ s a -> s{_dwWorkspaceIds = a}) . mapping _List1;
+dwWorkspaceIds = lens _dwWorkspaceIds (\ s a -> s{_dwWorkspaceIds = a}) . mapping _List1
 
--- | Used with the @DirectoryId@ parameter to specify the directory user for whom to obtain the WorkSpace.
+-- | The name of the directory user. You must specify this parameter with @DirectoryId@ .
 dwUserName :: Lens' DescribeWorkspaces (Maybe Text)
-dwUserName = lens _dwUserName (\ s a -> s{_dwUserName = a});
+dwUserName = lens _dwUserName (\ s a -> s{_dwUserName = a})
 
--- | The identifier of a bundle to obtain the WorkSpaces for. All WorkSpaces that are created from this bundle will be retrieved. This parameter cannot be combined with any other filter parameter.
+-- | The ID of the bundle. All WorkSpaces that are created from this bundle are retrieved. This parameter cannot be combined with any other filter.
 dwBundleId :: Lens' DescribeWorkspaces (Maybe Text)
-dwBundleId = lens _dwBundleId (\ s a -> s{_dwBundleId = a});
+dwBundleId = lens _dwBundleId (\ s a -> s{_dwBundleId = a})
 
--- | The @NextToken@ value from a previous call to this operation. Pass null if this is the first call.
+-- | The token for the next set of results. (You received this token from a previous call.)
 dwNextToken :: Lens' DescribeWorkspaces (Maybe Text)
-dwNextToken = lens _dwNextToken (\ s a -> s{_dwNextToken = a});
+dwNextToken = lens _dwNextToken (\ s a -> s{_dwNextToken = a})
 
 -- | The maximum number of items to return.
 dwLimit :: Lens' DescribeWorkspaces (Maybe Natural)
-dwLimit = lens _dwLimit (\ s a -> s{_dwLimit = a}) . mapping _Nat;
+dwLimit = lens _dwLimit (\ s a -> s{_dwLimit = a}) . mapping _Nat
 
 instance AWSPager DescribeWorkspaces where
         page rq rs
@@ -174,11 +168,7 @@
 instance ToQuery DescribeWorkspaces where
         toQuery = const mempty
 
--- | Contains the results for the 'DescribeWorkspaces' operation.
---
---
---
--- /See:/ 'describeWorkspacesResponse' smart constructor.
+-- | /See:/ 'describeWorkspacesResponse' smart constructor.
 data DescribeWorkspacesResponse = DescribeWorkspacesResponse'
   { _dwrsNextToken      :: !(Maybe Text)
   , _dwrsWorkspaces     :: !(Maybe [Workspace])
@@ -190,9 +180,9 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'dwrsNextToken' - If not null, more results are available. Pass this value for the @NextToken@ parameter in a subsequent call to this operation to retrieve the next set of items. This token is valid for one day and must be used within that time frame.
+-- * 'dwrsNextToken' - The token to use to retrieve the next set of results, or null if there are no more results available. This token is valid for one day and must be used within that time frame.
 --
--- * 'dwrsWorkspaces' - An array of structures that contain the information about the WorkSpaces. Because the 'CreateWorkspaces' operation is asynchronous, some of this information may be incomplete for a newly-created WorkSpace.
+-- * 'dwrsWorkspaces' - Information about the WorkSpaces. Because 'CreateWorkspaces' is an asynchronous operation, some of the returned information could be incomplete.
 --
 -- * 'dwrsResponseStatus' - -- | The response status code.
 describeWorkspacesResponse
@@ -200,22 +190,22 @@
     -> DescribeWorkspacesResponse
 describeWorkspacesResponse pResponseStatus_ =
   DescribeWorkspacesResponse'
-  { _dwrsNextToken = Nothing
-  , _dwrsWorkspaces = Nothing
-  , _dwrsResponseStatus = pResponseStatus_
-  }
+    { _dwrsNextToken = Nothing
+    , _dwrsWorkspaces = Nothing
+    , _dwrsResponseStatus = pResponseStatus_
+    }
 
 
--- | If not null, more results are available. Pass this value for the @NextToken@ parameter in a subsequent call to this operation to retrieve the next set of items. This token is valid for one day and must be used within that time frame.
+-- | The token to use to retrieve the next set of results, or null if there are no more results available. This token is valid for one day and must be used within that time frame.
 dwrsNextToken :: Lens' DescribeWorkspacesResponse (Maybe Text)
-dwrsNextToken = lens _dwrsNextToken (\ s a -> s{_dwrsNextToken = a});
+dwrsNextToken = lens _dwrsNextToken (\ s a -> s{_dwrsNextToken = a})
 
--- | An array of structures that contain the information about the WorkSpaces. Because the 'CreateWorkspaces' operation is asynchronous, some of this information may be incomplete for a newly-created WorkSpace.
+-- | Information about the WorkSpaces. Because 'CreateWorkspaces' is an asynchronous operation, some of the returned information could be incomplete.
 dwrsWorkspaces :: Lens' DescribeWorkspacesResponse [Workspace]
-dwrsWorkspaces = lens _dwrsWorkspaces (\ s a -> s{_dwrsWorkspaces = a}) . _Default . _Coerce;
+dwrsWorkspaces = lens _dwrsWorkspaces (\ s a -> s{_dwrsWorkspaces = a}) . _Default . _Coerce
 
 -- | -- | The response status code.
 dwrsResponseStatus :: Lens' DescribeWorkspacesResponse Int
-dwrsResponseStatus = lens _dwrsResponseStatus (\ s a -> s{_dwrsResponseStatus = a});
+dwrsResponseStatus = lens _dwrsResponseStatus (\ s a -> s{_dwrsResponseStatus = a})
 
 instance NFData DescribeWorkspacesResponse where
diff --git a/gen/Network/AWS/WorkSpaces/DescribeWorkspacesConnectionStatus.hs b/gen/Network/AWS/WorkSpaces/DescribeWorkspacesConnectionStatus.hs
--- a/gen/Network/AWS/WorkSpaces/DescribeWorkspacesConnectionStatus.hs
+++ b/gen/Network/AWS/WorkSpaces/DescribeWorkspacesConnectionStatus.hs
@@ -12,13 +12,13 @@
 
 -- |
 -- Module      : Network.AWS.WorkSpaces.DescribeWorkspacesConnectionStatus
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Describes the connection status of a specified WorkSpace.
+-- Describes the connection status of the specified WorkSpaces.
 --
 --
 module Network.AWS.WorkSpaces.DescribeWorkspacesConnectionStatus
@@ -57,23 +57,23 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'dwcsWorkspaceIds' - An array of strings that contain the identifiers of the WorkSpaces.
+-- * 'dwcsWorkspaceIds' - The identifiers of the WorkSpaces. You can specify up to 25 WorkSpaces.
 --
--- * 'dwcsNextToken' - The next token of the request.
+-- * 'dwcsNextToken' - The token for the next set of results. (You received this token from a previous call.)
 describeWorkspacesConnectionStatus
     :: DescribeWorkspacesConnectionStatus
 describeWorkspacesConnectionStatus =
   DescribeWorkspacesConnectionStatus'
-  {_dwcsWorkspaceIds = Nothing, _dwcsNextToken = Nothing}
+    {_dwcsWorkspaceIds = Nothing, _dwcsNextToken = Nothing}
 
 
--- | An array of strings that contain the identifiers of the WorkSpaces.
+-- | The identifiers of the WorkSpaces. You can specify up to 25 WorkSpaces.
 dwcsWorkspaceIds :: Lens' DescribeWorkspacesConnectionStatus (Maybe (NonEmpty Text))
-dwcsWorkspaceIds = lens _dwcsWorkspaceIds (\ s a -> s{_dwcsWorkspaceIds = a}) . mapping _List1;
+dwcsWorkspaceIds = lens _dwcsWorkspaceIds (\ s a -> s{_dwcsWorkspaceIds = a}) . mapping _List1
 
--- | The next token of the request.
+-- | The token for the next set of results. (You received this token from a previous call.)
 dwcsNextToken :: Lens' DescribeWorkspacesConnectionStatus (Maybe Text)
-dwcsNextToken = lens _dwcsNextToken (\ s a -> s{_dwcsNextToken = a});
+dwcsNextToken = lens _dwcsNextToken (\ s a -> s{_dwcsNextToken = a})
 
 instance AWSRequest
            DescribeWorkspacesConnectionStatus
@@ -134,9 +134,9 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'dwcsrsNextToken' - The next token of the result.
+-- * 'dwcsrsNextToken' - The token to use to retrieve the next set of results, or null if there are no more results available.
 --
--- * 'dwcsrsWorkspacesConnectionStatus' - The connection status of the WorkSpace.
+-- * 'dwcsrsWorkspacesConnectionStatus' - Information about the connection status of the WorkSpace.
 --
 -- * 'dwcsrsResponseStatus' - -- | The response status code.
 describeWorkspacesConnectionStatusResponse
@@ -144,23 +144,23 @@
     -> DescribeWorkspacesConnectionStatusResponse
 describeWorkspacesConnectionStatusResponse pResponseStatus_ =
   DescribeWorkspacesConnectionStatusResponse'
-  { _dwcsrsNextToken = Nothing
-  , _dwcsrsWorkspacesConnectionStatus = Nothing
-  , _dwcsrsResponseStatus = pResponseStatus_
-  }
+    { _dwcsrsNextToken = Nothing
+    , _dwcsrsWorkspacesConnectionStatus = Nothing
+    , _dwcsrsResponseStatus = pResponseStatus_
+    }
 
 
--- | The next token of the result.
+-- | The token to use to retrieve the next set of results, or null if there are no more results available.
 dwcsrsNextToken :: Lens' DescribeWorkspacesConnectionStatusResponse (Maybe Text)
-dwcsrsNextToken = lens _dwcsrsNextToken (\ s a -> s{_dwcsrsNextToken = a});
+dwcsrsNextToken = lens _dwcsrsNextToken (\ s a -> s{_dwcsrsNextToken = a})
 
--- | The connection status of the WorkSpace.
+-- | Information about the connection status of the WorkSpace.
 dwcsrsWorkspacesConnectionStatus :: Lens' DescribeWorkspacesConnectionStatusResponse [WorkspaceConnectionStatus]
-dwcsrsWorkspacesConnectionStatus = lens _dwcsrsWorkspacesConnectionStatus (\ s a -> s{_dwcsrsWorkspacesConnectionStatus = a}) . _Default . _Coerce;
+dwcsrsWorkspacesConnectionStatus = lens _dwcsrsWorkspacesConnectionStatus (\ s a -> s{_dwcsrsWorkspacesConnectionStatus = a}) . _Default . _Coerce
 
 -- | -- | The response status code.
 dwcsrsResponseStatus :: Lens' DescribeWorkspacesConnectionStatusResponse Int
-dwcsrsResponseStatus = lens _dwcsrsResponseStatus (\ s a -> s{_dwcsrsResponseStatus = a});
+dwcsrsResponseStatus = lens _dwcsrsResponseStatus (\ s a -> s{_dwcsrsResponseStatus = a})
 
 instance NFData
            DescribeWorkspacesConnectionStatusResponse
diff --git a/gen/Network/AWS/WorkSpaces/DisassociateIPGroups.hs b/gen/Network/AWS/WorkSpaces/DisassociateIPGroups.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/WorkSpaces/DisassociateIPGroups.hs
@@ -0,0 +1,135 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.WorkSpaces.DisassociateIPGroups
+-- Copyright   : (c) 2013-2018 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Disassociates the specified IP access control group from the specified directory.
+--
+--
+module Network.AWS.WorkSpaces.DisassociateIPGroups
+    (
+    -- * Creating a Request
+      disassociateIPGroups
+    , DisassociateIPGroups
+    -- * Request Lenses
+    , digDirectoryId
+    , digGroupIds
+
+    -- * Destructuring the Response
+    , disassociateIPGroupsResponse
+    , DisassociateIPGroupsResponse
+    -- * Response Lenses
+    , digrsResponseStatus
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.WorkSpaces.Types
+import Network.AWS.WorkSpaces.Types.Product
+
+-- | /See:/ 'disassociateIPGroups' smart constructor.
+data DisassociateIPGroups = DisassociateIPGroups'
+  { _digDirectoryId :: !Text
+  , _digGroupIds    :: ![Text]
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DisassociateIPGroups' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'digDirectoryId' - The ID of the directory.
+--
+-- * 'digGroupIds' - The IDs of one or more IP access control groups.
+disassociateIPGroups
+    :: Text -- ^ 'digDirectoryId'
+    -> DisassociateIPGroups
+disassociateIPGroups pDirectoryId_ =
+  DisassociateIPGroups' {_digDirectoryId = pDirectoryId_, _digGroupIds = mempty}
+
+
+-- | The ID of the directory.
+digDirectoryId :: Lens' DisassociateIPGroups Text
+digDirectoryId = lens _digDirectoryId (\ s a -> s{_digDirectoryId = a})
+
+-- | The IDs of one or more IP access control groups.
+digGroupIds :: Lens' DisassociateIPGroups [Text]
+digGroupIds = lens _digGroupIds (\ s a -> s{_digGroupIds = a}) . _Coerce
+
+instance AWSRequest DisassociateIPGroups where
+        type Rs DisassociateIPGroups =
+             DisassociateIPGroupsResponse
+        request = postJSON workSpaces
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 DisassociateIPGroupsResponse' <$>
+                   (pure (fromEnum s)))
+
+instance Hashable DisassociateIPGroups where
+
+instance NFData DisassociateIPGroups where
+
+instance ToHeaders DisassociateIPGroups where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("WorkspacesService.DisassociateIpGroups" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON DisassociateIPGroups where
+        toJSON DisassociateIPGroups'{..}
+          = object
+              (catMaybes
+                 [Just ("DirectoryId" .= _digDirectoryId),
+                  Just ("GroupIds" .= _digGroupIds)])
+
+instance ToPath DisassociateIPGroups where
+        toPath = const "/"
+
+instance ToQuery DisassociateIPGroups where
+        toQuery = const mempty
+
+-- | /See:/ 'disassociateIPGroupsResponse' smart constructor.
+newtype DisassociateIPGroupsResponse = DisassociateIPGroupsResponse'
+  { _digrsResponseStatus :: Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DisassociateIPGroupsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'digrsResponseStatus' - -- | The response status code.
+disassociateIPGroupsResponse
+    :: Int -- ^ 'digrsResponseStatus'
+    -> DisassociateIPGroupsResponse
+disassociateIPGroupsResponse pResponseStatus_ =
+  DisassociateIPGroupsResponse' {_digrsResponseStatus = pResponseStatus_}
+
+
+-- | -- | The response status code.
+digrsResponseStatus :: Lens' DisassociateIPGroupsResponse Int
+digrsResponseStatus = lens _digrsResponseStatus (\ s a -> s{_digrsResponseStatus = a})
+
+instance NFData DisassociateIPGroupsResponse where
diff --git a/gen/Network/AWS/WorkSpaces/ModifyWorkspaceProperties.hs b/gen/Network/AWS/WorkSpaces/ModifyWorkspaceProperties.hs
--- a/gen/Network/AWS/WorkSpaces/ModifyWorkspaceProperties.hs
+++ b/gen/Network/AWS/WorkSpaces/ModifyWorkspaceProperties.hs
@@ -12,13 +12,13 @@
 
 -- |
 -- Module      : Network.AWS.WorkSpaces.ModifyWorkspaceProperties
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Modifies the WorkSpace properties, including the running mode and AutoStop time.
+-- Modifies the specified WorkSpace properties.
 --
 --
 module Network.AWS.WorkSpaces.ModifyWorkspaceProperties
@@ -57,25 +57,25 @@
 --
 -- * 'mwpWorkspaceId' - The ID of the WorkSpace.
 --
--- * 'mwpWorkspaceProperties' - The WorkSpace properties of the request.
+-- * 'mwpWorkspaceProperties' - The properties of the WorkSpace.
 modifyWorkspaceProperties
     :: Text -- ^ 'mwpWorkspaceId'
     -> WorkspaceProperties -- ^ 'mwpWorkspaceProperties'
     -> ModifyWorkspaceProperties
 modifyWorkspaceProperties pWorkspaceId_ pWorkspaceProperties_ =
   ModifyWorkspaceProperties'
-  { _mwpWorkspaceId = pWorkspaceId_
-  , _mwpWorkspaceProperties = pWorkspaceProperties_
-  }
+    { _mwpWorkspaceId = pWorkspaceId_
+    , _mwpWorkspaceProperties = pWorkspaceProperties_
+    }
 
 
 -- | The ID of the WorkSpace.
 mwpWorkspaceId :: Lens' ModifyWorkspaceProperties Text
-mwpWorkspaceId = lens _mwpWorkspaceId (\ s a -> s{_mwpWorkspaceId = a});
+mwpWorkspaceId = lens _mwpWorkspaceId (\ s a -> s{_mwpWorkspaceId = a})
 
--- | The WorkSpace properties of the request.
+-- | The properties of the WorkSpace.
 mwpWorkspaceProperties :: Lens' ModifyWorkspaceProperties WorkspaceProperties
-mwpWorkspaceProperties = lens _mwpWorkspaceProperties (\ s a -> s{_mwpWorkspaceProperties = a});
+mwpWorkspaceProperties = lens _mwpWorkspaceProperties (\ s a -> s{_mwpWorkspaceProperties = a})
 
 instance AWSRequest ModifyWorkspaceProperties where
         type Rs ModifyWorkspaceProperties =
@@ -135,7 +135,7 @@
 
 -- | -- | The response status code.
 mwprsResponseStatus :: Lens' ModifyWorkspacePropertiesResponse Int
-mwprsResponseStatus = lens _mwprsResponseStatus (\ s a -> s{_mwprsResponseStatus = a});
+mwprsResponseStatus = lens _mwprsResponseStatus (\ s a -> s{_mwprsResponseStatus = a})
 
 instance NFData ModifyWorkspacePropertiesResponse
          where
diff --git a/gen/Network/AWS/WorkSpaces/ModifyWorkspaceState.hs b/gen/Network/AWS/WorkSpaces/ModifyWorkspaceState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/WorkSpaces/ModifyWorkspaceState.hs
@@ -0,0 +1,139 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.WorkSpaces.ModifyWorkspaceState
+-- Copyright   : (c) 2013-2018 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Sets the state of the specified WorkSpace.
+--
+--
+-- To maintain a WorkSpace without being interrupted, set the WorkSpace state to @ADMIN_MAINTENANCE@ . WorkSpaces in this state do not respond to requests to reboot, stop, start, or rebuild. An AutoStop WorkSpace in this state is not stopped. Users can log into a WorkSpace in the @ADMIN_MAINTENANCE@ state.
+--
+module Network.AWS.WorkSpaces.ModifyWorkspaceState
+    (
+    -- * Creating a Request
+      modifyWorkspaceState
+    , ModifyWorkspaceState
+    -- * Request Lenses
+    , mwsWorkspaceId
+    , mwsWorkspaceState
+
+    -- * Destructuring the Response
+    , modifyWorkspaceStateResponse
+    , ModifyWorkspaceStateResponse
+    -- * Response Lenses
+    , mwsrsResponseStatus
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.WorkSpaces.Types
+import Network.AWS.WorkSpaces.Types.Product
+
+-- | /See:/ 'modifyWorkspaceState' smart constructor.
+data ModifyWorkspaceState = ModifyWorkspaceState'
+  { _mwsWorkspaceId    :: !Text
+  , _mwsWorkspaceState :: !TargetWorkspaceState
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'ModifyWorkspaceState' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mwsWorkspaceId' - The ID of the WorkSpace.
+--
+-- * 'mwsWorkspaceState' - The WorkSpace state.
+modifyWorkspaceState
+    :: Text -- ^ 'mwsWorkspaceId'
+    -> TargetWorkspaceState -- ^ 'mwsWorkspaceState'
+    -> ModifyWorkspaceState
+modifyWorkspaceState pWorkspaceId_ pWorkspaceState_ =
+  ModifyWorkspaceState'
+    {_mwsWorkspaceId = pWorkspaceId_, _mwsWorkspaceState = pWorkspaceState_}
+
+
+-- | The ID of the WorkSpace.
+mwsWorkspaceId :: Lens' ModifyWorkspaceState Text
+mwsWorkspaceId = lens _mwsWorkspaceId (\ s a -> s{_mwsWorkspaceId = a})
+
+-- | The WorkSpace state.
+mwsWorkspaceState :: Lens' ModifyWorkspaceState TargetWorkspaceState
+mwsWorkspaceState = lens _mwsWorkspaceState (\ s a -> s{_mwsWorkspaceState = a})
+
+instance AWSRequest ModifyWorkspaceState where
+        type Rs ModifyWorkspaceState =
+             ModifyWorkspaceStateResponse
+        request = postJSON workSpaces
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 ModifyWorkspaceStateResponse' <$>
+                   (pure (fromEnum s)))
+
+instance Hashable ModifyWorkspaceState where
+
+instance NFData ModifyWorkspaceState where
+
+instance ToHeaders ModifyWorkspaceState where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("WorkspacesService.ModifyWorkspaceState" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON ModifyWorkspaceState where
+        toJSON ModifyWorkspaceState'{..}
+          = object
+              (catMaybes
+                 [Just ("WorkspaceId" .= _mwsWorkspaceId),
+                  Just ("WorkspaceState" .= _mwsWorkspaceState)])
+
+instance ToPath ModifyWorkspaceState where
+        toPath = const "/"
+
+instance ToQuery ModifyWorkspaceState where
+        toQuery = const mempty
+
+-- | /See:/ 'modifyWorkspaceStateResponse' smart constructor.
+newtype ModifyWorkspaceStateResponse = ModifyWorkspaceStateResponse'
+  { _mwsrsResponseStatus :: Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'ModifyWorkspaceStateResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mwsrsResponseStatus' - -- | The response status code.
+modifyWorkspaceStateResponse
+    :: Int -- ^ 'mwsrsResponseStatus'
+    -> ModifyWorkspaceStateResponse
+modifyWorkspaceStateResponse pResponseStatus_ =
+  ModifyWorkspaceStateResponse' {_mwsrsResponseStatus = pResponseStatus_}
+
+
+-- | -- | The response status code.
+mwsrsResponseStatus :: Lens' ModifyWorkspaceStateResponse Int
+mwsrsResponseStatus = lens _mwsrsResponseStatus (\ s a -> s{_mwsrsResponseStatus = a})
+
+instance NFData ModifyWorkspaceStateResponse where
diff --git a/gen/Network/AWS/WorkSpaces/RebootWorkspaces.hs b/gen/Network/AWS/WorkSpaces/RebootWorkspaces.hs
--- a/gen/Network/AWS/WorkSpaces/RebootWorkspaces.hs
+++ b/gen/Network/AWS/WorkSpaces/RebootWorkspaces.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.WorkSpaces.RebootWorkspaces
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -21,8 +21,10 @@
 -- Reboots the specified WorkSpaces.
 --
 --
--- To be able to reboot a WorkSpace, the WorkSpace must have a __State__ of @AVAILABLE@ , @IMPAIRED@ , or @INOPERABLE@ .
+-- You cannot reboot a WorkSpace unless its state is @AVAILABLE@ or @UNHEALTHY@ .
 --
+-- This operation is asynchronous and returns before the WorkSpaces have rebooted.
+--
 module Network.AWS.WorkSpaces.RebootWorkspaces
     (
     -- * Creating a Request
@@ -46,11 +48,7 @@
 import Network.AWS.WorkSpaces.Types
 import Network.AWS.WorkSpaces.Types.Product
 
--- | Contains the inputs for the 'RebootWorkspaces' operation.
---
---
---
--- /See:/ 'rebootWorkspaces' smart constructor.
+-- | /See:/ 'rebootWorkspaces' smart constructor.
 newtype RebootWorkspaces = RebootWorkspaces'
   { _rwRebootWorkspaceRequests :: List1 RebootRequest
   } deriving (Eq, Read, Show, Data, Typeable, Generic)
@@ -60,18 +58,18 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'rwRebootWorkspaceRequests' - An array of structures that specify the WorkSpaces to reboot.
+-- * 'rwRebootWorkspaceRequests' - The WorkSpaces to reboot. You can specify up to 25 WorkSpaces.
 rebootWorkspaces
     :: NonEmpty RebootRequest -- ^ 'rwRebootWorkspaceRequests'
     -> RebootWorkspaces
 rebootWorkspaces pRebootWorkspaceRequests_ =
   RebootWorkspaces'
-  {_rwRebootWorkspaceRequests = _List1 # pRebootWorkspaceRequests_}
+    {_rwRebootWorkspaceRequests = _List1 # pRebootWorkspaceRequests_}
 
 
--- | An array of structures that specify the WorkSpaces to reboot.
+-- | The WorkSpaces to reboot. You can specify up to 25 WorkSpaces.
 rwRebootWorkspaceRequests :: Lens' RebootWorkspaces (NonEmpty RebootRequest)
-rwRebootWorkspaceRequests = lens _rwRebootWorkspaceRequests (\ s a -> s{_rwRebootWorkspaceRequests = a}) . _List1;
+rwRebootWorkspaceRequests = lens _rwRebootWorkspaceRequests (\ s a -> s{_rwRebootWorkspaceRequests = a}) . _List1
 
 instance AWSRequest RebootWorkspaces where
         type Rs RebootWorkspaces = RebootWorkspacesResponse
@@ -110,11 +108,7 @@
 instance ToQuery RebootWorkspaces where
         toQuery = const mempty
 
--- | Contains the results of the 'RebootWorkspaces' operation.
---
---
---
--- /See:/ 'rebootWorkspacesResponse' smart constructor.
+-- | /See:/ 'rebootWorkspacesResponse' smart constructor.
 data RebootWorkspacesResponse = RebootWorkspacesResponse'
   { _rrsFailedRequests :: !(Maybe [FailedWorkspaceChangeRequest])
   , _rrsResponseStatus :: !Int
@@ -125,7 +119,7 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'rrsFailedRequests' - An array of structures representing any WorkSpaces that could not be rebooted.
+-- * 'rrsFailedRequests' - Information about the WorkSpaces that could not be rebooted.
 --
 -- * 'rrsResponseStatus' - -- | The response status code.
 rebootWorkspacesResponse
@@ -133,15 +127,15 @@
     -> RebootWorkspacesResponse
 rebootWorkspacesResponse pResponseStatus_ =
   RebootWorkspacesResponse'
-  {_rrsFailedRequests = Nothing, _rrsResponseStatus = pResponseStatus_}
+    {_rrsFailedRequests = Nothing, _rrsResponseStatus = pResponseStatus_}
 
 
--- | An array of structures representing any WorkSpaces that could not be rebooted.
+-- | Information about the WorkSpaces that could not be rebooted.
 rrsFailedRequests :: Lens' RebootWorkspacesResponse [FailedWorkspaceChangeRequest]
-rrsFailedRequests = lens _rrsFailedRequests (\ s a -> s{_rrsFailedRequests = a}) . _Default . _Coerce;
+rrsFailedRequests = lens _rrsFailedRequests (\ s a -> s{_rrsFailedRequests = a}) . _Default . _Coerce
 
 -- | -- | The response status code.
 rrsResponseStatus :: Lens' RebootWorkspacesResponse Int
-rrsResponseStatus = lens _rrsResponseStatus (\ s a -> s{_rrsResponseStatus = a});
+rrsResponseStatus = lens _rrsResponseStatus (\ s a -> s{_rrsResponseStatus = a})
 
 instance NFData RebootWorkspacesResponse where
diff --git a/gen/Network/AWS/WorkSpaces/RebuildWorkspaces.hs b/gen/Network/AWS/WorkSpaces/RebuildWorkspaces.hs
--- a/gen/Network/AWS/WorkSpaces/RebuildWorkspaces.hs
+++ b/gen/Network/AWS/WorkSpaces/RebuildWorkspaces.hs
@@ -12,24 +12,20 @@
 
 -- |
 -- Module      : Network.AWS.WorkSpaces.RebuildWorkspaces
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Rebuilds the specified WorkSpaces.
+-- Rebuilds the specified WorkSpace.
 --
 --
--- Rebuilding a WorkSpace is a potentially destructive action that can result in the loss of data. Rebuilding a WorkSpace causes the following to occur:
---
---     * The system is restored to the image of the bundle that the WorkSpace is created from. Any applications that have been installed, or system settings that have been made since the WorkSpace was created will be lost.
---
---     * The data drive (D drive) is re-created from the last automatic snapshot taken of the data drive. The current contents of the data drive are overwritten. Automatic snapshots of the data drive are taken every 12 hours, so the snapshot can be as much as 12 hours old.
---
+-- You cannot rebuild a WorkSpace unless its state is @AVAILABLE@ , @ERROR@ , or @UNHEALTHY@ .
 --
+-- Rebuilding a WorkSpace is a potentially destructive action that can result in the loss of data. For more information, see <http://docs.aws.amazon.com/workspaces/latest/adminguide/reset-workspace.html Rebuild a WorkSpace> .
 --
--- To be able to rebuild a WorkSpace, the WorkSpace must have a __State__ of @AVAILABLE@ or @ERROR@ .
+-- This operation is asynchronous and returns before the WorkSpaces have been completely rebuilt.
 --
 module Network.AWS.WorkSpaces.RebuildWorkspaces
     (
@@ -54,11 +50,7 @@
 import Network.AWS.WorkSpaces.Types
 import Network.AWS.WorkSpaces.Types.Product
 
--- | Contains the inputs for the 'RebuildWorkspaces' operation.
---
---
---
--- /See:/ 'rebuildWorkspaces' smart constructor.
+-- | /See:/ 'rebuildWorkspaces' smart constructor.
 newtype RebuildWorkspaces = RebuildWorkspaces'
   { _rwRebuildWorkspaceRequests :: List1 RebuildRequest
   } deriving (Eq, Read, Show, Data, Typeable, Generic)
@@ -68,18 +60,18 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'rwRebuildWorkspaceRequests' - An array of structures that specify the WorkSpaces to rebuild.
+-- * 'rwRebuildWorkspaceRequests' - The WorkSpace to rebuild. You can specify a single WorkSpace.
 rebuildWorkspaces
     :: NonEmpty RebuildRequest -- ^ 'rwRebuildWorkspaceRequests'
     -> RebuildWorkspaces
 rebuildWorkspaces pRebuildWorkspaceRequests_ =
   RebuildWorkspaces'
-  {_rwRebuildWorkspaceRequests = _List1 # pRebuildWorkspaceRequests_}
+    {_rwRebuildWorkspaceRequests = _List1 # pRebuildWorkspaceRequests_}
 
 
--- | An array of structures that specify the WorkSpaces to rebuild.
+-- | The WorkSpace to rebuild. You can specify a single WorkSpace.
 rwRebuildWorkspaceRequests :: Lens' RebuildWorkspaces (NonEmpty RebuildRequest)
-rwRebuildWorkspaceRequests = lens _rwRebuildWorkspaceRequests (\ s a -> s{_rwRebuildWorkspaceRequests = a}) . _List1;
+rwRebuildWorkspaceRequests = lens _rwRebuildWorkspaceRequests (\ s a -> s{_rwRebuildWorkspaceRequests = a}) . _List1
 
 instance AWSRequest RebuildWorkspaces where
         type Rs RebuildWorkspaces = RebuildWorkspacesResponse
@@ -119,11 +111,7 @@
 instance ToQuery RebuildWorkspaces where
         toQuery = const mempty
 
--- | Contains the results of the 'RebuildWorkspaces' operation.
---
---
---
--- /See:/ 'rebuildWorkspacesResponse' smart constructor.
+-- | /See:/ 'rebuildWorkspacesResponse' smart constructor.
 data RebuildWorkspacesResponse = RebuildWorkspacesResponse'
   { _rwrsFailedRequests :: !(Maybe [FailedWorkspaceChangeRequest])
   , _rwrsResponseStatus :: !Int
@@ -134,7 +122,7 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'rwrsFailedRequests' - An array of structures representing any WorkSpaces that could not be rebuilt.
+-- * 'rwrsFailedRequests' - Information about the WorkSpace if it could not be rebuilt.
 --
 -- * 'rwrsResponseStatus' - -- | The response status code.
 rebuildWorkspacesResponse
@@ -142,15 +130,15 @@
     -> RebuildWorkspacesResponse
 rebuildWorkspacesResponse pResponseStatus_ =
   RebuildWorkspacesResponse'
-  {_rwrsFailedRequests = Nothing, _rwrsResponseStatus = pResponseStatus_}
+    {_rwrsFailedRequests = Nothing, _rwrsResponseStatus = pResponseStatus_}
 
 
--- | An array of structures representing any WorkSpaces that could not be rebuilt.
+-- | Information about the WorkSpace if it could not be rebuilt.
 rwrsFailedRequests :: Lens' RebuildWorkspacesResponse [FailedWorkspaceChangeRequest]
-rwrsFailedRequests = lens _rwrsFailedRequests (\ s a -> s{_rwrsFailedRequests = a}) . _Default . _Coerce;
+rwrsFailedRequests = lens _rwrsFailedRequests (\ s a -> s{_rwrsFailedRequests = a}) . _Default . _Coerce
 
 -- | -- | The response status code.
 rwrsResponseStatus :: Lens' RebuildWorkspacesResponse Int
-rwrsResponseStatus = lens _rwrsResponseStatus (\ s a -> s{_rwrsResponseStatus = a});
+rwrsResponseStatus = lens _rwrsResponseStatus (\ s a -> s{_rwrsResponseStatus = a})
 
 instance NFData RebuildWorkspacesResponse where
diff --git a/gen/Network/AWS/WorkSpaces/RevokeIPRules.hs b/gen/Network/AWS/WorkSpaces/RevokeIPRules.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/WorkSpaces/RevokeIPRules.hs
@@ -0,0 +1,132 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.WorkSpaces.RevokeIPRules
+-- Copyright   : (c) 2013-2018 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Removes one or more rules from the specified IP access control group.
+--
+--
+module Network.AWS.WorkSpaces.RevokeIPRules
+    (
+    -- * Creating a Request
+      revokeIPRules
+    , RevokeIPRules
+    -- * Request Lenses
+    , rirGroupId
+    , rirUserRules
+
+    -- * Destructuring the Response
+    , revokeIPRulesResponse
+    , RevokeIPRulesResponse
+    -- * Response Lenses
+    , rirrsResponseStatus
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.WorkSpaces.Types
+import Network.AWS.WorkSpaces.Types.Product
+
+-- | /See:/ 'revokeIPRules' smart constructor.
+data RevokeIPRules = RevokeIPRules'
+  { _rirGroupId   :: !Text
+  , _rirUserRules :: ![Text]
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'RevokeIPRules' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rirGroupId' - The ID of the group.
+--
+-- * 'rirUserRules' - The rules to remove from the group.
+revokeIPRules
+    :: Text -- ^ 'rirGroupId'
+    -> RevokeIPRules
+revokeIPRules pGroupId_ =
+  RevokeIPRules' {_rirGroupId = pGroupId_, _rirUserRules = mempty}
+
+
+-- | The ID of the group.
+rirGroupId :: Lens' RevokeIPRules Text
+rirGroupId = lens _rirGroupId (\ s a -> s{_rirGroupId = a})
+
+-- | The rules to remove from the group.
+rirUserRules :: Lens' RevokeIPRules [Text]
+rirUserRules = lens _rirUserRules (\ s a -> s{_rirUserRules = a}) . _Coerce
+
+instance AWSRequest RevokeIPRules where
+        type Rs RevokeIPRules = RevokeIPRulesResponse
+        request = postJSON workSpaces
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 RevokeIPRulesResponse' <$> (pure (fromEnum s)))
+
+instance Hashable RevokeIPRules where
+
+instance NFData RevokeIPRules where
+
+instance ToHeaders RevokeIPRules where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("WorkspacesService.RevokeIpRules" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON RevokeIPRules where
+        toJSON RevokeIPRules'{..}
+          = object
+              (catMaybes
+                 [Just ("GroupId" .= _rirGroupId),
+                  Just ("UserRules" .= _rirUserRules)])
+
+instance ToPath RevokeIPRules where
+        toPath = const "/"
+
+instance ToQuery RevokeIPRules where
+        toQuery = const mempty
+
+-- | /See:/ 'revokeIPRulesResponse' smart constructor.
+newtype RevokeIPRulesResponse = RevokeIPRulesResponse'
+  { _rirrsResponseStatus :: Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'RevokeIPRulesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rirrsResponseStatus' - -- | The response status code.
+revokeIPRulesResponse
+    :: Int -- ^ 'rirrsResponseStatus'
+    -> RevokeIPRulesResponse
+revokeIPRulesResponse pResponseStatus_ =
+  RevokeIPRulesResponse' {_rirrsResponseStatus = pResponseStatus_}
+
+
+-- | -- | The response status code.
+rirrsResponseStatus :: Lens' RevokeIPRulesResponse Int
+rirrsResponseStatus = lens _rirrsResponseStatus (\ s a -> s{_rirrsResponseStatus = a})
+
+instance NFData RevokeIPRulesResponse where
diff --git a/gen/Network/AWS/WorkSpaces/StartWorkspaces.hs b/gen/Network/AWS/WorkSpaces/StartWorkspaces.hs
--- a/gen/Network/AWS/WorkSpaces/StartWorkspaces.hs
+++ b/gen/Network/AWS/WorkSpaces/StartWorkspaces.hs
@@ -12,15 +12,17 @@
 
 -- |
 -- Module      : Network.AWS.WorkSpaces.StartWorkspaces
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Starts the specified WorkSpaces. The WorkSpaces must have a running mode of AutoStop and a state of STOPPED.
+-- Starts the specified WorkSpaces.
 --
 --
+-- You cannot start a WorkSpace unless it has a running mode of @AutoStop@ and a state of @STOPPED@ .
+--
 module Network.AWS.WorkSpaces.StartWorkspaces
     (
     -- * Creating a Request
@@ -54,18 +56,18 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'swStartWorkspaceRequests' - The requests.
+-- * 'swStartWorkspaceRequests' - The WorkSpaces to start. You can specify up to 25 WorkSpaces.
 startWorkspaces
     :: NonEmpty StartRequest -- ^ 'swStartWorkspaceRequests'
     -> StartWorkspaces
 startWorkspaces pStartWorkspaceRequests_ =
   StartWorkspaces'
-  {_swStartWorkspaceRequests = _List1 # pStartWorkspaceRequests_}
+    {_swStartWorkspaceRequests = _List1 # pStartWorkspaceRequests_}
 
 
--- | The requests.
+-- | The WorkSpaces to start. You can specify up to 25 WorkSpaces.
 swStartWorkspaceRequests :: Lens' StartWorkspaces (NonEmpty StartRequest)
-swStartWorkspaceRequests = lens _swStartWorkspaceRequests (\ s a -> s{_swStartWorkspaceRequests = a}) . _List1;
+swStartWorkspaceRequests = lens _swStartWorkspaceRequests (\ s a -> s{_swStartWorkspaceRequests = a}) . _List1
 
 instance AWSRequest StartWorkspaces where
         type Rs StartWorkspaces = StartWorkspacesResponse
@@ -115,7 +117,7 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'swrsFailedRequests' - The failed requests.
+-- * 'swrsFailedRequests' - Information about the WorkSpaces that could not be started.
 --
 -- * 'swrsResponseStatus' - -- | The response status code.
 startWorkspacesResponse
@@ -123,15 +125,15 @@
     -> StartWorkspacesResponse
 startWorkspacesResponse pResponseStatus_ =
   StartWorkspacesResponse'
-  {_swrsFailedRequests = Nothing, _swrsResponseStatus = pResponseStatus_}
+    {_swrsFailedRequests = Nothing, _swrsResponseStatus = pResponseStatus_}
 
 
--- | The failed requests.
+-- | Information about the WorkSpaces that could not be started.
 swrsFailedRequests :: Lens' StartWorkspacesResponse [FailedWorkspaceChangeRequest]
-swrsFailedRequests = lens _swrsFailedRequests (\ s a -> s{_swrsFailedRequests = a}) . _Default . _Coerce;
+swrsFailedRequests = lens _swrsFailedRequests (\ s a -> s{_swrsFailedRequests = a}) . _Default . _Coerce
 
 -- | -- | The response status code.
 swrsResponseStatus :: Lens' StartWorkspacesResponse Int
-swrsResponseStatus = lens _swrsResponseStatus (\ s a -> s{_swrsResponseStatus = a});
+swrsResponseStatus = lens _swrsResponseStatus (\ s a -> s{_swrsResponseStatus = a})
 
 instance NFData StartWorkspacesResponse where
diff --git a/gen/Network/AWS/WorkSpaces/StopWorkspaces.hs b/gen/Network/AWS/WorkSpaces/StopWorkspaces.hs
--- a/gen/Network/AWS/WorkSpaces/StopWorkspaces.hs
+++ b/gen/Network/AWS/WorkSpaces/StopWorkspaces.hs
@@ -12,15 +12,17 @@
 
 -- |
 -- Module      : Network.AWS.WorkSpaces.StopWorkspaces
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Stops the specified WorkSpaces. The WorkSpaces must have a running mode of AutoStop and a state of AVAILABLE, IMPAIRED, UNHEALTHY, or ERROR.
+-- Stops the specified WorkSpaces.
 --
 --
+-- You cannot stop a WorkSpace unless it has a running mode of @AutoStop@ and a state of @AVAILABLE@ , @IMPAIRED@ , @UNHEALTHY@ , or @ERROR@ .
+--
 module Network.AWS.WorkSpaces.StopWorkspaces
     (
     -- * Creating a Request
@@ -54,7 +56,7 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'swStopWorkspaceRequests' - The requests.
+-- * 'swStopWorkspaceRequests' - The WorkSpaces to stop. You can specify up to 25 WorkSpaces.
 stopWorkspaces
     :: NonEmpty StopRequest -- ^ 'swStopWorkspaceRequests'
     -> StopWorkspaces
@@ -62,9 +64,9 @@
   StopWorkspaces' {_swStopWorkspaceRequests = _List1 # pStopWorkspaceRequests_}
 
 
--- | The requests.
+-- | The WorkSpaces to stop. You can specify up to 25 WorkSpaces.
 swStopWorkspaceRequests :: Lens' StopWorkspaces (NonEmpty StopRequest)
-swStopWorkspaceRequests = lens _swStopWorkspaceRequests (\ s a -> s{_swStopWorkspaceRequests = a}) . _List1;
+swStopWorkspaceRequests = lens _swStopWorkspaceRequests (\ s a -> s{_swStopWorkspaceRequests = a}) . _List1
 
 instance AWSRequest StopWorkspaces where
         type Rs StopWorkspaces = StopWorkspacesResponse
@@ -114,7 +116,7 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'srsFailedRequests' - The failed requests.
+-- * 'srsFailedRequests' - Information about the WorkSpaces that could not be stopped.
 --
 -- * 'srsResponseStatus' - -- | The response status code.
 stopWorkspacesResponse
@@ -122,15 +124,15 @@
     -> StopWorkspacesResponse
 stopWorkspacesResponse pResponseStatus_ =
   StopWorkspacesResponse'
-  {_srsFailedRequests = Nothing, _srsResponseStatus = pResponseStatus_}
+    {_srsFailedRequests = Nothing, _srsResponseStatus = pResponseStatus_}
 
 
--- | The failed requests.
+-- | Information about the WorkSpaces that could not be stopped.
 srsFailedRequests :: Lens' StopWorkspacesResponse [FailedWorkspaceChangeRequest]
-srsFailedRequests = lens _srsFailedRequests (\ s a -> s{_srsFailedRequests = a}) . _Default . _Coerce;
+srsFailedRequests = lens _srsFailedRequests (\ s a -> s{_srsFailedRequests = a}) . _Default . _Coerce
 
 -- | -- | The response status code.
 srsResponseStatus :: Lens' StopWorkspacesResponse Int
-srsResponseStatus = lens _srsResponseStatus (\ s a -> s{_srsResponseStatus = a});
+srsResponseStatus = lens _srsResponseStatus (\ s a -> s{_srsResponseStatus = a})
 
 instance NFData StopWorkspacesResponse where
diff --git a/gen/Network/AWS/WorkSpaces/TerminateWorkspaces.hs b/gen/Network/AWS/WorkSpaces/TerminateWorkspaces.hs
--- a/gen/Network/AWS/WorkSpaces/TerminateWorkspaces.hs
+++ b/gen/Network/AWS/WorkSpaces/TerminateWorkspaces.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.WorkSpaces.TerminateWorkspaces
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -21,10 +21,12 @@
 -- Terminates the specified WorkSpaces.
 --
 --
--- Terminating a WorkSpace is a permanent action and cannot be undone. The user's data is not maintained and will be destroyed. If you need to archive any user data, contact Amazon Web Services before terminating the WorkSpace.
+-- Terminating a WorkSpace is a permanent action and cannot be undone. The user's data is destroyed. If you need to archive any user data, contact Amazon Web Services before terminating the WorkSpace.
 --
 -- You can terminate a WorkSpace that is in any state except @SUSPENDED@ .
 --
+-- This operation is asynchronous and returns before the WorkSpaces have been completely terminated.
+--
 module Network.AWS.WorkSpaces.TerminateWorkspaces
     (
     -- * Creating a Request
@@ -48,11 +50,7 @@
 import Network.AWS.WorkSpaces.Types
 import Network.AWS.WorkSpaces.Types.Product
 
--- | Contains the inputs for the 'TerminateWorkspaces' operation.
---
---
---
--- /See:/ 'terminateWorkspaces' smart constructor.
+-- | /See:/ 'terminateWorkspaces' smart constructor.
 newtype TerminateWorkspaces = TerminateWorkspaces'
   { _twTerminateWorkspaceRequests :: List1 TerminateRequest
   } deriving (Eq, Read, Show, Data, Typeable, Generic)
@@ -62,18 +60,18 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'twTerminateWorkspaceRequests' - An array of structures that specify the WorkSpaces to terminate.
+-- * 'twTerminateWorkspaceRequests' - The WorkSpaces to terminate. You can specify up to 25 WorkSpaces.
 terminateWorkspaces
     :: NonEmpty TerminateRequest -- ^ 'twTerminateWorkspaceRequests'
     -> TerminateWorkspaces
 terminateWorkspaces pTerminateWorkspaceRequests_ =
   TerminateWorkspaces'
-  {_twTerminateWorkspaceRequests = _List1 # pTerminateWorkspaceRequests_}
+    {_twTerminateWorkspaceRequests = _List1 # pTerminateWorkspaceRequests_}
 
 
--- | An array of structures that specify the WorkSpaces to terminate.
+-- | The WorkSpaces to terminate. You can specify up to 25 WorkSpaces.
 twTerminateWorkspaceRequests :: Lens' TerminateWorkspaces (NonEmpty TerminateRequest)
-twTerminateWorkspaceRequests = lens _twTerminateWorkspaceRequests (\ s a -> s{_twTerminateWorkspaceRequests = a}) . _List1;
+twTerminateWorkspaceRequests = lens _twTerminateWorkspaceRequests (\ s a -> s{_twTerminateWorkspaceRequests = a}) . _List1
 
 instance AWSRequest TerminateWorkspaces where
         type Rs TerminateWorkspaces =
@@ -114,11 +112,7 @@
 instance ToQuery TerminateWorkspaces where
         toQuery = const mempty
 
--- | Contains the results of the 'TerminateWorkspaces' operation.
---
---
---
--- /See:/ 'terminateWorkspacesResponse' smart constructor.
+-- | /See:/ 'terminateWorkspacesResponse' smart constructor.
 data TerminateWorkspacesResponse = TerminateWorkspacesResponse'
   { _twrsFailedRequests :: !(Maybe [FailedWorkspaceChangeRequest])
   , _twrsResponseStatus :: !Int
@@ -129,7 +123,7 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'twrsFailedRequests' - An array of structures representing any WorkSpaces that could not be terminated.
+-- * 'twrsFailedRequests' - Information about the WorkSpaces that could not be terminated.
 --
 -- * 'twrsResponseStatus' - -- | The response status code.
 terminateWorkspacesResponse
@@ -137,15 +131,15 @@
     -> TerminateWorkspacesResponse
 terminateWorkspacesResponse pResponseStatus_ =
   TerminateWorkspacesResponse'
-  {_twrsFailedRequests = Nothing, _twrsResponseStatus = pResponseStatus_}
+    {_twrsFailedRequests = Nothing, _twrsResponseStatus = pResponseStatus_}
 
 
--- | An array of structures representing any WorkSpaces that could not be terminated.
+-- | Information about the WorkSpaces that could not be terminated.
 twrsFailedRequests :: Lens' TerminateWorkspacesResponse [FailedWorkspaceChangeRequest]
-twrsFailedRequests = lens _twrsFailedRequests (\ s a -> s{_twrsFailedRequests = a}) . _Default . _Coerce;
+twrsFailedRequests = lens _twrsFailedRequests (\ s a -> s{_twrsFailedRequests = a}) . _Default . _Coerce
 
 -- | -- | The response status code.
 twrsResponseStatus :: Lens' TerminateWorkspacesResponse Int
-twrsResponseStatus = lens _twrsResponseStatus (\ s a -> s{_twrsResponseStatus = a});
+twrsResponseStatus = lens _twrsResponseStatus (\ s a -> s{_twrsResponseStatus = a})
 
 instance NFData TerminateWorkspacesResponse where
diff --git a/gen/Network/AWS/WorkSpaces/Types.hs b/gen/Network/AWS/WorkSpaces/Types.hs
--- a/gen/Network/AWS/WorkSpaces/Types.hs
+++ b/gen/Network/AWS/WorkSpaces/Types.hs
@@ -4,7 +4,7 @@
 
 -- |
 -- Module      : Network.AWS.WorkSpaces.Types
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -17,11 +17,15 @@
 
     -- * Errors
     , _AccessDeniedException
+    , _ResourceCreationFailedException
     , _ResourceUnavailableException
     , _InvalidParameterValuesException
+    , _ResourceAssociatedException
     , _OperationInProgressException
+    , _ResourceAlreadyExistsException
     , _ResourceLimitExceededException
     , _InvalidResourceStateException
+    , _OperationNotSupportedException
     , _UnsupportedWorkspaceConfigurationException
     , _ResourceNotFoundException
 
@@ -31,9 +35,18 @@
     -- * ConnectionState
     , ConnectionState (..)
 
+    -- * ModificationResourceEnum
+    , ModificationResourceEnum (..)
+
+    -- * ModificationStateEnum
+    , ModificationStateEnum (..)
+
     -- * RunningMode
     , RunningMode (..)
 
+    -- * TargetWorkspaceState
+    , TargetWorkspaceState (..)
+
     -- * WorkspaceDirectoryState
     , WorkspaceDirectoryState (..)
 
@@ -71,6 +84,18 @@
     , fwcrWorkspaceId
     , fwcrErrorMessage
 
+    -- * IPRuleItem
+    , IPRuleItem
+    , ipRuleItem
+    , iriRuleDesc
+    , iriIpRule
+
+    -- * ModificationState
+    , ModificationState
+    , modificationState
+    , msState
+    , msResource
+
     -- * RebootRequest
     , RebootRequest
     , rebootRequest
@@ -81,6 +106,11 @@
     , rebuildRequest
     , rrWorkspaceId
 
+    -- * RootStorage
+    , RootStorage
+    , rootStorage
+    , rsCapacity
+
     -- * StartRequest
     , StartRequest
     , startRequest
@@ -113,6 +143,7 @@
     , wDirectoryId
     , wState
     , wIPAddress
+    , wModificationStates
     , wUserName
     , wSubnetId
     , wBundleId
@@ -130,6 +161,7 @@
     , workspaceBundle
     , wbBundleId
     , wbOwner
+    , wbRootStorage
     , wbName
     , wbComputeType
     , wbUserStorage
@@ -152,6 +184,7 @@
     , wdState
     , wdCustomerUserName
     , wdSubnetIds
+    , wdIpGroupIds
     , wdAlias
     , wdWorkspaceSecurityGroupId
     , wdDirectoryType
@@ -162,8 +195,11 @@
     -- * WorkspaceProperties
     , WorkspaceProperties
     , workspaceProperties
+    , wpComputeTypeName
     , wpRunningMode
+    , wpRootVolumeSizeGib
     , wpRunningModeAutoStopTimeoutInMinutes
+    , wpUserVolumeSizeGib
 
     -- * WorkspaceRequest
     , WorkspaceRequest
@@ -176,6 +212,14 @@
     , wrDirectoryId
     , wrUserName
     , wrBundleId
+
+    -- * WorkspacesIPGroup
+    , WorkspacesIPGroup
+    , workspacesIPGroup
+    , wigGroupDesc
+    , wigUserRules
+    , wigGroupId
+    , wigGroupName
     ) where
 
 import Network.AWS.Lens
@@ -188,24 +232,24 @@
 workSpaces :: Service
 workSpaces =
   Service
-  { _svcAbbrev = "WorkSpaces"
-  , _svcSigner = v4
-  , _svcPrefix = "workspaces"
-  , _svcVersion = "2015-04-08"
-  , _svcEndpoint = defaultEndpoint workSpaces
-  , _svcTimeout = Just 70
-  , _svcCheck = statusSuccess
-  , _svcError = parseJSONError "WorkSpaces"
-  , _svcRetry = retry
-  }
+    { _svcAbbrev = "WorkSpaces"
+    , _svcSigner = v4
+    , _svcPrefix = "workspaces"
+    , _svcVersion = "2015-04-08"
+    , _svcEndpoint = defaultEndpoint workSpaces
+    , _svcTimeout = Just 70
+    , _svcCheck = statusSuccess
+    , _svcError = parseJSONError "WorkSpaces"
+    , _svcRetry = retry
+    }
   where
     retry =
       Exponential
-      { _retryBase = 5.0e-2
-      , _retryGrowth = 2
-      , _retryAttempts = 5
-      , _retryCheck = check
-      }
+        { _retryBase = 5.0e-2
+        , _retryGrowth = 2
+        , _retryAttempts = 5
+        , _retryCheck = check
+        }
     check e
       | has (hasCode "ThrottledException" . hasStatus 400) e =
         Just "throttled_exception"
@@ -214,6 +258,8 @@
         Just "throttling_exception"
       | has (hasCode "Throttling" . hasStatus 400) e = Just "throttling"
       | has (hasStatus 504) e = Just "gateway_timeout"
+      | has (hasCode "RequestThrottledException" . hasStatus 400) e =
+        Just "request_throttled_exception"
       | has (hasStatus 502) e = Just "bad_gateway"
       | has (hasStatus 503) e = Just "service_unavailable"
       | has (hasStatus 500) e = Just "general_server_error"
@@ -228,6 +274,14 @@
 _AccessDeniedException = _MatchServiceError workSpaces "AccessDeniedException"
 
 
+-- | The resource could not be created.
+--
+--
+_ResourceCreationFailedException :: AsError a => Getting (First ServiceError) a ServiceError
+_ResourceCreationFailedException =
+  _MatchServiceError workSpaces "ResourceCreationFailedException"
+
+
 -- | The specified resource is not available.
 --
 --
@@ -244,6 +298,14 @@
   _MatchServiceError workSpaces "InvalidParameterValuesException"
 
 
+-- | The resource is associated with a directory.
+--
+--
+_ResourceAssociatedException :: AsError a => Getting (First ServiceError) a ServiceError
+_ResourceAssociatedException =
+  _MatchServiceError workSpaces "ResourceAssociatedException"
+
+
 -- | The properties of this WorkSpace are currently being modified. Try again in a moment.
 --
 --
@@ -252,6 +314,14 @@
   _MatchServiceError workSpaces "OperationInProgressException"
 
 
+-- | The specified resource already exists.
+--
+--
+_ResourceAlreadyExistsException :: AsError a => Getting (First ServiceError) a ServiceError
+_ResourceAlreadyExistsException =
+  _MatchServiceError workSpaces "ResourceAlreadyExistsException"
+
+
 -- | Your resource limits have been exceeded.
 --
 --
@@ -260,12 +330,20 @@
   _MatchServiceError workSpaces "ResourceLimitExceededException"
 
 
--- | The state of the WorkSpace is not valid for this operation.
+-- | The state of the resource is not valid for this operation.
 --
 --
 _InvalidResourceStateException :: AsError a => Getting (First ServiceError) a ServiceError
 _InvalidResourceStateException =
   _MatchServiceError workSpaces "InvalidResourceStateException"
+
+
+-- | This operation is not supported.
+--
+--
+_OperationNotSupportedException :: AsError a => Getting (First ServiceError) a ServiceError
+_OperationNotSupportedException =
+  _MatchServiceError workSpaces "OperationNotSupportedException"
 
 
 -- | The configuration of this WorkSpace is not supported for this operation. For more information, see the <http://docs.aws.amazon.com/workspaces/latest/adminguide/ Amazon WorkSpaces Administration Guide> .
diff --git a/gen/Network/AWS/WorkSpaces/Types/Product.hs b/gen/Network/AWS/WorkSpaces/Types/Product.hs
--- a/gen/Network/AWS/WorkSpaces/Types/Product.hs
+++ b/gen/Network/AWS/WorkSpaces/Types/Product.hs
@@ -9,7 +9,7 @@
 
 -- |
 -- Module      : Network.AWS.WorkSpaces.Types.Product
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -21,7 +21,7 @@
 import Network.AWS.Prelude
 import Network.AWS.WorkSpaces.Types.Sum
 
--- | Contains information about the compute type of a WorkSpace bundle.
+-- | Information about the compute type.
 --
 --
 --
@@ -35,15 +35,15 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'ctName' - The name of the compute type for the bundle.
+-- * 'ctName' - The compute type.
 computeType
     :: ComputeType
 computeType = ComputeType' {_ctName = Nothing}
 
 
--- | The name of the compute type for the bundle.
+-- | The compute type.
 ctName :: Lens' ComputeType (Maybe Compute)
-ctName = lens _ctName (\ s a -> s{_ctName = a});
+ctName = lens _ctName (\ s a -> s{_ctName = a})
 
 instance FromJSON ComputeType where
         parseJSON
@@ -54,7 +54,7 @@
 
 instance NFData ComputeType where
 
--- | Contains default WorkSpace creation information.
+-- | Information about defaults used to create a WorkSpace.
 --
 --
 --
@@ -72,46 +72,46 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'dwcpCustomSecurityGroupId' - The identifier of any custom security groups that are applied to the WorkSpaces when they are created.
+-- * 'dwcpCustomSecurityGroupId' - The identifier of any security groups to apply to WorkSpaces when they are created.
 --
--- * 'dwcpUserEnabledAsLocalAdministrator' - The WorkSpace user is an administrator on the WorkSpace.
+-- * 'dwcpUserEnabledAsLocalAdministrator' - Indicates whether the WorkSpace user is an administrator on the WorkSpace.
 --
--- * 'dwcpEnableWorkDocs' - Specifies if the directory is enabled for Amazon WorkDocs.
+-- * 'dwcpEnableWorkDocs' - Indicates whether the directory is enabled for Amazon WorkDocs.
 --
--- * 'dwcpEnableInternetAccess' - A public IP address will be attached to all WorkSpaces that are created or rebuilt.
+-- * 'dwcpEnableInternetAccess' - The public IP address to attach to all WorkSpaces that are created or rebuilt.
 --
--- * 'dwcpDefaultOu' - The organizational unit (OU) in the directory that the WorkSpace machine accounts are placed in.
+-- * 'dwcpDefaultOu' - The organizational unit (OU) in the directory for the WorkSpace machine accounts.
 defaultWorkspaceCreationProperties
     :: DefaultWorkspaceCreationProperties
 defaultWorkspaceCreationProperties =
   DefaultWorkspaceCreationProperties'
-  { _dwcpCustomSecurityGroupId = Nothing
-  , _dwcpUserEnabledAsLocalAdministrator = Nothing
-  , _dwcpEnableWorkDocs = Nothing
-  , _dwcpEnableInternetAccess = Nothing
-  , _dwcpDefaultOu = Nothing
-  }
+    { _dwcpCustomSecurityGroupId = Nothing
+    , _dwcpUserEnabledAsLocalAdministrator = Nothing
+    , _dwcpEnableWorkDocs = Nothing
+    , _dwcpEnableInternetAccess = Nothing
+    , _dwcpDefaultOu = Nothing
+    }
 
 
--- | The identifier of any custom security groups that are applied to the WorkSpaces when they are created.
+-- | The identifier of any security groups to apply to WorkSpaces when they are created.
 dwcpCustomSecurityGroupId :: Lens' DefaultWorkspaceCreationProperties (Maybe Text)
-dwcpCustomSecurityGroupId = lens _dwcpCustomSecurityGroupId (\ s a -> s{_dwcpCustomSecurityGroupId = a});
+dwcpCustomSecurityGroupId = lens _dwcpCustomSecurityGroupId (\ s a -> s{_dwcpCustomSecurityGroupId = a})
 
--- | The WorkSpace user is an administrator on the WorkSpace.
+-- | Indicates whether the WorkSpace user is an administrator on the WorkSpace.
 dwcpUserEnabledAsLocalAdministrator :: Lens' DefaultWorkspaceCreationProperties (Maybe Bool)
-dwcpUserEnabledAsLocalAdministrator = lens _dwcpUserEnabledAsLocalAdministrator (\ s a -> s{_dwcpUserEnabledAsLocalAdministrator = a});
+dwcpUserEnabledAsLocalAdministrator = lens _dwcpUserEnabledAsLocalAdministrator (\ s a -> s{_dwcpUserEnabledAsLocalAdministrator = a})
 
--- | Specifies if the directory is enabled for Amazon WorkDocs.
+-- | Indicates whether the directory is enabled for Amazon WorkDocs.
 dwcpEnableWorkDocs :: Lens' DefaultWorkspaceCreationProperties (Maybe Bool)
-dwcpEnableWorkDocs = lens _dwcpEnableWorkDocs (\ s a -> s{_dwcpEnableWorkDocs = a});
+dwcpEnableWorkDocs = lens _dwcpEnableWorkDocs (\ s a -> s{_dwcpEnableWorkDocs = a})
 
--- | A public IP address will be attached to all WorkSpaces that are created or rebuilt.
+-- | The public IP address to attach to all WorkSpaces that are created or rebuilt.
 dwcpEnableInternetAccess :: Lens' DefaultWorkspaceCreationProperties (Maybe Bool)
-dwcpEnableInternetAccess = lens _dwcpEnableInternetAccess (\ s a -> s{_dwcpEnableInternetAccess = a});
+dwcpEnableInternetAccess = lens _dwcpEnableInternetAccess (\ s a -> s{_dwcpEnableInternetAccess = a})
 
--- | The organizational unit (OU) in the directory that the WorkSpace machine accounts are placed in.
+-- | The organizational unit (OU) in the directory for the WorkSpace machine accounts.
 dwcpDefaultOu :: Lens' DefaultWorkspaceCreationProperties (Maybe Text)
-dwcpDefaultOu = lens _dwcpDefaultOu (\ s a -> s{_dwcpDefaultOu = a});
+dwcpDefaultOu = lens _dwcpDefaultOu (\ s a -> s{_dwcpDefaultOu = a})
 
 instance FromJSON DefaultWorkspaceCreationProperties
          where
@@ -131,7 +131,7 @@
 instance NFData DefaultWorkspaceCreationProperties
          where
 
--- | Contains information about a WorkSpace that could not be created.
+-- | Information about a WorkSpace that could not be created.
 --
 --
 --
@@ -147,7 +147,7 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'fcwrWorkspaceRequest' - A 'FailedCreateWorkspaceRequest$WorkspaceRequest' object that contains the information about the WorkSpace that could not be created.
+-- * 'fcwrWorkspaceRequest' - Information about the WorkSpace.
 --
 -- * 'fcwrErrorCode' - The error code.
 --
@@ -156,23 +156,23 @@
     :: FailedCreateWorkspaceRequest
 failedCreateWorkspaceRequest =
   FailedCreateWorkspaceRequest'
-  { _fcwrWorkspaceRequest = Nothing
-  , _fcwrErrorCode = Nothing
-  , _fcwrErrorMessage = Nothing
-  }
+    { _fcwrWorkspaceRequest = Nothing
+    , _fcwrErrorCode = Nothing
+    , _fcwrErrorMessage = Nothing
+    }
 
 
--- | A 'FailedCreateWorkspaceRequest$WorkspaceRequest' object that contains the information about the WorkSpace that could not be created.
+-- | Information about the WorkSpace.
 fcwrWorkspaceRequest :: Lens' FailedCreateWorkspaceRequest (Maybe WorkspaceRequest)
-fcwrWorkspaceRequest = lens _fcwrWorkspaceRequest (\ s a -> s{_fcwrWorkspaceRequest = a});
+fcwrWorkspaceRequest = lens _fcwrWorkspaceRequest (\ s a -> s{_fcwrWorkspaceRequest = a})
 
 -- | The error code.
 fcwrErrorCode :: Lens' FailedCreateWorkspaceRequest (Maybe Text)
-fcwrErrorCode = lens _fcwrErrorCode (\ s a -> s{_fcwrErrorCode = a});
+fcwrErrorCode = lens _fcwrErrorCode (\ s a -> s{_fcwrErrorCode = a})
 
 -- | The textual error message.
 fcwrErrorMessage :: Lens' FailedCreateWorkspaceRequest (Maybe Text)
-fcwrErrorMessage = lens _fcwrErrorMessage (\ s a -> s{_fcwrErrorMessage = a});
+fcwrErrorMessage = lens _fcwrErrorMessage (\ s a -> s{_fcwrErrorMessage = a})
 
 instance FromJSON FailedCreateWorkspaceRequest where
         parseJSON
@@ -186,7 +186,7 @@
 
 instance NFData FailedCreateWorkspaceRequest where
 
--- | Contains information about a WorkSpace that could not be rebooted ('RebootWorkspaces' ), rebuilt ('RebuildWorkspaces' ), terminated ('TerminateWorkspaces' ), started ('StartWorkspaces' ), or stopped ('StopWorkspaces' ).
+-- | Information about a WorkSpace that could not be rebooted ('RebootWorkspaces' ), rebuilt ('RebuildWorkspaces' ), terminated ('TerminateWorkspaces' ), started ('StartWorkspaces' ), or stopped ('StopWorkspaces' ).
 --
 --
 --
@@ -211,23 +211,23 @@
     :: FailedWorkspaceChangeRequest
 failedWorkspaceChangeRequest =
   FailedWorkspaceChangeRequest'
-  { _fwcrErrorCode = Nothing
-  , _fwcrWorkspaceId = Nothing
-  , _fwcrErrorMessage = Nothing
-  }
+    { _fwcrErrorCode = Nothing
+    , _fwcrWorkspaceId = Nothing
+    , _fwcrErrorMessage = Nothing
+    }
 
 
 -- | The error code.
 fwcrErrorCode :: Lens' FailedWorkspaceChangeRequest (Maybe Text)
-fwcrErrorCode = lens _fwcrErrorCode (\ s a -> s{_fwcrErrorCode = a});
+fwcrErrorCode = lens _fwcrErrorCode (\ s a -> s{_fwcrErrorCode = a})
 
 -- | The identifier of the WorkSpace.
 fwcrWorkspaceId :: Lens' FailedWorkspaceChangeRequest (Maybe Text)
-fwcrWorkspaceId = lens _fwcrWorkspaceId (\ s a -> s{_fwcrWorkspaceId = a});
+fwcrWorkspaceId = lens _fwcrWorkspaceId (\ s a -> s{_fwcrWorkspaceId = a})
 
 -- | The textual error message.
 fwcrErrorMessage :: Lens' FailedWorkspaceChangeRequest (Maybe Text)
-fwcrErrorMessage = lens _fwcrErrorMessage (\ s a -> s{_fwcrErrorMessage = a});
+fwcrErrorMessage = lens _fwcrErrorMessage (\ s a -> s{_fwcrErrorMessage = a})
 
 instance FromJSON FailedWorkspaceChangeRequest where
         parseJSON
@@ -241,10 +241,102 @@
 
 instance NFData FailedWorkspaceChangeRequest where
 
--- | Contains information used with the 'RebootWorkspaces' operation to reboot a WorkSpace.
+-- | Information about a rule for an IP access control group.
 --
 --
 --
+-- /See:/ 'ipRuleItem' smart constructor.
+data IPRuleItem = IPRuleItem'
+  { _iriRuleDesc :: !(Maybe Text)
+  , _iriIpRule   :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'IPRuleItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'iriRuleDesc' - The description.
+--
+-- * 'iriIpRule' - The IP address range, in CIDR notation.
+ipRuleItem
+    :: IPRuleItem
+ipRuleItem = IPRuleItem' {_iriRuleDesc = Nothing, _iriIpRule = Nothing}
+
+
+-- | The description.
+iriRuleDesc :: Lens' IPRuleItem (Maybe Text)
+iriRuleDesc = lens _iriRuleDesc (\ s a -> s{_iriRuleDesc = a})
+
+-- | The IP address range, in CIDR notation.
+iriIpRule :: Lens' IPRuleItem (Maybe Text)
+iriIpRule = lens _iriIpRule (\ s a -> s{_iriIpRule = a})
+
+instance FromJSON IPRuleItem where
+        parseJSON
+          = withObject "IPRuleItem"
+              (\ x ->
+                 IPRuleItem' <$>
+                   (x .:? "ruleDesc") <*> (x .:? "ipRule"))
+
+instance Hashable IPRuleItem where
+
+instance NFData IPRuleItem where
+
+instance ToJSON IPRuleItem where
+        toJSON IPRuleItem'{..}
+          = object
+              (catMaybes
+                 [("ruleDesc" .=) <$> _iriRuleDesc,
+                  ("ipRule" .=) <$> _iriIpRule])
+
+-- | Information about a WorkSpace modification.
+--
+--
+--
+-- /See:/ 'modificationState' smart constructor.
+data ModificationState = ModificationState'
+  { _msState    :: !(Maybe ModificationStateEnum)
+  , _msResource :: !(Maybe ModificationResourceEnum)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'ModificationState' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'msState' - The modification state.
+--
+-- * 'msResource' - The resource.
+modificationState
+    :: ModificationState
+modificationState =
+  ModificationState' {_msState = Nothing, _msResource = Nothing}
+
+
+-- | The modification state.
+msState :: Lens' ModificationState (Maybe ModificationStateEnum)
+msState = lens _msState (\ s a -> s{_msState = a})
+
+-- | The resource.
+msResource :: Lens' ModificationState (Maybe ModificationResourceEnum)
+msResource = lens _msResource (\ s a -> s{_msResource = a})
+
+instance FromJSON ModificationState where
+        parseJSON
+          = withObject "ModificationState"
+              (\ x ->
+                 ModificationState' <$>
+                   (x .:? "State") <*> (x .:? "Resource"))
+
+instance Hashable ModificationState where
+
+instance NFData ModificationState where
+
+-- | Information used to reboot a WorkSpace.
+--
+--
+--
 -- /See:/ 'rebootRequest' smart constructor.
 newtype RebootRequest = RebootRequest'
   { _rWorkspaceId :: Text
@@ -255,16 +347,16 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'rWorkspaceId' - The identifier of the WorkSpace to reboot.
+-- * 'rWorkspaceId' - The ID of the WorkSpace.
 rebootRequest
     :: Text -- ^ 'rWorkspaceId'
     -> RebootRequest
 rebootRequest pWorkspaceId_ = RebootRequest' {_rWorkspaceId = pWorkspaceId_}
 
 
--- | The identifier of the WorkSpace to reboot.
+-- | The ID of the WorkSpace.
 rWorkspaceId :: Lens' RebootRequest Text
-rWorkspaceId = lens _rWorkspaceId (\ s a -> s{_rWorkspaceId = a});
+rWorkspaceId = lens _rWorkspaceId (\ s a -> s{_rWorkspaceId = a})
 
 instance Hashable RebootRequest where
 
@@ -275,7 +367,7 @@
           = object
               (catMaybes [Just ("WorkspaceId" .= _rWorkspaceId)])
 
--- | Contains information used with the 'RebuildWorkspaces' operation to rebuild a WorkSpace.
+-- | Information used to rebuild a WorkSpace.
 --
 --
 --
@@ -289,16 +381,16 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'rrWorkspaceId' - The identifier of the WorkSpace to rebuild.
+-- * 'rrWorkspaceId' - The ID of the WorkSpace.
 rebuildRequest
     :: Text -- ^ 'rrWorkspaceId'
     -> RebuildRequest
 rebuildRequest pWorkspaceId_ = RebuildRequest' {_rrWorkspaceId = pWorkspaceId_}
 
 
--- | The identifier of the WorkSpace to rebuild.
+-- | The ID of the WorkSpace.
 rrWorkspaceId :: Lens' RebuildRequest Text
-rrWorkspaceId = lens _rrWorkspaceId (\ s a -> s{_rrWorkspaceId = a});
+rrWorkspaceId = lens _rrWorkspaceId (\ s a -> s{_rrWorkspaceId = a})
 
 instance Hashable RebuildRequest where
 
@@ -309,10 +401,43 @@
           = object
               (catMaybes [Just ("WorkspaceId" .= _rrWorkspaceId)])
 
--- | Describes the start request.
+-- | Information about the root volume for a WorkSpace bundle.
 --
 --
 --
+-- /See:/ 'rootStorage' smart constructor.
+newtype RootStorage = RootStorage'
+  { _rsCapacity :: Maybe Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'RootStorage' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rsCapacity' - The size of the root volume.
+rootStorage
+    :: RootStorage
+rootStorage = RootStorage' {_rsCapacity = Nothing}
+
+
+-- | The size of the root volume.
+rsCapacity :: Lens' RootStorage (Maybe Text)
+rsCapacity = lens _rsCapacity (\ s a -> s{_rsCapacity = a})
+
+instance FromJSON RootStorage where
+        parseJSON
+          = withObject "RootStorage"
+              (\ x -> RootStorage' <$> (x .:? "Capacity"))
+
+instance Hashable RootStorage where
+
+instance NFData RootStorage where
+
+-- | Information used to start a WorkSpace.
+--
+--
+--
 -- /See:/ 'startRequest' smart constructor.
 newtype StartRequest = StartRequest'
   { _sWorkspaceId :: Maybe Text
@@ -331,7 +456,7 @@
 
 -- | The ID of the WorkSpace.
 sWorkspaceId :: Lens' StartRequest (Maybe Text)
-sWorkspaceId = lens _sWorkspaceId (\ s a -> s{_sWorkspaceId = a});
+sWorkspaceId = lens _sWorkspaceId (\ s a -> s{_sWorkspaceId = a})
 
 instance Hashable StartRequest where
 
@@ -342,7 +467,7 @@
           = object
               (catMaybes [("WorkspaceId" .=) <$> _sWorkspaceId])
 
--- | Describes the stop request.
+-- | Information used to stop a WorkSpace.
 --
 --
 --
@@ -364,7 +489,7 @@
 
 -- | The ID of the WorkSpace.
 srWorkspaceId :: Lens' StopRequest (Maybe Text)
-srWorkspaceId = lens _srWorkspaceId (\ s a -> s{_srWorkspaceId = a});
+srWorkspaceId = lens _srWorkspaceId (\ s a -> s{_srWorkspaceId = a})
 
 instance Hashable StopRequest where
 
@@ -375,7 +500,7 @@
           = object
               (catMaybes [("WorkspaceId" .=) <$> _srWorkspaceId])
 
--- | Describes the tag of the WorkSpace.
+-- | Information about a tag.
 --
 --
 --
@@ -401,11 +526,11 @@
 
 -- | The value of the tag.
 tagValue :: Lens' Tag (Maybe Text)
-tagValue = lens _tagValue (\ s a -> s{_tagValue = a});
+tagValue = lens _tagValue (\ s a -> s{_tagValue = a})
 
 -- | The key of the tag.
 tagKey :: Lens' Tag Text
-tagKey = lens _tagKey (\ s a -> s{_tagKey = a});
+tagKey = lens _tagKey (\ s a -> s{_tagKey = a})
 
 instance FromJSON Tag where
         parseJSON
@@ -423,7 +548,7 @@
                  [("Value" .=) <$> _tagValue,
                   Just ("Key" .= _tagKey)])
 
--- | Contains information used with the 'TerminateWorkspaces' operation to terminate a WorkSpace.
+-- | Information used to terminate a WorkSpace.
 --
 --
 --
@@ -437,7 +562,7 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'trWorkspaceId' - The identifier of the WorkSpace to terminate.
+-- * 'trWorkspaceId' - The ID of the WorkSpace.
 terminateRequest
     :: Text -- ^ 'trWorkspaceId'
     -> TerminateRequest
@@ -445,9 +570,9 @@
   TerminateRequest' {_trWorkspaceId = pWorkspaceId_}
 
 
--- | The identifier of the WorkSpace to terminate.
+-- | The ID of the WorkSpace.
 trWorkspaceId :: Lens' TerminateRequest Text
-trWorkspaceId = lens _trWorkspaceId (\ s a -> s{_trWorkspaceId = a});
+trWorkspaceId = lens _trWorkspaceId (\ s a -> s{_trWorkspaceId = a})
 
 instance Hashable TerminateRequest where
 
@@ -458,7 +583,7 @@
           = object
               (catMaybes [Just ("WorkspaceId" .= _trWorkspaceId)])
 
--- | Contains information about the user storage for a WorkSpace bundle.
+-- | Information about the user storage for a WorkSpace bundle.
 --
 --
 --
@@ -472,15 +597,15 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'usCapacity' - The amount of user storage for the bundle.
+-- * 'usCapacity' - The size of the user storage.
 userStorage
     :: UserStorage
 userStorage = UserStorage' {_usCapacity = Nothing}
 
 
--- | The amount of user storage for the bundle.
+-- | The size of the user storage.
 usCapacity :: Lens' UserStorage (Maybe Text)
-usCapacity = lens _usCapacity (\ s a -> s{_usCapacity = a});
+usCapacity = lens _usCapacity (\ s a -> s{_usCapacity = a})
 
 instance FromJSON UserStorage where
         parseJSON
@@ -491,7 +616,7 @@
 
 instance NFData UserStorage where
 
--- | Contains information about a WorkSpace.
+-- | Information about a WorkSpace.
 --
 --
 --
@@ -500,6 +625,7 @@
   { _wDirectoryId                 :: !(Maybe Text)
   , _wState                       :: !(Maybe WorkspaceState)
   , _wIPAddress                   :: !(Maybe Text)
+  , _wModificationStates          :: !(Maybe [ModificationState])
   , _wUserName                    :: !(Maybe Text)
   , _wSubnetId                    :: !(Maybe Text)
   , _wBundleId                    :: !(Maybe Text)
@@ -518,109 +644,116 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'wDirectoryId' - The identifier of the AWS Directory Service directory that the WorkSpace belongs to.
+-- * 'wDirectoryId' - The identifier of the AWS Directory Service directory for the WorkSpace.
 --
 -- * 'wState' - The operational state of the WorkSpace.
 --
 -- * 'wIPAddress' - The IP address of the WorkSpace.
 --
--- * 'wUserName' - The user that the WorkSpace is assigned to.
+-- * 'wModificationStates' - The modification states of the WorkSpace.
 --
--- * 'wSubnetId' - The identifier of the subnet that the WorkSpace is in.
+-- * 'wUserName' - The user for the WorkSpace.
 --
--- * 'wBundleId' - The identifier of the bundle that the WorkSpace was created from.
+-- * 'wSubnetId' - The identifier of the subnet for the WorkSpace.
 --
--- * 'wWorkspaceProperties' - Undocumented member.
+-- * 'wBundleId' - The identifier of the bundle used to create the WorkSpace.
 --
--- * 'wRootVolumeEncryptionEnabled' - Specifies whether the data stored on the root volume, or C: drive, is encrypted.
+-- * 'wWorkspaceProperties' - The properties of the WorkSpace.
 --
--- * 'wErrorCode' - If the WorkSpace could not be created, this contains the error code.
+-- * 'wRootVolumeEncryptionEnabled' - Indicates whether the data stored on the root volume is encrypted.
 --
+-- * 'wErrorCode' - If the WorkSpace could not be created, contains the error code.
+--
 -- * 'wVolumeEncryptionKey' - The KMS key used to encrypt data stored on your WorkSpace.
 --
--- * 'wComputerName' - The name of the WorkSpace as seen by the operating system.
+-- * 'wComputerName' - The name of the WorkSpace, as seen by the operating system.
 --
 -- * 'wWorkspaceId' - The identifier of the WorkSpace.
 --
--- * 'wUserVolumeEncryptionEnabled' - Specifies whether the data stored on the user volume, or D: drive, is encrypted.
+-- * 'wUserVolumeEncryptionEnabled' - Indicates whether the data stored on the user volume is encrypted.
 --
--- * 'wErrorMessage' - If the WorkSpace could not be created, this contains a textual error message that describes the failure.
+-- * 'wErrorMessage' - If the WorkSpace could not be created, contains a textual error message that describes the failure.
 workspace
     :: Workspace
 workspace =
   Workspace'
-  { _wDirectoryId = Nothing
-  , _wState = Nothing
-  , _wIPAddress = Nothing
-  , _wUserName = Nothing
-  , _wSubnetId = Nothing
-  , _wBundleId = Nothing
-  , _wWorkspaceProperties = Nothing
-  , _wRootVolumeEncryptionEnabled = Nothing
-  , _wErrorCode = Nothing
-  , _wVolumeEncryptionKey = Nothing
-  , _wComputerName = Nothing
-  , _wWorkspaceId = Nothing
-  , _wUserVolumeEncryptionEnabled = Nothing
-  , _wErrorMessage = Nothing
-  }
+    { _wDirectoryId = Nothing
+    , _wState = Nothing
+    , _wIPAddress = Nothing
+    , _wModificationStates = Nothing
+    , _wUserName = Nothing
+    , _wSubnetId = Nothing
+    , _wBundleId = Nothing
+    , _wWorkspaceProperties = Nothing
+    , _wRootVolumeEncryptionEnabled = Nothing
+    , _wErrorCode = Nothing
+    , _wVolumeEncryptionKey = Nothing
+    , _wComputerName = Nothing
+    , _wWorkspaceId = Nothing
+    , _wUserVolumeEncryptionEnabled = Nothing
+    , _wErrorMessage = Nothing
+    }
 
 
--- | The identifier of the AWS Directory Service directory that the WorkSpace belongs to.
+-- | The identifier of the AWS Directory Service directory for the WorkSpace.
 wDirectoryId :: Lens' Workspace (Maybe Text)
-wDirectoryId = lens _wDirectoryId (\ s a -> s{_wDirectoryId = a});
+wDirectoryId = lens _wDirectoryId (\ s a -> s{_wDirectoryId = a})
 
 -- | The operational state of the WorkSpace.
 wState :: Lens' Workspace (Maybe WorkspaceState)
-wState = lens _wState (\ s a -> s{_wState = a});
+wState = lens _wState (\ s a -> s{_wState = a})
 
 -- | The IP address of the WorkSpace.
 wIPAddress :: Lens' Workspace (Maybe Text)
-wIPAddress = lens _wIPAddress (\ s a -> s{_wIPAddress = a});
+wIPAddress = lens _wIPAddress (\ s a -> s{_wIPAddress = a})
 
--- | The user that the WorkSpace is assigned to.
+-- | The modification states of the WorkSpace.
+wModificationStates :: Lens' Workspace [ModificationState]
+wModificationStates = lens _wModificationStates (\ s a -> s{_wModificationStates = a}) . _Default . _Coerce
+
+-- | The user for the WorkSpace.
 wUserName :: Lens' Workspace (Maybe Text)
-wUserName = lens _wUserName (\ s a -> s{_wUserName = a});
+wUserName = lens _wUserName (\ s a -> s{_wUserName = a})
 
--- | The identifier of the subnet that the WorkSpace is in.
+-- | The identifier of the subnet for the WorkSpace.
 wSubnetId :: Lens' Workspace (Maybe Text)
-wSubnetId = lens _wSubnetId (\ s a -> s{_wSubnetId = a});
+wSubnetId = lens _wSubnetId (\ s a -> s{_wSubnetId = a})
 
--- | The identifier of the bundle that the WorkSpace was created from.
+-- | The identifier of the bundle used to create the WorkSpace.
 wBundleId :: Lens' Workspace (Maybe Text)
-wBundleId = lens _wBundleId (\ s a -> s{_wBundleId = a});
+wBundleId = lens _wBundleId (\ s a -> s{_wBundleId = a})
 
--- | Undocumented member.
+-- | The properties of the WorkSpace.
 wWorkspaceProperties :: Lens' Workspace (Maybe WorkspaceProperties)
-wWorkspaceProperties = lens _wWorkspaceProperties (\ s a -> s{_wWorkspaceProperties = a});
+wWorkspaceProperties = lens _wWorkspaceProperties (\ s a -> s{_wWorkspaceProperties = a})
 
--- | Specifies whether the data stored on the root volume, or C: drive, is encrypted.
+-- | Indicates whether the data stored on the root volume is encrypted.
 wRootVolumeEncryptionEnabled :: Lens' Workspace (Maybe Bool)
-wRootVolumeEncryptionEnabled = lens _wRootVolumeEncryptionEnabled (\ s a -> s{_wRootVolumeEncryptionEnabled = a});
+wRootVolumeEncryptionEnabled = lens _wRootVolumeEncryptionEnabled (\ s a -> s{_wRootVolumeEncryptionEnabled = a})
 
--- | If the WorkSpace could not be created, this contains the error code.
+-- | If the WorkSpace could not be created, contains the error code.
 wErrorCode :: Lens' Workspace (Maybe Text)
-wErrorCode = lens _wErrorCode (\ s a -> s{_wErrorCode = a});
+wErrorCode = lens _wErrorCode (\ s a -> s{_wErrorCode = a})
 
 -- | The KMS key used to encrypt data stored on your WorkSpace.
 wVolumeEncryptionKey :: Lens' Workspace (Maybe Text)
-wVolumeEncryptionKey = lens _wVolumeEncryptionKey (\ s a -> s{_wVolumeEncryptionKey = a});
+wVolumeEncryptionKey = lens _wVolumeEncryptionKey (\ s a -> s{_wVolumeEncryptionKey = a})
 
--- | The name of the WorkSpace as seen by the operating system.
+-- | The name of the WorkSpace, as seen by the operating system.
 wComputerName :: Lens' Workspace (Maybe Text)
-wComputerName = lens _wComputerName (\ s a -> s{_wComputerName = a});
+wComputerName = lens _wComputerName (\ s a -> s{_wComputerName = a})
 
 -- | The identifier of the WorkSpace.
 wWorkspaceId :: Lens' Workspace (Maybe Text)
-wWorkspaceId = lens _wWorkspaceId (\ s a -> s{_wWorkspaceId = a});
+wWorkspaceId = lens _wWorkspaceId (\ s a -> s{_wWorkspaceId = a})
 
--- | Specifies whether the data stored on the user volume, or D: drive, is encrypted.
+-- | Indicates whether the data stored on the user volume is encrypted.
 wUserVolumeEncryptionEnabled :: Lens' Workspace (Maybe Bool)
-wUserVolumeEncryptionEnabled = lens _wUserVolumeEncryptionEnabled (\ s a -> s{_wUserVolumeEncryptionEnabled = a});
+wUserVolumeEncryptionEnabled = lens _wUserVolumeEncryptionEnabled (\ s a -> s{_wUserVolumeEncryptionEnabled = a})
 
--- | If the WorkSpace could not be created, this contains a textual error message that describes the failure.
+-- | If the WorkSpace could not be created, contains a textual error message that describes the failure.
 wErrorMessage :: Lens' Workspace (Maybe Text)
-wErrorMessage = lens _wErrorMessage (\ s a -> s{_wErrorMessage = a});
+wErrorMessage = lens _wErrorMessage (\ s a -> s{_wErrorMessage = a})
 
 instance FromJSON Workspace where
         parseJSON
@@ -629,6 +762,7 @@
                  Workspace' <$>
                    (x .:? "DirectoryId") <*> (x .:? "State") <*>
                      (x .:? "IpAddress")
+                     <*> (x .:? "ModificationStates" .!= mempty)
                      <*> (x .:? "UserName")
                      <*> (x .:? "SubnetId")
                      <*> (x .:? "BundleId")
@@ -645,7 +779,7 @@
 
 instance NFData Workspace where
 
--- | Contains information about a WorkSpace bundle.
+-- | Information about a WorkSpace bundle.
 --
 --
 --
@@ -653,6 +787,7 @@
 data WorkspaceBundle = WorkspaceBundle'
   { _wbBundleId    :: !(Maybe Text)
   , _wbOwner       :: !(Maybe Text)
+  , _wbRootStorage :: !(Maybe RootStorage)
   , _wbName        :: !(Maybe Text)
   , _wbComputeType :: !(Maybe ComputeType)
   , _wbUserStorage :: !(Maybe UserStorage)
@@ -666,51 +801,58 @@
 --
 -- * 'wbBundleId' - The bundle identifier.
 --
--- * 'wbOwner' - The owner of the bundle. This contains the owner's account identifier, or @AMAZON@ if the bundle is provided by AWS.
+-- * 'wbOwner' - The owner of the bundle. This is the account identifier of the owner, or @AMAZON@ if the bundle is provided by AWS.
 --
+-- * 'wbRootStorage' - The size of the root volume.
+--
 -- * 'wbName' - The name of the bundle.
 --
--- * 'wbComputeType' - A 'ComputeType' object that specifies the compute type for the bundle.
+-- * 'wbComputeType' - The compute type. For more information, see <http://aws.amazon.com/workspaces/details/#Amazon_WorkSpaces_Bundles Amazon WorkSpaces Bundles> .
 --
--- * 'wbUserStorage' - A 'UserStorage' object that specifies the amount of user storage that the bundle contains.
+-- * 'wbUserStorage' - The size of the user storage.
 --
--- * 'wbDescription' - The bundle description.
+-- * 'wbDescription' - A description.
 workspaceBundle
     :: WorkspaceBundle
 workspaceBundle =
   WorkspaceBundle'
-  { _wbBundleId = Nothing
-  , _wbOwner = Nothing
-  , _wbName = Nothing
-  , _wbComputeType = Nothing
-  , _wbUserStorage = Nothing
-  , _wbDescription = Nothing
-  }
+    { _wbBundleId = Nothing
+    , _wbOwner = Nothing
+    , _wbRootStorage = Nothing
+    , _wbName = Nothing
+    , _wbComputeType = Nothing
+    , _wbUserStorage = Nothing
+    , _wbDescription = Nothing
+    }
 
 
 -- | The bundle identifier.
 wbBundleId :: Lens' WorkspaceBundle (Maybe Text)
-wbBundleId = lens _wbBundleId (\ s a -> s{_wbBundleId = a});
+wbBundleId = lens _wbBundleId (\ s a -> s{_wbBundleId = a})
 
--- | The owner of the bundle. This contains the owner's account identifier, or @AMAZON@ if the bundle is provided by AWS.
+-- | The owner of the bundle. This is the account identifier of the owner, or @AMAZON@ if the bundle is provided by AWS.
 wbOwner :: Lens' WorkspaceBundle (Maybe Text)
-wbOwner = lens _wbOwner (\ s a -> s{_wbOwner = a});
+wbOwner = lens _wbOwner (\ s a -> s{_wbOwner = a})
 
+-- | The size of the root volume.
+wbRootStorage :: Lens' WorkspaceBundle (Maybe RootStorage)
+wbRootStorage = lens _wbRootStorage (\ s a -> s{_wbRootStorage = a})
+
 -- | The name of the bundle.
 wbName :: Lens' WorkspaceBundle (Maybe Text)
-wbName = lens _wbName (\ s a -> s{_wbName = a});
+wbName = lens _wbName (\ s a -> s{_wbName = a})
 
--- | A 'ComputeType' object that specifies the compute type for the bundle.
+-- | The compute type. For more information, see <http://aws.amazon.com/workspaces/details/#Amazon_WorkSpaces_Bundles Amazon WorkSpaces Bundles> .
 wbComputeType :: Lens' WorkspaceBundle (Maybe ComputeType)
-wbComputeType = lens _wbComputeType (\ s a -> s{_wbComputeType = a});
+wbComputeType = lens _wbComputeType (\ s a -> s{_wbComputeType = a})
 
--- | A 'UserStorage' object that specifies the amount of user storage that the bundle contains.
+-- | The size of the user storage.
 wbUserStorage :: Lens' WorkspaceBundle (Maybe UserStorage)
-wbUserStorage = lens _wbUserStorage (\ s a -> s{_wbUserStorage = a});
+wbUserStorage = lens _wbUserStorage (\ s a -> s{_wbUserStorage = a})
 
--- | The bundle description.
+-- | A description.
 wbDescription :: Lens' WorkspaceBundle (Maybe Text)
-wbDescription = lens _wbDescription (\ s a -> s{_wbDescription = a});
+wbDescription = lens _wbDescription (\ s a -> s{_wbDescription = a})
 
 instance FromJSON WorkspaceBundle where
         parseJSON
@@ -718,7 +860,8 @@
               (\ x ->
                  WorkspaceBundle' <$>
                    (x .:? "BundleId") <*> (x .:? "Owner") <*>
-                     (x .:? "Name")
+                     (x .:? "RootStorage")
+                     <*> (x .:? "Name")
                      <*> (x .:? "ComputeType")
                      <*> (x .:? "UserStorage")
                      <*> (x .:? "Description"))
@@ -750,33 +893,33 @@
 --
 -- * 'wcsWorkspaceId' - The ID of the WorkSpace.
 --
--- * 'wcsConnectionState' - The connection state of the WorkSpace. Returns UNKOWN if the WorkSpace is in a Stopped state.
+-- * 'wcsConnectionState' - The connection state of the WorkSpace. The connection state is unknown if the WorkSpace is stopped.
 workspaceConnectionStatus
     :: WorkspaceConnectionStatus
 workspaceConnectionStatus =
   WorkspaceConnectionStatus'
-  { _wcsLastKnownUserConnectionTimestamp = Nothing
-  , _wcsConnectionStateCheckTimestamp = Nothing
-  , _wcsWorkspaceId = Nothing
-  , _wcsConnectionState = Nothing
-  }
+    { _wcsLastKnownUserConnectionTimestamp = Nothing
+    , _wcsConnectionStateCheckTimestamp = Nothing
+    , _wcsWorkspaceId = Nothing
+    , _wcsConnectionState = Nothing
+    }
 
 
 -- | The timestamp of the last known user connection.
 wcsLastKnownUserConnectionTimestamp :: Lens' WorkspaceConnectionStatus (Maybe UTCTime)
-wcsLastKnownUserConnectionTimestamp = lens _wcsLastKnownUserConnectionTimestamp (\ s a -> s{_wcsLastKnownUserConnectionTimestamp = a}) . mapping _Time;
+wcsLastKnownUserConnectionTimestamp = lens _wcsLastKnownUserConnectionTimestamp (\ s a -> s{_wcsLastKnownUserConnectionTimestamp = a}) . mapping _Time
 
 -- | The timestamp of the connection state check.
 wcsConnectionStateCheckTimestamp :: Lens' WorkspaceConnectionStatus (Maybe UTCTime)
-wcsConnectionStateCheckTimestamp = lens _wcsConnectionStateCheckTimestamp (\ s a -> s{_wcsConnectionStateCheckTimestamp = a}) . mapping _Time;
+wcsConnectionStateCheckTimestamp = lens _wcsConnectionStateCheckTimestamp (\ s a -> s{_wcsConnectionStateCheckTimestamp = a}) . mapping _Time
 
 -- | The ID of the WorkSpace.
 wcsWorkspaceId :: Lens' WorkspaceConnectionStatus (Maybe Text)
-wcsWorkspaceId = lens _wcsWorkspaceId (\ s a -> s{_wcsWorkspaceId = a});
+wcsWorkspaceId = lens _wcsWorkspaceId (\ s a -> s{_wcsWorkspaceId = a})
 
--- | The connection state of the WorkSpace. Returns UNKOWN if the WorkSpace is in a Stopped state.
+-- | The connection state of the WorkSpace. The connection state is unknown if the WorkSpace is stopped.
 wcsConnectionState :: Lens' WorkspaceConnectionStatus (Maybe ConnectionState)
-wcsConnectionState = lens _wcsConnectionState (\ s a -> s{_wcsConnectionState = a});
+wcsConnectionState = lens _wcsConnectionState (\ s a -> s{_wcsConnectionState = a})
 
 instance FromJSON WorkspaceConnectionStatus where
         parseJSON
@@ -792,7 +935,7 @@
 
 instance NFData WorkspaceConnectionStatus where
 
--- | Contains information about an AWS Directory Service directory for use with Amazon WorkSpaces.
+-- | Information about an AWS Directory Service directory for use with Amazon WorkSpaces.
 --
 --
 --
@@ -804,6 +947,7 @@
   , _wdState :: !(Maybe WorkspaceDirectoryState)
   , _wdCustomerUserName :: !(Maybe Text)
   , _wdSubnetIds :: !(Maybe [Text])
+  , _wdIpGroupIds :: !(Maybe [Text])
   , _wdAlias :: !(Maybe Text)
   , _wdWorkspaceSecurityGroupId :: !(Maybe Text)
   , _wdDirectoryType :: !(Maybe WorkspaceDirectoryType)
@@ -827,85 +971,92 @@
 --
 -- * 'wdCustomerUserName' - The user name for the service account.
 --
--- * 'wdSubnetIds' - An array of strings that contains the identifiers of the subnets used with the directory.
+-- * 'wdSubnetIds' - The identifiers of the subnets used with the directory.
 --
+-- * 'wdIpGroupIds' - The identifiers of the IP access control groups associated with the directory.
+--
 -- * 'wdAlias' - The directory alias.
 --
 -- * 'wdWorkspaceSecurityGroupId' - The identifier of the security group that is assigned to new WorkSpaces.
 --
 -- * 'wdDirectoryType' - The directory type.
 --
--- * 'wdWorkspaceCreationProperties' - A structure that specifies the default creation properties for all WorkSpaces in the directory.
+-- * 'wdWorkspaceCreationProperties' - The default creation properties for all WorkSpaces in the directory.
 --
--- * 'wdDNSIPAddresses' - An array of strings that contains the IP addresses of the DNS servers for the directory.
+-- * 'wdDNSIPAddresses' - The IP addresses of the DNS servers for the directory.
 --
 -- * 'wdDirectoryName' - The name of the directory.
 workspaceDirectory
     :: WorkspaceDirectory
 workspaceDirectory =
   WorkspaceDirectory'
-  { _wdRegistrationCode = Nothing
-  , _wdIAMRoleId = Nothing
-  , _wdDirectoryId = Nothing
-  , _wdState = Nothing
-  , _wdCustomerUserName = Nothing
-  , _wdSubnetIds = Nothing
-  , _wdAlias = Nothing
-  , _wdWorkspaceSecurityGroupId = Nothing
-  , _wdDirectoryType = Nothing
-  , _wdWorkspaceCreationProperties = Nothing
-  , _wdDNSIPAddresses = Nothing
-  , _wdDirectoryName = Nothing
-  }
+    { _wdRegistrationCode = Nothing
+    , _wdIAMRoleId = Nothing
+    , _wdDirectoryId = Nothing
+    , _wdState = Nothing
+    , _wdCustomerUserName = Nothing
+    , _wdSubnetIds = Nothing
+    , _wdIpGroupIds = Nothing
+    , _wdAlias = Nothing
+    , _wdWorkspaceSecurityGroupId = Nothing
+    , _wdDirectoryType = Nothing
+    , _wdWorkspaceCreationProperties = Nothing
+    , _wdDNSIPAddresses = Nothing
+    , _wdDirectoryName = Nothing
+    }
 
 
 -- | The registration code for the directory. This is the code that users enter in their Amazon WorkSpaces client application to connect to the directory.
 wdRegistrationCode :: Lens' WorkspaceDirectory (Maybe Text)
-wdRegistrationCode = lens _wdRegistrationCode (\ s a -> s{_wdRegistrationCode = a});
+wdRegistrationCode = lens _wdRegistrationCode (\ s a -> s{_wdRegistrationCode = a})
 
 -- | The identifier of the IAM role. This is the role that allows Amazon WorkSpaces to make calls to other services, such as Amazon EC2, on your behalf.
 wdIAMRoleId :: Lens' WorkspaceDirectory (Maybe Text)
-wdIAMRoleId = lens _wdIAMRoleId (\ s a -> s{_wdIAMRoleId = a});
+wdIAMRoleId = lens _wdIAMRoleId (\ s a -> s{_wdIAMRoleId = a})
 
 -- | The directory identifier.
 wdDirectoryId :: Lens' WorkspaceDirectory (Maybe Text)
-wdDirectoryId = lens _wdDirectoryId (\ s a -> s{_wdDirectoryId = a});
+wdDirectoryId = lens _wdDirectoryId (\ s a -> s{_wdDirectoryId = a})
 
 -- | The state of the directory's registration with Amazon WorkSpaces
 wdState :: Lens' WorkspaceDirectory (Maybe WorkspaceDirectoryState)
-wdState = lens _wdState (\ s a -> s{_wdState = a});
+wdState = lens _wdState (\ s a -> s{_wdState = a})
 
 -- | The user name for the service account.
 wdCustomerUserName :: Lens' WorkspaceDirectory (Maybe Text)
-wdCustomerUserName = lens _wdCustomerUserName (\ s a -> s{_wdCustomerUserName = a});
+wdCustomerUserName = lens _wdCustomerUserName (\ s a -> s{_wdCustomerUserName = a})
 
--- | An array of strings that contains the identifiers of the subnets used with the directory.
+-- | The identifiers of the subnets used with the directory.
 wdSubnetIds :: Lens' WorkspaceDirectory [Text]
-wdSubnetIds = lens _wdSubnetIds (\ s a -> s{_wdSubnetIds = a}) . _Default . _Coerce;
+wdSubnetIds = lens _wdSubnetIds (\ s a -> s{_wdSubnetIds = a}) . _Default . _Coerce
 
+-- | The identifiers of the IP access control groups associated with the directory.
+wdIpGroupIds :: Lens' WorkspaceDirectory [Text]
+wdIpGroupIds = lens _wdIpGroupIds (\ s a -> s{_wdIpGroupIds = a}) . _Default . _Coerce
+
 -- | The directory alias.
 wdAlias :: Lens' WorkspaceDirectory (Maybe Text)
-wdAlias = lens _wdAlias (\ s a -> s{_wdAlias = a});
+wdAlias = lens _wdAlias (\ s a -> s{_wdAlias = a})
 
 -- | The identifier of the security group that is assigned to new WorkSpaces.
 wdWorkspaceSecurityGroupId :: Lens' WorkspaceDirectory (Maybe Text)
-wdWorkspaceSecurityGroupId = lens _wdWorkspaceSecurityGroupId (\ s a -> s{_wdWorkspaceSecurityGroupId = a});
+wdWorkspaceSecurityGroupId = lens _wdWorkspaceSecurityGroupId (\ s a -> s{_wdWorkspaceSecurityGroupId = a})
 
 -- | The directory type.
 wdDirectoryType :: Lens' WorkspaceDirectory (Maybe WorkspaceDirectoryType)
-wdDirectoryType = lens _wdDirectoryType (\ s a -> s{_wdDirectoryType = a});
+wdDirectoryType = lens _wdDirectoryType (\ s a -> s{_wdDirectoryType = a})
 
--- | A structure that specifies the default creation properties for all WorkSpaces in the directory.
+-- | The default creation properties for all WorkSpaces in the directory.
 wdWorkspaceCreationProperties :: Lens' WorkspaceDirectory (Maybe DefaultWorkspaceCreationProperties)
-wdWorkspaceCreationProperties = lens _wdWorkspaceCreationProperties (\ s a -> s{_wdWorkspaceCreationProperties = a});
+wdWorkspaceCreationProperties = lens _wdWorkspaceCreationProperties (\ s a -> s{_wdWorkspaceCreationProperties = a})
 
--- | An array of strings that contains the IP addresses of the DNS servers for the directory.
+-- | The IP addresses of the DNS servers for the directory.
 wdDNSIPAddresses :: Lens' WorkspaceDirectory [Text]
-wdDNSIPAddresses = lens _wdDNSIPAddresses (\ s a -> s{_wdDNSIPAddresses = a}) . _Default . _Coerce;
+wdDNSIPAddresses = lens _wdDNSIPAddresses (\ s a -> s{_wdDNSIPAddresses = a}) . _Default . _Coerce
 
 -- | The name of the directory.
 wdDirectoryName :: Lens' WorkspaceDirectory (Maybe Text)
-wdDirectoryName = lens _wdDirectoryName (\ s a -> s{_wdDirectoryName = a});
+wdDirectoryName = lens _wdDirectoryName (\ s a -> s{_wdDirectoryName = a})
 
 instance FromJSON WorkspaceDirectory where
         parseJSON
@@ -917,6 +1068,7 @@
                      <*> (x .:? "State")
                      <*> (x .:? "CustomerUserName")
                      <*> (x .:? "SubnetIds" .!= mempty)
+                     <*> (x .:? "ipGroupIds" .!= mempty)
                      <*> (x .:? "Alias")
                      <*> (x .:? "WorkspaceSecurityGroupId")
                      <*> (x .:? "DirectoryType")
@@ -928,14 +1080,17 @@
 
 instance NFData WorkspaceDirectory where
 
--- | Describes the properties of a WorkSpace.
+-- | Information about a WorkSpace.
 --
 --
 --
 -- /See:/ 'workspaceProperties' smart constructor.
 data WorkspaceProperties = WorkspaceProperties'
-  { _wpRunningMode                         :: !(Maybe RunningMode)
+  { _wpComputeTypeName                     :: !(Maybe Compute)
+  , _wpRunningMode                         :: !(Maybe RunningMode)
+  , _wpRootVolumeSizeGib                   :: !(Maybe Int)
   , _wpRunningModeAutoStopTimeoutInMinutes :: !(Maybe Int)
+  , _wpUserVolumeSizeGib                   :: !(Maybe Int)
   } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
 
@@ -943,31 +1098,56 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'wpRunningMode' - The running mode of the WorkSpace. AlwaysOn WorkSpaces are billed monthly. AutoStop WorkSpaces are billed by the hour and stopped when no longer being used in order to save on costs.
+-- * 'wpComputeTypeName' - The compute type. For more information, see <http://aws.amazon.com/workspaces/details/#Amazon_WorkSpaces_Bundles Amazon WorkSpaces Bundles> .
 --
+-- * 'wpRunningMode' - The running mode. For more information, see <http://docs.aws.amazon.com/workspaces/latest/adminguide/running-mode.html Manage the WorkSpace Running Mode> .
+--
+-- * 'wpRootVolumeSizeGib' - The size of the root volume.
+--
 -- * 'wpRunningModeAutoStopTimeoutInMinutes' - The time after a user logs off when WorkSpaces are automatically stopped. Configured in 60 minute intervals.
+--
+-- * 'wpUserVolumeSizeGib' - The size of the user storage.
 workspaceProperties
     :: WorkspaceProperties
 workspaceProperties =
   WorkspaceProperties'
-  {_wpRunningMode = Nothing, _wpRunningModeAutoStopTimeoutInMinutes = Nothing}
+    { _wpComputeTypeName = Nothing
+    , _wpRunningMode = Nothing
+    , _wpRootVolumeSizeGib = Nothing
+    , _wpRunningModeAutoStopTimeoutInMinutes = Nothing
+    , _wpUserVolumeSizeGib = Nothing
+    }
 
 
--- | The running mode of the WorkSpace. AlwaysOn WorkSpaces are billed monthly. AutoStop WorkSpaces are billed by the hour and stopped when no longer being used in order to save on costs.
+-- | The compute type. For more information, see <http://aws.amazon.com/workspaces/details/#Amazon_WorkSpaces_Bundles Amazon WorkSpaces Bundles> .
+wpComputeTypeName :: Lens' WorkspaceProperties (Maybe Compute)
+wpComputeTypeName = lens _wpComputeTypeName (\ s a -> s{_wpComputeTypeName = a})
+
+-- | The running mode. For more information, see <http://docs.aws.amazon.com/workspaces/latest/adminguide/running-mode.html Manage the WorkSpace Running Mode> .
 wpRunningMode :: Lens' WorkspaceProperties (Maybe RunningMode)
-wpRunningMode = lens _wpRunningMode (\ s a -> s{_wpRunningMode = a});
+wpRunningMode = lens _wpRunningMode (\ s a -> s{_wpRunningMode = a})
 
+-- | The size of the root volume.
+wpRootVolumeSizeGib :: Lens' WorkspaceProperties (Maybe Int)
+wpRootVolumeSizeGib = lens _wpRootVolumeSizeGib (\ s a -> s{_wpRootVolumeSizeGib = a})
+
 -- | The time after a user logs off when WorkSpaces are automatically stopped. Configured in 60 minute intervals.
 wpRunningModeAutoStopTimeoutInMinutes :: Lens' WorkspaceProperties (Maybe Int)
-wpRunningModeAutoStopTimeoutInMinutes = lens _wpRunningModeAutoStopTimeoutInMinutes (\ s a -> s{_wpRunningModeAutoStopTimeoutInMinutes = a});
+wpRunningModeAutoStopTimeoutInMinutes = lens _wpRunningModeAutoStopTimeoutInMinutes (\ s a -> s{_wpRunningModeAutoStopTimeoutInMinutes = a})
 
+-- | The size of the user storage.
+wpUserVolumeSizeGib :: Lens' WorkspaceProperties (Maybe Int)
+wpUserVolumeSizeGib = lens _wpUserVolumeSizeGib (\ s a -> s{_wpUserVolumeSizeGib = a})
+
 instance FromJSON WorkspaceProperties where
         parseJSON
           = withObject "WorkspaceProperties"
               (\ x ->
                  WorkspaceProperties' <$>
-                   (x .:? "RunningMode") <*>
-                     (x .:? "RunningModeAutoStopTimeoutInMinutes"))
+                   (x .:? "ComputeTypeName") <*> (x .:? "RunningMode")
+                     <*> (x .:? "RootVolumeSizeGib")
+                     <*> (x .:? "RunningModeAutoStopTimeoutInMinutes")
+                     <*> (x .:? "UserVolumeSizeGib"))
 
 instance Hashable WorkspaceProperties where
 
@@ -977,11 +1157,14 @@
         toJSON WorkspaceProperties'{..}
           = object
               (catMaybes
-                 [("RunningMode" .=) <$> _wpRunningMode,
+                 [("ComputeTypeName" .=) <$> _wpComputeTypeName,
+                  ("RunningMode" .=) <$> _wpRunningMode,
+                  ("RootVolumeSizeGib" .=) <$> _wpRootVolumeSizeGib,
                   ("RunningModeAutoStopTimeoutInMinutes" .=) <$>
-                    _wpRunningModeAutoStopTimeoutInMinutes])
+                    _wpRunningModeAutoStopTimeoutInMinutes,
+                  ("UserVolumeSizeGib" .=) <$> _wpUserVolumeSizeGib])
 
--- | Contains information about a WorkSpace creation request.
+-- | Information used to create a WorkSpace.
 --
 --
 --
@@ -1002,21 +1185,21 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'wrWorkspaceProperties' - Undocumented member.
+-- * 'wrWorkspaceProperties' - The WorkSpace properties.
 --
--- * 'wrRootVolumeEncryptionEnabled' - Specifies whether the data stored on the root volume, or C: drive, is encrypted.
+-- * 'wrRootVolumeEncryptionEnabled' - Indicates whether the data stored on the root volume is encrypted.
 --
 -- * 'wrVolumeEncryptionKey' - The KMS key used to encrypt data stored on your WorkSpace.
 --
--- * 'wrUserVolumeEncryptionEnabled' - Specifies whether the data stored on the user volume, or D: drive, is encrypted.
+-- * 'wrUserVolumeEncryptionEnabled' - Indicates whether the data stored on the user volume is encrypted.
 --
--- * 'wrTags' - The tags of the WorkSpace request.
+-- * 'wrTags' - The tags for the WorkSpace.
 --
--- * 'wrDirectoryId' - The identifier of the AWS Directory Service directory to create the WorkSpace in. You can use the 'DescribeWorkspaceDirectories' operation to obtain a list of the directories that are available.
+-- * 'wrDirectoryId' - The identifier of the AWS Directory Service directory for the WorkSpace. You can use 'DescribeWorkspaceDirectories' to list the available directories.
 --
--- * 'wrUserName' - The username that the WorkSpace is assigned to. This username must exist in the AWS Directory Service directory specified by the @DirectoryId@ member.
+-- * 'wrUserName' - The username of the user for the WorkSpace. This username must exist in the AWS Directory Service directory for the WorkSpace.
 --
--- * 'wrBundleId' - The identifier of the bundle to create the WorkSpace from. You can use the 'DescribeWorkspaceBundles' operation to obtain a list of the bundles that are available.
+-- * 'wrBundleId' - The identifier of the bundle for the WorkSpace. You can use 'DescribeWorkspaceBundles' to list the available bundles.
 workspaceRequest
     :: Text -- ^ 'wrDirectoryId'
     -> Text -- ^ 'wrUserName'
@@ -1024,48 +1207,48 @@
     -> WorkspaceRequest
 workspaceRequest pDirectoryId_ pUserName_ pBundleId_ =
   WorkspaceRequest'
-  { _wrWorkspaceProperties = Nothing
-  , _wrRootVolumeEncryptionEnabled = Nothing
-  , _wrVolumeEncryptionKey = Nothing
-  , _wrUserVolumeEncryptionEnabled = Nothing
-  , _wrTags = Nothing
-  , _wrDirectoryId = pDirectoryId_
-  , _wrUserName = pUserName_
-  , _wrBundleId = pBundleId_
-  }
+    { _wrWorkspaceProperties = Nothing
+    , _wrRootVolumeEncryptionEnabled = Nothing
+    , _wrVolumeEncryptionKey = Nothing
+    , _wrUserVolumeEncryptionEnabled = Nothing
+    , _wrTags = Nothing
+    , _wrDirectoryId = pDirectoryId_
+    , _wrUserName = pUserName_
+    , _wrBundleId = pBundleId_
+    }
 
 
--- | Undocumented member.
+-- | The WorkSpace properties.
 wrWorkspaceProperties :: Lens' WorkspaceRequest (Maybe WorkspaceProperties)
-wrWorkspaceProperties = lens _wrWorkspaceProperties (\ s a -> s{_wrWorkspaceProperties = a});
+wrWorkspaceProperties = lens _wrWorkspaceProperties (\ s a -> s{_wrWorkspaceProperties = a})
 
--- | Specifies whether the data stored on the root volume, or C: drive, is encrypted.
+-- | Indicates whether the data stored on the root volume is encrypted.
 wrRootVolumeEncryptionEnabled :: Lens' WorkspaceRequest (Maybe Bool)
-wrRootVolumeEncryptionEnabled = lens _wrRootVolumeEncryptionEnabled (\ s a -> s{_wrRootVolumeEncryptionEnabled = a});
+wrRootVolumeEncryptionEnabled = lens _wrRootVolumeEncryptionEnabled (\ s a -> s{_wrRootVolumeEncryptionEnabled = a})
 
 -- | The KMS key used to encrypt data stored on your WorkSpace.
 wrVolumeEncryptionKey :: Lens' WorkspaceRequest (Maybe Text)
-wrVolumeEncryptionKey = lens _wrVolumeEncryptionKey (\ s a -> s{_wrVolumeEncryptionKey = a});
+wrVolumeEncryptionKey = lens _wrVolumeEncryptionKey (\ s a -> s{_wrVolumeEncryptionKey = a})
 
--- | Specifies whether the data stored on the user volume, or D: drive, is encrypted.
+-- | Indicates whether the data stored on the user volume is encrypted.
 wrUserVolumeEncryptionEnabled :: Lens' WorkspaceRequest (Maybe Bool)
-wrUserVolumeEncryptionEnabled = lens _wrUserVolumeEncryptionEnabled (\ s a -> s{_wrUserVolumeEncryptionEnabled = a});
+wrUserVolumeEncryptionEnabled = lens _wrUserVolumeEncryptionEnabled (\ s a -> s{_wrUserVolumeEncryptionEnabled = a})
 
--- | The tags of the WorkSpace request.
+-- | The tags for the WorkSpace.
 wrTags :: Lens' WorkspaceRequest [Tag]
-wrTags = lens _wrTags (\ s a -> s{_wrTags = a}) . _Default . _Coerce;
+wrTags = lens _wrTags (\ s a -> s{_wrTags = a}) . _Default . _Coerce
 
--- | The identifier of the AWS Directory Service directory to create the WorkSpace in. You can use the 'DescribeWorkspaceDirectories' operation to obtain a list of the directories that are available.
+-- | The identifier of the AWS Directory Service directory for the WorkSpace. You can use 'DescribeWorkspaceDirectories' to list the available directories.
 wrDirectoryId :: Lens' WorkspaceRequest Text
-wrDirectoryId = lens _wrDirectoryId (\ s a -> s{_wrDirectoryId = a});
+wrDirectoryId = lens _wrDirectoryId (\ s a -> s{_wrDirectoryId = a})
 
--- | The username that the WorkSpace is assigned to. This username must exist in the AWS Directory Service directory specified by the @DirectoryId@ member.
+-- | The username of the user for the WorkSpace. This username must exist in the AWS Directory Service directory for the WorkSpace.
 wrUserName :: Lens' WorkspaceRequest Text
-wrUserName = lens _wrUserName (\ s a -> s{_wrUserName = a});
+wrUserName = lens _wrUserName (\ s a -> s{_wrUserName = a})
 
--- | The identifier of the bundle to create the WorkSpace from. You can use the 'DescribeWorkspaceBundles' operation to obtain a list of the bundles that are available.
+-- | The identifier of the bundle for the WorkSpace. You can use 'DescribeWorkspaceBundles' to list the available bundles.
 wrBundleId :: Lens' WorkspaceRequest Text
-wrBundleId = lens _wrBundleId (\ s a -> s{_wrBundleId = a});
+wrBundleId = lens _wrBundleId (\ s a -> s{_wrBundleId = a})
 
 instance FromJSON WorkspaceRequest where
         parseJSON
@@ -1101,3 +1284,68 @@
                   Just ("DirectoryId" .= _wrDirectoryId),
                   Just ("UserName" .= _wrUserName),
                   Just ("BundleId" .= _wrBundleId)])
+
+-- | Information about an IP access control group.
+--
+--
+--
+-- /See:/ 'workspacesIPGroup' smart constructor.
+data WorkspacesIPGroup = WorkspacesIPGroup'
+  { _wigGroupDesc :: !(Maybe Text)
+  , _wigUserRules :: !(Maybe [IPRuleItem])
+  , _wigGroupId   :: !(Maybe Text)
+  , _wigGroupName :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'WorkspacesIPGroup' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'wigGroupDesc' - The description of the group.
+--
+-- * 'wigUserRules' - The rules.
+--
+-- * 'wigGroupId' - The ID of the group.
+--
+-- * 'wigGroupName' - The name of the group.
+workspacesIPGroup
+    :: WorkspacesIPGroup
+workspacesIPGroup =
+  WorkspacesIPGroup'
+    { _wigGroupDesc = Nothing
+    , _wigUserRules = Nothing
+    , _wigGroupId = Nothing
+    , _wigGroupName = Nothing
+    }
+
+
+-- | The description of the group.
+wigGroupDesc :: Lens' WorkspacesIPGroup (Maybe Text)
+wigGroupDesc = lens _wigGroupDesc (\ s a -> s{_wigGroupDesc = a})
+
+-- | The rules.
+wigUserRules :: Lens' WorkspacesIPGroup [IPRuleItem]
+wigUserRules = lens _wigUserRules (\ s a -> s{_wigUserRules = a}) . _Default . _Coerce
+
+-- | The ID of the group.
+wigGroupId :: Lens' WorkspacesIPGroup (Maybe Text)
+wigGroupId = lens _wigGroupId (\ s a -> s{_wigGroupId = a})
+
+-- | The name of the group.
+wigGroupName :: Lens' WorkspacesIPGroup (Maybe Text)
+wigGroupName = lens _wigGroupName (\ s a -> s{_wigGroupName = a})
+
+instance FromJSON WorkspacesIPGroup where
+        parseJSON
+          = withObject "WorkspacesIPGroup"
+              (\ x ->
+                 WorkspacesIPGroup' <$>
+                   (x .:? "groupDesc") <*>
+                     (x .:? "userRules" .!= mempty)
+                     <*> (x .:? "groupId")
+                     <*> (x .:? "groupName"))
+
+instance Hashable WorkspacesIPGroup where
+
+instance NFData WorkspacesIPGroup where
diff --git a/gen/Network/AWS/WorkSpaces/Types/Sum.hs b/gen/Network/AWS/WorkSpaces/Types/Sum.hs
--- a/gen/Network/AWS/WorkSpaces/Types/Sum.hs
+++ b/gen/Network/AWS/WorkSpaces/Types/Sum.hs
@@ -9,7 +9,7 @@
 
 -- |
 -- Module      : Network.AWS.WorkSpaces.Types.Sum
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -20,7 +20,9 @@
 import Network.AWS.Prelude
 
 data Compute
-  = Performance
+  = Graphics
+  | Performance
+  | Power
   | Standard
   | Value
   deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
@@ -28,15 +30,19 @@
 
 instance FromText Compute where
     parser = takeLowerText >>= \case
+        "graphics" -> pure Graphics
         "performance" -> pure Performance
+        "power" -> pure Power
         "standard" -> pure Standard
         "value" -> pure Value
         e -> fromTextError $ "Failure parsing Compute from value: '" <> e
-           <> "'. Accepted values: performance, standard, value"
+           <> "'. Accepted values: graphics, performance, power, standard, value"
 
 instance ToText Compute where
     toText = \case
+        Graphics -> "GRAPHICS"
         Performance -> "PERFORMANCE"
+        Power -> "POWER"
         Standard -> "STANDARD"
         Value -> "VALUE"
 
@@ -46,6 +52,9 @@
 instance ToQuery      Compute
 instance ToHeader     Compute
 
+instance ToJSON Compute where
+    toJSON = toJSONText
+
 instance FromJSON Compute where
     parseJSON = parseJSONText "Compute"
 
@@ -79,6 +88,63 @@
 instance FromJSON ConnectionState where
     parseJSON = parseJSONText "ConnectionState"
 
+data ModificationResourceEnum
+  = ComputeType
+  | RootVolume
+  | UserVolume
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText ModificationResourceEnum where
+    parser = takeLowerText >>= \case
+        "compute_type" -> pure ComputeType
+        "root_volume" -> pure RootVolume
+        "user_volume" -> pure UserVolume
+        e -> fromTextError $ "Failure parsing ModificationResourceEnum from value: '" <> e
+           <> "'. Accepted values: compute_type, root_volume, user_volume"
+
+instance ToText ModificationResourceEnum where
+    toText = \case
+        ComputeType -> "COMPUTE_TYPE"
+        RootVolume -> "ROOT_VOLUME"
+        UserVolume -> "USER_VOLUME"
+
+instance Hashable     ModificationResourceEnum
+instance NFData       ModificationResourceEnum
+instance ToByteString ModificationResourceEnum
+instance ToQuery      ModificationResourceEnum
+instance ToHeader     ModificationResourceEnum
+
+instance FromJSON ModificationResourceEnum where
+    parseJSON = parseJSONText "ModificationResourceEnum"
+
+data ModificationStateEnum
+  = UpdateInProgress
+  | UpdateInitiated
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText ModificationStateEnum where
+    parser = takeLowerText >>= \case
+        "update_in_progress" -> pure UpdateInProgress
+        "update_initiated" -> pure UpdateInitiated
+        e -> fromTextError $ "Failure parsing ModificationStateEnum from value: '" <> e
+           <> "'. Accepted values: update_in_progress, update_initiated"
+
+instance ToText ModificationStateEnum where
+    toText = \case
+        UpdateInProgress -> "UPDATE_IN_PROGRESS"
+        UpdateInitiated -> "UPDATE_INITIATED"
+
+instance Hashable     ModificationStateEnum
+instance NFData       ModificationStateEnum
+instance ToByteString ModificationStateEnum
+instance ToQuery      ModificationStateEnum
+instance ToHeader     ModificationStateEnum
+
+instance FromJSON ModificationStateEnum where
+    parseJSON = parseJSONText "ModificationStateEnum"
+
 data RunningMode
   = AlwaysOn
   | AutoStop
@@ -109,6 +175,33 @@
 instance FromJSON RunningMode where
     parseJSON = parseJSONText "RunningMode"
 
+data TargetWorkspaceState
+  = AdminMaintenance
+  | Available
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText TargetWorkspaceState where
+    parser = takeLowerText >>= \case
+        "admin_maintenance" -> pure AdminMaintenance
+        "available" -> pure Available
+        e -> fromTextError $ "Failure parsing TargetWorkspaceState from value: '" <> e
+           <> "'. Accepted values: admin_maintenance, available"
+
+instance ToText TargetWorkspaceState where
+    toText = \case
+        AdminMaintenance -> "ADMIN_MAINTENANCE"
+        Available -> "AVAILABLE"
+
+instance Hashable     TargetWorkspaceState
+instance NFData       TargetWorkspaceState
+instance ToByteString TargetWorkspaceState
+instance ToQuery      TargetWorkspaceState
+instance ToHeader     TargetWorkspaceState
+
+instance ToJSON TargetWorkspaceState where
+    toJSON = toJSONText
+
 data WorkspaceDirectoryState
   = Deregistered
   | Deregistering
@@ -173,7 +266,8 @@
     parseJSON = parseJSONText "WorkspaceDirectoryType"
 
 data WorkspaceState
-  = WSAvailable
+  = WSAdminMaintenance
+  | WSAvailable
   | WSError'
   | WSImpaired
   | WSMaintenance
@@ -187,11 +281,13 @@
   | WSTerminated
   | WSTerminating
   | WSUnhealthy
+  | WSUpdating
   deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
 
 
 instance FromText WorkspaceState where
     parser = takeLowerText >>= \case
+        "admin_maintenance" -> pure WSAdminMaintenance
         "available" -> pure WSAvailable
         "error" -> pure WSError'
         "impaired" -> pure WSImpaired
@@ -206,11 +302,13 @@
         "terminated" -> pure WSTerminated
         "terminating" -> pure WSTerminating
         "unhealthy" -> pure WSUnhealthy
+        "updating" -> pure WSUpdating
         e -> fromTextError $ "Failure parsing WorkspaceState from value: '" <> e
-           <> "'. Accepted values: available, error, impaired, maintenance, pending, rebooting, rebuilding, starting, stopped, stopping, suspended, terminated, terminating, unhealthy"
+           <> "'. Accepted values: admin_maintenance, available, error, impaired, maintenance, pending, rebooting, rebuilding, starting, stopped, stopping, suspended, terminated, terminating, unhealthy, updating"
 
 instance ToText WorkspaceState where
     toText = \case
+        WSAdminMaintenance -> "ADMIN_MAINTENANCE"
         WSAvailable -> "AVAILABLE"
         WSError' -> "ERROR"
         WSImpaired -> "IMPAIRED"
@@ -225,6 +323,7 @@
         WSTerminated -> "TERMINATED"
         WSTerminating -> "TERMINATING"
         WSUnhealthy -> "UNHEALTHY"
+        WSUpdating -> "UPDATING"
 
 instance Hashable     WorkspaceState
 instance NFData       WorkspaceState
diff --git a/gen/Network/AWS/WorkSpaces/UpdateRulesOfIPGroup.hs b/gen/Network/AWS/WorkSpaces/UpdateRulesOfIPGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/WorkSpaces/UpdateRulesOfIPGroup.hs
@@ -0,0 +1,135 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.WorkSpaces.UpdateRulesOfIPGroup
+-- Copyright   : (c) 2013-2018 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Replaces the current rules of the specified IP access control group with the specified rules.
+--
+--
+module Network.AWS.WorkSpaces.UpdateRulesOfIPGroup
+    (
+    -- * Creating a Request
+      updateRulesOfIPGroup
+    , UpdateRulesOfIPGroup
+    -- * Request Lenses
+    , uroigGroupId
+    , uroigUserRules
+
+    -- * Destructuring the Response
+    , updateRulesOfIPGroupResponse
+    , UpdateRulesOfIPGroupResponse
+    -- * Response Lenses
+    , uroigrsResponseStatus
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.WorkSpaces.Types
+import Network.AWS.WorkSpaces.Types.Product
+
+-- | /See:/ 'updateRulesOfIPGroup' smart constructor.
+data UpdateRulesOfIPGroup = UpdateRulesOfIPGroup'
+  { _uroigGroupId   :: !Text
+  , _uroigUserRules :: ![IPRuleItem]
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'UpdateRulesOfIPGroup' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uroigGroupId' - The ID of the group.
+--
+-- * 'uroigUserRules' - One or more rules.
+updateRulesOfIPGroup
+    :: Text -- ^ 'uroigGroupId'
+    -> UpdateRulesOfIPGroup
+updateRulesOfIPGroup pGroupId_ =
+  UpdateRulesOfIPGroup' {_uroigGroupId = pGroupId_, _uroigUserRules = mempty}
+
+
+-- | The ID of the group.
+uroigGroupId :: Lens' UpdateRulesOfIPGroup Text
+uroigGroupId = lens _uroigGroupId (\ s a -> s{_uroigGroupId = a})
+
+-- | One or more rules.
+uroigUserRules :: Lens' UpdateRulesOfIPGroup [IPRuleItem]
+uroigUserRules = lens _uroigUserRules (\ s a -> s{_uroigUserRules = a}) . _Coerce
+
+instance AWSRequest UpdateRulesOfIPGroup where
+        type Rs UpdateRulesOfIPGroup =
+             UpdateRulesOfIPGroupResponse
+        request = postJSON workSpaces
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 UpdateRulesOfIPGroupResponse' <$>
+                   (pure (fromEnum s)))
+
+instance Hashable UpdateRulesOfIPGroup where
+
+instance NFData UpdateRulesOfIPGroup where
+
+instance ToHeaders UpdateRulesOfIPGroup where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("WorkspacesService.UpdateRulesOfIpGroup" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON UpdateRulesOfIPGroup where
+        toJSON UpdateRulesOfIPGroup'{..}
+          = object
+              (catMaybes
+                 [Just ("GroupId" .= _uroigGroupId),
+                  Just ("UserRules" .= _uroigUserRules)])
+
+instance ToPath UpdateRulesOfIPGroup where
+        toPath = const "/"
+
+instance ToQuery UpdateRulesOfIPGroup where
+        toQuery = const mempty
+
+-- | /See:/ 'updateRulesOfIPGroupResponse' smart constructor.
+newtype UpdateRulesOfIPGroupResponse = UpdateRulesOfIPGroupResponse'
+  { _uroigrsResponseStatus :: Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'UpdateRulesOfIPGroupResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uroigrsResponseStatus' - -- | The response status code.
+updateRulesOfIPGroupResponse
+    :: Int -- ^ 'uroigrsResponseStatus'
+    -> UpdateRulesOfIPGroupResponse
+updateRulesOfIPGroupResponse pResponseStatus_ =
+  UpdateRulesOfIPGroupResponse' {_uroigrsResponseStatus = pResponseStatus_}
+
+
+-- | -- | The response status code.
+uroigrsResponseStatus :: Lens' UpdateRulesOfIPGroupResponse Int
+uroigrsResponseStatus = lens _uroigrsResponseStatus (\ s a -> s{_uroigrsResponseStatus = a})
+
+instance NFData UpdateRulesOfIPGroupResponse where
diff --git a/gen/Network/AWS/WorkSpaces/Waiters.hs b/gen/Network/AWS/WorkSpaces/Waiters.hs
--- a/gen/Network/AWS/WorkSpaces/Waiters.hs
+++ b/gen/Network/AWS/WorkSpaces/Waiters.hs
@@ -7,7 +7,7 @@
 
 -- |
 -- Module      : Network.AWS.WorkSpaces.Waiters
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
diff --git a/test/Main.hs b/test/Main.hs
--- a/test/Main.hs
+++ b/test/Main.hs
@@ -2,7 +2,7 @@
 
 -- |
 -- Module      : Main
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
diff --git a/test/Test/AWS/Gen/WorkSpaces.hs b/test/Test/AWS/Gen/WorkSpaces.hs
--- a/test/Test/AWS/Gen/WorkSpaces.hs
+++ b/test/Test/AWS/Gen/WorkSpaces.hs
@@ -5,7 +5,7 @@
 
 -- |
 -- Module      : Test.AWS.Gen.WorkSpaces
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -28,7 +28,10 @@
 -- fixtures :: TestTree
 -- fixtures =
 --     [ testGroup "request"
---         [ requestModifyWorkspaceProperties $
+--         [ requestRevokeIPRules $
+--             revokeIPRules
+--
+--         , requestModifyWorkspaceProperties $
 --             modifyWorkspaceProperties
 --
 --         , requestDescribeTags $
@@ -37,33 +40,57 @@
 --         , requestDescribeWorkspaceDirectories $
 --             describeWorkspaceDirectories
 --
+--         , requestDisassociateIPGroups $
+--             disassociateIPGroups
+--
 --         , requestDescribeWorkspaceBundles $
 --             describeWorkspaceBundles
 --
+--         , requestAuthorizeIPRules $
+--             authorizeIPRules
+--
 --         , requestRebuildWorkspaces $
 --             rebuildWorkspaces
 --
+--         , requestModifyWorkspaceState $
+--             modifyWorkspaceState
+--
+--         , requestCreateIPGroup $
+--             createIPGroup
+--
 --         , requestCreateTags $
 --             createTags
 --
 --         , requestDeleteTags $
 --             deleteTags
 --
+--         , requestUpdateRulesOfIPGroup $
+--             updateRulesOfIPGroup
+--
 --         , requestStopWorkspaces $
 --             stopWorkspaces
 --
+--         , requestAssociateIPGroups $
+--             associateIPGroups
+--
 --         , requestDescribeWorkspacesConnectionStatus $
 --             describeWorkspacesConnectionStatus
 --
 --         , requestRebootWorkspaces $
 --             rebootWorkspaces
 --
+--         , requestDeleteIPGroup $
+--             deleteIPGroup
+--
 --         , requestTerminateWorkspaces $
 --             terminateWorkspaces
 --
 --         , requestCreateWorkspaces $
 --             createWorkspaces
 --
+--         , requestDescribeIPGroups $
+--             describeIPGroups
+--
 --         , requestDescribeWorkspaces $
 --             describeWorkspaces
 --
@@ -73,7 +100,10 @@
 --           ]
 
 --     , testGroup "response"
---         [ responseModifyWorkspaceProperties $
+--         [ responseRevokeIPRules $
+--             revokeIPRulesResponse
+--
+--         , responseModifyWorkspaceProperties $
 --             modifyWorkspacePropertiesResponse
 --
 --         , responseDescribeTags $
@@ -82,33 +112,57 @@
 --         , responseDescribeWorkspaceDirectories $
 --             describeWorkspaceDirectoriesResponse
 --
+--         , responseDisassociateIPGroups $
+--             disassociateIPGroupsResponse
+--
 --         , responseDescribeWorkspaceBundles $
 --             describeWorkspaceBundlesResponse
 --
+--         , responseAuthorizeIPRules $
+--             authorizeIPRulesResponse
+--
 --         , responseRebuildWorkspaces $
 --             rebuildWorkspacesResponse
 --
+--         , responseModifyWorkspaceState $
+--             modifyWorkspaceStateResponse
+--
+--         , responseCreateIPGroup $
+--             createIPGroupResponse
+--
 --         , responseCreateTags $
 --             createTagsResponse
 --
 --         , responseDeleteTags $
 --             deleteTagsResponse
 --
+--         , responseUpdateRulesOfIPGroup $
+--             updateRulesOfIPGroupResponse
+--
 --         , responseStopWorkspaces $
 --             stopWorkspacesResponse
 --
+--         , responseAssociateIPGroups $
+--             associateIPGroupsResponse
+--
 --         , responseDescribeWorkspacesConnectionStatus $
 --             describeWorkspacesConnectionStatusResponse
 --
 --         , responseRebootWorkspaces $
 --             rebootWorkspacesResponse
 --
+--         , responseDeleteIPGroup $
+--             deleteIPGroupResponse
+--
 --         , responseTerminateWorkspaces $
 --             terminateWorkspacesResponse
 --
 --         , responseCreateWorkspaces $
 --             createWorkspacesResponse
 --
+--         , responseDescribeIPGroups $
+--             describeIPGroupsResponse
+--
 --         , responseDescribeWorkspaces $
 --             describeWorkspacesResponse
 --
@@ -120,6 +174,11 @@
 
 -- Requests
 
+requestRevokeIPRules :: RevokeIPRules -> TestTree
+requestRevokeIPRules = req
+    "RevokeIPRules"
+    "fixture/RevokeIPRules.yaml"
+
 requestModifyWorkspaceProperties :: ModifyWorkspaceProperties -> TestTree
 requestModifyWorkspaceProperties = req
     "ModifyWorkspaceProperties"
@@ -135,16 +194,36 @@
     "DescribeWorkspaceDirectories"
     "fixture/DescribeWorkspaceDirectories.yaml"
 
+requestDisassociateIPGroups :: DisassociateIPGroups -> TestTree
+requestDisassociateIPGroups = req
+    "DisassociateIPGroups"
+    "fixture/DisassociateIPGroups.yaml"
+
 requestDescribeWorkspaceBundles :: DescribeWorkspaceBundles -> TestTree
 requestDescribeWorkspaceBundles = req
     "DescribeWorkspaceBundles"
     "fixture/DescribeWorkspaceBundles.yaml"
 
+requestAuthorizeIPRules :: AuthorizeIPRules -> TestTree
+requestAuthorizeIPRules = req
+    "AuthorizeIPRules"
+    "fixture/AuthorizeIPRules.yaml"
+
 requestRebuildWorkspaces :: RebuildWorkspaces -> TestTree
 requestRebuildWorkspaces = req
     "RebuildWorkspaces"
     "fixture/RebuildWorkspaces.yaml"
 
+requestModifyWorkspaceState :: ModifyWorkspaceState -> TestTree
+requestModifyWorkspaceState = req
+    "ModifyWorkspaceState"
+    "fixture/ModifyWorkspaceState.yaml"
+
+requestCreateIPGroup :: CreateIPGroup -> TestTree
+requestCreateIPGroup = req
+    "CreateIPGroup"
+    "fixture/CreateIPGroup.yaml"
+
 requestCreateTags :: CreateTags -> TestTree
 requestCreateTags = req
     "CreateTags"
@@ -155,11 +234,21 @@
     "DeleteTags"
     "fixture/DeleteTags.yaml"
 
+requestUpdateRulesOfIPGroup :: UpdateRulesOfIPGroup -> TestTree
+requestUpdateRulesOfIPGroup = req
+    "UpdateRulesOfIPGroup"
+    "fixture/UpdateRulesOfIPGroup.yaml"
+
 requestStopWorkspaces :: StopWorkspaces -> TestTree
 requestStopWorkspaces = req
     "StopWorkspaces"
     "fixture/StopWorkspaces.yaml"
 
+requestAssociateIPGroups :: AssociateIPGroups -> TestTree
+requestAssociateIPGroups = req
+    "AssociateIPGroups"
+    "fixture/AssociateIPGroups.yaml"
+
 requestDescribeWorkspacesConnectionStatus :: DescribeWorkspacesConnectionStatus -> TestTree
 requestDescribeWorkspacesConnectionStatus = req
     "DescribeWorkspacesConnectionStatus"
@@ -170,6 +259,11 @@
     "RebootWorkspaces"
     "fixture/RebootWorkspaces.yaml"
 
+requestDeleteIPGroup :: DeleteIPGroup -> TestTree
+requestDeleteIPGroup = req
+    "DeleteIPGroup"
+    "fixture/DeleteIPGroup.yaml"
+
 requestTerminateWorkspaces :: TerminateWorkspaces -> TestTree
 requestTerminateWorkspaces = req
     "TerminateWorkspaces"
@@ -180,6 +274,11 @@
     "CreateWorkspaces"
     "fixture/CreateWorkspaces.yaml"
 
+requestDescribeIPGroups :: DescribeIPGroups -> TestTree
+requestDescribeIPGroups = req
+    "DescribeIPGroups"
+    "fixture/DescribeIPGroups.yaml"
+
 requestDescribeWorkspaces :: DescribeWorkspaces -> TestTree
 requestDescribeWorkspaces = req
     "DescribeWorkspaces"
@@ -192,6 +291,13 @@
 
 -- Responses
 
+responseRevokeIPRules :: RevokeIPRulesResponse -> TestTree
+responseRevokeIPRules = res
+    "RevokeIPRulesResponse"
+    "fixture/RevokeIPRulesResponse.proto"
+    workSpaces
+    (Proxy :: Proxy RevokeIPRules)
+
 responseModifyWorkspaceProperties :: ModifyWorkspacePropertiesResponse -> TestTree
 responseModifyWorkspaceProperties = res
     "ModifyWorkspacePropertiesResponse"
@@ -213,6 +319,13 @@
     workSpaces
     (Proxy :: Proxy DescribeWorkspaceDirectories)
 
+responseDisassociateIPGroups :: DisassociateIPGroupsResponse -> TestTree
+responseDisassociateIPGroups = res
+    "DisassociateIPGroupsResponse"
+    "fixture/DisassociateIPGroupsResponse.proto"
+    workSpaces
+    (Proxy :: Proxy DisassociateIPGroups)
+
 responseDescribeWorkspaceBundles :: DescribeWorkspaceBundlesResponse -> TestTree
 responseDescribeWorkspaceBundles = res
     "DescribeWorkspaceBundlesResponse"
@@ -220,6 +333,13 @@
     workSpaces
     (Proxy :: Proxy DescribeWorkspaceBundles)
 
+responseAuthorizeIPRules :: AuthorizeIPRulesResponse -> TestTree
+responseAuthorizeIPRules = res
+    "AuthorizeIPRulesResponse"
+    "fixture/AuthorizeIPRulesResponse.proto"
+    workSpaces
+    (Proxy :: Proxy AuthorizeIPRules)
+
 responseRebuildWorkspaces :: RebuildWorkspacesResponse -> TestTree
 responseRebuildWorkspaces = res
     "RebuildWorkspacesResponse"
@@ -227,6 +347,20 @@
     workSpaces
     (Proxy :: Proxy RebuildWorkspaces)
 
+responseModifyWorkspaceState :: ModifyWorkspaceStateResponse -> TestTree
+responseModifyWorkspaceState = res
+    "ModifyWorkspaceStateResponse"
+    "fixture/ModifyWorkspaceStateResponse.proto"
+    workSpaces
+    (Proxy :: Proxy ModifyWorkspaceState)
+
+responseCreateIPGroup :: CreateIPGroupResponse -> TestTree
+responseCreateIPGroup = res
+    "CreateIPGroupResponse"
+    "fixture/CreateIPGroupResponse.proto"
+    workSpaces
+    (Proxy :: Proxy CreateIPGroup)
+
 responseCreateTags :: CreateTagsResponse -> TestTree
 responseCreateTags = res
     "CreateTagsResponse"
@@ -241,6 +375,13 @@
     workSpaces
     (Proxy :: Proxy DeleteTags)
 
+responseUpdateRulesOfIPGroup :: UpdateRulesOfIPGroupResponse -> TestTree
+responseUpdateRulesOfIPGroup = res
+    "UpdateRulesOfIPGroupResponse"
+    "fixture/UpdateRulesOfIPGroupResponse.proto"
+    workSpaces
+    (Proxy :: Proxy UpdateRulesOfIPGroup)
+
 responseStopWorkspaces :: StopWorkspacesResponse -> TestTree
 responseStopWorkspaces = res
     "StopWorkspacesResponse"
@@ -248,6 +389,13 @@
     workSpaces
     (Proxy :: Proxy StopWorkspaces)
 
+responseAssociateIPGroups :: AssociateIPGroupsResponse -> TestTree
+responseAssociateIPGroups = res
+    "AssociateIPGroupsResponse"
+    "fixture/AssociateIPGroupsResponse.proto"
+    workSpaces
+    (Proxy :: Proxy AssociateIPGroups)
+
 responseDescribeWorkspacesConnectionStatus :: DescribeWorkspacesConnectionStatusResponse -> TestTree
 responseDescribeWorkspacesConnectionStatus = res
     "DescribeWorkspacesConnectionStatusResponse"
@@ -262,6 +410,13 @@
     workSpaces
     (Proxy :: Proxy RebootWorkspaces)
 
+responseDeleteIPGroup :: DeleteIPGroupResponse -> TestTree
+responseDeleteIPGroup = res
+    "DeleteIPGroupResponse"
+    "fixture/DeleteIPGroupResponse.proto"
+    workSpaces
+    (Proxy :: Proxy DeleteIPGroup)
+
 responseTerminateWorkspaces :: TerminateWorkspacesResponse -> TestTree
 responseTerminateWorkspaces = res
     "TerminateWorkspacesResponse"
@@ -275,6 +430,13 @@
     "fixture/CreateWorkspacesResponse.proto"
     workSpaces
     (Proxy :: Proxy CreateWorkspaces)
+
+responseDescribeIPGroups :: DescribeIPGroupsResponse -> TestTree
+responseDescribeIPGroups = res
+    "DescribeIPGroupsResponse"
+    "fixture/DescribeIPGroupsResponse.proto"
+    workSpaces
+    (Proxy :: Proxy DescribeIPGroups)
 
 responseDescribeWorkspaces :: DescribeWorkspacesResponse -> TestTree
 responseDescribeWorkspaces = res
diff --git a/test/Test/AWS/WorkSpaces.hs b/test/Test/AWS/WorkSpaces.hs
--- a/test/Test/AWS/WorkSpaces.hs
+++ b/test/Test/AWS/WorkSpaces.hs
@@ -1,7 +1,7 @@
 {-# LANGUAGE OverloadedStrings #-}
 
 -- Module      : Test.AWS.WorkSpaces
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : This Source Code Form is subject to the terms of
 --               the Mozilla Public License, v. 2.0.
 --               A copy of the MPL can be found in the LICENSE file or
diff --git a/test/Test/AWS/WorkSpaces/Internal.hs b/test/Test/AWS/WorkSpaces/Internal.hs
--- a/test/Test/AWS/WorkSpaces/Internal.hs
+++ b/test/Test/AWS/WorkSpaces/Internal.hs
@@ -2,7 +2,7 @@
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
 
 -- Module      : Test.AWS.WorkSpaces.Internal
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : This Source Code Form is subject to the terms of
 --               the Mozilla Public License, v. 2.0.
 --               A copy of the MPL can be found in the LICENSE file or
