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-elastictranscoder.cabal b/amazonka-elastictranscoder.cabal
--- a/amazonka-elastictranscoder.cabal
+++ b/amazonka-elastictranscoder.cabal
@@ -1,5 +1,5 @@
 name:                  amazonka-elastictranscoder
-version:               1.1.0
+version:               1.2.0
 synopsis:              Amazon Elastic Transcoder SDK.
 homepage:              https://github.com/brendanhay/amazonka
 license:               OtherLicense
@@ -68,7 +68,7 @@
         , Network.AWS.ElasticTranscoder.Types.Sum
 
     build-depends:
-          amazonka-core == 1.1.0.*
+          amazonka-core == 1.2.0.*
         , base          >= 4.7     && < 5
 
 test-suite amazonka-elastictranscoder-test
@@ -87,9 +87,9 @@
         , Test.AWS.ElasticTranscoder.Internal
 
     build-depends:
-          amazonka-core == 1.1.0
-        , amazonka-test == 1.1.0
-        , amazonka-elastictranscoder == 1.1.0
+          amazonka-core == 1.2.0
+        , amazonka-test == 1.2.0
+        , amazonka-elastictranscoder == 1.2.0
         , base
         , bytestring
         , lens
diff --git a/gen/Network/AWS/ElasticTranscoder.hs b/gen/Network/AWS/ElasticTranscoder.hs
--- a/gen/Network/AWS/ElasticTranscoder.hs
+++ b/gen/Network/AWS/ElasticTranscoder.hs
@@ -18,8 +18,8 @@
 -- /See:/ <http://docs.aws.amazon.com/elastictranscoder/latest/developerguide/api-reference.html AWS API Reference>
 module Network.AWS.ElasticTranscoder
     (
-    -- * Service
-      ElasticTranscoder
+    -- * Service Configuration
+      elasticTranscoder
 
     -- * Errors
     -- $errors
diff --git a/gen/Network/AWS/ElasticTranscoder/CancelJob.hs b/gen/Network/AWS/ElasticTranscoder/CancelJob.hs
--- a/gen/Network/AWS/ElasticTranscoder/CancelJob.hs
+++ b/gen/Network/AWS/ElasticTranscoder/CancelJob.hs
@@ -74,9 +74,8 @@
 cjId = lens _cjId (\ s a -> s{_cjId = a});
 
 instance AWSRequest CancelJob where
-        type Sv CancelJob = ElasticTranscoder
         type Rs CancelJob = CancelJobResponse
-        request = delete
+        request = delete elasticTranscoder
         response
           = receiveEmpty
               (\ s h x ->
diff --git a/gen/Network/AWS/ElasticTranscoder/CreateJob.hs b/gen/Network/AWS/ElasticTranscoder/CreateJob.hs
--- a/gen/Network/AWS/ElasticTranscoder/CreateJob.hs
+++ b/gen/Network/AWS/ElasticTranscoder/CreateJob.hs
@@ -147,9 +147,8 @@
 cjInput = lens _cjInput (\ s a -> s{_cjInput = a});
 
 instance AWSRequest CreateJob where
-        type Sv CreateJob = ElasticTranscoder
         type Rs CreateJob = CreateJobResponse
-        request = postJSON
+        request = postJSON elasticTranscoder
         response
           = receiveJSON
               (\ s h x ->
@@ -162,11 +161,14 @@
 instance ToJSON CreateJob where
         toJSON CreateJob'{..}
           = object
-              ["Outputs" .= _cjOutputs,
-               "UserMetadata" .= _cjUserMetadata,
-               "Output" .= _cjOutput, "Playlists" .= _cjPlaylists,
-               "OutputKeyPrefix" .= _cjOutputKeyPrefix,
-               "PipelineId" .= _cjPipelineId, "Input" .= _cjInput]
+              (catMaybes
+                 [("Outputs" .=) <$> _cjOutputs,
+                  ("UserMetadata" .=) <$> _cjUserMetadata,
+                  ("Output" .=) <$> _cjOutput,
+                  ("Playlists" .=) <$> _cjPlaylists,
+                  ("OutputKeyPrefix" .=) <$> _cjOutputKeyPrefix,
+                  Just ("PipelineId" .= _cjPipelineId),
+                  Just ("Input" .= _cjInput)])
 
 instance ToPath CreateJob where
         toPath = const "/2012-09-25/jobs"
diff --git a/gen/Network/AWS/ElasticTranscoder/CreatePipeline.hs b/gen/Network/AWS/ElasticTranscoder/CreatePipeline.hs
--- a/gen/Network/AWS/ElasticTranscoder/CreatePipeline.hs
+++ b/gen/Network/AWS/ElasticTranscoder/CreatePipeline.hs
@@ -299,9 +299,8 @@
 cRole = lens _cRole (\ s a -> s{_cRole = a});
 
 instance AWSRequest CreatePipeline where
-        type Sv CreatePipeline = ElasticTranscoder
         type Rs CreatePipeline = CreatePipelineResponse
-        request = postJSON
+        request = postJSON elasticTranscoder
         response
           = receiveJSON
               (\ s h x ->
@@ -315,12 +314,15 @@
 instance ToJSON CreatePipeline where
         toJSON CreatePipeline'{..}
           = object
-              ["ContentConfig" .= _cContentConfig,
-               "OutputBucket" .= _cOutputBucket,
-               "AwsKmsKeyArn" .= _cAWSKMSKeyARN,
-               "ThumbnailConfig" .= _cThumbnailConfig,
-               "Notifications" .= _cNotifications, "Name" .= _cName,
-               "InputBucket" .= _cInputBucket, "Role" .= _cRole]
+              (catMaybes
+                 [("ContentConfig" .=) <$> _cContentConfig,
+                  ("OutputBucket" .=) <$> _cOutputBucket,
+                  ("AwsKmsKeyArn" .=) <$> _cAWSKMSKeyARN,
+                  ("ThumbnailConfig" .=) <$> _cThumbnailConfig,
+                  ("Notifications" .=) <$> _cNotifications,
+                  Just ("Name" .= _cName),
+                  Just ("InputBucket" .= _cInputBucket),
+                  Just ("Role" .= _cRole)])
 
 instance ToPath CreatePipeline where
         toPath = const "/2012-09-25/pipelines"
diff --git a/gen/Network/AWS/ElasticTranscoder/CreatePreset.hs b/gen/Network/AWS/ElasticTranscoder/CreatePreset.hs
--- a/gen/Network/AWS/ElasticTranscoder/CreatePreset.hs
+++ b/gen/Network/AWS/ElasticTranscoder/CreatePreset.hs
@@ -136,9 +136,8 @@
 cpContainer = lens _cpContainer (\ s a -> s{_cpContainer = a});
 
 instance AWSRequest CreatePreset where
-        type Sv CreatePreset = ElasticTranscoder
         type Rs CreatePreset = CreatePresetResponse
-        request = postJSON
+        request = postJSON elasticTranscoder
         response
           = receiveJSON
               (\ s h x ->
@@ -152,9 +151,13 @@
 instance ToJSON CreatePreset where
         toJSON CreatePreset'{..}
           = object
-              ["Video" .= _cpVideo, "Thumbnails" .= _cpThumbnails,
-               "Audio" .= _cpAudio, "Description" .= _cpDescription,
-               "Name" .= _cpName, "Container" .= _cpContainer]
+              (catMaybes
+                 [("Video" .=) <$> _cpVideo,
+                  ("Thumbnails" .=) <$> _cpThumbnails,
+                  ("Audio" .=) <$> _cpAudio,
+                  ("Description" .=) <$> _cpDescription,
+                  Just ("Name" .= _cpName),
+                  Just ("Container" .= _cpContainer)])
 
 instance ToPath CreatePreset where
         toPath = const "/2012-09-25/presets"
diff --git a/gen/Network/AWS/ElasticTranscoder/DeletePipeline.hs b/gen/Network/AWS/ElasticTranscoder/DeletePipeline.hs
--- a/gen/Network/AWS/ElasticTranscoder/DeletePipeline.hs
+++ b/gen/Network/AWS/ElasticTranscoder/DeletePipeline.hs
@@ -71,9 +71,8 @@
 dId = lens _dId (\ s a -> s{_dId = a});
 
 instance AWSRequest DeletePipeline where
-        type Sv DeletePipeline = ElasticTranscoder
         type Rs DeletePipeline = DeletePipelineResponse
-        request = delete
+        request = delete elasticTranscoder
         response
           = receiveEmpty
               (\ s h x ->
diff --git a/gen/Network/AWS/ElasticTranscoder/DeletePreset.hs b/gen/Network/AWS/ElasticTranscoder/DeletePreset.hs
--- a/gen/Network/AWS/ElasticTranscoder/DeletePreset.hs
+++ b/gen/Network/AWS/ElasticTranscoder/DeletePreset.hs
@@ -72,9 +72,8 @@
 dpId = lens _dpId (\ s a -> s{_dpId = a});
 
 instance AWSRequest DeletePreset where
-        type Sv DeletePreset = ElasticTranscoder
         type Rs DeletePreset = DeletePresetResponse
-        request = delete
+        request = delete elasticTranscoder
         response
           = receiveEmpty
               (\ s h x ->
diff --git a/gen/Network/AWS/ElasticTranscoder/ListJobsByPipeline.hs b/gen/Network/AWS/ElasticTranscoder/ListJobsByPipeline.hs
--- a/gen/Network/AWS/ElasticTranscoder/ListJobsByPipeline.hs
+++ b/gen/Network/AWS/ElasticTranscoder/ListJobsByPipeline.hs
@@ -107,10 +107,9 @@
               ljbpPageToken .~ rs ^. ljbprsNextPageToken
 
 instance AWSRequest ListJobsByPipeline where
-        type Sv ListJobsByPipeline = ElasticTranscoder
         type Rs ListJobsByPipeline =
              ListJobsByPipelineResponse
-        request = get
+        request = get elasticTranscoder
         response
           = receiveJSON
               (\ s h x ->
diff --git a/gen/Network/AWS/ElasticTranscoder/ListJobsByStatus.hs b/gen/Network/AWS/ElasticTranscoder/ListJobsByStatus.hs
--- a/gen/Network/AWS/ElasticTranscoder/ListJobsByStatus.hs
+++ b/gen/Network/AWS/ElasticTranscoder/ListJobsByStatus.hs
@@ -106,9 +106,8 @@
               ljbsPageToken .~ rs ^. ljbsrsNextPageToken
 
 instance AWSRequest ListJobsByStatus where
-        type Sv ListJobsByStatus = ElasticTranscoder
         type Rs ListJobsByStatus = ListJobsByStatusResponse
-        request = get
+        request = get elasticTranscoder
         response
           = receiveJSON
               (\ s h x ->
diff --git a/gen/Network/AWS/ElasticTranscoder/ListPipelines.hs b/gen/Network/AWS/ElasticTranscoder/ListPipelines.hs
--- a/gen/Network/AWS/ElasticTranscoder/ListPipelines.hs
+++ b/gen/Network/AWS/ElasticTranscoder/ListPipelines.hs
@@ -92,9 +92,8 @@
             Just $ rq & lpPageToken .~ rs ^. lprsNextPageToken
 
 instance AWSRequest ListPipelines where
-        type Sv ListPipelines = ElasticTranscoder
         type Rs ListPipelines = ListPipelinesResponse
-        request = get
+        request = get elasticTranscoder
         response
           = receiveJSON
               (\ s h x ->
diff --git a/gen/Network/AWS/ElasticTranscoder/ListPresets.hs b/gen/Network/AWS/ElasticTranscoder/ListPresets.hs
--- a/gen/Network/AWS/ElasticTranscoder/ListPresets.hs
+++ b/gen/Network/AWS/ElasticTranscoder/ListPresets.hs
@@ -93,9 +93,8 @@
             Just $ rq & lPageToken .~ rs ^. lrsNextPageToken
 
 instance AWSRequest ListPresets where
-        type Sv ListPresets = ElasticTranscoder
         type Rs ListPresets = ListPresetsResponse
-        request = get
+        request = get elasticTranscoder
         response
           = receiveJSON
               (\ s h x ->
diff --git a/gen/Network/AWS/ElasticTranscoder/ReadJob.hs b/gen/Network/AWS/ElasticTranscoder/ReadJob.hs
--- a/gen/Network/AWS/ElasticTranscoder/ReadJob.hs
+++ b/gen/Network/AWS/ElasticTranscoder/ReadJob.hs
@@ -69,9 +69,8 @@
 rjId = lens _rjId (\ s a -> s{_rjId = a});
 
 instance AWSRequest ReadJob where
-        type Sv ReadJob = ElasticTranscoder
         type Rs ReadJob = ReadJobResponse
-        request = get
+        request = get elasticTranscoder
         response
           = receiveJSON
               (\ s h x ->
diff --git a/gen/Network/AWS/ElasticTranscoder/ReadPipeline.hs b/gen/Network/AWS/ElasticTranscoder/ReadPipeline.hs
--- a/gen/Network/AWS/ElasticTranscoder/ReadPipeline.hs
+++ b/gen/Network/AWS/ElasticTranscoder/ReadPipeline.hs
@@ -69,9 +69,8 @@
 rId = lens _rId (\ s a -> s{_rId = a});
 
 instance AWSRequest ReadPipeline where
-        type Sv ReadPipeline = ElasticTranscoder
         type Rs ReadPipeline = ReadPipelineResponse
-        request = get
+        request = get elasticTranscoder
         response
           = receiveJSON
               (\ s h x ->
diff --git a/gen/Network/AWS/ElasticTranscoder/ReadPreset.hs b/gen/Network/AWS/ElasticTranscoder/ReadPreset.hs
--- a/gen/Network/AWS/ElasticTranscoder/ReadPreset.hs
+++ b/gen/Network/AWS/ElasticTranscoder/ReadPreset.hs
@@ -69,9 +69,8 @@
 rpId = lens _rpId (\ s a -> s{_rpId = a});
 
 instance AWSRequest ReadPreset where
-        type Sv ReadPreset = ElasticTranscoder
         type Rs ReadPreset = ReadPresetResponse
-        request = get
+        request = get elasticTranscoder
         response
           = receiveJSON
               (\ s h x ->
diff --git a/gen/Network/AWS/ElasticTranscoder/TestRole.hs b/gen/Network/AWS/ElasticTranscoder/TestRole.hs
--- a/gen/Network/AWS/ElasticTranscoder/TestRole.hs
+++ b/gen/Network/AWS/ElasticTranscoder/TestRole.hs
@@ -109,9 +109,8 @@
 trTopics = lens _trTopics (\ s a -> s{_trTopics = a}) . _Coerce;
 
 instance AWSRequest TestRole where
-        type Sv TestRole = ElasticTranscoder
         type Rs TestRole = TestRoleResponse
-        request = postJSON
+        request = postJSON elasticTranscoder
         response
           = receiveJSON
               (\ s h x ->
@@ -125,9 +124,11 @@
 instance ToJSON TestRole where
         toJSON TestRole'{..}
           = object
-              ["Role" .= _trRole, "InputBucket" .= _trInputBucket,
-               "OutputBucket" .= _trOutputBucket,
-               "Topics" .= _trTopics]
+              (catMaybes
+                 [Just ("Role" .= _trRole),
+                  Just ("InputBucket" .= _trInputBucket),
+                  Just ("OutputBucket" .= _trOutputBucket),
+                  Just ("Topics" .= _trTopics)])
 
 instance ToPath TestRole where
         toPath = const "/2012-09-25/roleTests"
diff --git a/gen/Network/AWS/ElasticTranscoder/Types.hs b/gen/Network/AWS/ElasticTranscoder/Types.hs
--- a/gen/Network/AWS/ElasticTranscoder/Types.hs
+++ b/gen/Network/AWS/ElasticTranscoder/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.ElasticTranscoder.Types
     (
-    -- * Service
-      ElasticTranscoder
+    -- * Service Configuration
+      elasticTranscoder
 
     -- * Errors
     , _ValidationException
@@ -339,39 +338,36 @@
 import           Network.AWS.Prelude
 import           Network.AWS.Sign.V4
 
--- | Version @2012-09-25@ of the Amazon Elastic Transcoder SDK.
-data ElasticTranscoder
-
-instance AWSService ElasticTranscoder where
-    type Sg ElasticTranscoder = V4
-    service = const svc
-      where
-        svc =
-            Service
-            { _svcAbbrev = "ElasticTranscoder"
-            , _svcPrefix = "elastictranscoder"
-            , _svcVersion = "2012-09-25"
-            , _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 '2012-09-25' of the Amazon Elastic Transcoder SDK configuration.
+elasticTranscoder :: Service
+elasticTranscoder =
+    Service
+    { _svcAbbrev = "ElasticTranscoder"
+    , _svcSigner = v4
+    , _svcPrefix = "elastictranscoder"
+    , _svcVersion = "2012-09-25"
+    , _svcEndpoint = defaultEndpoint elasticTranscoder
+    , _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
 
 -- | One or more required parameter values were not provided in the request.
 _ValidationException :: AsError a => Getting (First ServiceError) a ServiceError
diff --git a/gen/Network/AWS/ElasticTranscoder/Types/Product.hs b/gen/Network/AWS/ElasticTranscoder/Types/Product.hs
--- a/gen/Network/AWS/ElasticTranscoder/Types/Product.hs
+++ b/gen/Network/AWS/ElasticTranscoder/Types/Product.hs
@@ -2,7 +2,6 @@
 {-# LANGUAGE DeriveGeneric      #-}
 {-# LANGUAGE OverloadedStrings  #-}
 {-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
 
@@ -157,13 +156,14 @@
 instance ToJSON Artwork where
         toJSON Artwork'{..}
           = object
-              ["SizingPolicy" .= _aSizingPolicy,
-               "MaxHeight" .= _aMaxHeight,
-               "AlbumArtFormat" .= _aAlbumArtFormat,
-               "InputKey" .= _aInputKey,
-               "PaddingPolicy" .= _aPaddingPolicy,
-               "Encryption" .= _aEncryption,
-               "MaxWidth" .= _aMaxWidth]
+              (catMaybes
+                 [("SizingPolicy" .=) <$> _aSizingPolicy,
+                  ("MaxHeight" .=) <$> _aMaxHeight,
+                  ("AlbumArtFormat" .=) <$> _aAlbumArtFormat,
+                  ("InputKey" .=) <$> _aInputKey,
+                  ("PaddingPolicy" .=) <$> _aPaddingPolicy,
+                  ("Encryption" .=) <$> _aEncryption,
+                  ("MaxWidth" .=) <$> _aMaxWidth])
 
 -- | Options associated with your audio codec.
 --
@@ -264,8 +264,11 @@
 instance ToJSON AudioCodecOptions where
         toJSON AudioCodecOptions'{..}
           = object
-              ["BitDepth" .= _acoBitDepth, "Signed" .= _acoSigned,
-               "Profile" .= _acoProfile, "BitOrder" .= _acoBitOrder]
+              (catMaybes
+                 [("BitDepth" .=) <$> _acoBitDepth,
+                  ("Signed" .=) <$> _acoSigned,
+                  ("Profile" .=) <$> _acoProfile,
+                  ("BitOrder" .=) <$> _acoBitOrder])
 
 -- | Parameters required for transcoding audio.
 --
@@ -469,11 +472,13 @@
 instance ToJSON AudioParameters where
         toJSON AudioParameters'{..}
           = object
-              ["Channels" .= _apChannels, "Codec" .= _apCodec,
-               "AudioPackingMode" .= _apAudioPackingMode,
-               "SampleRate" .= _apSampleRate,
-               "BitRate" .= _apBitRate,
-               "CodecOptions" .= _apCodecOptions]
+              (catMaybes
+                 [("Channels" .=) <$> _apChannels,
+                  ("Codec" .=) <$> _apCodec,
+                  ("AudioPackingMode" .=) <$> _apAudioPackingMode,
+                  ("SampleRate" .=) <$> _apSampleRate,
+                  ("BitRate" .=) <$> _apBitRate,
+                  ("CodecOptions" .=) <$> _apCodecOptions])
 
 -- | The file format of the output captions. If you leave this value blank,
 -- Elastic Transcoder returns an error.
@@ -569,8 +574,10 @@
 instance ToJSON CaptionFormat where
         toJSON CaptionFormat'{..}
           = object
-              ["Pattern" .= _cfPattern, "Format" .= _cfFormat,
-               "Encryption" .= _cfEncryption]
+              (catMaybes
+                 [("Pattern" .=) <$> _cfPattern,
+                  ("Format" .=) <$> _cfFormat,
+                  ("Encryption" .=) <$> _cfEncryption])
 
 -- | A source file for the input sidecar captions used during the transcoding
 -- process.
@@ -657,9 +664,12 @@
 instance ToJSON CaptionSource where
         toJSON CaptionSource'{..}
           = object
-              ["TimeOffset" .= _csTimeOffset, "Key" .= _csKey,
-               "Encryption" .= _csEncryption,
-               "Language" .= _csLanguage, "Label" .= _csLabel]
+              (catMaybes
+                 [("TimeOffset" .=) <$> _csTimeOffset,
+                  ("Key" .=) <$> _csKey,
+                  ("Encryption" .=) <$> _csEncryption,
+                  ("Language" .=) <$> _csLanguage,
+                  ("Label" .=) <$> _csLabel])
 
 -- | The captions to be created, if any.
 --
@@ -733,9 +743,10 @@
 instance ToJSON Captions where
         toJSON Captions'{..}
           = object
-              ["MergePolicy" .= _cMergePolicy,
-               "CaptionSources" .= _cCaptionSources,
-               "CaptionFormats" .= _cCaptionFormats]
+              (catMaybes
+                 [("MergePolicy" .=) <$> _cMergePolicy,
+                  ("CaptionSources" .=) <$> _cCaptionSources,
+                  ("CaptionFormats" .=) <$> _cCaptionFormats])
 
 -- | Settings for one clip in a composition. All jobs in a playlist must have
 -- the same clip settings.
@@ -767,7 +778,8 @@
               (\ x -> Clip' <$> (x .:? "TimeSpan"))
 
 instance ToJSON Clip where
-        toJSON Clip'{..} = object ["TimeSpan" .= _cTimeSpan]
+        toJSON Clip'{..}
+          = object (catMaybes [("TimeSpan" .=) <$> _cTimeSpan])
 
 -- | The 'CreateJobOutput' structure.
 --
@@ -999,16 +1011,19 @@
 instance ToJSON CreateJobOutput where
         toJSON CreateJobOutput'{..}
           = object
-              ["ThumbnailPattern" .= _cjoThumbnailPattern,
-               "Captions" .= _cjoCaptions,
-               "PresetId" .= _cjoPresetId,
-               "Composition" .= _cjoComposition,
-               "AlbumArt" .= _cjoAlbumArt,
-               "Watermarks" .= _cjoWatermarks, "Key" .= _cjoKey,
-               "Encryption" .= _cjoEncryption,
-               "SegmentDuration" .= _cjoSegmentDuration,
-               "ThumbnailEncryption" .= _cjoThumbnailEncryption,
-               "Rotate" .= _cjoRotate]
+              (catMaybes
+                 [("ThumbnailPattern" .=) <$> _cjoThumbnailPattern,
+                  ("Captions" .=) <$> _cjoCaptions,
+                  ("PresetId" .=) <$> _cjoPresetId,
+                  ("Composition" .=) <$> _cjoComposition,
+                  ("AlbumArt" .=) <$> _cjoAlbumArt,
+                  ("Watermarks" .=) <$> _cjoWatermarks,
+                  ("Key" .=) <$> _cjoKey,
+                  ("Encryption" .=) <$> _cjoEncryption,
+                  ("SegmentDuration" .=) <$> _cjoSegmentDuration,
+                  ("ThumbnailEncryption" .=) <$>
+                    _cjoThumbnailEncryption,
+                  ("Rotate" .=) <$> _cjoRotate])
 
 -- | Information about the master playlist.
 --
@@ -1119,10 +1134,13 @@
 instance ToJSON CreateJobPlaylist where
         toJSON CreateJobPlaylist'{..}
           = object
-              ["PlayReadyDrm" .= _cjpPlayReadyDrm,
-               "OutputKeys" .= _cjpOutputKeys,
-               "Format" .= _cjpFormat, "Name" .= _cjpName,
-               "HlsContentProtection" .= _cjpHlsContentProtection]
+              (catMaybes
+                 [("PlayReadyDrm" .=) <$> _cjpPlayReadyDrm,
+                  ("OutputKeys" .=) <$> _cjpOutputKeys,
+                  ("Format" .=) <$> _cjpFormat,
+                  ("Name" .=) <$> _cjpName,
+                  ("HlsContentProtection" .=) <$>
+                    _cjpHlsContentProtection])
 
 -- | The detected properties of the input file. Elastic Transcoder identifies
 -- these values from the input file.
@@ -1193,9 +1211,12 @@
 instance ToJSON DetectedProperties where
         toJSON DetectedProperties'{..}
           = object
-              ["Height" .= _dpHeight, "FrameRate" .= _dpFrameRate,
-               "FileSize" .= _dpFileSize, "Width" .= _dpWidth,
-               "DurationMillis" .= _dpDurationMillis]
+              (catMaybes
+                 [("Height" .=) <$> _dpHeight,
+                  ("FrameRate" .=) <$> _dpFrameRate,
+                  ("FileSize" .=) <$> _dpFileSize,
+                  ("Width" .=) <$> _dpWidth,
+                  ("DurationMillis" .=) <$> _dpDurationMillis])
 
 -- | The encryption settings, if any, that are used for decrypting your input
 -- files or encrypting your output files. If your input file is encrypted,
@@ -1310,9 +1331,11 @@
 instance ToJSON Encryption where
         toJSON Encryption'{..}
           = object
-              ["KeyMd5" .= _eKeyMD5, "Mode" .= _eMode,
-               "Key" .= _eKey,
-               "InitializationVector" .= _eInitializationVector]
+              (catMaybes
+                 [("KeyMd5" .=) <$> _eKeyMD5, ("Mode" .=) <$> _eMode,
+                  ("Key" .=) <$> _eKey,
+                  ("InitializationVector" .=) <$>
+                    _eInitializationVector])
 
 -- | The HLS content protection settings, if any, that you want Elastic
 -- Transcoder to apply to your output files.
@@ -1422,11 +1445,14 @@
 instance ToJSON HlsContentProtection where
         toJSON HlsContentProtection'{..}
           = object
-              ["KeyMd5" .= _hcpKeyMD5,
-               "KeyStoragePolicy" .= _hcpKeyStoragePolicy,
-               "Key" .= _hcpKey, "Method" .= _hcpMethod,
-               "LicenseAcquisitionUrl" .= _hcpLicenseAcquisitionURL,
-               "InitializationVector" .= _hcpInitializationVector]
+              (catMaybes
+                 [("KeyMd5" .=) <$> _hcpKeyMD5,
+                  ("KeyStoragePolicy" .=) <$> _hcpKeyStoragePolicy,
+                  ("Key" .=) <$> _hcpKey, ("Method" .=) <$> _hcpMethod,
+                  ("LicenseAcquisitionUrl" .=) <$>
+                    _hcpLicenseAcquisitionURL,
+                  ("InitializationVector" .=) <$>
+                    _hcpInitializationVector])
 
 -- | A section of the response body that provides information about the job
 -- that is created.
@@ -1653,8 +1679,9 @@
 instance ToJSON JobAlbumArt where
         toJSON JobAlbumArt'{..}
           = object
-              ["MergePolicy" .= _jaaMergePolicy,
-               "Artwork" .= _jaaArtwork]
+              (catMaybes
+                 [("MergePolicy" .=) <$> _jaaMergePolicy,
+                  ("Artwork" .=) <$> _jaaArtwork])
 
 -- | Information about the file that you\'re transcoding.
 --
@@ -1791,13 +1818,15 @@
 instance ToJSON JobInput where
         toJSON JobInput'{..}
           = object
-              ["FrameRate" .= _jiFrameRate,
-               "Resolution" .= _jiResolution,
-               "AspectRatio" .= _jiAspectRatio, "Key" .= _jiKey,
-               "DetectedProperties" .= _jiDetectedProperties,
-               "Encryption" .= _jiEncryption,
-               "Container" .= _jiContainer,
-               "Interlaced" .= _jiInterlaced]
+              (catMaybes
+                 [("FrameRate" .=) <$> _jiFrameRate,
+                  ("Resolution" .=) <$> _jiResolution,
+                  ("AspectRatio" .=) <$> _jiAspectRatio,
+                  ("Key" .=) <$> _jiKey,
+                  ("DetectedProperties" .=) <$> _jiDetectedProperties,
+                  ("Encryption" .=) <$> _jiEncryption,
+                  ("Container" .=) <$> _jiContainer,
+                  ("Interlaced" .=) <$> _jiInterlaced])
 
 -- | Outputs recommended instead.
 -- If you specified one output for a job, information about that output. If
@@ -2234,9 +2263,10 @@
 instance ToJSON JobWatermark where
         toJSON JobWatermark'{..}
           = object
-              ["PresetWatermarkId" .= _jwPresetWatermarkId,
-               "InputKey" .= _jwInputKey,
-               "Encryption" .= _jwEncryption]
+              (catMaybes
+                 [("PresetWatermarkId" .=) <$> _jwPresetWatermarkId,
+                  ("InputKey" .=) <$> _jwInputKey,
+                  ("Encryption" .=) <$> _jwEncryption])
 
 -- | The Amazon Simple Notification Service (Amazon SNS) topic or topics to
 -- notify in order to report job status.
@@ -2305,9 +2335,11 @@
 instance ToJSON Notifications where
         toJSON Notifications'{..}
           = object
-              ["Error" .= _nError, "Warning" .= _nWarning,
-               "Completed" .= _nCompleted,
-               "Progressing" .= _nProgressing]
+              (catMaybes
+                 [("Error" .=) <$> _nError,
+                  ("Warning" .=) <$> _nWarning,
+                  ("Completed" .=) <$> _nCompleted,
+                  ("Progressing" .=) <$> _nProgressing])
 
 -- | The 'Permission' structure.
 --
@@ -2381,9 +2413,10 @@
 instance ToJSON Permission where
         toJSON Permission'{..}
           = object
-              ["Access" .= _pAccess,
-               "GranteeType" .= _pGranteeType,
-               "Grantee" .= _pGrantee]
+              (catMaybes
+                 [("Access" .=) <$> _pAccess,
+                  ("GranteeType" .=) <$> _pGranteeType,
+                  ("Grantee" .=) <$> _pGrantee])
 
 -- | The pipeline (queue) that is used to manage jobs.
 --
@@ -2691,9 +2724,10 @@
 instance ToJSON PipelineOutputConfig where
         toJSON PipelineOutputConfig'{..}
           = object
-              ["Bucket" .= _pocBucket,
-               "StorageClass" .= _pocStorageClass,
-               "Permissions" .= _pocPermissions]
+              (catMaybes
+                 [("Bucket" .=) <$> _pocBucket,
+                  ("StorageClass" .=) <$> _pocStorageClass,
+                  ("Permissions" .=) <$> _pocPermissions])
 
 -- | The PlayReady DRM settings, if any, that you want Elastic Transcoder to
 -- apply to the output files associated with this playlist.
@@ -2805,10 +2839,14 @@
 instance ToJSON PlayReadyDrm where
         toJSON PlayReadyDrm'{..}
           = object
-              ["KeyId" .= _prdKeyId, "KeyMd5" .= _prdKeyMD5,
-               "Format" .= _prdFormat, "Key" .= _prdKey,
-               "LicenseAcquisitionUrl" .= _prdLicenseAcquisitionURL,
-               "InitializationVector" .= _prdInitializationVector]
+              (catMaybes
+                 [("KeyId" .=) <$> _prdKeyId,
+                  ("KeyMd5" .=) <$> _prdKeyMD5,
+                  ("Format" .=) <$> _prdFormat, ("Key" .=) <$> _prdKey,
+                  ("LicenseAcquisitionUrl" .=) <$>
+                    _prdLicenseAcquisitionURL,
+                  ("InitializationVector" .=) <$>
+                    _prdInitializationVector])
 
 -- | Use Only for Fragmented MP4 or MPEG-TS Outputs. If you specify a preset
 -- for which the value of Container is 'fmp4' (Fragmented MP4) or 'ts'
@@ -3299,15 +3337,16 @@
 instance ToJSON PresetWatermark where
         toJSON PresetWatermark'{..}
           = object
-              ["VerticalAlign" .= _pwVerticalAlign,
-               "SizingPolicy" .= _pwSizingPolicy,
-               "MaxHeight" .= _pwMaxHeight,
-               "HorizontalOffset" .= _pwHorizontalOffset,
-               "Opacity" .= _pwOpacity,
-               "VerticalOffset" .= _pwVerticalOffset,
-               "MaxWidth" .= _pwMaxWidth, "Id" .= _pwId,
-               "HorizontalAlign" .= _pwHorizontalAlign,
-               "Target" .= _pwTarget]
+              (catMaybes
+                 [("VerticalAlign" .=) <$> _pwVerticalAlign,
+                  ("SizingPolicy" .=) <$> _pwSizingPolicy,
+                  ("MaxHeight" .=) <$> _pwMaxHeight,
+                  ("HorizontalOffset" .=) <$> _pwHorizontalOffset,
+                  ("Opacity" .=) <$> _pwOpacity,
+                  ("VerticalOffset" .=) <$> _pwVerticalOffset,
+                  ("MaxWidth" .=) <$> _pwMaxWidth, ("Id" .=) <$> _pwId,
+                  ("HorizontalAlign" .=) <$> _pwHorizontalAlign,
+                  ("Target" .=) <$> _pwTarget])
 
 -- | Thumbnails for videos.
 --
@@ -3462,12 +3501,15 @@
 instance ToJSON Thumbnails where
         toJSON Thumbnails'{..}
           = object
-              ["SizingPolicy" .= _tSizingPolicy,
-               "Format" .= _tFormat, "MaxHeight" .= _tMaxHeight,
-               "Resolution" .= _tResolution,
-               "PaddingPolicy" .= _tPaddingPolicy,
-               "AspectRatio" .= _tAspectRatio,
-               "Interval" .= _tInterval, "MaxWidth" .= _tMaxWidth]
+              (catMaybes
+                 [("SizingPolicy" .=) <$> _tSizingPolicy,
+                  ("Format" .=) <$> _tFormat,
+                  ("MaxHeight" .=) <$> _tMaxHeight,
+                  ("Resolution" .=) <$> _tResolution,
+                  ("PaddingPolicy" .=) <$> _tPaddingPolicy,
+                  ("AspectRatio" .=) <$> _tAspectRatio,
+                  ("Interval" .=) <$> _tInterval,
+                  ("MaxWidth" .=) <$> _tMaxWidth])
 
 -- | Settings that determine when a clip begins and how long it lasts.
 --
@@ -3520,8 +3562,9 @@
 instance ToJSON TimeSpan where
         toJSON TimeSpan'{..}
           = object
-              ["StartTime" .= _tsStartTime,
-               "Duration" .= _tsDuration]
+              (catMaybes
+                 [("StartTime" .=) <$> _tsStartTime,
+                  ("Duration" .=) <$> _tsDuration])
 
 -- | Details about the timing of a job.
 --
@@ -4065,19 +4108,22 @@
 instance ToJSON VideoParameters where
         toJSON VideoParameters'{..}
           = object
-              ["KeyframesMaxDist" .= _vpKeyframesMaxDist,
-               "FrameRate" .= _vpFrameRate,
-               "SizingPolicy" .= _vpSizingPolicy,
-               "MaxFrameRate" .= _vpMaxFrameRate,
-               "MaxHeight" .= _vpMaxHeight,
-               "DisplayAspectRatio" .= _vpDisplayAspectRatio,
-               "Watermarks" .= _vpWatermarks, "Codec" .= _vpCodec,
-               "Resolution" .= _vpResolution,
-               "PaddingPolicy" .= _vpPaddingPolicy,
-               "AspectRatio" .= _vpAspectRatio,
-               "MaxWidth" .= _vpMaxWidth, "BitRate" .= _vpBitRate,
-               "FixedGOP" .= _vpFixedGOP,
-               "CodecOptions" .= _vpCodecOptions]
+              (catMaybes
+                 [("KeyframesMaxDist" .=) <$> _vpKeyframesMaxDist,
+                  ("FrameRate" .=) <$> _vpFrameRate,
+                  ("SizingPolicy" .=) <$> _vpSizingPolicy,
+                  ("MaxFrameRate" .=) <$> _vpMaxFrameRate,
+                  ("MaxHeight" .=) <$> _vpMaxHeight,
+                  ("DisplayAspectRatio" .=) <$> _vpDisplayAspectRatio,
+                  ("Watermarks" .=) <$> _vpWatermarks,
+                  ("Codec" .=) <$> _vpCodec,
+                  ("Resolution" .=) <$> _vpResolution,
+                  ("PaddingPolicy" .=) <$> _vpPaddingPolicy,
+                  ("AspectRatio" .=) <$> _vpAspectRatio,
+                  ("MaxWidth" .=) <$> _vpMaxWidth,
+                  ("BitRate" .=) <$> _vpBitRate,
+                  ("FixedGOP" .=) <$> _vpFixedGOP,
+                  ("CodecOptions" .=) <$> _vpCodecOptions])
 
 -- | Elastic Transcoder returns a warning if the resources used by your
 -- pipeline are not in the same region as the pipeline.
diff --git a/gen/Network/AWS/ElasticTranscoder/UpdatePipeline.hs b/gen/Network/AWS/ElasticTranscoder/UpdatePipeline.hs
--- a/gen/Network/AWS/ElasticTranscoder/UpdatePipeline.hs
+++ b/gen/Network/AWS/ElasticTranscoder/UpdatePipeline.hs
@@ -255,9 +255,8 @@
 upId = lens _upId (\ s a -> s{_upId = a});
 
 instance AWSRequest UpdatePipeline where
-        type Sv UpdatePipeline = ElasticTranscoder
         type Rs UpdatePipeline = UpdatePipelineResponse
-        request = putJSON
+        request = putJSON elasticTranscoder
         response
           = receiveJSON
               (\ s h x ->
@@ -271,12 +270,13 @@
 instance ToJSON UpdatePipeline where
         toJSON UpdatePipeline'{..}
           = object
-              ["InputBucket" .= _upInputBucket,
-               "ContentConfig" .= _upContentConfig,
-               "Role" .= _upRole, "Name" .= _upName,
-               "AwsKmsKeyArn" .= _upAWSKMSKeyARN,
-               "ThumbnailConfig" .= _upThumbnailConfig,
-               "Notifications" .= _upNotifications]
+              (catMaybes
+                 [("InputBucket" .=) <$> _upInputBucket,
+                  ("ContentConfig" .=) <$> _upContentConfig,
+                  ("Role" .=) <$> _upRole, ("Name" .=) <$> _upName,
+                  ("AwsKmsKeyArn" .=) <$> _upAWSKMSKeyARN,
+                  ("ThumbnailConfig" .=) <$> _upThumbnailConfig,
+                  ("Notifications" .=) <$> _upNotifications])
 
 instance ToPath UpdatePipeline where
         toPath UpdatePipeline'{..}
diff --git a/gen/Network/AWS/ElasticTranscoder/UpdatePipelineNotifications.hs b/gen/Network/AWS/ElasticTranscoder/UpdatePipelineNotifications.hs
--- a/gen/Network/AWS/ElasticTranscoder/UpdatePipelineNotifications.hs
+++ b/gen/Network/AWS/ElasticTranscoder/UpdatePipelineNotifications.hs
@@ -102,11 +102,9 @@
 upnNotifications = lens _upnNotifications (\ s a -> s{_upnNotifications = a});
 
 instance AWSRequest UpdatePipelineNotifications where
-        type Sv UpdatePipelineNotifications =
-             ElasticTranscoder
         type Rs UpdatePipelineNotifications =
              UpdatePipelineNotificationsResponse
-        request = postJSON
+        request = postJSON elasticTranscoder
         response
           = receiveJSON
               (\ s h x ->
@@ -118,7 +116,9 @@
 
 instance ToJSON UpdatePipelineNotifications where
         toJSON UpdatePipelineNotifications'{..}
-          = object ["Notifications" .= _upnNotifications]
+          = object
+              (catMaybes
+                 [Just ("Notifications" .= _upnNotifications)])
 
 instance ToPath UpdatePipelineNotifications where
         toPath UpdatePipelineNotifications'{..}
diff --git a/gen/Network/AWS/ElasticTranscoder/UpdatePipelineStatus.hs b/gen/Network/AWS/ElasticTranscoder/UpdatePipelineStatus.hs
--- a/gen/Network/AWS/ElasticTranscoder/UpdatePipelineStatus.hs
+++ b/gen/Network/AWS/ElasticTranscoder/UpdatePipelineStatus.hs
@@ -88,10 +88,9 @@
 upsStatus = lens _upsStatus (\ s a -> s{_upsStatus = a});
 
 instance AWSRequest UpdatePipelineStatus where
-        type Sv UpdatePipelineStatus = ElasticTranscoder
         type Rs UpdatePipelineStatus =
              UpdatePipelineStatusResponse
-        request = postJSON
+        request = postJSON elasticTranscoder
         response
           = receiveJSON
               (\ s h x ->
@@ -103,7 +102,7 @@
 
 instance ToJSON UpdatePipelineStatus where
         toJSON UpdatePipelineStatus'{..}
-          = object ["Status" .= _upsStatus]
+          = object (catMaybes [Just ("Status" .= _upsStatus)])
 
 instance ToPath UpdatePipelineStatus where
         toPath UpdatePipelineStatus'{..}
diff --git a/test/Test/AWS/Gen/ElasticTranscoder.hs b/test/Test/AWS/Gen/ElasticTranscoder.hs
--- a/test/Test/AWS/Gen/ElasticTranscoder.hs
+++ b/test/Test/AWS/Gen/ElasticTranscoder.hs
@@ -229,100 +229,117 @@
 testDeletePresetResponse = res
     "DeletePresetResponse"
     "fixture/DeletePresetResponse"
+    elasticTranscoder
     (Proxy :: Proxy DeletePreset)
 
 testListJobsByPipelineResponse :: ListJobsByPipelineResponse -> TestTree
 testListJobsByPipelineResponse = res
     "ListJobsByPipelineResponse"
     "fixture/ListJobsByPipelineResponse"
+    elasticTranscoder
     (Proxy :: Proxy ListJobsByPipeline)
 
 testUpdatePipelineStatusResponse :: UpdatePipelineStatusResponse -> TestTree
 testUpdatePipelineStatusResponse = res
     "UpdatePipelineStatusResponse"
     "fixture/UpdatePipelineStatusResponse"
+    elasticTranscoder
     (Proxy :: Proxy UpdatePipelineStatus)
 
 testTestRoleResponse :: TestRoleResponse -> TestTree
 testTestRoleResponse = res
     "TestRoleResponse"
     "fixture/TestRoleResponse"
+    elasticTranscoder
     (Proxy :: Proxy TestRole)
 
 testUpdatePipelineResponse :: UpdatePipelineResponse -> TestTree
 testUpdatePipelineResponse = res
     "UpdatePipelineResponse"
     "fixture/UpdatePipelineResponse"
+    elasticTranscoder
     (Proxy :: Proxy UpdatePipeline)
 
 testDeletePipelineResponse :: DeletePipelineResponse -> TestTree
 testDeletePipelineResponse = res
     "DeletePipelineResponse"
     "fixture/DeletePipelineResponse"
+    elasticTranscoder
     (Proxy :: Proxy DeletePipeline)
 
 testCreateJobResponse :: CreateJobResponse -> TestTree
 testCreateJobResponse = res
     "CreateJobResponse"
     "fixture/CreateJobResponse"
+    elasticTranscoder
     (Proxy :: Proxy CreateJob)
 
 testListPipelinesResponse :: ListPipelinesResponse -> TestTree
 testListPipelinesResponse = res
     "ListPipelinesResponse"
     "fixture/ListPipelinesResponse"
+    elasticTranscoder
     (Proxy :: Proxy ListPipelines)
 
 testCreatePresetResponse :: CreatePresetResponse -> TestTree
 testCreatePresetResponse = res
     "CreatePresetResponse"
     "fixture/CreatePresetResponse"
+    elasticTranscoder
     (Proxy :: Proxy CreatePreset)
 
 testListPresetsResponse :: ListPresetsResponse -> TestTree
 testListPresetsResponse = res
     "ListPresetsResponse"
     "fixture/ListPresetsResponse"
+    elasticTranscoder
     (Proxy :: Proxy ListPresets)
 
 testReadPresetResponse :: ReadPresetResponse -> TestTree
 testReadPresetResponse = res
     "ReadPresetResponse"
     "fixture/ReadPresetResponse"
+    elasticTranscoder
     (Proxy :: Proxy ReadPreset)
 
 testUpdatePipelineNotificationsResponse :: UpdatePipelineNotificationsResponse -> TestTree
 testUpdatePipelineNotificationsResponse = res
     "UpdatePipelineNotificationsResponse"
     "fixture/UpdatePipelineNotificationsResponse"
+    elasticTranscoder
     (Proxy :: Proxy UpdatePipelineNotifications)
 
 testReadJobResponse :: ReadJobResponse -> TestTree
 testReadJobResponse = res
     "ReadJobResponse"
     "fixture/ReadJobResponse"
+    elasticTranscoder
     (Proxy :: Proxy ReadJob)
 
 testReadPipelineResponse :: ReadPipelineResponse -> TestTree
 testReadPipelineResponse = res
     "ReadPipelineResponse"
     "fixture/ReadPipelineResponse"
+    elasticTranscoder
     (Proxy :: Proxy ReadPipeline)
 
 testCreatePipelineResponse :: CreatePipelineResponse -> TestTree
 testCreatePipelineResponse = res
     "CreatePipelineResponse"
     "fixture/CreatePipelineResponse"
+    elasticTranscoder
     (Proxy :: Proxy CreatePipeline)
 
 testListJobsByStatusResponse :: ListJobsByStatusResponse -> TestTree
 testListJobsByStatusResponse = res
     "ListJobsByStatusResponse"
     "fixture/ListJobsByStatusResponse"
+    elasticTranscoder
     (Proxy :: Proxy ListJobsByStatus)
 
 testCancelJobResponse :: CancelJobResponse -> TestTree
 testCancelJobResponse = res
     "CancelJobResponse"
     "fixture/CancelJobResponse"
+    elasticTranscoder
     (Proxy :: Proxy CancelJob)
