diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -8,7 +8,7 @@
 
 ## Version
 
-`1.4.3`
+`1.4.4`
 
 
 ## Description
diff --git a/amazonka-devicefarm.cabal b/amazonka-devicefarm.cabal
--- a/amazonka-devicefarm.cabal
+++ b/amazonka-devicefarm.cabal
@@ -1,5 +1,5 @@
 name:                  amazonka-devicefarm
-version:               1.4.3
+version:               1.4.4
 synopsis:              Amazon Device Farm SDK.
 homepage:              https://github.com/brendanhay/amazonka
 bug-reports:           https://github.com/brendanhay/amazonka/issues
@@ -11,7 +11,7 @@
 category:              Network, AWS, Cloud, Distributed Computing
 build-type:            Simple
 cabal-version:         >= 1.10
-extra-source-files:    README.md fixture/*.yaml fixture/*.proto
+extra-source-files:    README.md fixture/*.yaml fixture/*.proto src/.gitkeep
 description:
     AWS Device Farm is a service that enables mobile app developers to test Android, iOS, and Fire OS apps on physical phones, tablets, and other devices in the cloud.
     .
@@ -43,9 +43,11 @@
           Network.AWS.DeviceFarm
         , Network.AWS.DeviceFarm.CreateDevicePool
         , Network.AWS.DeviceFarm.CreateProject
+        , Network.AWS.DeviceFarm.CreateRemoteAccessSession
         , Network.AWS.DeviceFarm.CreateUpload
         , Network.AWS.DeviceFarm.DeleteDevicePool
         , Network.AWS.DeviceFarm.DeleteProject
+        , Network.AWS.DeviceFarm.DeleteRemoteAccessSession
         , Network.AWS.DeviceFarm.DeleteRun
         , Network.AWS.DeviceFarm.DeleteUpload
         , Network.AWS.DeviceFarm.GetAccountSettings
@@ -55,10 +57,12 @@
         , Network.AWS.DeviceFarm.GetJob
         , Network.AWS.DeviceFarm.GetOfferingStatus
         , Network.AWS.DeviceFarm.GetProject
+        , Network.AWS.DeviceFarm.GetRemoteAccessSession
         , Network.AWS.DeviceFarm.GetRun
         , Network.AWS.DeviceFarm.GetSuite
         , Network.AWS.DeviceFarm.GetTest
         , Network.AWS.DeviceFarm.GetUpload
+        , Network.AWS.DeviceFarm.InstallToRemoteAccessSession
         , Network.AWS.DeviceFarm.ListArtifacts
         , Network.AWS.DeviceFarm.ListDevicePools
         , Network.AWS.DeviceFarm.ListDevices
@@ -66,6 +70,7 @@
         , Network.AWS.DeviceFarm.ListOfferingTransactions
         , Network.AWS.DeviceFarm.ListOfferings
         , Network.AWS.DeviceFarm.ListProjects
+        , Network.AWS.DeviceFarm.ListRemoteAccessSessions
         , Network.AWS.DeviceFarm.ListRuns
         , Network.AWS.DeviceFarm.ListSamples
         , Network.AWS.DeviceFarm.ListSuites
@@ -75,6 +80,7 @@
         , Network.AWS.DeviceFarm.PurchaseOffering
         , Network.AWS.DeviceFarm.RenewOffering
         , Network.AWS.DeviceFarm.ScheduleRun
+        , Network.AWS.DeviceFarm.StopRemoteAccessSession
         , Network.AWS.DeviceFarm.StopRun
         , Network.AWS.DeviceFarm.Types
         , Network.AWS.DeviceFarm.UpdateDevicePool
@@ -86,7 +92,7 @@
         , Network.AWS.DeviceFarm.Types.Sum
 
     build-depends:
-          amazonka-core == 1.4.3.*
+          amazonka-core == 1.4.4.*
         , base          >= 4.7     && < 5
 
 test-suite amazonka-devicefarm-test
@@ -106,9 +112,9 @@
         , Test.AWS.DeviceFarm.Internal
 
     build-depends:
-          amazonka-core == 1.4.3.*
-        , amazonka-test == 1.4.3.*
-        , amazonka-devicefarm == 1.4.3.*
+          amazonka-core == 1.4.4.*
+        , amazonka-test == 1.4.4.*
+        , amazonka-devicefarm == 1.4.4.*
         , base
         , bytestring
         , tasty
diff --git a/fixture/CreateRemoteAccessSession.yaml b/fixture/CreateRemoteAccessSession.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateRemoteAccessSession.yaml
diff --git a/fixture/CreateRemoteAccessSessionResponse.proto b/fixture/CreateRemoteAccessSessionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateRemoteAccessSessionResponse.proto
diff --git a/fixture/DeleteRemoteAccessSession.yaml b/fixture/DeleteRemoteAccessSession.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteRemoteAccessSession.yaml
diff --git a/fixture/DeleteRemoteAccessSessionResponse.proto b/fixture/DeleteRemoteAccessSessionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteRemoteAccessSessionResponse.proto
diff --git a/fixture/GetRemoteAccessSession.yaml b/fixture/GetRemoteAccessSession.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetRemoteAccessSession.yaml
diff --git a/fixture/GetRemoteAccessSessionResponse.proto b/fixture/GetRemoteAccessSessionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetRemoteAccessSessionResponse.proto
diff --git a/fixture/InstallToRemoteAccessSession.yaml b/fixture/InstallToRemoteAccessSession.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/InstallToRemoteAccessSession.yaml
diff --git a/fixture/InstallToRemoteAccessSessionResponse.proto b/fixture/InstallToRemoteAccessSessionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/InstallToRemoteAccessSessionResponse.proto
diff --git a/fixture/ListRemoteAccessSessions.yaml b/fixture/ListRemoteAccessSessions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListRemoteAccessSessions.yaml
diff --git a/fixture/ListRemoteAccessSessionsResponse.proto b/fixture/ListRemoteAccessSessionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListRemoteAccessSessionsResponse.proto
diff --git a/fixture/StopRemoteAccessSession.yaml b/fixture/StopRemoteAccessSession.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StopRemoteAccessSession.yaml
diff --git a/fixture/StopRemoteAccessSessionResponse.proto b/fixture/StopRemoteAccessSessionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StopRemoteAccessSessionResponse.proto
diff --git a/gen/Network/AWS/DeviceFarm.hs b/gen/Network/AWS/DeviceFarm.hs
--- a/gen/Network/AWS/DeviceFarm.hs
+++ b/gen/Network/AWS/DeviceFarm.hs
@@ -56,6 +56,9 @@
     -- ** GetDevicePoolCompatibility
     , module Network.AWS.DeviceFarm.GetDevicePoolCompatibility
 
+    -- ** InstallToRemoteAccessSession
+    , module Network.AWS.DeviceFarm.InstallToRemoteAccessSession
+
     -- ** ListTests (Paginated)
     , module Network.AWS.DeviceFarm.ListTests
 
@@ -65,6 +68,9 @@
     -- ** CreateUpload
     , module Network.AWS.DeviceFarm.CreateUpload
 
+    -- ** DeleteRemoteAccessSession
+    , module Network.AWS.DeviceFarm.DeleteRemoteAccessSession
+
     -- ** DeleteUpload
     , module Network.AWS.DeviceFarm.DeleteUpload
 
@@ -107,6 +113,9 @@
     -- ** ListJobs (Paginated)
     , module Network.AWS.DeviceFarm.ListJobs
 
+    -- ** StopRemoteAccessSession
+    , module Network.AWS.DeviceFarm.StopRemoteAccessSession
+
     -- ** GetJob
     , module Network.AWS.DeviceFarm.GetJob
 
@@ -122,9 +131,15 @@
     -- ** ListSuites (Paginated)
     , module Network.AWS.DeviceFarm.ListSuites
 
+    -- ** ListRemoteAccessSessions
+    , module Network.AWS.DeviceFarm.ListRemoteAccessSessions
+
     -- ** GetAccountSettings
     , module Network.AWS.DeviceFarm.GetAccountSettings
 
+    -- ** CreateRemoteAccessSession
+    , module Network.AWS.DeviceFarm.CreateRemoteAccessSession
+
     -- ** GetOfferingStatus
     , module Network.AWS.DeviceFarm.GetOfferingStatus
 
@@ -134,6 +149,9 @@
     -- ** GetSuite
     , module Network.AWS.DeviceFarm.GetSuite
 
+    -- ** GetRemoteAccessSession
+    , module Network.AWS.DeviceFarm.GetRemoteAccessSession
+
     -- ** PurchaseOffering
     , module Network.AWS.DeviceFarm.PurchaseOffering
 
@@ -245,6 +263,11 @@
     , cFailed
     , cErrored
 
+    -- ** CreateRemoteAccessSessionConfiguration
+    , CreateRemoteAccessSessionConfiguration
+    , createRemoteAccessSessionConfiguration
+    , crascBillingMethod
+
     -- ** Device
     , Device
     , device
@@ -252,8 +275,10 @@
     , devImage
     , devManufacturer
     , devPlatform
+    , devRemoteAccessEnabled
     , devArn
     , devFormFactor
+    , devFleetType
     , devResolution
     , devMemory
     , devRadio
@@ -262,6 +287,7 @@
     , devModel
     , devCpu
     , devHeapSize
+    , devFleetName
 
     -- ** DeviceMinutes
     , DeviceMinutes
@@ -383,6 +409,22 @@
     , rcFrequency
     , rcCost
 
+    -- ** RemoteAccessSession
+    , RemoteAccessSession
+    , remoteAccessSession
+    , rasBillingMethod
+    , rasStatus
+    , rasArn
+    , rasCreated
+    , rasDevice
+    , rasStopped
+    , rasResult
+    , rasName
+    , rasDeviceMinutes
+    , rasEndpoint
+    , rasMessage
+    , rasStarted
+
     -- ** Resolution
     , Resolution
     , resolution
@@ -493,9 +535,11 @@
 
 import           Network.AWS.DeviceFarm.CreateDevicePool
 import           Network.AWS.DeviceFarm.CreateProject
+import           Network.AWS.DeviceFarm.CreateRemoteAccessSession
 import           Network.AWS.DeviceFarm.CreateUpload
 import           Network.AWS.DeviceFarm.DeleteDevicePool
 import           Network.AWS.DeviceFarm.DeleteProject
+import           Network.AWS.DeviceFarm.DeleteRemoteAccessSession
 import           Network.AWS.DeviceFarm.DeleteRun
 import           Network.AWS.DeviceFarm.DeleteUpload
 import           Network.AWS.DeviceFarm.GetAccountSettings
@@ -505,10 +549,12 @@
 import           Network.AWS.DeviceFarm.GetJob
 import           Network.AWS.DeviceFarm.GetOfferingStatus
 import           Network.AWS.DeviceFarm.GetProject
+import           Network.AWS.DeviceFarm.GetRemoteAccessSession
 import           Network.AWS.DeviceFarm.GetRun
 import           Network.AWS.DeviceFarm.GetSuite
 import           Network.AWS.DeviceFarm.GetTest
 import           Network.AWS.DeviceFarm.GetUpload
+import           Network.AWS.DeviceFarm.InstallToRemoteAccessSession
 import           Network.AWS.DeviceFarm.ListArtifacts
 import           Network.AWS.DeviceFarm.ListDevicePools
 import           Network.AWS.DeviceFarm.ListDevices
@@ -516,6 +562,7 @@
 import           Network.AWS.DeviceFarm.ListOfferings
 import           Network.AWS.DeviceFarm.ListOfferingTransactions
 import           Network.AWS.DeviceFarm.ListProjects
+import           Network.AWS.DeviceFarm.ListRemoteAccessSessions
 import           Network.AWS.DeviceFarm.ListRuns
 import           Network.AWS.DeviceFarm.ListSamples
 import           Network.AWS.DeviceFarm.ListSuites
@@ -525,6 +572,7 @@
 import           Network.AWS.DeviceFarm.PurchaseOffering
 import           Network.AWS.DeviceFarm.RenewOffering
 import           Network.AWS.DeviceFarm.ScheduleRun
+import           Network.AWS.DeviceFarm.StopRemoteAccessSession
 import           Network.AWS.DeviceFarm.StopRun
 import           Network.AWS.DeviceFarm.Types
 import           Network.AWS.DeviceFarm.UpdateDevicePool
diff --git a/gen/Network/AWS/DeviceFarm/CreateRemoteAccessSession.hs b/gen/Network/AWS/DeviceFarm/CreateRemoteAccessSession.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/DeviceFarm/CreateRemoteAccessSession.hs
@@ -0,0 +1,169 @@
+{-# 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.DeviceFarm.CreateRemoteAccessSession
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Specifies and starts a remote access session.
+module Network.AWS.DeviceFarm.CreateRemoteAccessSession
+    (
+    -- * Creating a Request
+      createRemoteAccessSession
+    , CreateRemoteAccessSession
+    -- * Request Lenses
+    , crasName
+    , crasConfiguration
+    , crasProjectARN
+    , crasDeviceARN
+
+    -- * Destructuring the Response
+    , createRemoteAccessSessionResponse
+    , CreateRemoteAccessSessionResponse
+    -- * Response Lenses
+    , crasrsRemoteAccessSession
+    , crasrsResponseStatus
+    ) where
+
+import           Network.AWS.DeviceFarm.Types
+import           Network.AWS.DeviceFarm.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Creates and submits a request to start a remote access session.
+--
+-- /See:/ 'createRemoteAccessSession' smart constructor.
+data CreateRemoteAccessSession = CreateRemoteAccessSession'
+    { _crasName          :: !(Maybe Text)
+    , _crasConfiguration :: !(Maybe CreateRemoteAccessSessionConfiguration)
+    , _crasProjectARN    :: !Text
+    , _crasDeviceARN     :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CreateRemoteAccessSession' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'crasName'
+--
+-- * 'crasConfiguration'
+--
+-- * 'crasProjectARN'
+--
+-- * 'crasDeviceARN'
+createRemoteAccessSession
+    :: Text -- ^ 'crasProjectARN'
+    -> Text -- ^ 'crasDeviceARN'
+    -> CreateRemoteAccessSession
+createRemoteAccessSession pProjectARN_ pDeviceARN_ =
+    CreateRemoteAccessSession'
+    { _crasName = Nothing
+    , _crasConfiguration = Nothing
+    , _crasProjectARN = pProjectARN_
+    , _crasDeviceARN = pDeviceARN_
+    }
+
+-- | The name of the remote access session that you wish to create.
+crasName :: Lens' CreateRemoteAccessSession (Maybe Text)
+crasName = lens _crasName (\ s a -> s{_crasName = a});
+
+-- | The configuration information for the remote access session request.
+crasConfiguration :: Lens' CreateRemoteAccessSession (Maybe CreateRemoteAccessSessionConfiguration)
+crasConfiguration = lens _crasConfiguration (\ s a -> s{_crasConfiguration = a});
+
+-- | The Amazon Resource Name (ARN) of the project for which you want to create a remote access session.
+crasProjectARN :: Lens' CreateRemoteAccessSession Text
+crasProjectARN = lens _crasProjectARN (\ s a -> s{_crasProjectARN = a});
+
+-- | The Amazon Resource Name (ARN) of the device for which you want to create a remote access session.
+crasDeviceARN :: Lens' CreateRemoteAccessSession Text
+crasDeviceARN = lens _crasDeviceARN (\ s a -> s{_crasDeviceARN = a});
+
+instance AWSRequest CreateRemoteAccessSession where
+        type Rs CreateRemoteAccessSession =
+             CreateRemoteAccessSessionResponse
+        request = postJSON deviceFarm
+        response
+          = receiveJSON
+              (\ s h x ->
+                 CreateRemoteAccessSessionResponse' <$>
+                   (x .?> "remoteAccessSession") <*>
+                     (pure (fromEnum s)))
+
+instance Hashable CreateRemoteAccessSession
+
+instance NFData CreateRemoteAccessSession
+
+instance ToHeaders CreateRemoteAccessSession where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("DeviceFarm_20150623.CreateRemoteAccessSession" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON CreateRemoteAccessSession where
+        toJSON CreateRemoteAccessSession'{..}
+          = object
+              (catMaybes
+                 [("name" .=) <$> _crasName,
+                  ("configuration" .=) <$> _crasConfiguration,
+                  Just ("projectArn" .= _crasProjectARN),
+                  Just ("deviceArn" .= _crasDeviceARN)])
+
+instance ToPath CreateRemoteAccessSession where
+        toPath = const "/"
+
+instance ToQuery CreateRemoteAccessSession where
+        toQuery = const mempty
+
+-- | Represents the server response from a request to create a remote access session.
+--
+-- /See:/ 'createRemoteAccessSessionResponse' smart constructor.
+data CreateRemoteAccessSessionResponse = CreateRemoteAccessSessionResponse'
+    { _crasrsRemoteAccessSession :: !(Maybe RemoteAccessSession)
+    , _crasrsResponseStatus      :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CreateRemoteAccessSessionResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'crasrsRemoteAccessSession'
+--
+-- * 'crasrsResponseStatus'
+createRemoteAccessSessionResponse
+    :: Int -- ^ 'crasrsResponseStatus'
+    -> CreateRemoteAccessSessionResponse
+createRemoteAccessSessionResponse pResponseStatus_ =
+    CreateRemoteAccessSessionResponse'
+    { _crasrsRemoteAccessSession = Nothing
+    , _crasrsResponseStatus = pResponseStatus_
+    }
+
+-- | A container that describes the remote access session when the request to create a remote access session is sent.
+crasrsRemoteAccessSession :: Lens' CreateRemoteAccessSessionResponse (Maybe RemoteAccessSession)
+crasrsRemoteAccessSession = lens _crasrsRemoteAccessSession (\ s a -> s{_crasrsRemoteAccessSession = a});
+
+-- | The response status code.
+crasrsResponseStatus :: Lens' CreateRemoteAccessSessionResponse Int
+crasrsResponseStatus = lens _crasrsResponseStatus (\ s a -> s{_crasrsResponseStatus = a});
+
+instance NFData CreateRemoteAccessSessionResponse
diff --git a/gen/Network/AWS/DeviceFarm/CreateUpload.hs b/gen/Network/AWS/DeviceFarm/CreateUpload.hs
--- a/gen/Network/AWS/DeviceFarm/CreateUpload.hs
+++ b/gen/Network/AWS/DeviceFarm/CreateUpload.hs
@@ -87,7 +87,7 @@
 cuProjectARN :: Lens' CreateUpload Text
 cuProjectARN = lens _cuProjectARN (\ s a -> s{_cuProjectARN = a});
 
--- | The upload\'s file name.
+-- | The upload\'s file name. The name should not contain the \'\/\' character.
 cuName :: Lens' CreateUpload Text
 cuName = lens _cuName (\ s a -> s{_cuName = a});
 
diff --git a/gen/Network/AWS/DeviceFarm/DeleteRemoteAccessSession.hs b/gen/Network/AWS/DeviceFarm/DeleteRemoteAccessSession.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/DeviceFarm/DeleteRemoteAccessSession.hs
@@ -0,0 +1,126 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.DeviceFarm.DeleteRemoteAccessSession
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a completed remote access session and its results.
+module Network.AWS.DeviceFarm.DeleteRemoteAccessSession
+    (
+    -- * Creating a Request
+      deleteRemoteAccessSession
+    , DeleteRemoteAccessSession
+    -- * Request Lenses
+    , drasArn
+
+    -- * Destructuring the Response
+    , deleteRemoteAccessSessionResponse
+    , DeleteRemoteAccessSessionResponse
+    -- * Response Lenses
+    , drasrsResponseStatus
+    ) where
+
+import           Network.AWS.DeviceFarm.Types
+import           Network.AWS.DeviceFarm.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Represents the request to delete the specified remote access session.
+--
+-- /See:/ 'deleteRemoteAccessSession' smart constructor.
+newtype DeleteRemoteAccessSession = DeleteRemoteAccessSession'
+    { _drasArn :: Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteRemoteAccessSession' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'drasArn'
+deleteRemoteAccessSession
+    :: Text -- ^ 'drasArn'
+    -> DeleteRemoteAccessSession
+deleteRemoteAccessSession pArn_ =
+    DeleteRemoteAccessSession'
+    { _drasArn = pArn_
+    }
+
+-- | The Amazon Resource Name (ARN) of the sesssion for which you want to delete remote access.
+drasArn :: Lens' DeleteRemoteAccessSession Text
+drasArn = lens _drasArn (\ s a -> s{_drasArn = a});
+
+instance AWSRequest DeleteRemoteAccessSession where
+        type Rs DeleteRemoteAccessSession =
+             DeleteRemoteAccessSessionResponse
+        request = postJSON deviceFarm
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 DeleteRemoteAccessSessionResponse' <$>
+                   (pure (fromEnum s)))
+
+instance Hashable DeleteRemoteAccessSession
+
+instance NFData DeleteRemoteAccessSession
+
+instance ToHeaders DeleteRemoteAccessSession where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("DeviceFarm_20150623.DeleteRemoteAccessSession" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON DeleteRemoteAccessSession where
+        toJSON DeleteRemoteAccessSession'{..}
+          = object (catMaybes [Just ("arn" .= _drasArn)])
+
+instance ToPath DeleteRemoteAccessSession where
+        toPath = const "/"
+
+instance ToQuery DeleteRemoteAccessSession where
+        toQuery = const mempty
+
+-- | The response from the server when a request is made to delete the remote access session.
+--
+-- /See:/ 'deleteRemoteAccessSessionResponse' smart constructor.
+newtype DeleteRemoteAccessSessionResponse = DeleteRemoteAccessSessionResponse'
+    { _drasrsResponseStatus :: Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteRemoteAccessSessionResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'drasrsResponseStatus'
+deleteRemoteAccessSessionResponse
+    :: Int -- ^ 'drasrsResponseStatus'
+    -> DeleteRemoteAccessSessionResponse
+deleteRemoteAccessSessionResponse pResponseStatus_ =
+    DeleteRemoteAccessSessionResponse'
+    { _drasrsResponseStatus = pResponseStatus_
+    }
+
+-- | The response status code.
+drasrsResponseStatus :: Lens' DeleteRemoteAccessSessionResponse Int
+drasrsResponseStatus = lens _drasrsResponseStatus (\ s a -> s{_drasrsResponseStatus = a});
+
+instance NFData DeleteRemoteAccessSessionResponse
diff --git a/gen/Network/AWS/DeviceFarm/GetRemoteAccessSession.hs b/gen/Network/AWS/DeviceFarm/GetRemoteAccessSession.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/DeviceFarm/GetRemoteAccessSession.hs
@@ -0,0 +1,136 @@
+{-# 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.DeviceFarm.GetRemoteAccessSession
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a link to a currently running remote access session.
+module Network.AWS.DeviceFarm.GetRemoteAccessSession
+    (
+    -- * Creating a Request
+      getRemoteAccessSession
+    , GetRemoteAccessSession
+    -- * Request Lenses
+    , grasArn
+
+    -- * Destructuring the Response
+    , getRemoteAccessSessionResponse
+    , GetRemoteAccessSessionResponse
+    -- * Response Lenses
+    , grasrsRemoteAccessSession
+    , grasrsResponseStatus
+    ) where
+
+import           Network.AWS.DeviceFarm.Types
+import           Network.AWS.DeviceFarm.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Represents the request to get information about the specified remote access session.
+--
+-- /See:/ 'getRemoteAccessSession' smart constructor.
+newtype GetRemoteAccessSession = GetRemoteAccessSession'
+    { _grasArn :: Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetRemoteAccessSession' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'grasArn'
+getRemoteAccessSession
+    :: Text -- ^ 'grasArn'
+    -> GetRemoteAccessSession
+getRemoteAccessSession pArn_ =
+    GetRemoteAccessSession'
+    { _grasArn = pArn_
+    }
+
+-- | The Amazon Resource Name (ARN) of the remote access session about which you want to get session information.
+grasArn :: Lens' GetRemoteAccessSession Text
+grasArn = lens _grasArn (\ s a -> s{_grasArn = a});
+
+instance AWSRequest GetRemoteAccessSession where
+        type Rs GetRemoteAccessSession =
+             GetRemoteAccessSessionResponse
+        request = postJSON deviceFarm
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetRemoteAccessSessionResponse' <$>
+                   (x .?> "remoteAccessSession") <*>
+                     (pure (fromEnum s)))
+
+instance Hashable GetRemoteAccessSession
+
+instance NFData GetRemoteAccessSession
+
+instance ToHeaders GetRemoteAccessSession where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("DeviceFarm_20150623.GetRemoteAccessSession" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON GetRemoteAccessSession where
+        toJSON GetRemoteAccessSession'{..}
+          = object (catMaybes [Just ("arn" .= _grasArn)])
+
+instance ToPath GetRemoteAccessSession where
+        toPath = const "/"
+
+instance ToQuery GetRemoteAccessSession where
+        toQuery = const mempty
+
+-- | Represents the response from the server that lists detailed information about the remote access session.
+--
+-- /See:/ 'getRemoteAccessSessionResponse' smart constructor.
+data GetRemoteAccessSessionResponse = GetRemoteAccessSessionResponse'
+    { _grasrsRemoteAccessSession :: !(Maybe RemoteAccessSession)
+    , _grasrsResponseStatus      :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetRemoteAccessSessionResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'grasrsRemoteAccessSession'
+--
+-- * 'grasrsResponseStatus'
+getRemoteAccessSessionResponse
+    :: Int -- ^ 'grasrsResponseStatus'
+    -> GetRemoteAccessSessionResponse
+getRemoteAccessSessionResponse pResponseStatus_ =
+    GetRemoteAccessSessionResponse'
+    { _grasrsRemoteAccessSession = Nothing
+    , _grasrsResponseStatus = pResponseStatus_
+    }
+
+-- | A container that lists detailed information about the remote access session.
+grasrsRemoteAccessSession :: Lens' GetRemoteAccessSessionResponse (Maybe RemoteAccessSession)
+grasrsRemoteAccessSession = lens _grasrsRemoteAccessSession (\ s a -> s{_grasrsRemoteAccessSession = a});
+
+-- | The response status code.
+grasrsResponseStatus :: Lens' GetRemoteAccessSessionResponse Int
+grasrsResponseStatus = lens _grasrsResponseStatus (\ s a -> s{_grasrsResponseStatus = a});
+
+instance NFData GetRemoteAccessSessionResponse
diff --git a/gen/Network/AWS/DeviceFarm/InstallToRemoteAccessSession.hs b/gen/Network/AWS/DeviceFarm/InstallToRemoteAccessSession.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/DeviceFarm/InstallToRemoteAccessSession.hs
@@ -0,0 +1,151 @@
+{-# 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.DeviceFarm.InstallToRemoteAccessSession
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Installs an application to the device in a remote access session. For Android applications, the file must be in .apk format. For iOS applications, the file must be in .ipa format.
+module Network.AWS.DeviceFarm.InstallToRemoteAccessSession
+    (
+    -- * Creating a Request
+      installToRemoteAccessSession
+    , InstallToRemoteAccessSession
+    -- * Request Lenses
+    , itrasRemoteAccessSessionARN
+    , itrasAppARN
+
+    -- * Destructuring the Response
+    , installToRemoteAccessSessionResponse
+    , InstallToRemoteAccessSessionResponse
+    -- * Response Lenses
+    , itrasrsAppUpload
+    , itrasrsResponseStatus
+    ) where
+
+import           Network.AWS.DeviceFarm.Types
+import           Network.AWS.DeviceFarm.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Represents the request to install an Android application (in .apk format) or an iOS application (in .ipa format) as part of a remote access session.
+--
+-- /See:/ 'installToRemoteAccessSession' smart constructor.
+data InstallToRemoteAccessSession = InstallToRemoteAccessSession'
+    { _itrasRemoteAccessSessionARN :: !Text
+    , _itrasAppARN                 :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstallToRemoteAccessSession' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'itrasRemoteAccessSessionARN'
+--
+-- * 'itrasAppARN'
+installToRemoteAccessSession
+    :: Text -- ^ 'itrasRemoteAccessSessionARN'
+    -> Text -- ^ 'itrasAppARN'
+    -> InstallToRemoteAccessSession
+installToRemoteAccessSession pRemoteAccessSessionARN_ pAppARN_ =
+    InstallToRemoteAccessSession'
+    { _itrasRemoteAccessSessionARN = pRemoteAccessSessionARN_
+    , _itrasAppARN = pAppARN_
+    }
+
+-- | The Amazon Resource Name (ARN) of the remote access session about which you are requesting information.
+itrasRemoteAccessSessionARN :: Lens' InstallToRemoteAccessSession Text
+itrasRemoteAccessSessionARN = lens _itrasRemoteAccessSessionARN (\ s a -> s{_itrasRemoteAccessSessionARN = a});
+
+-- | The Amazon Resource Name (ARN) of the app about which you are requesting information.
+itrasAppARN :: Lens' InstallToRemoteAccessSession Text
+itrasAppARN = lens _itrasAppARN (\ s a -> s{_itrasAppARN = a});
+
+instance AWSRequest InstallToRemoteAccessSession
+         where
+        type Rs InstallToRemoteAccessSession =
+             InstallToRemoteAccessSessionResponse
+        request = postJSON deviceFarm
+        response
+          = receiveJSON
+              (\ s h x ->
+                 InstallToRemoteAccessSessionResponse' <$>
+                   (x .?> "appUpload") <*> (pure (fromEnum s)))
+
+instance Hashable InstallToRemoteAccessSession
+
+instance NFData InstallToRemoteAccessSession
+
+instance ToHeaders InstallToRemoteAccessSession where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("DeviceFarm_20150623.InstallToRemoteAccessSession"
+                       :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON InstallToRemoteAccessSession where
+        toJSON InstallToRemoteAccessSession'{..}
+          = object
+              (catMaybes
+                 [Just
+                    ("remoteAccessSessionArn" .=
+                       _itrasRemoteAccessSessionARN),
+                  Just ("appArn" .= _itrasAppARN)])
+
+instance ToPath InstallToRemoteAccessSession where
+        toPath = const "/"
+
+instance ToQuery InstallToRemoteAccessSession where
+        toQuery = const mempty
+
+-- | Represents the response from the server after AWS Device Farm makes a request to install to a remote access session.
+--
+-- /See:/ 'installToRemoteAccessSessionResponse' smart constructor.
+data InstallToRemoteAccessSessionResponse = InstallToRemoteAccessSessionResponse'
+    { _itrasrsAppUpload      :: !(Maybe Upload)
+    , _itrasrsResponseStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstallToRemoteAccessSessionResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'itrasrsAppUpload'
+--
+-- * 'itrasrsResponseStatus'
+installToRemoteAccessSessionResponse
+    :: Int -- ^ 'itrasrsResponseStatus'
+    -> InstallToRemoteAccessSessionResponse
+installToRemoteAccessSessionResponse pResponseStatus_ =
+    InstallToRemoteAccessSessionResponse'
+    { _itrasrsAppUpload = Nothing
+    , _itrasrsResponseStatus = pResponseStatus_
+    }
+
+-- | Undocumented member.
+itrasrsAppUpload :: Lens' InstallToRemoteAccessSessionResponse (Maybe Upload)
+itrasrsAppUpload = lens _itrasrsAppUpload (\ s a -> s{_itrasrsAppUpload = a});
+
+-- | The response status code.
+itrasrsResponseStatus :: Lens' InstallToRemoteAccessSessionResponse Int
+itrasrsResponseStatus = lens _itrasrsResponseStatus (\ s a -> s{_itrasrsResponseStatus = a});
+
+instance NFData InstallToRemoteAccessSessionResponse
diff --git a/gen/Network/AWS/DeviceFarm/ListRemoteAccessSessions.hs b/gen/Network/AWS/DeviceFarm/ListRemoteAccessSessions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/DeviceFarm/ListRemoteAccessSessions.hs
@@ -0,0 +1,158 @@
+{-# 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.DeviceFarm.ListRemoteAccessSessions
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a list of all currently running remote access sessions.
+module Network.AWS.DeviceFarm.ListRemoteAccessSessions
+    (
+    -- * Creating a Request
+      listRemoteAccessSessions
+    , ListRemoteAccessSessions
+    -- * Request Lenses
+    , lrasNextToken
+    , lrasArn
+
+    -- * Destructuring the Response
+    , listRemoteAccessSessionsResponse
+    , ListRemoteAccessSessionsResponse
+    -- * Response Lenses
+    , lrasrsNextToken
+    , lrasrsRemoteAccessSessions
+    , lrasrsResponseStatus
+    ) where
+
+import           Network.AWS.DeviceFarm.Types
+import           Network.AWS.DeviceFarm.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Represents the request to return information about the remote access session.
+--
+-- /See:/ 'listRemoteAccessSessions' smart constructor.
+data ListRemoteAccessSessions = ListRemoteAccessSessions'
+    { _lrasNextToken :: !(Maybe Text)
+    , _lrasArn       :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListRemoteAccessSessions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lrasNextToken'
+--
+-- * 'lrasArn'
+listRemoteAccessSessions
+    :: Text -- ^ 'lrasArn'
+    -> ListRemoteAccessSessions
+listRemoteAccessSessions pArn_ =
+    ListRemoteAccessSessions'
+    { _lrasNextToken = Nothing
+    , _lrasArn = pArn_
+    }
+
+-- | An identifier that was returned from the previous call to this operation, which can be used to return the next set of items in the list.
+lrasNextToken :: Lens' ListRemoteAccessSessions (Maybe Text)
+lrasNextToken = lens _lrasNextToken (\ s a -> s{_lrasNextToken = a});
+
+-- | The Amazon Resource Name (ARN) of the remote access session about which you are requesting information.
+lrasArn :: Lens' ListRemoteAccessSessions Text
+lrasArn = lens _lrasArn (\ s a -> s{_lrasArn = a});
+
+instance AWSRequest ListRemoteAccessSessions where
+        type Rs ListRemoteAccessSessions =
+             ListRemoteAccessSessionsResponse
+        request = postJSON deviceFarm
+        response
+          = receiveJSON
+              (\ s h x ->
+                 ListRemoteAccessSessionsResponse' <$>
+                   (x .?> "nextToken") <*>
+                     (x .?> "remoteAccessSessions" .!@ mempty)
+                     <*> (pure (fromEnum s)))
+
+instance Hashable ListRemoteAccessSessions
+
+instance NFData ListRemoteAccessSessions
+
+instance ToHeaders ListRemoteAccessSessions where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("DeviceFarm_20150623.ListRemoteAccessSessions" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON ListRemoteAccessSessions where
+        toJSON ListRemoteAccessSessions'{..}
+          = object
+              (catMaybes
+                 [("nextToken" .=) <$> _lrasNextToken,
+                  Just ("arn" .= _lrasArn)])
+
+instance ToPath ListRemoteAccessSessions where
+        toPath = const "/"
+
+instance ToQuery ListRemoteAccessSessions where
+        toQuery = const mempty
+
+-- | Represents the response from the server after AWS Device Farm makes a request to return information about the remote access session.
+--
+-- /See:/ 'listRemoteAccessSessionsResponse' smart constructor.
+data ListRemoteAccessSessionsResponse = ListRemoteAccessSessionsResponse'
+    { _lrasrsNextToken            :: !(Maybe Text)
+    , _lrasrsRemoteAccessSessions :: !(Maybe [RemoteAccessSession])
+    , _lrasrsResponseStatus       :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListRemoteAccessSessionsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lrasrsNextToken'
+--
+-- * 'lrasrsRemoteAccessSessions'
+--
+-- * 'lrasrsResponseStatus'
+listRemoteAccessSessionsResponse
+    :: Int -- ^ 'lrasrsResponseStatus'
+    -> ListRemoteAccessSessionsResponse
+listRemoteAccessSessionsResponse pResponseStatus_ =
+    ListRemoteAccessSessionsResponse'
+    { _lrasrsNextToken = Nothing
+    , _lrasrsRemoteAccessSessions = Nothing
+    , _lrasrsResponseStatus = pResponseStatus_
+    }
+
+-- | An identifier that was returned from the previous call to this operation, which can be used to return the next set of items in the list.
+lrasrsNextToken :: Lens' ListRemoteAccessSessionsResponse (Maybe Text)
+lrasrsNextToken = lens _lrasrsNextToken (\ s a -> s{_lrasrsNextToken = a});
+
+-- | A container representing the metadata from the service about each remote access session you are requesting.
+lrasrsRemoteAccessSessions :: Lens' ListRemoteAccessSessionsResponse [RemoteAccessSession]
+lrasrsRemoteAccessSessions = lens _lrasrsRemoteAccessSessions (\ s a -> s{_lrasrsRemoteAccessSessions = a}) . _Default . _Coerce;
+
+-- | The response status code.
+lrasrsResponseStatus :: Lens' ListRemoteAccessSessionsResponse Int
+lrasrsResponseStatus = lens _lrasrsResponseStatus (\ s a -> s{_lrasrsResponseStatus = a});
+
+instance NFData ListRemoteAccessSessionsResponse
diff --git a/gen/Network/AWS/DeviceFarm/StopRemoteAccessSession.hs b/gen/Network/AWS/DeviceFarm/StopRemoteAccessSession.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/DeviceFarm/StopRemoteAccessSession.hs
@@ -0,0 +1,136 @@
+{-# 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.DeviceFarm.StopRemoteAccessSession
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Ends a specified remote access session.
+module Network.AWS.DeviceFarm.StopRemoteAccessSession
+    (
+    -- * Creating a Request
+      stopRemoteAccessSession
+    , StopRemoteAccessSession
+    -- * Request Lenses
+    , srasArn
+
+    -- * Destructuring the Response
+    , stopRemoteAccessSessionResponse
+    , StopRemoteAccessSessionResponse
+    -- * Response Lenses
+    , srasrsRemoteAccessSession
+    , srasrsResponseStatus
+    ) where
+
+import           Network.AWS.DeviceFarm.Types
+import           Network.AWS.DeviceFarm.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Represents the request to stop the remote access session.
+--
+-- /See:/ 'stopRemoteAccessSession' smart constructor.
+newtype StopRemoteAccessSession = StopRemoteAccessSession'
+    { _srasArn :: Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'StopRemoteAccessSession' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'srasArn'
+stopRemoteAccessSession
+    :: Text -- ^ 'srasArn'
+    -> StopRemoteAccessSession
+stopRemoteAccessSession pArn_ =
+    StopRemoteAccessSession'
+    { _srasArn = pArn_
+    }
+
+-- | The Amazon Resource Name (ARN) of the remote access session you wish to stop.
+srasArn :: Lens' StopRemoteAccessSession Text
+srasArn = lens _srasArn (\ s a -> s{_srasArn = a});
+
+instance AWSRequest StopRemoteAccessSession where
+        type Rs StopRemoteAccessSession =
+             StopRemoteAccessSessionResponse
+        request = postJSON deviceFarm
+        response
+          = receiveJSON
+              (\ s h x ->
+                 StopRemoteAccessSessionResponse' <$>
+                   (x .?> "remoteAccessSession") <*>
+                     (pure (fromEnum s)))
+
+instance Hashable StopRemoteAccessSession
+
+instance NFData StopRemoteAccessSession
+
+instance ToHeaders StopRemoteAccessSession where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("DeviceFarm_20150623.StopRemoteAccessSession" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON StopRemoteAccessSession where
+        toJSON StopRemoteAccessSession'{..}
+          = object (catMaybes [Just ("arn" .= _srasArn)])
+
+instance ToPath StopRemoteAccessSession where
+        toPath = const "/"
+
+instance ToQuery StopRemoteAccessSession where
+        toQuery = const mempty
+
+-- | Represents the response from the server that describes the remote access session when AWS Device Farm stops the session.
+--
+-- /See:/ 'stopRemoteAccessSessionResponse' smart constructor.
+data StopRemoteAccessSessionResponse = StopRemoteAccessSessionResponse'
+    { _srasrsRemoteAccessSession :: !(Maybe RemoteAccessSession)
+    , _srasrsResponseStatus      :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'StopRemoteAccessSessionResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'srasrsRemoteAccessSession'
+--
+-- * 'srasrsResponseStatus'
+stopRemoteAccessSessionResponse
+    :: Int -- ^ 'srasrsResponseStatus'
+    -> StopRemoteAccessSessionResponse
+stopRemoteAccessSessionResponse pResponseStatus_ =
+    StopRemoteAccessSessionResponse'
+    { _srasrsRemoteAccessSession = Nothing
+    , _srasrsResponseStatus = pResponseStatus_
+    }
+
+-- | A container representing the metadata from the service about the remote access session you are stopping.
+srasrsRemoteAccessSession :: Lens' StopRemoteAccessSessionResponse (Maybe RemoteAccessSession)
+srasrsRemoteAccessSession = lens _srasrsRemoteAccessSession (\ s a -> s{_srasrsRemoteAccessSession = a});
+
+-- | The response status code.
+srasrsResponseStatus :: Lens' StopRemoteAccessSessionResponse Int
+srasrsResponseStatus = lens _srasrsResponseStatus (\ s a -> s{_srasrsResponseStatus = a});
+
+instance NFData StopRemoteAccessSessionResponse
diff --git a/gen/Network/AWS/DeviceFarm/Types.hs b/gen/Network/AWS/DeviceFarm/Types.hs
--- a/gen/Network/AWS/DeviceFarm/Types.hs
+++ b/gen/Network/AWS/DeviceFarm/Types.hs
@@ -111,6 +111,11 @@
     , cFailed
     , cErrored
 
+    -- * CreateRemoteAccessSessionConfiguration
+    , CreateRemoteAccessSessionConfiguration
+    , createRemoteAccessSessionConfiguration
+    , crascBillingMethod
+
     -- * Device
     , Device
     , device
@@ -118,8 +123,10 @@
     , devImage
     , devManufacturer
     , devPlatform
+    , devRemoteAccessEnabled
     , devArn
     , devFormFactor
+    , devFleetType
     , devResolution
     , devMemory
     , devRadio
@@ -128,6 +135,7 @@
     , devModel
     , devCpu
     , devHeapSize
+    , devFleetName
 
     -- * DeviceMinutes
     , DeviceMinutes
@@ -248,6 +256,22 @@
     , recurringCharge
     , rcFrequency
     , rcCost
+
+    -- * RemoteAccessSession
+    , RemoteAccessSession
+    , remoteAccessSession
+    , rasBillingMethod
+    , rasStatus
+    , rasArn
+    , rasCreated
+    , rasDevice
+    , rasStopped
+    , rasResult
+    , rasName
+    , rasDeviceMinutes
+    , rasEndpoint
+    , rasMessage
+    , rasStarted
 
     -- * Resolution
     , Resolution
diff --git a/gen/Network/AWS/DeviceFarm/Types/Product.hs b/gen/Network/AWS/DeviceFarm/Types/Product.hs
--- a/gen/Network/AWS/DeviceFarm/Types/Product.hs
+++ b/gen/Network/AWS/DeviceFarm/Types/Product.hs
@@ -332,24 +332,63 @@
 
 instance NFData Counters
 
+-- | Creates the configuration settings for a remote access session, including the device model and type.
+--
+-- /See:/ 'createRemoteAccessSessionConfiguration' smart constructor.
+newtype CreateRemoteAccessSessionConfiguration = CreateRemoteAccessSessionConfiguration'
+    { _crascBillingMethod :: Maybe BillingMethod
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CreateRemoteAccessSessionConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'crascBillingMethod'
+createRemoteAccessSessionConfiguration
+    :: CreateRemoteAccessSessionConfiguration
+createRemoteAccessSessionConfiguration =
+    CreateRemoteAccessSessionConfiguration'
+    { _crascBillingMethod = Nothing
+    }
+
+-- | Returns the billing method for purposes of configuring a remote access session.
+crascBillingMethod :: Lens' CreateRemoteAccessSessionConfiguration (Maybe BillingMethod)
+crascBillingMethod = lens _crascBillingMethod (\ s a -> s{_crascBillingMethod = a});
+
+instance Hashable
+         CreateRemoteAccessSessionConfiguration
+
+instance NFData
+         CreateRemoteAccessSessionConfiguration
+
+instance ToJSON
+         CreateRemoteAccessSessionConfiguration where
+        toJSON CreateRemoteAccessSessionConfiguration'{..}
+          = object
+              (catMaybes
+                 [("billingMethod" .=) <$> _crascBillingMethod])
+
 -- | Represents a device type that an app is tested against.
 --
 -- /See:/ 'device' smart constructor.
 data Device = Device'
-    { _devCarrier      :: !(Maybe Text)
-    , _devImage        :: !(Maybe Text)
-    , _devManufacturer :: !(Maybe Text)
-    , _devPlatform     :: !(Maybe DevicePlatform)
-    , _devArn          :: !(Maybe Text)
-    , _devFormFactor   :: !(Maybe DeviceFormFactor)
-    , _devResolution   :: !(Maybe Resolution)
-    , _devMemory       :: !(Maybe Integer)
-    , _devRadio        :: !(Maybe Text)
-    , _devOs           :: !(Maybe Text)
-    , _devName         :: !(Maybe Text)
-    , _devModel        :: !(Maybe Text)
-    , _devCpu          :: !(Maybe CPU)
-    , _devHeapSize     :: !(Maybe Integer)
+    { _devCarrier             :: !(Maybe Text)
+    , _devImage               :: !(Maybe Text)
+    , _devManufacturer        :: !(Maybe Text)
+    , _devPlatform            :: !(Maybe DevicePlatform)
+    , _devRemoteAccessEnabled :: !(Maybe Bool)
+    , _devArn                 :: !(Maybe Text)
+    , _devFormFactor          :: !(Maybe DeviceFormFactor)
+    , _devFleetType           :: !(Maybe Text)
+    , _devResolution          :: !(Maybe Resolution)
+    , _devMemory              :: !(Maybe Integer)
+    , _devRadio               :: !(Maybe Text)
+    , _devOs                  :: !(Maybe Text)
+    , _devName                :: !(Maybe Text)
+    , _devModel               :: !(Maybe Text)
+    , _devCpu                 :: !(Maybe CPU)
+    , _devHeapSize            :: !(Maybe Integer)
+    , _devFleetName           :: !(Maybe Text)
     } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
 -- | Creates a value of 'Device' with the minimum fields required to make a request.
@@ -364,10 +403,14 @@
 --
 -- * 'devPlatform'
 --
+-- * 'devRemoteAccessEnabled'
+--
 -- * 'devArn'
 --
 -- * 'devFormFactor'
 --
+-- * 'devFleetType'
+--
 -- * 'devResolution'
 --
 -- * 'devMemory'
@@ -383,6 +426,8 @@
 -- * 'devCpu'
 --
 -- * 'devHeapSize'
+--
+-- * 'devFleetName'
 device
     :: Device
 device =
@@ -391,8 +436,10 @@
     , _devImage = Nothing
     , _devManufacturer = Nothing
     , _devPlatform = Nothing
+    , _devRemoteAccessEnabled = Nothing
     , _devArn = Nothing
     , _devFormFactor = Nothing
+    , _devFleetType = Nothing
     , _devResolution = Nothing
     , _devMemory = Nothing
     , _devRadio = Nothing
@@ -401,6 +448,7 @@
     , _devModel = Nothing
     , _devCpu = Nothing
     , _devHeapSize = Nothing
+    , _devFleetName = Nothing
     }
 
 -- | The device\'s carrier.
@@ -426,6 +474,10 @@
 devPlatform :: Lens' Device (Maybe DevicePlatform)
 devPlatform = lens _devPlatform (\ s a -> s{_devPlatform = a});
 
+-- | Specifies whether remote access has been enabled for the specified device.
+devRemoteAccessEnabled :: Lens' Device (Maybe Bool)
+devRemoteAccessEnabled = lens _devRemoteAccessEnabled (\ s a -> s{_devRemoteAccessEnabled = a});
+
 -- | The device\'s ARN.
 devArn :: Lens' Device (Maybe Text)
 devArn = lens _devArn (\ s a -> s{_devArn = a});
@@ -441,6 +493,10 @@
 devFormFactor :: Lens' Device (Maybe DeviceFormFactor)
 devFormFactor = lens _devFormFactor (\ s a -> s{_devFormFactor = a});
 
+-- | The type of fleet to which this device belongs. Possible values for fleet type are PRIVATE and PUBLIC.
+devFleetType :: Lens' Device (Maybe Text)
+devFleetType = lens _devFleetType (\ s a -> s{_devFleetType = a});
+
 -- | Undocumented member.
 devResolution :: Lens' Device (Maybe Resolution)
 devResolution = lens _devResolution (\ s a -> s{_devResolution = a});
@@ -473,6 +529,10 @@
 devHeapSize :: Lens' Device (Maybe Integer)
 devHeapSize = lens _devHeapSize (\ s a -> s{_devHeapSize = a});
 
+-- | The name of the fleet to which this device belongs.
+devFleetName :: Lens' Device (Maybe Text)
+devFleetName = lens _devFleetName (\ s a -> s{_devFleetName = a});
+
 instance FromJSON Device where
         parseJSON
           = withObject "Device"
@@ -481,8 +541,10 @@
                    (x .:? "carrier") <*> (x .:? "image") <*>
                      (x .:? "manufacturer")
                      <*> (x .:? "platform")
+                     <*> (x .:? "remoteAccessEnabled")
                      <*> (x .:? "arn")
                      <*> (x .:? "formFactor")
+                     <*> (x .:? "fleetType")
                      <*> (x .:? "resolution")
                      <*> (x .:? "memory")
                      <*> (x .:? "radio")
@@ -490,7 +552,8 @@
                      <*> (x .:? "name")
                      <*> (x .:? "model")
                      <*> (x .:? "cpu")
-                     <*> (x .:? "heapSize"))
+                     <*> (x .:? "heapSize")
+                     <*> (x .:? "fleetName"))
 
 instance Hashable Device
 
@@ -1501,6 +1564,172 @@
 instance Hashable RecurringCharge
 
 instance NFData RecurringCharge
+
+-- | Represents information about the remote access session.
+--
+-- /See:/ 'remoteAccessSession' smart constructor.
+data RemoteAccessSession = RemoteAccessSession'
+    { _rasBillingMethod :: !(Maybe BillingMethod)
+    , _rasStatus        :: !(Maybe ExecutionStatus)
+    , _rasArn           :: !(Maybe Text)
+    , _rasCreated       :: !(Maybe POSIX)
+    , _rasDevice        :: !(Maybe Device)
+    , _rasStopped       :: !(Maybe POSIX)
+    , _rasResult        :: !(Maybe ExecutionResult)
+    , _rasName          :: !(Maybe Text)
+    , _rasDeviceMinutes :: !(Maybe DeviceMinutes)
+    , _rasEndpoint      :: !(Maybe Text)
+    , _rasMessage       :: !(Maybe Text)
+    , _rasStarted       :: !(Maybe POSIX)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RemoteAccessSession' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rasBillingMethod'
+--
+-- * 'rasStatus'
+--
+-- * 'rasArn'
+--
+-- * 'rasCreated'
+--
+-- * 'rasDevice'
+--
+-- * 'rasStopped'
+--
+-- * 'rasResult'
+--
+-- * 'rasName'
+--
+-- * 'rasDeviceMinutes'
+--
+-- * 'rasEndpoint'
+--
+-- * 'rasMessage'
+--
+-- * 'rasStarted'
+remoteAccessSession
+    :: RemoteAccessSession
+remoteAccessSession =
+    RemoteAccessSession'
+    { _rasBillingMethod = Nothing
+    , _rasStatus = Nothing
+    , _rasArn = Nothing
+    , _rasCreated = Nothing
+    , _rasDevice = Nothing
+    , _rasStopped = Nothing
+    , _rasResult = Nothing
+    , _rasName = Nothing
+    , _rasDeviceMinutes = Nothing
+    , _rasEndpoint = Nothing
+    , _rasMessage = Nothing
+    , _rasStarted = Nothing
+    }
+
+-- | The billing method of the remote access session. Possible values include 'METERED' or 'UNMETERED'. For more information about metered devices, see <http://docs.aws.amazon.com/devicefarm/latest/developerguide/welcome.html#welcome-terminology AWS Device Farm terminology>.\"
+rasBillingMethod :: Lens' RemoteAccessSession (Maybe BillingMethod)
+rasBillingMethod = lens _rasBillingMethod (\ s a -> s{_rasBillingMethod = a});
+
+-- | The status of the remote access session. Can be any of the following:
+--
+-- -   PENDING: A pending status.
+--
+-- -   PENDING_CONCURRENCY: A pending concurrency status.
+--
+-- -   PENDING_DEVICE: A pending device status.
+--
+-- -   PROCESSING: A processing status.
+--
+-- -   SCHEDULING: A scheduling status.
+--
+-- -   PREPARING: A preparing status.
+--
+-- -   RUNNING: A running status.
+--
+-- -   COMPLETED: A completed status.
+--
+-- -   STOPPING: A stopping status.
+--
+rasStatus :: Lens' RemoteAccessSession (Maybe ExecutionStatus)
+rasStatus = lens _rasStatus (\ s a -> s{_rasStatus = a});
+
+-- | The Amazon Resource Name (ARN) of the remote access session.
+rasArn :: Lens' RemoteAccessSession (Maybe Text)
+rasArn = lens _rasArn (\ s a -> s{_rasArn = a});
+
+-- | The date and time the remote access session was created.
+rasCreated :: Lens' RemoteAccessSession (Maybe UTCTime)
+rasCreated = lens _rasCreated (\ s a -> s{_rasCreated = a}) . mapping _Time;
+
+-- | Undocumented member.
+rasDevice :: Lens' RemoteAccessSession (Maybe Device)
+rasDevice = lens _rasDevice (\ s a -> s{_rasDevice = a});
+
+-- | The date and time the remote access session was stopped.
+rasStopped :: Lens' RemoteAccessSession (Maybe UTCTime)
+rasStopped = lens _rasStopped (\ s a -> s{_rasStopped = a}) . mapping _Time;
+
+-- | The result of the remote access session. Can be any of the following:
+--
+-- -   PENDING: A pending condition.
+--
+-- -   PASSED: A passing condition.
+--
+-- -   WARNED: A warning condition.
+--
+-- -   FAILED: A failed condition.
+--
+-- -   SKIPPED: A skipped condition.
+--
+-- -   ERRORED: An error condition.
+--
+-- -   STOPPED: A stopped condition.
+--
+rasResult :: Lens' RemoteAccessSession (Maybe ExecutionResult)
+rasResult = lens _rasResult (\ s a -> s{_rasResult = a});
+
+-- | The name of the remote access session.
+rasName :: Lens' RemoteAccessSession (Maybe Text)
+rasName = lens _rasName (\ s a -> s{_rasName = a});
+
+-- | Undocumented member.
+rasDeviceMinutes :: Lens' RemoteAccessSession (Maybe DeviceMinutes)
+rasDeviceMinutes = lens _rasDeviceMinutes (\ s a -> s{_rasDeviceMinutes = a});
+
+-- | The endpoint for the remote access sesssion.
+rasEndpoint :: Lens' RemoteAccessSession (Maybe Text)
+rasEndpoint = lens _rasEndpoint (\ s a -> s{_rasEndpoint = a});
+
+-- | A message about the remote access session.
+rasMessage :: Lens' RemoteAccessSession (Maybe Text)
+rasMessage = lens _rasMessage (\ s a -> s{_rasMessage = a});
+
+-- | The date and time the remote access session was started.
+rasStarted :: Lens' RemoteAccessSession (Maybe UTCTime)
+rasStarted = lens _rasStarted (\ s a -> s{_rasStarted = a}) . mapping _Time;
+
+instance FromJSON RemoteAccessSession where
+        parseJSON
+          = withObject "RemoteAccessSession"
+              (\ x ->
+                 RemoteAccessSession' <$>
+                   (x .:? "billingMethod") <*> (x .:? "status") <*>
+                     (x .:? "arn")
+                     <*> (x .:? "created")
+                     <*> (x .:? "device")
+                     <*> (x .:? "stopped")
+                     <*> (x .:? "result")
+                     <*> (x .:? "name")
+                     <*> (x .:? "deviceMinutes")
+                     <*> (x .:? "endpoint")
+                     <*> (x .:? "message")
+                     <*> (x .:? "started"))
+
+instance Hashable RemoteAccessSession
+
+instance NFData RemoteAccessSession
 
 -- | Represents the screen resolution of a device in height and width, expressed in pixels.
 --
diff --git a/gen/Network/AWS/DeviceFarm/Types/Sum.hs b/gen/Network/AWS/DeviceFarm/Types/Sum.hs
--- a/gen/Network/AWS/DeviceFarm/Types/Sum.hs
+++ b/gen/Network/AWS/DeviceFarm/Types/Sum.hs
@@ -31,7 +31,7 @@
         "log" -> pure ACLog
         "screenshot" -> pure ACScreenshot
         e -> fromTextError $ "Failure parsing ArtifactCategory from value: '" <> e
-           <> "'. Accepted values: FILE, LOG, SCREENSHOT"
+           <> "'. Accepted values: file, log, screenshot"
 
 instance ToText ArtifactCategory where
     toText = \case
@@ -71,6 +71,7 @@
     | ServiceLog
     | Unknown
     | Video
+    | VideoLog
     | WebkitLog
     | XctestLog
     deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
@@ -99,10 +100,11 @@
         "service_log" -> pure ServiceLog
         "unknown" -> pure Unknown
         "video" -> pure Video
+        "video_log" -> pure VideoLog
         "webkit_log" -> pure WebkitLog
         "xctest_log" -> pure XctestLog
         e -> fromTextError $ "Failure parsing ArtifactType from value: '" <> e
-           <> "'. Accepted values: APPIUM_JAVA_OUTPUT, APPIUM_JAVA_XML_OUTPUT, APPIUM_PYTHON_OUTPUT, APPIUM_PYTHON_XML_OUTPUT, APPIUM_SERVER_OUTPUT, APPLICATION_CRASH_REPORT, AUTOMATION_OUTPUT, CALABASH_JSON_OUTPUT, CALABASH_JAVA_XML_OUTPUT, CALABASH_PRETTY_OUTPUT, CALABASH_STANDARD_OUTPUT, DEVICE_LOG, EXERCISER_MONKEY_OUTPUT, EXPLORER_EVENT_LOG, EXPLORER_SUMMARY_LOG, INSTRUMENTATION_OUTPUT, MESSAGE_LOG, RESULT_LOG, SCREENSHOT, SERVICE_LOG, UNKNOWN, VIDEO, WEBKIT_LOG, XCTEST_LOG"
+           <> "'. Accepted values: appium_java_output, appium_java_xml_output, appium_python_output, appium_python_xml_output, appium_server_output, application_crash_report, automation_output, calabash_json_output, calabash_java_xml_output, calabash_pretty_output, calabash_standard_output, device_log, exerciser_monkey_output, explorer_event_log, explorer_summary_log, instrumentation_output, message_log, result_log, screenshot, service_log, unknown, video, video_log, webkit_log, xctest_log"
 
 instance ToText ArtifactType where
     toText = \case
@@ -128,6 +130,7 @@
         ServiceLog -> "SERVICE_LOG"
         Unknown -> "UNKNOWN"
         Video -> "VIDEO"
+        VideoLog -> "VIDEO_LOG"
         WebkitLog -> "WEBKIT_LOG"
         XctestLog -> "XCTEST_LOG"
 
@@ -150,7 +153,7 @@
         "metered" -> pure Metered
         "unmetered" -> pure Unmetered
         e -> fromTextError $ "Failure parsing BillingMethod from value: '" <> e
-           <> "'. Accepted values: METERED, UNMETERED"
+           <> "'. Accepted values: metered, unmetered"
 
 instance ToText BillingMethod where
     toText = \case
@@ -177,7 +180,7 @@
     parser = takeLowerText >>= \case
         "usd" -> pure Usd
         e -> fromTextError $ "Failure parsing CurrencyCode from value: '" <> e
-           <> "'. Accepted values: USD"
+           <> "'. Accepted values: usd"
 
 instance ToText CurrencyCode where
     toText = \case
@@ -197,6 +200,7 @@
     | FormFactor
     | Manufacturer
     | Platform
+    | RemoteAccessEnabled
     deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
 
 instance FromText DeviceAttribute where
@@ -205,8 +209,9 @@
         "form_factor" -> pure FormFactor
         "manufacturer" -> pure Manufacturer
         "platform" -> pure Platform
+        "remote_access_enabled" -> pure RemoteAccessEnabled
         e -> fromTextError $ "Failure parsing DeviceAttribute from value: '" <> e
-           <> "'. Accepted values: ARN, FORM_FACTOR, MANUFACTURER, PLATFORM"
+           <> "'. Accepted values: arn, form_factor, manufacturer, platform, remote_access_enabled"
 
 instance ToText DeviceAttribute where
     toText = \case
@@ -214,6 +219,7 @@
         FormFactor -> "FORM_FACTOR"
         Manufacturer -> "MANUFACTURER"
         Platform -> "PLATFORM"
+        RemoteAccessEnabled -> "REMOTE_ACCESS_ENABLED"
 
 instance Hashable     DeviceAttribute
 instance NFData       DeviceAttribute
@@ -237,7 +243,7 @@
         "phone" -> pure Phone
         "tablet" -> pure Tablet
         e -> fromTextError $ "Failure parsing DeviceFormFactor from value: '" <> e
-           <> "'. Accepted values: PHONE, TABLET"
+           <> "'. Accepted values: phone, tablet"
 
 instance ToText DeviceFormFactor where
     toText = \case
@@ -263,7 +269,7 @@
         "android" -> pure Android
         "ios" -> pure Ios
         e -> fromTextError $ "Failure parsing DevicePlatform from value: '" <> e
-           <> "'. Accepted values: ANDROID, IOS"
+           <> "'. Accepted values: android, ios"
 
 instance ToText DevicePlatform where
     toText = \case
@@ -289,7 +295,7 @@
         "curated" -> pure Curated
         "private" -> pure Private
         e -> fromTextError $ "Failure parsing DevicePoolType from value: '" <> e
-           <> "'. Accepted values: CURATED, PRIVATE"
+           <> "'. Accepted values: curated, private"
 
 instance ToText DevicePoolType where
     toText = \case
@@ -328,7 +334,7 @@
         "stopped" -> pure ERStopped
         "warned" -> pure ERWarned
         e -> fromTextError $ "Failure parsing ExecutionResult from value: '" <> e
-           <> "'. Accepted values: ERRORED, FAILED, PASSED, PENDING, SKIPPED, STOPPED, WARNED"
+           <> "'. Accepted values: errored, failed, passed, pending, skipped, stopped, warned"
 
 instance ToText ExecutionResult where
     toText = \case
@@ -373,7 +379,7 @@
         "scheduling" -> pure Scheduling
         "stopping" -> pure Stopping
         e -> fromTextError $ "Failure parsing ExecutionStatus from value: '" <> e
-           <> "'. Accepted values: COMPLETED, PENDING, PENDING_CONCURRENCY, PENDING_DEVICE, PREPARING, PROCESSING, RUNNING, SCHEDULING, STOPPING"
+           <> "'. Accepted values: completed, pending, pending_concurrency, pending_device, preparing, processing, running, scheduling, stopping"
 
 instance ToText ExecutionStatus where
     toText = \case
@@ -408,7 +414,7 @@
         "renew" -> pure Renew
         "system" -> pure System
         e -> fromTextError $ "Failure parsing OfferingTransactionType from value: '" <> e
-           <> "'. Accepted values: PURCHASE, RENEW, SYSTEM"
+           <> "'. Accepted values: purchase, renew, system"
 
 instance ToText OfferingTransactionType where
     toText = \case
@@ -433,7 +439,7 @@
     parser = takeLowerText >>= \case
         "recurring" -> pure Recurring
         e -> fromTextError $ "Failure parsing OfferingType from value: '" <> e
-           <> "'. Accepted values: RECURRING"
+           <> "'. Accepted values: recurring"
 
 instance ToText OfferingType where
     toText = \case
@@ -456,7 +462,7 @@
     parser = takeLowerText >>= \case
         "monthly" -> pure Monthly
         e -> fromTextError $ "Failure parsing RecurringChargeFrequency from value: '" <> e
-           <> "'. Accepted values: MONTHLY"
+           <> "'. Accepted values: monthly"
 
 instance ToText RecurringChargeFrequency where
     toText = \case
@@ -487,7 +493,7 @@
         "less_than" -> pure LessThan
         "not_in" -> pure NotIn
         e -> fromTextError $ "Failure parsing RuleOperator from value: '" <> e
-           <> "'. Accepted values: EQUALS, GREATER_THAN, IN, LESS_THAN, NOT_IN"
+           <> "'. Accepted values: equals, greater_than, in, less_than, not_in"
 
 instance ToText RuleOperator where
     toText = \case
@@ -549,7 +555,7 @@
         "threads" -> pure Threads
         "tx_rate" -> pure TxRate
         e -> fromTextError $ "Failure parsing SampleType from value: '" <> e
-           <> "'. Accepted values: CPU, MEMORY, NATIVE_AVG_DRAWTIME, NATIVE_FPS, NATIVE_FRAMES, NATIVE_MAX_DRAWTIME, NATIVE_MIN_DRAWTIME, OPENGL_AVG_DRAWTIME, OPENGL_FPS, OPENGL_FRAMES, OPENGL_MAX_DRAWTIME, OPENGL_MIN_DRAWTIME, RX, RX_RATE, TX, THREADS, TX_RATE"
+           <> "'. Accepted values: cpu, memory, native_avg_drawtime, native_fps, native_frames, native_max_drawtime, native_min_drawtime, opengl_avg_drawtime, opengl_fps, opengl_frames, opengl_max_drawtime, opengl_min_drawtime, rx, rx_rate, tx, threads, tx_rate"
 
 instance ToText SampleType where
     toText = \case
@@ -614,7 +620,7 @@
         "xctest" -> pure Xctest
         "xctest_ui" -> pure XctestUi
         e -> fromTextError $ "Failure parsing TestType from value: '" <> e
-           <> "'. Accepted values: APPIUM_JAVA_JUNIT, APPIUM_JAVA_TESTNG, APPIUM_PYTHON, APPIUM_WEB_JAVA_JUNIT, APPIUM_WEB_JAVA_TESTNG, APPIUM_WEB_PYTHON, BUILTIN_EXPLORER, BUILTIN_FUZZ, CALABASH, INSTRUMENTATION, UIAUTOMATION, UIAUTOMATOR, XCTEST, XCTEST_UI"
+           <> "'. Accepted values: appium_java_junit, appium_java_testng, appium_python, appium_web_java_junit, appium_web_java_testng, appium_web_python, builtin_explorer, builtin_fuzz, calabash, instrumentation, uiautomation, uiautomator, xctest, xctest_ui"
 
 instance ToText TestType where
     toText = \case
@@ -659,7 +665,7 @@
         "processing" -> pure USProcessing
         "succeeded" -> pure USSucceeded
         e -> fromTextError $ "Failure parsing UploadStatus from value: '" <> e
-           <> "'. Accepted values: FAILED, INITIALIZED, PROCESSING, SUCCEEDED"
+           <> "'. Accepted values: failed, initialized, processing, succeeded"
 
 instance ToText UploadStatus where
     toText = \case
@@ -715,7 +721,7 @@
         "xctest_test_package" -> pure XctestTestPackage
         "xctest_ui_test_package" -> pure XctestUiTestPackage
         e -> fromTextError $ "Failure parsing UploadType from value: '" <> e
-           <> "'. Accepted values: ANDROID_APP, APPIUM_JAVA_JUNIT_TEST_PACKAGE, APPIUM_JAVA_TESTNG_TEST_PACKAGE, APPIUM_PYTHON_TEST_PACKAGE, APPIUM_WEB_JAVA_JUNIT_TEST_PACKAGE, APPIUM_WEB_JAVA_TESTNG_TEST_PACKAGE, APPIUM_WEB_PYTHON_TEST_PACKAGE, CALABASH_TEST_PACKAGE, EXTERNAL_DATA, INSTRUMENTATION_TEST_PACKAGE, IOS_APP, UIAUTOMATION_TEST_PACKAGE, UIAUTOMATOR_TEST_PACKAGE, WEB_APP, XCTEST_TEST_PACKAGE, XCTEST_UI_TEST_PACKAGE"
+           <> "'. Accepted values: android_app, appium_java_junit_test_package, appium_java_testng_test_package, appium_python_test_package, appium_web_java_junit_test_package, appium_web_java_testng_test_package, appium_web_python_test_package, calabash_test_package, external_data, instrumentation_test_package, ios_app, uiautomation_test_package, uiautomator_test_package, web_app, xctest_test_package, xctest_ui_test_package"
 
 instance ToText UploadType where
     toText = \case
diff --git a/src/.gitkeep b/src/.gitkeep
new file mode 100644
--- /dev/null
+++ b/src/.gitkeep
diff --git a/test/Test/AWS/Gen/DeviceFarm.hs b/test/Test/AWS/Gen/DeviceFarm.hs
--- a/test/Test/AWS/Gen/DeviceFarm.hs
+++ b/test/Test/AWS/Gen/DeviceFarm.hs
@@ -40,6 +40,9 @@
 --         , requestGetDevicePoolCompatibility $
 --             getDevicePoolCompatibility
 --
+--         , requestInstallToRemoteAccessSession $
+--             installToRemoteAccessSession
+--
 --         , requestListTests $
 --             listTests
 --
@@ -49,6 +52,9 @@
 --         , requestCreateUpload $
 --             createUpload
 --
+--         , requestDeleteRemoteAccessSession $
+--             deleteRemoteAccessSession
+--
 --         , requestDeleteUpload $
 --             deleteUpload
 --
@@ -91,6 +97,9 @@
 --         , requestListJobs $
 --             listJobs
 --
+--         , requestStopRemoteAccessSession $
+--             stopRemoteAccessSession
+--
 --         , requestGetJob $
 --             getJob
 --
@@ -106,9 +115,15 @@
 --         , requestListSuites $
 --             listSuites
 --
+--         , requestListRemoteAccessSessions $
+--             listRemoteAccessSessions
+--
 --         , requestGetAccountSettings $
 --             getAccountSettings
 --
+--         , requestCreateRemoteAccessSession $
+--             createRemoteAccessSession
+--
 --         , requestGetOfferingStatus $
 --             getOfferingStatus
 --
@@ -118,6 +133,9 @@
 --         , requestGetSuite $
 --             getSuite
 --
+--         , requestGetRemoteAccessSession $
+--             getRemoteAccessSession
+--
 --         , requestPurchaseOffering $
 --             purchaseOffering
 --
@@ -154,6 +172,9 @@
 --         , responseGetDevicePoolCompatibility $
 --             getDevicePoolCompatibilityResponse
 --
+--         , responseInstallToRemoteAccessSession $
+--             installToRemoteAccessSessionResponse
+--
 --         , responseListTests $
 --             listTestsResponse
 --
@@ -163,6 +184,9 @@
 --         , responseCreateUpload $
 --             createUploadResponse
 --
+--         , responseDeleteRemoteAccessSession $
+--             deleteRemoteAccessSessionResponse
+--
 --         , responseDeleteUpload $
 --             deleteUploadResponse
 --
@@ -205,6 +229,9 @@
 --         , responseListJobs $
 --             listJobsResponse
 --
+--         , responseStopRemoteAccessSession $
+--             stopRemoteAccessSessionResponse
+--
 --         , responseGetJob $
 --             getJobResponse
 --
@@ -220,9 +247,15 @@
 --         , responseListSuites $
 --             listSuitesResponse
 --
+--         , responseListRemoteAccessSessions $
+--             listRemoteAccessSessionsResponse
+--
 --         , responseGetAccountSettings $
 --             getAccountSettingsResponse
 --
+--         , responseCreateRemoteAccessSession $
+--             createRemoteAccessSessionResponse
+--
 --         , responseGetOfferingStatus $
 --             getOfferingStatusResponse
 --
@@ -232,6 +265,9 @@
 --         , responseGetSuite $
 --             getSuiteResponse
 --
+--         , responseGetRemoteAccessSession $
+--             getRemoteAccessSessionResponse
+--
 --         , responsePurchaseOffering $
 --             purchaseOfferingResponse
 --
@@ -278,6 +314,11 @@
     "GetDevicePoolCompatibility"
     "fixture/GetDevicePoolCompatibility.yaml"
 
+requestInstallToRemoteAccessSession :: InstallToRemoteAccessSession -> TestTree
+requestInstallToRemoteAccessSession = req
+    "InstallToRemoteAccessSession"
+    "fixture/InstallToRemoteAccessSession.yaml"
+
 requestListTests :: ListTests -> TestTree
 requestListTests = req
     "ListTests"
@@ -293,6 +334,11 @@
     "CreateUpload"
     "fixture/CreateUpload.yaml"
 
+requestDeleteRemoteAccessSession :: DeleteRemoteAccessSession -> TestTree
+requestDeleteRemoteAccessSession = req
+    "DeleteRemoteAccessSession"
+    "fixture/DeleteRemoteAccessSession.yaml"
+
 requestDeleteUpload :: DeleteUpload -> TestTree
 requestDeleteUpload = req
     "DeleteUpload"
@@ -363,6 +409,11 @@
     "ListJobs"
     "fixture/ListJobs.yaml"
 
+requestStopRemoteAccessSession :: StopRemoteAccessSession -> TestTree
+requestStopRemoteAccessSession = req
+    "StopRemoteAccessSession"
+    "fixture/StopRemoteAccessSession.yaml"
+
 requestGetJob :: GetJob -> TestTree
 requestGetJob = req
     "GetJob"
@@ -388,11 +439,21 @@
     "ListSuites"
     "fixture/ListSuites.yaml"
 
+requestListRemoteAccessSessions :: ListRemoteAccessSessions -> TestTree
+requestListRemoteAccessSessions = req
+    "ListRemoteAccessSessions"
+    "fixture/ListRemoteAccessSessions.yaml"
+
 requestGetAccountSettings :: GetAccountSettings -> TestTree
 requestGetAccountSettings = req
     "GetAccountSettings"
     "fixture/GetAccountSettings.yaml"
 
+requestCreateRemoteAccessSession :: CreateRemoteAccessSession -> TestTree
+requestCreateRemoteAccessSession = req
+    "CreateRemoteAccessSession"
+    "fixture/CreateRemoteAccessSession.yaml"
+
 requestGetOfferingStatus :: GetOfferingStatus -> TestTree
 requestGetOfferingStatus = req
     "GetOfferingStatus"
@@ -408,6 +469,11 @@
     "GetSuite"
     "fixture/GetSuite.yaml"
 
+requestGetRemoteAccessSession :: GetRemoteAccessSession -> TestTree
+requestGetRemoteAccessSession = req
+    "GetRemoteAccessSession"
+    "fixture/GetRemoteAccessSession.yaml"
+
 requestPurchaseOffering :: PurchaseOffering -> TestTree
 requestPurchaseOffering = req
     "PurchaseOffering"
@@ -473,6 +539,13 @@
     deviceFarm
     (Proxy :: Proxy GetDevicePoolCompatibility)
 
+responseInstallToRemoteAccessSession :: InstallToRemoteAccessSessionResponse -> TestTree
+responseInstallToRemoteAccessSession = res
+    "InstallToRemoteAccessSessionResponse"
+    "fixture/InstallToRemoteAccessSessionResponse.proto"
+    deviceFarm
+    (Proxy :: Proxy InstallToRemoteAccessSession)
+
 responseListTests :: ListTestsResponse -> TestTree
 responseListTests = res
     "ListTestsResponse"
@@ -494,6 +567,13 @@
     deviceFarm
     (Proxy :: Proxy CreateUpload)
 
+responseDeleteRemoteAccessSession :: DeleteRemoteAccessSessionResponse -> TestTree
+responseDeleteRemoteAccessSession = res
+    "DeleteRemoteAccessSessionResponse"
+    "fixture/DeleteRemoteAccessSessionResponse.proto"
+    deviceFarm
+    (Proxy :: Proxy DeleteRemoteAccessSession)
+
 responseDeleteUpload :: DeleteUploadResponse -> TestTree
 responseDeleteUpload = res
     "DeleteUploadResponse"
@@ -592,6 +672,13 @@
     deviceFarm
     (Proxy :: Proxy ListJobs)
 
+responseStopRemoteAccessSession :: StopRemoteAccessSessionResponse -> TestTree
+responseStopRemoteAccessSession = res
+    "StopRemoteAccessSessionResponse"
+    "fixture/StopRemoteAccessSessionResponse.proto"
+    deviceFarm
+    (Proxy :: Proxy StopRemoteAccessSession)
+
 responseGetJob :: GetJobResponse -> TestTree
 responseGetJob = res
     "GetJobResponse"
@@ -627,6 +714,13 @@
     deviceFarm
     (Proxy :: Proxy ListSuites)
 
+responseListRemoteAccessSessions :: ListRemoteAccessSessionsResponse -> TestTree
+responseListRemoteAccessSessions = res
+    "ListRemoteAccessSessionsResponse"
+    "fixture/ListRemoteAccessSessionsResponse.proto"
+    deviceFarm
+    (Proxy :: Proxy ListRemoteAccessSessions)
+
 responseGetAccountSettings :: GetAccountSettingsResponse -> TestTree
 responseGetAccountSettings = res
     "GetAccountSettingsResponse"
@@ -634,6 +728,13 @@
     deviceFarm
     (Proxy :: Proxy GetAccountSettings)
 
+responseCreateRemoteAccessSession :: CreateRemoteAccessSessionResponse -> TestTree
+responseCreateRemoteAccessSession = res
+    "CreateRemoteAccessSessionResponse"
+    "fixture/CreateRemoteAccessSessionResponse.proto"
+    deviceFarm
+    (Proxy :: Proxy CreateRemoteAccessSession)
+
 responseGetOfferingStatus :: GetOfferingStatusResponse -> TestTree
 responseGetOfferingStatus = res
     "GetOfferingStatusResponse"
@@ -654,6 +755,13 @@
     "fixture/GetSuiteResponse.proto"
     deviceFarm
     (Proxy :: Proxy GetSuite)
+
+responseGetRemoteAccessSession :: GetRemoteAccessSessionResponse -> TestTree
+responseGetRemoteAccessSession = res
+    "GetRemoteAccessSessionResponse"
+    "fixture/GetRemoteAccessSessionResponse.proto"
+    deviceFarm
+    (Proxy :: Proxy GetRemoteAccessSession)
 
 responsePurchaseOffering :: PurchaseOfferingResponse -> TestTree
 responsePurchaseOffering = res
