diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -8,7 +8,7 @@
 
 ## Version
 
-`1.1.0`
+`1.2.0`
 
 
 ## Description
diff --git a/amazonka-emr.cabal b/amazonka-emr.cabal
--- a/amazonka-emr.cabal
+++ b/amazonka-emr.cabal
@@ -1,5 +1,5 @@
 name:                  amazonka-emr
-version:               1.1.0
+version:               1.2.0
 synopsis:              Amazon Elastic MapReduce SDK.
 homepage:              https://github.com/brendanhay/amazonka
 license:               OtherLicense
@@ -69,7 +69,7 @@
         , Network.AWS.EMR.Types.Sum
 
     build-depends:
-          amazonka-core == 1.1.0.*
+          amazonka-core == 1.2.0.*
         , base          >= 4.7     && < 5
 
 test-suite amazonka-emr-test
@@ -88,9 +88,9 @@
         , Test.AWS.EMR.Internal
 
     build-depends:
-          amazonka-core == 1.1.0
-        , amazonka-test == 1.1.0
-        , amazonka-emr == 1.1.0
+          amazonka-core == 1.2.0
+        , amazonka-test == 1.2.0
+        , amazonka-emr == 1.2.0
         , base
         , bytestring
         , lens
diff --git a/gen/Network/AWS/EMR.hs b/gen/Network/AWS/EMR.hs
--- a/gen/Network/AWS/EMR.hs
+++ b/gen/Network/AWS/EMR.hs
@@ -20,8 +20,8 @@
 -- /See:/ <http://docs.aws.amazon.com/ElasticMapReduce/latest/API/Welcome.html AWS API Reference>
 module Network.AWS.EMR
     (
-    -- * Service
-      EMR
+    -- * Service Configuration
+      eMR
 
     -- * Errors
     -- $errors
diff --git a/gen/Network/AWS/EMR/AddInstanceGroups.hs b/gen/Network/AWS/EMR/AddInstanceGroups.hs
--- a/gen/Network/AWS/EMR/AddInstanceGroups.hs
+++ b/gen/Network/AWS/EMR/AddInstanceGroups.hs
@@ -78,9 +78,8 @@
 aigJobFlowId = lens _aigJobFlowId (\ s a -> s{_aigJobFlowId = a});
 
 instance AWSRequest AddInstanceGroups where
-        type Sv AddInstanceGroups = EMR
         type Rs AddInstanceGroups = AddInstanceGroupsResponse
-        request = postJSON
+        request = postJSON eMR
         response
           = receiveJSON
               (\ s h x ->
@@ -101,8 +100,9 @@
 instance ToJSON AddInstanceGroups where
         toJSON AddInstanceGroups'{..}
           = object
-              ["InstanceGroups" .= _aigInstanceGroups,
-               "JobFlowId" .= _aigJobFlowId]
+              (catMaybes
+                 [Just ("InstanceGroups" .= _aigInstanceGroups),
+                  Just ("JobFlowId" .= _aigJobFlowId)])
 
 instance ToPath AddInstanceGroups where
         toPath = const "/"
diff --git a/gen/Network/AWS/EMR/AddJobFlowSteps.hs b/gen/Network/AWS/EMR/AddJobFlowSteps.hs
--- a/gen/Network/AWS/EMR/AddJobFlowSteps.hs
+++ b/gen/Network/AWS/EMR/AddJobFlowSteps.hs
@@ -102,9 +102,8 @@
 ajfsSteps = lens _ajfsSteps (\ s a -> s{_ajfsSteps = a}) . _Coerce;
 
 instance AWSRequest AddJobFlowSteps where
-        type Sv AddJobFlowSteps = EMR
         type Rs AddJobFlowSteps = AddJobFlowStepsResponse
-        request = postJSON
+        request = postJSON eMR
         response
           = receiveJSON
               (\ s h x ->
@@ -123,8 +122,9 @@
 instance ToJSON AddJobFlowSteps where
         toJSON AddJobFlowSteps'{..}
           = object
-              ["JobFlowId" .= _ajfsJobFlowId,
-               "Steps" .= _ajfsSteps]
+              (catMaybes
+                 [Just ("JobFlowId" .= _ajfsJobFlowId),
+                  Just ("Steps" .= _ajfsSteps)])
 
 instance ToPath AddJobFlowSteps where
         toPath = const "/"
diff --git a/gen/Network/AWS/EMR/AddTags.hs b/gen/Network/AWS/EMR/AddTags.hs
--- a/gen/Network/AWS/EMR/AddTags.hs
+++ b/gen/Network/AWS/EMR/AddTags.hs
@@ -83,9 +83,8 @@
 atTags = lens _atTags (\ s a -> s{_atTags = a}) . _Coerce;
 
 instance AWSRequest AddTags where
-        type Sv AddTags = EMR
         type Rs AddTags = AddTagsResponse
-        request = postJSON
+        request = postJSON eMR
         response
           = receiveEmpty
               (\ s h x -> AddTagsResponse' <$> (pure (fromEnum s)))
@@ -102,7 +101,9 @@
 instance ToJSON AddTags where
         toJSON AddTags'{..}
           = object
-              ["ResourceId" .= _atResourceId, "Tags" .= _atTags]
+              (catMaybes
+                 [Just ("ResourceId" .= _atResourceId),
+                  Just ("Tags" .= _atTags)])
 
 instance ToPath AddTags where
         toPath = const "/"
diff --git a/gen/Network/AWS/EMR/DescribeCluster.hs b/gen/Network/AWS/EMR/DescribeCluster.hs
--- a/gen/Network/AWS/EMR/DescribeCluster.hs
+++ b/gen/Network/AWS/EMR/DescribeCluster.hs
@@ -70,9 +70,8 @@
 dcClusterId = lens _dcClusterId (\ s a -> s{_dcClusterId = a});
 
 instance AWSRequest DescribeCluster where
-        type Sv DescribeCluster = EMR
         type Rs DescribeCluster = DescribeClusterResponse
-        request = postJSON
+        request = postJSON eMR
         response
           = receiveJSON
               (\ s h x ->
@@ -90,7 +89,8 @@
 
 instance ToJSON DescribeCluster where
         toJSON DescribeCluster'{..}
-          = object ["ClusterId" .= _dcClusterId]
+          = object
+              (catMaybes [Just ("ClusterId" .= _dcClusterId)])
 
 instance ToPath DescribeCluster where
         toPath = const "/"
diff --git a/gen/Network/AWS/EMR/DescribeStep.hs b/gen/Network/AWS/EMR/DescribeStep.hs
--- a/gen/Network/AWS/EMR/DescribeStep.hs
+++ b/gen/Network/AWS/EMR/DescribeStep.hs
@@ -78,9 +78,8 @@
 dsStepId = lens _dsStepId (\ s a -> s{_dsStepId = a});
 
 instance AWSRequest DescribeStep where
-        type Sv DescribeStep = EMR
         type Rs DescribeStep = DescribeStepResponse
-        request = postJSON
+        request = postJSON eMR
         response
           = receiveJSON
               (\ s h x ->
@@ -99,7 +98,9 @@
 instance ToJSON DescribeStep where
         toJSON DescribeStep'{..}
           = object
-              ["ClusterId" .= _dsClusterId, "StepId" .= _dsStepId]
+              (catMaybes
+                 [Just ("ClusterId" .= _dsClusterId),
+                  Just ("StepId" .= _dsStepId)])
 
 instance ToPath DescribeStep where
         toPath = const "/"
diff --git a/gen/Network/AWS/EMR/ListBootstrapActions.hs b/gen/Network/AWS/EMR/ListBootstrapActions.hs
--- a/gen/Network/AWS/EMR/ListBootstrapActions.hs
+++ b/gen/Network/AWS/EMR/ListBootstrapActions.hs
@@ -90,10 +90,9 @@
             Just $ rq & lbaMarker .~ rs ^. lbarsMarker
 
 instance AWSRequest ListBootstrapActions where
-        type Sv ListBootstrapActions = EMR
         type Rs ListBootstrapActions =
              ListBootstrapActionsResponse
-        request = postJSON
+        request = postJSON eMR
         response
           = receiveJSON
               (\ s h x ->
@@ -115,8 +114,9 @@
 instance ToJSON ListBootstrapActions where
         toJSON ListBootstrapActions'{..}
           = object
-              ["Marker" .= _lbaMarker,
-               "ClusterId" .= _lbaClusterId]
+              (catMaybes
+                 [("Marker" .=) <$> _lbaMarker,
+                  Just ("ClusterId" .= _lbaClusterId)])
 
 instance ToPath ListBootstrapActions where
         toPath = const "/"
diff --git a/gen/Network/AWS/EMR/ListClusters.hs b/gen/Network/AWS/EMR/ListClusters.hs
--- a/gen/Network/AWS/EMR/ListClusters.hs
+++ b/gen/Network/AWS/EMR/ListClusters.hs
@@ -110,9 +110,8 @@
             Just $ rq & lcMarker .~ rs ^. lcrsMarker
 
 instance AWSRequest ListClusters where
-        type Sv ListClusters = EMR
         type Rs ListClusters = ListClustersResponse
-        request = postJSON
+        request = postJSON eMR
         response
           = receiveJSON
               (\ s h x ->
@@ -132,10 +131,11 @@
 instance ToJSON ListClusters where
         toJSON ListClusters'{..}
           = object
-              ["CreatedAfter" .= _lcCreatedAfter,
-               "Marker" .= _lcMarker,
-               "ClusterStates" .= _lcClusterStates,
-               "CreatedBefore" .= _lcCreatedBefore]
+              (catMaybes
+                 [("CreatedAfter" .=) <$> _lcCreatedAfter,
+                  ("Marker" .=) <$> _lcMarker,
+                  ("ClusterStates" .=) <$> _lcClusterStates,
+                  ("CreatedBefore" .=) <$> _lcCreatedBefore])
 
 instance ToPath ListClusters where
         toPath = const "/"
diff --git a/gen/Network/AWS/EMR/ListInstanceGroups.hs b/gen/Network/AWS/EMR/ListInstanceGroups.hs
--- a/gen/Network/AWS/EMR/ListInstanceGroups.hs
+++ b/gen/Network/AWS/EMR/ListInstanceGroups.hs
@@ -88,10 +88,9 @@
             Just $ rq & ligMarker .~ rs ^. ligrsMarker
 
 instance AWSRequest ListInstanceGroups where
-        type Sv ListInstanceGroups = EMR
         type Rs ListInstanceGroups =
              ListInstanceGroupsResponse
-        request = postJSON
+        request = postJSON eMR
         response
           = receiveJSON
               (\ s h x ->
@@ -113,8 +112,9 @@
 instance ToJSON ListInstanceGroups where
         toJSON ListInstanceGroups'{..}
           = object
-              ["Marker" .= _ligMarker,
-               "ClusterId" .= _ligClusterId]
+              (catMaybes
+                 [("Marker" .=) <$> _ligMarker,
+                  Just ("ClusterId" .= _ligClusterId)])
 
 instance ToPath ListInstanceGroups where
         toPath = const "/"
diff --git a/gen/Network/AWS/EMR/ListInstances.hs b/gen/Network/AWS/EMR/ListInstances.hs
--- a/gen/Network/AWS/EMR/ListInstances.hs
+++ b/gen/Network/AWS/EMR/ListInstances.hs
@@ -110,9 +110,8 @@
             Just $ rq & liMarker .~ rs ^. lirsMarker
 
 instance AWSRequest ListInstances where
-        type Sv ListInstances = EMR
         type Rs ListInstances = ListInstancesResponse
-        request = postJSON
+        request = postJSON eMR
         response
           = receiveJSON
               (\ s h x ->
@@ -132,10 +131,11 @@
 instance ToJSON ListInstances where
         toJSON ListInstances'{..}
           = object
-              ["InstanceGroupTypes" .= _liInstanceGroupTypes,
-               "Marker" .= _liMarker,
-               "InstanceGroupId" .= _liInstanceGroupId,
-               "ClusterId" .= _liClusterId]
+              (catMaybes
+                 [("InstanceGroupTypes" .=) <$> _liInstanceGroupTypes,
+                  ("Marker" .=) <$> _liMarker,
+                  ("InstanceGroupId" .=) <$> _liInstanceGroupId,
+                  Just ("ClusterId" .= _liClusterId)])
 
 instance ToPath ListInstances where
         toPath = const "/"
diff --git a/gen/Network/AWS/EMR/ListSteps.hs b/gen/Network/AWS/EMR/ListSteps.hs
--- a/gen/Network/AWS/EMR/ListSteps.hs
+++ b/gen/Network/AWS/EMR/ListSteps.hs
@@ -106,9 +106,8 @@
             Just $ rq & lsMarker .~ rs ^. lsrsMarker
 
 instance AWSRequest ListSteps where
-        type Sv ListSteps = EMR
         type Rs ListSteps = ListStepsResponse
-        request = postJSON
+        request = postJSON eMR
         response
           = receiveJSON
               (\ s h x ->
@@ -128,9 +127,11 @@
 instance ToJSON ListSteps where
         toJSON ListSteps'{..}
           = object
-              ["StepIds" .= _lsStepIds,
-               "StepStates" .= _lsStepStates, "Marker" .= _lsMarker,
-               "ClusterId" .= _lsClusterId]
+              (catMaybes
+                 [("StepIds" .=) <$> _lsStepIds,
+                  ("StepStates" .=) <$> _lsStepStates,
+                  ("Marker" .=) <$> _lsMarker,
+                  Just ("ClusterId" .= _lsClusterId)])
 
 instance ToPath ListSteps where
         toPath = const "/"
diff --git a/gen/Network/AWS/EMR/ModifyInstanceGroups.hs b/gen/Network/AWS/EMR/ModifyInstanceGroups.hs
--- a/gen/Network/AWS/EMR/ModifyInstanceGroups.hs
+++ b/gen/Network/AWS/EMR/ModifyInstanceGroups.hs
@@ -67,10 +67,9 @@
 migInstanceGroups = lens _migInstanceGroups (\ s a -> s{_migInstanceGroups = a}) . _Default . _Coerce;
 
 instance AWSRequest ModifyInstanceGroups where
-        type Sv ModifyInstanceGroups = EMR
         type Rs ModifyInstanceGroups =
              ModifyInstanceGroupsResponse
-        request = postJSON
+        request = postJSON eMR
         response = receiveNull ModifyInstanceGroupsResponse'
 
 instance ToHeaders ModifyInstanceGroups where
@@ -85,7 +84,9 @@
 
 instance ToJSON ModifyInstanceGroups where
         toJSON ModifyInstanceGroups'{..}
-          = object ["InstanceGroups" .= _migInstanceGroups]
+          = object
+              (catMaybes
+                 [("InstanceGroups" .=) <$> _migInstanceGroups])
 
 instance ToPath ModifyInstanceGroups where
         toPath = const "/"
diff --git a/gen/Network/AWS/EMR/RemoveTags.hs b/gen/Network/AWS/EMR/RemoveTags.hs
--- a/gen/Network/AWS/EMR/RemoveTags.hs
+++ b/gen/Network/AWS/EMR/RemoveTags.hs
@@ -83,9 +83,8 @@
 rtTagKeys = lens _rtTagKeys (\ s a -> s{_rtTagKeys = a}) . _Coerce;
 
 instance AWSRequest RemoveTags where
-        type Sv RemoveTags = EMR
         type Rs RemoveTags = RemoveTagsResponse
-        request = postJSON
+        request = postJSON eMR
         response
           = receiveEmpty
               (\ s h x ->
@@ -103,8 +102,9 @@
 instance ToJSON RemoveTags where
         toJSON RemoveTags'{..}
           = object
-              ["ResourceId" .= _rtResourceId,
-               "TagKeys" .= _rtTagKeys]
+              (catMaybes
+                 [Just ("ResourceId" .= _rtResourceId),
+                  Just ("TagKeys" .= _rtTagKeys)])
 
 instance ToPath RemoveTags where
         toPath = const "/"
diff --git a/gen/Network/AWS/EMR/RunJobFlow.hs b/gen/Network/AWS/EMR/RunJobFlow.hs
--- a/gen/Network/AWS/EMR/RunJobFlow.hs
+++ b/gen/Network/AWS/EMR/RunJobFlow.hs
@@ -295,9 +295,8 @@
 rjfInstances = lens _rjfInstances (\ s a -> s{_rjfInstances = a});
 
 instance AWSRequest RunJobFlow where
-        type Sv RunJobFlow = EMR
         type Rs RunJobFlow = RunJobFlowResponse
-        request = postJSON
+        request = postJSON eMR
         response
           = receiveJSON
               (\ s h x ->
@@ -316,20 +315,24 @@
 instance ToJSON RunJobFlow where
         toJSON RunJobFlow'{..}
           = object
-              ["AmiVersion" .= _rjfAMIVersion,
-               "AdditionalInfo" .= _rjfAdditionalInfo,
-               "Configurations" .= _rjfConfigurations,
-               "JobFlowRole" .= _rjfJobFlowRole,
-               "Steps" .= _rjfSteps,
-               "BootstrapActions" .= _rjfBootstrapActions,
-               "ReleaseLabel" .= _rjfReleaseLabel,
-               "NewSupportedProducts" .= _rjfNewSupportedProducts,
-               "LogUri" .= _rjfLogURI,
-               "SupportedProducts" .= _rjfSupportedProducts,
-               "VisibleToAllUsers" .= _rjfVisibleToAllUsers,
-               "Applications" .= _rjfApplications,
-               "Tags" .= _rjfTags, "ServiceRole" .= _rjfServiceRole,
-               "Name" .= _rjfName, "Instances" .= _rjfInstances]
+              (catMaybes
+                 [("AmiVersion" .=) <$> _rjfAMIVersion,
+                  ("AdditionalInfo" .=) <$> _rjfAdditionalInfo,
+                  ("Configurations" .=) <$> _rjfConfigurations,
+                  ("JobFlowRole" .=) <$> _rjfJobFlowRole,
+                  ("Steps" .=) <$> _rjfSteps,
+                  ("BootstrapActions" .=) <$> _rjfBootstrapActions,
+                  ("ReleaseLabel" .=) <$> _rjfReleaseLabel,
+                  ("NewSupportedProducts" .=) <$>
+                    _rjfNewSupportedProducts,
+                  ("LogUri" .=) <$> _rjfLogURI,
+                  ("SupportedProducts" .=) <$> _rjfSupportedProducts,
+                  ("VisibleToAllUsers" .=) <$> _rjfVisibleToAllUsers,
+                  ("Applications" .=) <$> _rjfApplications,
+                  ("Tags" .=) <$> _rjfTags,
+                  ("ServiceRole" .=) <$> _rjfServiceRole,
+                  Just ("Name" .= _rjfName),
+                  Just ("Instances" .= _rjfInstances)])
 
 instance ToPath RunJobFlow where
         toPath = const "/"
diff --git a/gen/Network/AWS/EMR/SetTerminationProtection.hs b/gen/Network/AWS/EMR/SetTerminationProtection.hs
--- a/gen/Network/AWS/EMR/SetTerminationProtection.hs
+++ b/gen/Network/AWS/EMR/SetTerminationProtection.hs
@@ -97,10 +97,9 @@
 stpTerminationProtected = lens _stpTerminationProtected (\ s a -> s{_stpTerminationProtected = a});
 
 instance AWSRequest SetTerminationProtection where
-        type Sv SetTerminationProtection = EMR
         type Rs SetTerminationProtection =
              SetTerminationProtectionResponse
-        request = postJSON
+        request = postJSON eMR
         response
           = receiveNull SetTerminationProtectionResponse'
 
@@ -117,8 +116,11 @@
 instance ToJSON SetTerminationProtection where
         toJSON SetTerminationProtection'{..}
           = object
-              ["JobFlowIds" .= _stpJobFlowIds,
-               "TerminationProtected" .= _stpTerminationProtected]
+              (catMaybes
+                 [Just ("JobFlowIds" .= _stpJobFlowIds),
+                  Just
+                    ("TerminationProtected" .=
+                       _stpTerminationProtected)])
 
 instance ToPath SetTerminationProtection where
         toPath = const "/"
diff --git a/gen/Network/AWS/EMR/SetVisibleToAllUsers.hs b/gen/Network/AWS/EMR/SetVisibleToAllUsers.hs
--- a/gen/Network/AWS/EMR/SetVisibleToAllUsers.hs
+++ b/gen/Network/AWS/EMR/SetVisibleToAllUsers.hs
@@ -83,10 +83,9 @@
 svtauVisibleToAllUsers = lens _svtauVisibleToAllUsers (\ s a -> s{_svtauVisibleToAllUsers = a});
 
 instance AWSRequest SetVisibleToAllUsers where
-        type Sv SetVisibleToAllUsers = EMR
         type Rs SetVisibleToAllUsers =
              SetVisibleToAllUsersResponse
-        request = postJSON
+        request = postJSON eMR
         response = receiveNull SetVisibleToAllUsersResponse'
 
 instance ToHeaders SetVisibleToAllUsers where
@@ -102,8 +101,10 @@
 instance ToJSON SetVisibleToAllUsers where
         toJSON SetVisibleToAllUsers'{..}
           = object
-              ["JobFlowIds" .= _svtauJobFlowIds,
-               "VisibleToAllUsers" .= _svtauVisibleToAllUsers]
+              (catMaybes
+                 [Just ("JobFlowIds" .= _svtauJobFlowIds),
+                  Just
+                    ("VisibleToAllUsers" .= _svtauVisibleToAllUsers)])
 
 instance ToPath SetVisibleToAllUsers where
         toPath = const "/"
diff --git a/gen/Network/AWS/EMR/TerminateJobFlows.hs b/gen/Network/AWS/EMR/TerminateJobFlows.hs
--- a/gen/Network/AWS/EMR/TerminateJobFlows.hs
+++ b/gen/Network/AWS/EMR/TerminateJobFlows.hs
@@ -73,9 +73,8 @@
 tjfJobFlowIds = lens _tjfJobFlowIds (\ s a -> s{_tjfJobFlowIds = a}) . _Coerce;
 
 instance AWSRequest TerminateJobFlows where
-        type Sv TerminateJobFlows = EMR
         type Rs TerminateJobFlows = TerminateJobFlowsResponse
-        request = postJSON
+        request = postJSON eMR
         response = receiveNull TerminateJobFlowsResponse'
 
 instance ToHeaders TerminateJobFlows where
@@ -89,7 +88,8 @@
 
 instance ToJSON TerminateJobFlows where
         toJSON TerminateJobFlows'{..}
-          = object ["JobFlowIds" .= _tjfJobFlowIds]
+          = object
+              (catMaybes [Just ("JobFlowIds" .= _tjfJobFlowIds)])
 
 instance ToPath TerminateJobFlows where
         toPath = const "/"
diff --git a/gen/Network/AWS/EMR/Types.hs b/gen/Network/AWS/EMR/Types.hs
--- a/gen/Network/AWS/EMR/Types.hs
+++ b/gen/Network/AWS/EMR/Types.hs
@@ -1,5 +1,4 @@
 {-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE TypeFamilies      #-}
 
 -- Derived from AWS service descriptions, licensed under Apache 2.0.
 
@@ -13,8 +12,8 @@
 --
 module Network.AWS.EMR.Types
     (
-    -- * Service
-      EMR
+    -- * Service Configuration
+      eMR
 
     -- * Errors
     , _InvalidRequestException
@@ -343,39 +342,36 @@
 import           Network.AWS.Prelude
 import           Network.AWS.Sign.V4
 
--- | Version @2009-03-31@ of the Amazon Elastic MapReduce SDK.
-data EMR
-
-instance AWSService EMR where
-    type Sg EMR = V4
-    service = const svc
-      where
-        svc =
-            Service
-            { _svcAbbrev = "EMR"
-            , _svcPrefix = "elasticmapreduce"
-            , _svcVersion = "2009-03-31"
-            , _svcEndpoint = defaultEndpoint svc
-            , _svcTimeout = Just 70
-            , _svcStatus = statusSuccess
-            , _svcError = parseJSONError
-            , _svcRetry = retry
-            }
-        retry =
-            Exponential
-            { _retryBase = 5.0e-2
-            , _retryGrowth = 2
-            , _retryAttempts = 5
-            , _retryCheck = check
-            }
-        check e
-          | has (hasCode "ThrottlingException" . hasStatus 400) e =
-              Just "throttling_exception"
-          | has (hasCode "Throttling" . hasStatus 400) e = Just "throttling"
-          | has (hasStatus 503) e = Just "service_unavailable"
-          | has (hasStatus 500) e = Just "general_server_error"
-          | has (hasStatus 509) e = Just "limit_exceeded"
-          | otherwise = Nothing
+-- | API version '2009-03-31' of the Amazon Elastic MapReduce SDK configuration.
+eMR :: Service
+eMR =
+    Service
+    { _svcAbbrev = "EMR"
+    , _svcSigner = v4
+    , _svcPrefix = "elasticmapreduce"
+    , _svcVersion = "2009-03-31"
+    , _svcEndpoint = defaultEndpoint eMR
+    , _svcTimeout = Just 70
+    , _svcCheck = statusSuccess
+    , _svcError = parseJSONError
+    , _svcRetry = retry
+    }
+  where
+    retry =
+        Exponential
+        { _retryBase = 5.0e-2
+        , _retryGrowth = 2
+        , _retryAttempts = 5
+        , _retryCheck = check
+        }
+    check e
+      | has (hasCode "ThrottlingException" . hasStatus 400) e =
+          Just "throttling_exception"
+      | has (hasCode "Throttling" . hasStatus 400) e = Just "throttling"
+      | has (hasStatus 503) e = Just "service_unavailable"
+      | has (hasStatus 500) e = Just "general_server_error"
+      | has (hasStatus 509) e = Just "limit_exceeded"
+      | otherwise = Nothing
 
 -- | This exception occurs when there is something wrong with user input.
 _InvalidRequestException :: AsError a => Getting (First ServiceError) a ServiceError
diff --git a/gen/Network/AWS/EMR/Types/Product.hs b/gen/Network/AWS/EMR/Types/Product.hs
--- a/gen/Network/AWS/EMR/Types/Product.hs
+++ b/gen/Network/AWS/EMR/Types/Product.hs
@@ -2,7 +2,6 @@
 {-# LANGUAGE DeriveGeneric      #-}
 {-# LANGUAGE OverloadedStrings  #-}
 {-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
 
@@ -100,9 +99,10 @@
 instance ToJSON Application where
         toJSON Application'{..}
           = object
-              ["AdditionalInfo" .= _aAdditionalInfo,
-               "Args" .= _aArgs, "Name" .= _aName,
-               "Version" .= _aVersion]
+              (catMaybes
+                 [("AdditionalInfo" .=) <$> _aAdditionalInfo,
+                  ("Args" .=) <$> _aArgs, ("Name" .=) <$> _aName,
+                  ("Version" .=) <$> _aVersion])
 
 -- | Configuration of a bootstrap action.
 --
@@ -140,8 +140,11 @@
 instance ToJSON BootstrapActionConfig where
         toJSON BootstrapActionConfig'{..}
           = object
-              ["Name" .= _bacName,
-               "ScriptBootstrapAction" .= _bacScriptBootstrapAction]
+              (catMaybes
+                 [Just ("Name" .= _bacName),
+                  Just
+                    ("ScriptBootstrapAction" .=
+                       _bacScriptBootstrapAction)])
 
 -- | The detailed description of the cluster.
 --
@@ -640,9 +643,10 @@
 instance ToJSON Configuration where
         toJSON Configuration'{..}
           = object
-              ["Configurations" .= _cConfigurations,
-               "Classification" .= _cClassification,
-               "Properties" .= _cProperties]
+              (catMaybes
+                 [("Configurations" .=) <$> _cConfigurations,
+                  ("Classification" .=) <$> _cClassification,
+                  ("Properties" .=) <$> _cProperties])
 
 -- | Provides information about the EC2 instances in a cluster grouped by
 -- category. For example, key name, subnet ID, IAM instance profile, and so
@@ -808,8 +812,11 @@
 instance ToJSON HadoopJARStepConfig where
         toJSON HadoopJARStepConfig'{..}
           = object
-              ["Args" .= _hjscArgs, "MainClass" .= _hjscMainClass,
-               "Properties" .= _hjscProperties, "Jar" .= _hjscJAR]
+              (catMaybes
+                 [("Args" .=) <$> _hjscArgs,
+                  ("MainClass" .=) <$> _hjscMainClass,
+                  ("Properties" .=) <$> _hjscProperties,
+                  Just ("Jar" .= _hjscJAR)])
 
 -- | A cluster step consisting of a JAR file whose main function will be
 -- executed. The main function submits a job for Hadoop to execute and
@@ -1155,12 +1162,14 @@
 instance ToJSON InstanceGroupConfig where
         toJSON InstanceGroupConfig'{..}
           = object
-              ["BidPrice" .= _igcBidPrice,
-               "Configurations" .= _igcConfigurations,
-               "Market" .= _igcMarket, "Name" .= _igcName,
-               "InstanceRole" .= _igcInstanceRole,
-               "InstanceType" .= _igcInstanceType,
-               "InstanceCount" .= _igcInstanceCount]
+              (catMaybes
+                 [("BidPrice" .=) <$> _igcBidPrice,
+                  ("Configurations" .=) <$> _igcConfigurations,
+                  ("Market" .=) <$> _igcMarket,
+                  ("Name" .=) <$> _igcName,
+                  Just ("InstanceRole" .= _igcInstanceRole),
+                  Just ("InstanceType" .= _igcInstanceType),
+                  Just ("InstanceCount" .= _igcInstanceCount)])
 
 -- | Modify an instance group size.
 --
@@ -1207,10 +1216,11 @@
 instance ToJSON InstanceGroupModifyConfig where
         toJSON InstanceGroupModifyConfig'{..}
           = object
-              ["InstanceCount" .= _igmcInstanceCount,
-               "EC2InstanceIdsToTerminate" .=
-                 _igmcEC2InstanceIdsToTerminate,
-               "InstanceGroupId" .= _igmcInstanceGroupId]
+              (catMaybes
+                 [("InstanceCount" .=) <$> _igmcInstanceCount,
+                  ("EC2InstanceIdsToTerminate" .=) <$>
+                    _igmcEC2InstanceIdsToTerminate,
+                  Just ("InstanceGroupId" .= _igmcInstanceGroupId)])
 
 -- | The status change reason details for the instance group.
 --
@@ -1632,25 +1642,28 @@
 instance ToJSON JobFlowInstancesConfig where
         toJSON JobFlowInstancesConfig'{..}
           = object
-              ["SlaveInstanceType" .= _jficSlaveInstanceType,
-               "Ec2KeyName" .= _jficEC2KeyName,
-               "InstanceCount" .= _jficInstanceCount,
-               "EmrManagedSlaveSecurityGroup" .=
-                 _jficEmrManagedSlaveSecurityGroup,
-               "AdditionalSlaveSecurityGroups" .=
-                 _jficAdditionalSlaveSecurityGroups,
-               "HadoopVersion" .= _jficHadoopVersion,
-               "AdditionalMasterSecurityGroups" .=
-                 _jficAdditionalMasterSecurityGroups,
-               "EmrManagedMasterSecurityGroup" .=
-                 _jficEmrManagedMasterSecurityGroup,
-               "Ec2SubnetId" .= _jficEC2SubnetId,
-               "MasterInstanceType" .= _jficMasterInstanceType,
-               "InstanceGroups" .= _jficInstanceGroups,
-               "KeepJobFlowAliveWhenNoSteps" .=
-                 _jficKeepJobFlowAliveWhenNoSteps,
-               "TerminationProtected" .= _jficTerminationProtected,
-               "Placement" .= _jficPlacement]
+              (catMaybes
+                 [("SlaveInstanceType" .=) <$> _jficSlaveInstanceType,
+                  ("Ec2KeyName" .=) <$> _jficEC2KeyName,
+                  ("InstanceCount" .=) <$> _jficInstanceCount,
+                  ("EmrManagedSlaveSecurityGroup" .=) <$>
+                    _jficEmrManagedSlaveSecurityGroup,
+                  ("AdditionalSlaveSecurityGroups" .=) <$>
+                    _jficAdditionalSlaveSecurityGroups,
+                  ("HadoopVersion" .=) <$> _jficHadoopVersion,
+                  ("AdditionalMasterSecurityGroups" .=) <$>
+                    _jficAdditionalMasterSecurityGroups,
+                  ("EmrManagedMasterSecurityGroup" .=) <$>
+                    _jficEmrManagedMasterSecurityGroup,
+                  ("Ec2SubnetId" .=) <$> _jficEC2SubnetId,
+                  ("MasterInstanceType" .=) <$>
+                    _jficMasterInstanceType,
+                  ("InstanceGroups" .=) <$> _jficInstanceGroups,
+                  ("KeepJobFlowAliveWhenNoSteps" .=) <$>
+                    _jficKeepJobFlowAliveWhenNoSteps,
+                  ("TerminationProtected" .=) <$>
+                    _jficTerminationProtected,
+                  ("Placement" .=) <$> _jficPlacement])
 
 -- | A key value pair.
 --
@@ -1685,7 +1698,9 @@
 
 instance ToJSON KeyValue where
         toJSON KeyValue'{..}
-          = object ["Value" .= _kvValue, "Key" .= _kvKey]
+          = object
+              (catMaybes
+                 [("Value" .=) <$> _kvValue, ("Key" .=) <$> _kvKey])
 
 -- | The Amazon EC2 location for the job flow.
 --
@@ -1713,7 +1728,9 @@
 
 instance ToJSON PlacementType where
         toJSON PlacementType'{..}
-          = object ["AvailabilityZone" .= _ptAvailabilityZone]
+          = object
+              (catMaybes
+                 [Just ("AvailabilityZone" .= _ptAvailabilityZone)])
 
 -- | Configuration of the script to run during a bootstrap action.
 --
@@ -1750,7 +1767,10 @@
 
 instance ToJSON ScriptBootstrapActionConfig where
         toJSON ScriptBootstrapActionConfig'{..}
-          = object ["Args" .= _sbacArgs, "Path" .= _sbacPath]
+          = object
+              (catMaybes
+                 [("Args" .=) <$> _sbacArgs,
+                  Just ("Path" .= _sbacPath)])
 
 -- | This represents a step in a cluster.
 --
@@ -1862,9 +1882,10 @@
 instance ToJSON StepConfig where
         toJSON StepConfig'{..}
           = object
-              ["ActionOnFailure" .= _scActionOnFailure,
-               "Name" .= _scName,
-               "HadoopJarStep" .= _scHadoopJARStep]
+              (catMaybes
+                 [("ActionOnFailure" .=) <$> _scActionOnFailure,
+                  Just ("Name" .= _scName),
+                  Just ("HadoopJarStep" .= _scHadoopJARStep)])
 
 -- | The details of the step state change reason.
 --
@@ -2100,7 +2121,9 @@
 
 instance ToJSON SupportedProductConfig where
         toJSON SupportedProductConfig'{..}
-          = object ["Args" .= _spcArgs, "Name" .= _spcName]
+          = object
+              (catMaybes
+                 [("Args" .=) <$> _spcArgs, ("Name" .=) <$> _spcName])
 
 -- | A key\/value pair containing user-defined metadata that you can
 -- associate with an Amazon EMR resource. Tags make it easier to associate
@@ -2148,4 +2171,6 @@
 
 instance ToJSON Tag where
         toJSON Tag'{..}
-          = object ["Value" .= _tagValue, "Key" .= _tagKey]
+          = object
+              (catMaybes
+                 [("Value" .=) <$> _tagValue, ("Key" .=) <$> _tagKey])
diff --git a/test/Test/AWS/Gen/EMR.hs b/test/Test/AWS/Gen/EMR.hs
--- a/test/Test/AWS/Gen/EMR.hs
+++ b/test/Test/AWS/Gen/EMR.hs
@@ -218,94 +218,110 @@
 testRunJobFlowResponse = res
     "RunJobFlowResponse"
     "fixture/RunJobFlowResponse"
+    eMR
     (Proxy :: Proxy RunJobFlow)
 
 testSetVisibleToAllUsersResponse :: SetVisibleToAllUsersResponse -> TestTree
 testSetVisibleToAllUsersResponse = res
     "SetVisibleToAllUsersResponse"
     "fixture/SetVisibleToAllUsersResponse"
+    eMR
     (Proxy :: Proxy SetVisibleToAllUsers)
 
 testTerminateJobFlowsResponse :: TerminateJobFlowsResponse -> TestTree
 testTerminateJobFlowsResponse = res
     "TerminateJobFlowsResponse"
     "fixture/TerminateJobFlowsResponse"
+    eMR
     (Proxy :: Proxy TerminateJobFlows)
 
 testRemoveTagsResponse :: RemoveTagsResponse -> TestTree
 testRemoveTagsResponse = res
     "RemoveTagsResponse"
     "fixture/RemoveTagsResponse"
+    eMR
     (Proxy :: Proxy RemoveTags)
 
 testDescribeStepResponse :: DescribeStepResponse -> TestTree
 testDescribeStepResponse = res
     "DescribeStepResponse"
     "fixture/DescribeStepResponse"
+    eMR
     (Proxy :: Proxy DescribeStep)
 
 testDescribeClusterResponse :: DescribeClusterResponse -> TestTree
 testDescribeClusterResponse = res
     "DescribeClusterResponse"
     "fixture/DescribeClusterResponse"
+    eMR
     (Proxy :: Proxy DescribeCluster)
 
 testModifyInstanceGroupsResponse :: ModifyInstanceGroupsResponse -> TestTree
 testModifyInstanceGroupsResponse = res
     "ModifyInstanceGroupsResponse"
     "fixture/ModifyInstanceGroupsResponse"
+    eMR
     (Proxy :: Proxy ModifyInstanceGroups)
 
 testAddJobFlowStepsResponse :: AddJobFlowStepsResponse -> TestTree
 testAddJobFlowStepsResponse = res
     "AddJobFlowStepsResponse"
     "fixture/AddJobFlowStepsResponse"
+    eMR
     (Proxy :: Proxy AddJobFlowSteps)
 
 testSetTerminationProtectionResponse :: SetTerminationProtectionResponse -> TestTree
 testSetTerminationProtectionResponse = res
     "SetTerminationProtectionResponse"
     "fixture/SetTerminationProtectionResponse"
+    eMR
     (Proxy :: Proxy SetTerminationProtection)
 
 testListStepsResponse :: ListStepsResponse -> TestTree
 testListStepsResponse = res
     "ListStepsResponse"
     "fixture/ListStepsResponse"
+    eMR
     (Proxy :: Proxy ListSteps)
 
 testAddInstanceGroupsResponse :: AddInstanceGroupsResponse -> TestTree
 testAddInstanceGroupsResponse = res
     "AddInstanceGroupsResponse"
     "fixture/AddInstanceGroupsResponse"
+    eMR
     (Proxy :: Proxy AddInstanceGroups)
 
 testListInstanceGroupsResponse :: ListInstanceGroupsResponse -> TestTree
 testListInstanceGroupsResponse = res
     "ListInstanceGroupsResponse"
     "fixture/ListInstanceGroupsResponse"
+    eMR
     (Proxy :: Proxy ListInstanceGroups)
 
 testListBootstrapActionsResponse :: ListBootstrapActionsResponse -> TestTree
 testListBootstrapActionsResponse = res
     "ListBootstrapActionsResponse"
     "fixture/ListBootstrapActionsResponse"
+    eMR
     (Proxy :: Proxy ListBootstrapActions)
 
 testAddTagsResponse :: AddTagsResponse -> TestTree
 testAddTagsResponse = res
     "AddTagsResponse"
     "fixture/AddTagsResponse"
+    eMR
     (Proxy :: Proxy AddTags)
 
 testListInstancesResponse :: ListInstancesResponse -> TestTree
 testListInstancesResponse = res
     "ListInstancesResponse"
     "fixture/ListInstancesResponse"
+    eMR
     (Proxy :: Proxy ListInstances)
 
 testListClustersResponse :: ListClustersResponse -> TestTree
 testListClustersResponse = res
     "ListClustersResponse"
     "fixture/ListClustersResponse"
+    eMR
     (Proxy :: Proxy ListClusters)
