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-cloudwatch-logs.cabal b/amazonka-cloudwatch-logs.cabal
--- a/amazonka-cloudwatch-logs.cabal
+++ b/amazonka-cloudwatch-logs.cabal
@@ -1,5 +1,5 @@
 name:                  amazonka-cloudwatch-logs
-version:               1.1.0
+version:               1.2.0
 synopsis:              Amazon CloudWatch Logs SDK.
 homepage:              https://github.com/brendanhay/amazonka
 license:               OtherLicense
@@ -111,7 +111,7 @@
         , Network.AWS.CloudWatchLogs.Types.Sum
 
     build-depends:
-          amazonka-core == 1.1.0.*
+          amazonka-core == 1.2.0.*
         , base          >= 4.7     && < 5
 
 test-suite amazonka-cloudwatch-logs-test
@@ -130,9 +130,9 @@
         , Test.AWS.CloudWatchLogs.Internal
 
     build-depends:
-          amazonka-core == 1.1.0
-        , amazonka-test == 1.1.0
-        , amazonka-cloudwatch-logs == 1.1.0
+          amazonka-core == 1.2.0
+        , amazonka-test == 1.2.0
+        , amazonka-cloudwatch-logs == 1.2.0
         , base
         , bytestring
         , lens
diff --git a/gen/Network/AWS/CloudWatchLogs.hs b/gen/Network/AWS/CloudWatchLogs.hs
--- a/gen/Network/AWS/CloudWatchLogs.hs
+++ b/gen/Network/AWS/CloudWatchLogs.hs
@@ -56,8 +56,8 @@
 -- /See:/ <http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/Welcome.html AWS API Reference>
 module Network.AWS.CloudWatchLogs
     (
-    -- * Service
-      CloudWatchLogs
+    -- * Service Configuration
+      cloudWatchLogs
 
     -- * Errors
     -- $errors
diff --git a/gen/Network/AWS/CloudWatchLogs/CreateLogGroup.hs b/gen/Network/AWS/CloudWatchLogs/CreateLogGroup.hs
--- a/gen/Network/AWS/CloudWatchLogs/CreateLogGroup.hs
+++ b/gen/Network/AWS/CloudWatchLogs/CreateLogGroup.hs
@@ -71,9 +71,8 @@
 clgLogGroupName = lens _clgLogGroupName (\ s a -> s{_clgLogGroupName = a});
 
 instance AWSRequest CreateLogGroup where
-        type Sv CreateLogGroup = CloudWatchLogs
         type Rs CreateLogGroup = CreateLogGroupResponse
-        request = postJSON
+        request = postJSON cloudWatchLogs
         response = receiveNull CreateLogGroupResponse'
 
 instance ToHeaders CreateLogGroup where
@@ -87,7 +86,9 @@
 
 instance ToJSON CreateLogGroup where
         toJSON CreateLogGroup'{..}
-          = object ["logGroupName" .= _clgLogGroupName]
+          = object
+              (catMaybes
+                 [Just ("logGroupName" .= _clgLogGroupName)])
 
 instance ToPath CreateLogGroup where
         toPath = const "/"
diff --git a/gen/Network/AWS/CloudWatchLogs/CreateLogStream.hs b/gen/Network/AWS/CloudWatchLogs/CreateLogStream.hs
--- a/gen/Network/AWS/CloudWatchLogs/CreateLogStream.hs
+++ b/gen/Network/AWS/CloudWatchLogs/CreateLogStream.hs
@@ -80,9 +80,8 @@
 clsLogStreamName = lens _clsLogStreamName (\ s a -> s{_clsLogStreamName = a});
 
 instance AWSRequest CreateLogStream where
-        type Sv CreateLogStream = CloudWatchLogs
         type Rs CreateLogStream = CreateLogStreamResponse
-        request = postJSON
+        request = postJSON cloudWatchLogs
         response = receiveNull CreateLogStreamResponse'
 
 instance ToHeaders CreateLogStream where
@@ -97,8 +96,9 @@
 instance ToJSON CreateLogStream where
         toJSON CreateLogStream'{..}
           = object
-              ["logGroupName" .= _clsLogGroupName,
-               "logStreamName" .= _clsLogStreamName]
+              (catMaybes
+                 [Just ("logGroupName" .= _clsLogGroupName),
+                  Just ("logStreamName" .= _clsLogStreamName)])
 
 instance ToPath CreateLogStream where
         toPath = const "/"
diff --git a/gen/Network/AWS/CloudWatchLogs/DeleteDestination.hs b/gen/Network/AWS/CloudWatchLogs/DeleteDestination.hs
--- a/gen/Network/AWS/CloudWatchLogs/DeleteDestination.hs
+++ b/gen/Network/AWS/CloudWatchLogs/DeleteDestination.hs
@@ -65,9 +65,8 @@
 ddDestinationName = lens _ddDestinationName (\ s a -> s{_ddDestinationName = a});
 
 instance AWSRequest DeleteDestination where
-        type Sv DeleteDestination = CloudWatchLogs
         type Rs DeleteDestination = DeleteDestinationResponse
-        request = postJSON
+        request = postJSON cloudWatchLogs
         response = receiveNull DeleteDestinationResponse'
 
 instance ToHeaders DeleteDestination where
@@ -81,7 +80,9 @@
 
 instance ToJSON DeleteDestination where
         toJSON DeleteDestination'{..}
-          = object ["destinationName" .= _ddDestinationName]
+          = object
+              (catMaybes
+                 [Just ("destinationName" .= _ddDestinationName)])
 
 instance ToPath DeleteDestination where
         toPath = const "/"
diff --git a/gen/Network/AWS/CloudWatchLogs/DeleteLogGroup.hs b/gen/Network/AWS/CloudWatchLogs/DeleteLogGroup.hs
--- a/gen/Network/AWS/CloudWatchLogs/DeleteLogGroup.hs
+++ b/gen/Network/AWS/CloudWatchLogs/DeleteLogGroup.hs
@@ -64,9 +64,8 @@
 dlgLogGroupName = lens _dlgLogGroupName (\ s a -> s{_dlgLogGroupName = a});
 
 instance AWSRequest DeleteLogGroup where
-        type Sv DeleteLogGroup = CloudWatchLogs
         type Rs DeleteLogGroup = DeleteLogGroupResponse
-        request = postJSON
+        request = postJSON cloudWatchLogs
         response = receiveNull DeleteLogGroupResponse'
 
 instance ToHeaders DeleteLogGroup where
@@ -80,7 +79,9 @@
 
 instance ToJSON DeleteLogGroup where
         toJSON DeleteLogGroup'{..}
-          = object ["logGroupName" .= _dlgLogGroupName]
+          = object
+              (catMaybes
+                 [Just ("logGroupName" .= _dlgLogGroupName)])
 
 instance ToPath DeleteLogGroup where
         toPath = const "/"
diff --git a/gen/Network/AWS/CloudWatchLogs/DeleteLogStream.hs b/gen/Network/AWS/CloudWatchLogs/DeleteLogStream.hs
--- a/gen/Network/AWS/CloudWatchLogs/DeleteLogStream.hs
+++ b/gen/Network/AWS/CloudWatchLogs/DeleteLogStream.hs
@@ -74,9 +74,8 @@
 dlsLogStreamName = lens _dlsLogStreamName (\ s a -> s{_dlsLogStreamName = a});
 
 instance AWSRequest DeleteLogStream where
-        type Sv DeleteLogStream = CloudWatchLogs
         type Rs DeleteLogStream = DeleteLogStreamResponse
-        request = postJSON
+        request = postJSON cloudWatchLogs
         response = receiveNull DeleteLogStreamResponse'
 
 instance ToHeaders DeleteLogStream where
@@ -91,8 +90,9 @@
 instance ToJSON DeleteLogStream where
         toJSON DeleteLogStream'{..}
           = object
-              ["logGroupName" .= _dlsLogGroupName,
-               "logStreamName" .= _dlsLogStreamName]
+              (catMaybes
+                 [Just ("logGroupName" .= _dlsLogGroupName),
+                  Just ("logStreamName" .= _dlsLogStreamName)])
 
 instance ToPath DeleteLogStream where
         toPath = const "/"
diff --git a/gen/Network/AWS/CloudWatchLogs/DeleteMetricFilter.hs b/gen/Network/AWS/CloudWatchLogs/DeleteMetricFilter.hs
--- a/gen/Network/AWS/CloudWatchLogs/DeleteMetricFilter.hs
+++ b/gen/Network/AWS/CloudWatchLogs/DeleteMetricFilter.hs
@@ -74,10 +74,9 @@
 delFilterName = lens _delFilterName (\ s a -> s{_delFilterName = a});
 
 instance AWSRequest DeleteMetricFilter where
-        type Sv DeleteMetricFilter = CloudWatchLogs
         type Rs DeleteMetricFilter =
              DeleteMetricFilterResponse
-        request = postJSON
+        request = postJSON cloudWatchLogs
         response = receiveNull DeleteMetricFilterResponse'
 
 instance ToHeaders DeleteMetricFilter where
@@ -92,8 +91,9 @@
 instance ToJSON DeleteMetricFilter where
         toJSON DeleteMetricFilter'{..}
           = object
-              ["logGroupName" .= _delLogGroupName,
-               "filterName" .= _delFilterName]
+              (catMaybes
+                 [Just ("logGroupName" .= _delLogGroupName),
+                  Just ("filterName" .= _delFilterName)])
 
 instance ToPath DeleteMetricFilter where
         toPath = const "/"
diff --git a/gen/Network/AWS/CloudWatchLogs/DeleteRetentionPolicy.hs b/gen/Network/AWS/CloudWatchLogs/DeleteRetentionPolicy.hs
--- a/gen/Network/AWS/CloudWatchLogs/DeleteRetentionPolicy.hs
+++ b/gen/Network/AWS/CloudWatchLogs/DeleteRetentionPolicy.hs
@@ -66,10 +66,9 @@
 drpLogGroupName = lens _drpLogGroupName (\ s a -> s{_drpLogGroupName = a});
 
 instance AWSRequest DeleteRetentionPolicy where
-        type Sv DeleteRetentionPolicy = CloudWatchLogs
         type Rs DeleteRetentionPolicy =
              DeleteRetentionPolicyResponse
-        request = postJSON
+        request = postJSON cloudWatchLogs
         response = receiveNull DeleteRetentionPolicyResponse'
 
 instance ToHeaders DeleteRetentionPolicy where
@@ -84,7 +83,9 @@
 
 instance ToJSON DeleteRetentionPolicy where
         toJSON DeleteRetentionPolicy'{..}
-          = object ["logGroupName" .= _drpLogGroupName]
+          = object
+              (catMaybes
+                 [Just ("logGroupName" .= _drpLogGroupName)])
 
 instance ToPath DeleteRetentionPolicy where
         toPath = const "/"
diff --git a/gen/Network/AWS/CloudWatchLogs/DeleteSubscriptionFilter.hs b/gen/Network/AWS/CloudWatchLogs/DeleteSubscriptionFilter.hs
--- a/gen/Network/AWS/CloudWatchLogs/DeleteSubscriptionFilter.hs
+++ b/gen/Network/AWS/CloudWatchLogs/DeleteSubscriptionFilter.hs
@@ -74,10 +74,9 @@
 dFilterName = lens _dFilterName (\ s a -> s{_dFilterName = a});
 
 instance AWSRequest DeleteSubscriptionFilter where
-        type Sv DeleteSubscriptionFilter = CloudWatchLogs
         type Rs DeleteSubscriptionFilter =
              DeleteSubscriptionFilterResponse
-        request = postJSON
+        request = postJSON cloudWatchLogs
         response
           = receiveNull DeleteSubscriptionFilterResponse'
 
@@ -94,8 +93,9 @@
 instance ToJSON DeleteSubscriptionFilter where
         toJSON DeleteSubscriptionFilter'{..}
           = object
-              ["logGroupName" .= _dLogGroupName,
-               "filterName" .= _dFilterName]
+              (catMaybes
+                 [Just ("logGroupName" .= _dLogGroupName),
+                  Just ("filterName" .= _dFilterName)])
 
 instance ToPath DeleteSubscriptionFilter where
         toPath = const "/"
diff --git a/gen/Network/AWS/CloudWatchLogs/DescribeDestinations.hs b/gen/Network/AWS/CloudWatchLogs/DescribeDestinations.hs
--- a/gen/Network/AWS/CloudWatchLogs/DescribeDestinations.hs
+++ b/gen/Network/AWS/CloudWatchLogs/DescribeDestinations.hs
@@ -94,10 +94,9 @@
 ddDestinationNamePrefix = lens _ddDestinationNamePrefix (\ s a -> s{_ddDestinationNamePrefix = a});
 
 instance AWSRequest DescribeDestinations where
-        type Sv DescribeDestinations = CloudWatchLogs
         type Rs DescribeDestinations =
              DescribeDestinationsResponse
-        request = postJSON
+        request = postJSON cloudWatchLogs
         response
           = receiveJSON
               (\ s h x ->
@@ -118,8 +117,11 @@
 instance ToJSON DescribeDestinations where
         toJSON DescribeDestinations'{..}
           = object
-              ["nextToken" .= _ddNextToken, "limit" .= _ddLimit,
-               "DestinationNamePrefix" .= _ddDestinationNamePrefix]
+              (catMaybes
+                 [("nextToken" .=) <$> _ddNextToken,
+                  ("limit" .=) <$> _ddLimit,
+                  ("DestinationNamePrefix" .=) <$>
+                    _ddDestinationNamePrefix])
 
 instance ToPath DescribeDestinations where
         toPath = const "/"
diff --git a/gen/Network/AWS/CloudWatchLogs/DescribeLogGroups.hs b/gen/Network/AWS/CloudWatchLogs/DescribeLogGroups.hs
--- a/gen/Network/AWS/CloudWatchLogs/DescribeLogGroups.hs
+++ b/gen/Network/AWS/CloudWatchLogs/DescribeLogGroups.hs
@@ -106,9 +106,8 @@
             Just $ rq & dlgNextToken .~ rs ^. dlgrsNextToken
 
 instance AWSRequest DescribeLogGroups where
-        type Sv DescribeLogGroups = CloudWatchLogs
         type Rs DescribeLogGroups = DescribeLogGroupsResponse
-        request = postJSON
+        request = postJSON cloudWatchLogs
         response
           = receiveJSON
               (\ s h x ->
@@ -129,9 +128,10 @@
 instance ToJSON DescribeLogGroups where
         toJSON DescribeLogGroups'{..}
           = object
-              ["nextToken" .= _dlgNextToken,
-               "logGroupNamePrefix" .= _dlgLogGroupNamePrefix,
-               "limit" .= _dlgLimit]
+              (catMaybes
+                 [("nextToken" .=) <$> _dlgNextToken,
+                  ("logGroupNamePrefix" .=) <$> _dlgLogGroupNamePrefix,
+                  ("limit" .=) <$> _dlgLimit])
 
 instance ToPath DescribeLogGroups where
         toPath = const "/"
diff --git a/gen/Network/AWS/CloudWatchLogs/DescribeLogStreams.hs b/gen/Network/AWS/CloudWatchLogs/DescribeLogStreams.hs
--- a/gen/Network/AWS/CloudWatchLogs/DescribeLogStreams.hs
+++ b/gen/Network/AWS/CloudWatchLogs/DescribeLogStreams.hs
@@ -141,10 +141,9 @@
             Just $ rq & dlssNextToken .~ rs ^. dlsrsNextToken
 
 instance AWSRequest DescribeLogStreams where
-        type Sv DescribeLogStreams = CloudWatchLogs
         type Rs DescribeLogStreams =
              DescribeLogStreamsResponse
-        request = postJSON
+        request = postJSON cloudWatchLogs
         response
           = receiveJSON
               (\ s h x ->
@@ -165,12 +164,14 @@
 instance ToJSON DescribeLogStreams where
         toJSON DescribeLogStreams'{..}
           = object
-              ["orderBy" .= _dlssOrderBy,
-               "descending" .= _dlssDescending,
-               "nextToken" .= _dlssNextToken,
-               "logStreamNamePrefix" .= _dlssLogStreamNamePrefix,
-               "limit" .= _dlssLimit,
-               "logGroupName" .= _dlssLogGroupName]
+              (catMaybes
+                 [("orderBy" .=) <$> _dlssOrderBy,
+                  ("descending" .=) <$> _dlssDescending,
+                  ("nextToken" .=) <$> _dlssNextToken,
+                  ("logStreamNamePrefix" .=) <$>
+                    _dlssLogStreamNamePrefix,
+                  ("limit" .=) <$> _dlssLimit,
+                  Just ("logGroupName" .= _dlssLogGroupName)])
 
 instance ToPath DescribeLogStreams where
         toPath = const "/"
diff --git a/gen/Network/AWS/CloudWatchLogs/DescribeMetricFilters.hs b/gen/Network/AWS/CloudWatchLogs/DescribeMetricFilters.hs
--- a/gen/Network/AWS/CloudWatchLogs/DescribeMetricFilters.hs
+++ b/gen/Network/AWS/CloudWatchLogs/DescribeMetricFilters.hs
@@ -116,10 +116,9 @@
             Just $ rq & dmfNextToken .~ rs ^. dmfrsNextToken
 
 instance AWSRequest DescribeMetricFilters where
-        type Sv DescribeMetricFilters = CloudWatchLogs
         type Rs DescribeMetricFilters =
              DescribeMetricFiltersResponse
-        request = postJSON
+        request = postJSON cloudWatchLogs
         response
           = receiveJSON
               (\ s h x ->
@@ -141,9 +140,11 @@
 instance ToJSON DescribeMetricFilters where
         toJSON DescribeMetricFilters'{..}
           = object
-              ["filterNamePrefix" .= _dmfFilterNamePrefix,
-               "nextToken" .= _dmfNextToken, "limit" .= _dmfLimit,
-               "logGroupName" .= _dmfLogGroupName]
+              (catMaybes
+                 [("filterNamePrefix" .=) <$> _dmfFilterNamePrefix,
+                  ("nextToken" .=) <$> _dmfNextToken,
+                  ("limit" .=) <$> _dmfLimit,
+                  Just ("logGroupName" .= _dmfLogGroupName)])
 
 instance ToPath DescribeMetricFilters where
         toPath = const "/"
diff --git a/gen/Network/AWS/CloudWatchLogs/DescribeSubscriptionFilters.hs b/gen/Network/AWS/CloudWatchLogs/DescribeSubscriptionFilters.hs
--- a/gen/Network/AWS/CloudWatchLogs/DescribeSubscriptionFilters.hs
+++ b/gen/Network/AWS/CloudWatchLogs/DescribeSubscriptionFilters.hs
@@ -113,10 +113,9 @@
             Just $ rq & dsfNextToken .~ rs ^. dsfrsNextToken
 
 instance AWSRequest DescribeSubscriptionFilters where
-        type Sv DescribeSubscriptionFilters = CloudWatchLogs
         type Rs DescribeSubscriptionFilters =
              DescribeSubscriptionFiltersResponse
-        request = postJSON
+        request = postJSON cloudWatchLogs
         response
           = receiveJSON
               (\ s h x ->
@@ -138,9 +137,11 @@
 instance ToJSON DescribeSubscriptionFilters where
         toJSON DescribeSubscriptionFilters'{..}
           = object
-              ["filterNamePrefix" .= _dsfFilterNamePrefix,
-               "nextToken" .= _dsfNextToken, "limit" .= _dsfLimit,
-               "logGroupName" .= _dsfLogGroupName]
+              (catMaybes
+                 [("filterNamePrefix" .=) <$> _dsfFilterNamePrefix,
+                  ("nextToken" .=) <$> _dsfNextToken,
+                  ("limit" .=) <$> _dsfLimit,
+                  Just ("logGroupName" .= _dsfLogGroupName)])
 
 instance ToPath DescribeSubscriptionFilters where
         toPath = const "/"
diff --git a/gen/Network/AWS/CloudWatchLogs/FilterLogEvents.hs b/gen/Network/AWS/CloudWatchLogs/FilterLogEvents.hs
--- a/gen/Network/AWS/CloudWatchLogs/FilterLogEvents.hs
+++ b/gen/Network/AWS/CloudWatchLogs/FilterLogEvents.hs
@@ -167,9 +167,8 @@
             Just $ rq & fleNextToken .~ rs ^. flersNextToken
 
 instance AWSRequest FilterLogEvents where
-        type Sv FilterLogEvents = CloudWatchLogs
         type Rs FilterLogEvents = FilterLogEventsResponse
-        request = postJSON
+        request = postJSON cloudWatchLogs
         response
           = receiveJSON
               (\ s h x ->
@@ -191,13 +190,15 @@
 instance ToJSON FilterLogEvents where
         toJSON FilterLogEvents'{..}
           = object
-              ["startTime" .= _fleStartTime,
-               "logStreamNames" .= _fleLogStreamNames,
-               "nextToken" .= _fleNextToken,
-               "endTime" .= _fleEndTime, "limit" .= _fleLimit,
-               "filterPattern" .= _fleFilterPattern,
-               "interleaved" .= _fleInterleaved,
-               "logGroupName" .= _fleLogGroupName]
+              (catMaybes
+                 [("startTime" .=) <$> _fleStartTime,
+                  ("logStreamNames" .=) <$> _fleLogStreamNames,
+                  ("nextToken" .=) <$> _fleNextToken,
+                  ("endTime" .=) <$> _fleEndTime,
+                  ("limit" .=) <$> _fleLimit,
+                  ("filterPattern" .=) <$> _fleFilterPattern,
+                  ("interleaved" .=) <$> _fleInterleaved,
+                  Just ("logGroupName" .= _fleLogGroupName)])
 
 instance ToPath FilterLogEvents where
         toPath = const "/"
diff --git a/gen/Network/AWS/CloudWatchLogs/GetLogEvents.hs b/gen/Network/AWS/CloudWatchLogs/GetLogEvents.hs
--- a/gen/Network/AWS/CloudWatchLogs/GetLogEvents.hs
+++ b/gen/Network/AWS/CloudWatchLogs/GetLogEvents.hs
@@ -138,9 +138,8 @@
 gleLogStreamName = lens _gleLogStreamName (\ s a -> s{_gleLogStreamName = a});
 
 instance AWSRequest GetLogEvents where
-        type Sv GetLogEvents = CloudWatchLogs
         type Rs GetLogEvents = GetLogEventsResponse
-        request = postJSON
+        request = postJSON cloudWatchLogs
         response
           = receiveJSON
               (\ s h x ->
@@ -162,12 +161,14 @@
 instance ToJSON GetLogEvents where
         toJSON GetLogEvents'{..}
           = object
-              ["startTime" .= _gleStartTime,
-               "startFromHead" .= _gleStartFromHead,
-               "nextToken" .= _gleNextToken,
-               "endTime" .= _gleEndTime, "limit" .= _gleLimit,
-               "logGroupName" .= _gleLogGroupName,
-               "logStreamName" .= _gleLogStreamName]
+              (catMaybes
+                 [("startTime" .=) <$> _gleStartTime,
+                  ("startFromHead" .=) <$> _gleStartFromHead,
+                  ("nextToken" .=) <$> _gleNextToken,
+                  ("endTime" .=) <$> _gleEndTime,
+                  ("limit" .=) <$> _gleLimit,
+                  Just ("logGroupName" .= _gleLogGroupName),
+                  Just ("logStreamName" .= _gleLogStreamName)])
 
 instance ToPath GetLogEvents where
         toPath = const "/"
diff --git a/gen/Network/AWS/CloudWatchLogs/PutDestination.hs b/gen/Network/AWS/CloudWatchLogs/PutDestination.hs
--- a/gen/Network/AWS/CloudWatchLogs/PutDestination.hs
+++ b/gen/Network/AWS/CloudWatchLogs/PutDestination.hs
@@ -99,9 +99,8 @@
 pdRoleARN = lens _pdRoleARN (\ s a -> s{_pdRoleARN = a});
 
 instance AWSRequest PutDestination where
-        type Sv PutDestination = CloudWatchLogs
         type Rs PutDestination = PutDestinationResponse
-        request = postJSON
+        request = postJSON cloudWatchLogs
         response
           = receiveJSON
               (\ s h x ->
@@ -120,8 +119,10 @@
 instance ToJSON PutDestination where
         toJSON PutDestination'{..}
           = object
-              ["destinationName" .= _pdDestinationName,
-               "targetArn" .= _pdTargetARN, "roleArn" .= _pdRoleARN]
+              (catMaybes
+                 [Just ("destinationName" .= _pdDestinationName),
+                  Just ("targetArn" .= _pdTargetARN),
+                  Just ("roleArn" .= _pdRoleARN)])
 
 instance ToPath PutDestination where
         toPath = const "/"
diff --git a/gen/Network/AWS/CloudWatchLogs/PutDestinationPolicy.hs b/gen/Network/AWS/CloudWatchLogs/PutDestinationPolicy.hs
--- a/gen/Network/AWS/CloudWatchLogs/PutDestinationPolicy.hs
+++ b/gen/Network/AWS/CloudWatchLogs/PutDestinationPolicy.hs
@@ -78,10 +78,9 @@
 pdpAccessPolicy = lens _pdpAccessPolicy (\ s a -> s{_pdpAccessPolicy = a});
 
 instance AWSRequest PutDestinationPolicy where
-        type Sv PutDestinationPolicy = CloudWatchLogs
         type Rs PutDestinationPolicy =
              PutDestinationPolicyResponse
-        request = postJSON
+        request = postJSON cloudWatchLogs
         response = receiveNull PutDestinationPolicyResponse'
 
 instance ToHeaders PutDestinationPolicy where
@@ -96,8 +95,9 @@
 instance ToJSON PutDestinationPolicy where
         toJSON PutDestinationPolicy'{..}
           = object
-              ["destinationName" .= _pdpDestinationName,
-               "accessPolicy" .= _pdpAccessPolicy]
+              (catMaybes
+                 [Just ("destinationName" .= _pdpDestinationName),
+                  Just ("accessPolicy" .= _pdpAccessPolicy)])
 
 instance ToPath PutDestinationPolicy where
         toPath = const "/"
diff --git a/gen/Network/AWS/CloudWatchLogs/PutLogEvents.hs b/gen/Network/AWS/CloudWatchLogs/PutLogEvents.hs
--- a/gen/Network/AWS/CloudWatchLogs/PutLogEvents.hs
+++ b/gen/Network/AWS/CloudWatchLogs/PutLogEvents.hs
@@ -114,9 +114,8 @@
 pleLogEvents = lens _pleLogEvents (\ s a -> s{_pleLogEvents = a}) . _List1;
 
 instance AWSRequest PutLogEvents where
-        type Sv PutLogEvents = CloudWatchLogs
         type Rs PutLogEvents = PutLogEventsResponse
-        request = postJSON
+        request = postJSON cloudWatchLogs
         response
           = receiveJSON
               (\ s h x ->
@@ -137,10 +136,11 @@
 instance ToJSON PutLogEvents where
         toJSON PutLogEvents'{..}
           = object
-              ["sequenceToken" .= _pleSequenceToken,
-               "logGroupName" .= _pleLogGroupName,
-               "logStreamName" .= _pleLogStreamName,
-               "logEvents" .= _pleLogEvents]
+              (catMaybes
+                 [("sequenceToken" .=) <$> _pleSequenceToken,
+                  Just ("logGroupName" .= _pleLogGroupName),
+                  Just ("logStreamName" .= _pleLogStreamName),
+                  Just ("logEvents" .= _pleLogEvents)])
 
 instance ToPath PutLogEvents where
         toPath = const "/"
diff --git a/gen/Network/AWS/CloudWatchLogs/PutMetricFilter.hs b/gen/Network/AWS/CloudWatchLogs/PutMetricFilter.hs
--- a/gen/Network/AWS/CloudWatchLogs/PutMetricFilter.hs
+++ b/gen/Network/AWS/CloudWatchLogs/PutMetricFilter.hs
@@ -100,9 +100,8 @@
 pmfMetricTransformations = lens _pmfMetricTransformations (\ s a -> s{_pmfMetricTransformations = a}) . _List1;
 
 instance AWSRequest PutMetricFilter where
-        type Sv PutMetricFilter = CloudWatchLogs
         type Rs PutMetricFilter = PutMetricFilterResponse
-        request = postJSON
+        request = postJSON cloudWatchLogs
         response = receiveNull PutMetricFilterResponse'
 
 instance ToHeaders PutMetricFilter where
@@ -117,10 +116,13 @@
 instance ToJSON PutMetricFilter where
         toJSON PutMetricFilter'{..}
           = object
-              ["logGroupName" .= _pmfLogGroupName,
-               "filterName" .= _pmfFilterName,
-               "filterPattern" .= _pmfFilterPattern,
-               "metricTransformations" .= _pmfMetricTransformations]
+              (catMaybes
+                 [Just ("logGroupName" .= _pmfLogGroupName),
+                  Just ("filterName" .= _pmfFilterName),
+                  Just ("filterPattern" .= _pmfFilterPattern),
+                  Just
+                    ("metricTransformations" .=
+                       _pmfMetricTransformations)])
 
 instance ToPath PutMetricFilter where
         toPath = const "/"
diff --git a/gen/Network/AWS/CloudWatchLogs/PutRetentionPolicy.hs b/gen/Network/AWS/CloudWatchLogs/PutRetentionPolicy.hs
--- a/gen/Network/AWS/CloudWatchLogs/PutRetentionPolicy.hs
+++ b/gen/Network/AWS/CloudWatchLogs/PutRetentionPolicy.hs
@@ -75,10 +75,9 @@
 prpRetentionInDays = lens _prpRetentionInDays (\ s a -> s{_prpRetentionInDays = a});
 
 instance AWSRequest PutRetentionPolicy where
-        type Sv PutRetentionPolicy = CloudWatchLogs
         type Rs PutRetentionPolicy =
              PutRetentionPolicyResponse
-        request = postJSON
+        request = postJSON cloudWatchLogs
         response = receiveNull PutRetentionPolicyResponse'
 
 instance ToHeaders PutRetentionPolicy where
@@ -93,8 +92,9 @@
 instance ToJSON PutRetentionPolicy where
         toJSON PutRetentionPolicy'{..}
           = object
-              ["logGroupName" .= _prpLogGroupName,
-               "retentionInDays" .= _prpRetentionInDays]
+              (catMaybes
+                 [Just ("logGroupName" .= _prpLogGroupName),
+                  Just ("retentionInDays" .= _prpRetentionInDays)])
 
 instance ToPath PutRetentionPolicy where
         toPath = const "/"
diff --git a/gen/Network/AWS/CloudWatchLogs/PutSubscriptionFilter.hs b/gen/Network/AWS/CloudWatchLogs/PutSubscriptionFilter.hs
--- a/gen/Network/AWS/CloudWatchLogs/PutSubscriptionFilter.hs
+++ b/gen/Network/AWS/CloudWatchLogs/PutSubscriptionFilter.hs
@@ -124,10 +124,9 @@
 psfDestinationARN = lens _psfDestinationARN (\ s a -> s{_psfDestinationARN = a});
 
 instance AWSRequest PutSubscriptionFilter where
-        type Sv PutSubscriptionFilter = CloudWatchLogs
         type Rs PutSubscriptionFilter =
              PutSubscriptionFilterResponse
-        request = postJSON
+        request = postJSON cloudWatchLogs
         response = receiveNull PutSubscriptionFilterResponse'
 
 instance ToHeaders PutSubscriptionFilter where
@@ -143,11 +142,12 @@
 instance ToJSON PutSubscriptionFilter where
         toJSON PutSubscriptionFilter'{..}
           = object
-              ["roleArn" .= _psfRoleARN,
-               "logGroupName" .= _psfLogGroupName,
-               "filterName" .= _psfFilterName,
-               "filterPattern" .= _psfFilterPattern,
-               "destinationArn" .= _psfDestinationARN]
+              (catMaybes
+                 [("roleArn" .=) <$> _psfRoleARN,
+                  Just ("logGroupName" .= _psfLogGroupName),
+                  Just ("filterName" .= _psfFilterName),
+                  Just ("filterPattern" .= _psfFilterPattern),
+                  Just ("destinationArn" .= _psfDestinationARN)])
 
 instance ToPath PutSubscriptionFilter where
         toPath = const "/"
diff --git a/gen/Network/AWS/CloudWatchLogs/TestMetricFilter.hs b/gen/Network/AWS/CloudWatchLogs/TestMetricFilter.hs
--- a/gen/Network/AWS/CloudWatchLogs/TestMetricFilter.hs
+++ b/gen/Network/AWS/CloudWatchLogs/TestMetricFilter.hs
@@ -78,9 +78,8 @@
 tmfLogEventMessages = lens _tmfLogEventMessages (\ s a -> s{_tmfLogEventMessages = a}) . _List1;
 
 instance AWSRequest TestMetricFilter where
-        type Sv TestMetricFilter = CloudWatchLogs
         type Rs TestMetricFilter = TestMetricFilterResponse
-        request = postJSON
+        request = postJSON cloudWatchLogs
         response
           = receiveJSON
               (\ s h x ->
@@ -99,8 +98,9 @@
 instance ToJSON TestMetricFilter where
         toJSON TestMetricFilter'{..}
           = object
-              ["filterPattern" .= _tmfFilterPattern,
-               "logEventMessages" .= _tmfLogEventMessages]
+              (catMaybes
+                 [Just ("filterPattern" .= _tmfFilterPattern),
+                  Just ("logEventMessages" .= _tmfLogEventMessages)])
 
 instance ToPath TestMetricFilter where
         toPath = const "/"
diff --git a/gen/Network/AWS/CloudWatchLogs/Types.hs b/gen/Network/AWS/CloudWatchLogs/Types.hs
--- a/gen/Network/AWS/CloudWatchLogs/Types.hs
+++ b/gen/Network/AWS/CloudWatchLogs/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.CloudWatchLogs.Types
     (
-    -- * Service
-      CloudWatchLogs
+    -- * Service Configuration
+      cloudWatchLogs
 
     -- * Errors
     , _InvalidParameterException
@@ -134,39 +133,36 @@
 import           Network.AWS.Prelude
 import           Network.AWS.Sign.V4
 
--- | Version @2014-03-28@ of the Amazon CloudWatch Logs SDK.
-data CloudWatchLogs
-
-instance AWSService CloudWatchLogs where
-    type Sg CloudWatchLogs = V4
-    service = const svc
-      where
-        svc =
-            Service
-            { _svcAbbrev = "CloudWatchLogs"
-            , _svcPrefix = "logs"
-            , _svcVersion = "2014-03-28"
-            , _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 '2014-03-28' of the Amazon CloudWatch Logs SDK configuration.
+cloudWatchLogs :: Service
+cloudWatchLogs =
+    Service
+    { _svcAbbrev = "CloudWatchLogs"
+    , _svcSigner = v4
+    , _svcPrefix = "logs"
+    , _svcVersion = "2014-03-28"
+    , _svcEndpoint = defaultEndpoint cloudWatchLogs
+    , _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
 
 -- | Returned if a parameter of the request is incorrectly specified.
 _InvalidParameterException :: AsError a => Getting (First ServiceError) a ServiceError
diff --git a/gen/Network/AWS/CloudWatchLogs/Types/Product.hs b/gen/Network/AWS/CloudWatchLogs/Types/Product.hs
--- a/gen/Network/AWS/CloudWatchLogs/Types/Product.hs
+++ b/gen/Network/AWS/CloudWatchLogs/Types/Product.hs
@@ -2,7 +2,6 @@
 {-# LANGUAGE DeriveGeneric      #-}
 {-# LANGUAGE OverloadedStrings  #-}
 {-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
 
@@ -197,8 +196,9 @@
 instance ToJSON InputLogEvent where
         toJSON InputLogEvent'{..}
           = object
-              ["timestamp" .= _ileTimestamp,
-               "message" .= _ileMessage]
+              (catMaybes
+                 [Just ("timestamp" .= _ileTimestamp),
+                  Just ("message" .= _ileMessage)])
 
 -- | /See:/ 'logGroup' smart constructor.
 data LogGroup = LogGroup'
@@ -521,9 +521,10 @@
 instance ToJSON MetricTransformation where
         toJSON MetricTransformation'{..}
           = object
-              ["metricName" .= _mtMetricName,
-               "metricNamespace" .= _mtMetricNamespace,
-               "metricValue" .= _mtMetricValue]
+              (catMaybes
+                 [Just ("metricName" .= _mtMetricName),
+                  Just ("metricNamespace" .= _mtMetricNamespace),
+                  Just ("metricValue" .= _mtMetricValue)])
 
 -- | /See:/ 'outputLogEvent' smart constructor.
 data OutputLogEvent = OutputLogEvent'
diff --git a/test/Test/AWS/Gen/CloudWatchLogs.hs b/test/Test/AWS/Gen/CloudWatchLogs.hs
--- a/test/Test/AWS/Gen/CloudWatchLogs.hs
+++ b/test/Test/AWS/Gen/CloudWatchLogs.hs
@@ -284,130 +284,152 @@
 testDescribeDestinationsResponse = res
     "DescribeDestinationsResponse"
     "fixture/DescribeDestinationsResponse"
+    cloudWatchLogs
     (Proxy :: Proxy DescribeDestinations)
 
 testDeleteDestinationResponse :: DeleteDestinationResponse -> TestTree
 testDeleteDestinationResponse = res
     "DeleteDestinationResponse"
     "fixture/DeleteDestinationResponse"
+    cloudWatchLogs
     (Proxy :: Proxy DeleteDestination)
 
 testPutDestinationResponse :: PutDestinationResponse -> TestTree
 testPutDestinationResponse = res
     "PutDestinationResponse"
     "fixture/PutDestinationResponse"
+    cloudWatchLogs
     (Proxy :: Proxy PutDestination)
 
 testDescribeSubscriptionFiltersResponse :: DescribeSubscriptionFiltersResponse -> TestTree
 testDescribeSubscriptionFiltersResponse = res
     "DescribeSubscriptionFiltersResponse"
     "fixture/DescribeSubscriptionFiltersResponse"
+    cloudWatchLogs
     (Proxy :: Proxy DescribeSubscriptionFilters)
 
 testGetLogEventsResponse :: GetLogEventsResponse -> TestTree
 testGetLogEventsResponse = res
     "GetLogEventsResponse"
     "fixture/GetLogEventsResponse"
+    cloudWatchLogs
     (Proxy :: Proxy GetLogEvents)
 
 testDescribeLogGroupsResponse :: DescribeLogGroupsResponse -> TestTree
 testDescribeLogGroupsResponse = res
     "DescribeLogGroupsResponse"
     "fixture/DescribeLogGroupsResponse"
+    cloudWatchLogs
     (Proxy :: Proxy DescribeLogGroups)
 
 testFilterLogEventsResponse :: FilterLogEventsResponse -> TestTree
 testFilterLogEventsResponse = res
     "FilterLogEventsResponse"
     "fixture/FilterLogEventsResponse"
+    cloudWatchLogs
     (Proxy :: Proxy FilterLogEvents)
 
 testDeleteLogStreamResponse :: DeleteLogStreamResponse -> TestTree
 testDeleteLogStreamResponse = res
     "DeleteLogStreamResponse"
     "fixture/DeleteLogStreamResponse"
+    cloudWatchLogs
     (Proxy :: Proxy DeleteLogStream)
 
 testCreateLogStreamResponse :: CreateLogStreamResponse -> TestTree
 testCreateLogStreamResponse = res
     "CreateLogStreamResponse"
     "fixture/CreateLogStreamResponse"
+    cloudWatchLogs
     (Proxy :: Proxy CreateLogStream)
 
 testCreateLogGroupResponse :: CreateLogGroupResponse -> TestTree
 testCreateLogGroupResponse = res
     "CreateLogGroupResponse"
     "fixture/CreateLogGroupResponse"
+    cloudWatchLogs
     (Proxy :: Proxy CreateLogGroup)
 
 testPutLogEventsResponse :: PutLogEventsResponse -> TestTree
 testPutLogEventsResponse = res
     "PutLogEventsResponse"
     "fixture/PutLogEventsResponse"
+    cloudWatchLogs
     (Proxy :: Proxy PutLogEvents)
 
 testDeleteSubscriptionFilterResponse :: DeleteSubscriptionFilterResponse -> TestTree
 testDeleteSubscriptionFilterResponse = res
     "DeleteSubscriptionFilterResponse"
     "fixture/DeleteSubscriptionFilterResponse"
+    cloudWatchLogs
     (Proxy :: Proxy DeleteSubscriptionFilter)
 
 testPutSubscriptionFilterResponse :: PutSubscriptionFilterResponse -> TestTree
 testPutSubscriptionFilterResponse = res
     "PutSubscriptionFilterResponse"
     "fixture/PutSubscriptionFilterResponse"
+    cloudWatchLogs
     (Proxy :: Proxy PutSubscriptionFilter)
 
 testDeleteLogGroupResponse :: DeleteLogGroupResponse -> TestTree
 testDeleteLogGroupResponse = res
     "DeleteLogGroupResponse"
     "fixture/DeleteLogGroupResponse"
+    cloudWatchLogs
     (Proxy :: Proxy DeleteLogGroup)
 
 testTestMetricFilterResponse :: TestMetricFilterResponse -> TestTree
 testTestMetricFilterResponse = res
     "TestMetricFilterResponse"
     "fixture/TestMetricFilterResponse"
+    cloudWatchLogs
     (Proxy :: Proxy TestMetricFilter)
 
 testDescribeMetricFiltersResponse :: DescribeMetricFiltersResponse -> TestTree
 testDescribeMetricFiltersResponse = res
     "DescribeMetricFiltersResponse"
     "fixture/DescribeMetricFiltersResponse"
+    cloudWatchLogs
     (Proxy :: Proxy DescribeMetricFilters)
 
 testDeleteMetricFilterResponse :: DeleteMetricFilterResponse -> TestTree
 testDeleteMetricFilterResponse = res
     "DeleteMetricFilterResponse"
     "fixture/DeleteMetricFilterResponse"
+    cloudWatchLogs
     (Proxy :: Proxy DeleteMetricFilter)
 
 testPutRetentionPolicyResponse :: PutRetentionPolicyResponse -> TestTree
 testPutRetentionPolicyResponse = res
     "PutRetentionPolicyResponse"
     "fixture/PutRetentionPolicyResponse"
+    cloudWatchLogs
     (Proxy :: Proxy PutRetentionPolicy)
 
 testDeleteRetentionPolicyResponse :: DeleteRetentionPolicyResponse -> TestTree
 testDeleteRetentionPolicyResponse = res
     "DeleteRetentionPolicyResponse"
     "fixture/DeleteRetentionPolicyResponse"
+    cloudWatchLogs
     (Proxy :: Proxy DeleteRetentionPolicy)
 
 testPutMetricFilterResponse :: PutMetricFilterResponse -> TestTree
 testPutMetricFilterResponse = res
     "PutMetricFilterResponse"
     "fixture/PutMetricFilterResponse"
+    cloudWatchLogs
     (Proxy :: Proxy PutMetricFilter)
 
 testPutDestinationPolicyResponse :: PutDestinationPolicyResponse -> TestTree
 testPutDestinationPolicyResponse = res
     "PutDestinationPolicyResponse"
     "fixture/PutDestinationPolicyResponse"
+    cloudWatchLogs
     (Proxy :: Proxy PutDestinationPolicy)
 
 testDescribeLogStreamsResponse :: DescribeLogStreamsResponse -> TestTree
 testDescribeLogStreamsResponse = res
     "DescribeLogStreamsResponse"
     "fixture/DescribeLogStreamsResponse"
+    cloudWatchLogs
     (Proxy :: Proxy DescribeLogStreams)
