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-cloudtrail.cabal b/amazonka-cloudtrail.cabal
--- a/amazonka-cloudtrail.cabal
+++ b/amazonka-cloudtrail.cabal
@@ -1,5 +1,5 @@
 name:                  amazonka-cloudtrail
-version:               1.1.0
+version:               1.2.0
 synopsis:              Amazon CloudTrail SDK.
 homepage:              https://github.com/brendanhay/amazonka
 license:               OtherLicense
@@ -79,7 +79,7 @@
         , Network.AWS.CloudTrail.Types.Sum
 
     build-depends:
-          amazonka-core == 1.1.0.*
+          amazonka-core == 1.2.0.*
         , base          >= 4.7     && < 5
 
 test-suite amazonka-cloudtrail-test
@@ -98,9 +98,9 @@
         , Test.AWS.CloudTrail.Internal
 
     build-depends:
-          amazonka-core == 1.1.0
-        , amazonka-test == 1.1.0
-        , amazonka-cloudtrail == 1.1.0
+          amazonka-core == 1.2.0
+        , amazonka-test == 1.2.0
+        , amazonka-cloudtrail == 1.2.0
         , base
         , bytestring
         , lens
diff --git a/gen/Network/AWS/CloudTrail.hs b/gen/Network/AWS/CloudTrail.hs
--- a/gen/Network/AWS/CloudTrail.hs
+++ b/gen/Network/AWS/CloudTrail.hs
@@ -38,8 +38,8 @@
 -- /See:/ <http://docs.aws.amazon.com/awscloudtrail/latest/APIReference/Welcome.html AWS API Reference>
 module Network.AWS.CloudTrail
     (
-    -- * Service
-      CloudTrail
+    -- * Service Configuration
+      cloudTrail
 
     -- * Errors
     -- $errors
diff --git a/gen/Network/AWS/CloudTrail/CreateTrail.hs b/gen/Network/AWS/CloudTrail/CreateTrail.hs
--- a/gen/Network/AWS/CloudTrail/CreateTrail.hs
+++ b/gen/Network/AWS/CloudTrail/CreateTrail.hs
@@ -139,9 +139,8 @@
 ctS3BucketName = lens _ctS3BucketName (\ s a -> s{_ctS3BucketName = a});
 
 instance AWSRequest CreateTrail where
-        type Sv CreateTrail = CloudTrail
         type Rs CreateTrail = CreateTrailResponse
-        request = postJSON
+        request = postJSON cloudTrail
         response
           = receiveJSON
               (\ s h x ->
@@ -167,14 +166,17 @@
 instance ToJSON CreateTrail where
         toJSON CreateTrail'{..}
           = object
-              ["S3KeyPrefix" .= _ctS3KeyPrefix,
-               "SnsTopicName" .= _ctSNSTopicName,
-               "CloudWatchLogsLogGroupArn" .=
-                 _ctCloudWatchLogsLogGroupARN,
-               "IncludeGlobalServiceEvents" .=
-                 _ctIncludeGlobalServiceEvents,
-               "CloudWatchLogsRoleArn" .= _ctCloudWatchLogsRoleARN,
-               "Name" .= _ctName, "S3BucketName" .= _ctS3BucketName]
+              (catMaybes
+                 [("S3KeyPrefix" .=) <$> _ctS3KeyPrefix,
+                  ("SnsTopicName" .=) <$> _ctSNSTopicName,
+                  ("CloudWatchLogsLogGroupArn" .=) <$>
+                    _ctCloudWatchLogsLogGroupARN,
+                  ("IncludeGlobalServiceEvents" .=) <$>
+                    _ctIncludeGlobalServiceEvents,
+                  ("CloudWatchLogsRoleArn" .=) <$>
+                    _ctCloudWatchLogsRoleARN,
+                  Just ("Name" .= _ctName),
+                  Just ("S3BucketName" .= _ctS3BucketName)])
 
 instance ToPath CreateTrail where
         toPath = const "/"
diff --git a/gen/Network/AWS/CloudTrail/DeleteTrail.hs b/gen/Network/AWS/CloudTrail/DeleteTrail.hs
--- a/gen/Network/AWS/CloudTrail/DeleteTrail.hs
+++ b/gen/Network/AWS/CloudTrail/DeleteTrail.hs
@@ -67,9 +67,8 @@
 dtName = lens _dtName (\ s a -> s{_dtName = a});
 
 instance AWSRequest DeleteTrail where
-        type Sv DeleteTrail = CloudTrail
         type Rs DeleteTrail = DeleteTrailResponse
-        request = postJSON
+        request = postJSON cloudTrail
         response
           = receiveEmpty
               (\ s h x ->
@@ -86,7 +85,8 @@
                     ("application/x-amz-json-1.1" :: ByteString)])
 
 instance ToJSON DeleteTrail where
-        toJSON DeleteTrail'{..} = object ["Name" .= _dtName]
+        toJSON DeleteTrail'{..}
+          = object (catMaybes [Just ("Name" .= _dtName)])
 
 instance ToPath DeleteTrail where
         toPath = const "/"
diff --git a/gen/Network/AWS/CloudTrail/DescribeTrails.hs b/gen/Network/AWS/CloudTrail/DescribeTrails.hs
--- a/gen/Network/AWS/CloudTrail/DescribeTrails.hs
+++ b/gen/Network/AWS/CloudTrail/DescribeTrails.hs
@@ -68,9 +68,8 @@
 dtTrailNameList = lens _dtTrailNameList (\ s a -> s{_dtTrailNameList = a}) . _Default . _Coerce;
 
 instance AWSRequest DescribeTrails where
-        type Sv DescribeTrails = CloudTrail
         type Rs DescribeTrails = DescribeTrailsResponse
-        request = postJSON
+        request = postJSON cloudTrail
         response
           = receiveJSON
               (\ s h x ->
@@ -90,7 +89,9 @@
 
 instance ToJSON DescribeTrails where
         toJSON DescribeTrails'{..}
-          = object ["trailNameList" .= _dtTrailNameList]
+          = object
+              (catMaybes
+                 [("trailNameList" .=) <$> _dtTrailNameList])
 
 instance ToPath DescribeTrails where
         toPath = const "/"
diff --git a/gen/Network/AWS/CloudTrail/GetTrailStatus.hs b/gen/Network/AWS/CloudTrail/GetTrailStatus.hs
--- a/gen/Network/AWS/CloudTrail/GetTrailStatus.hs
+++ b/gen/Network/AWS/CloudTrail/GetTrailStatus.hs
@@ -78,9 +78,8 @@
 gtsName = lens _gtsName (\ s a -> s{_gtsName = a});
 
 instance AWSRequest GetTrailStatus where
-        type Sv GetTrailStatus = CloudTrail
         type Rs GetTrailStatus = GetTrailStatusResponse
-        request = postJSON
+        request = postJSON cloudTrail
         response
           = receiveJSON
               (\ s h x ->
@@ -108,7 +107,7 @@
 
 instance ToJSON GetTrailStatus where
         toJSON GetTrailStatus'{..}
-          = object ["Name" .= _gtsName]
+          = object (catMaybes [Just ("Name" .= _gtsName)])
 
 instance ToPath GetTrailStatus where
         toPath = const "/"
diff --git a/gen/Network/AWS/CloudTrail/LookupEvents.hs b/gen/Network/AWS/CloudTrail/LookupEvents.hs
--- a/gen/Network/AWS/CloudTrail/LookupEvents.hs
+++ b/gen/Network/AWS/CloudTrail/LookupEvents.hs
@@ -128,9 +128,8 @@
 leMaxResults = lens _leMaxResults (\ s a -> s{_leMaxResults = a}) . mapping _Nat;
 
 instance AWSRequest LookupEvents where
-        type Sv LookupEvents = CloudTrail
         type Rs LookupEvents = LookupEventsResponse
-        request = postJSON
+        request = postJSON cloudTrail
         response
           = receiveJSON
               (\ s h x ->
@@ -151,10 +150,12 @@
 instance ToJSON LookupEvents where
         toJSON LookupEvents'{..}
           = object
-              ["StartTime" .= _leStartTime,
-               "LookupAttributes" .= _leLookupAttributes,
-               "NextToken" .= _leNextToken, "EndTime" .= _leEndTime,
-               "MaxResults" .= _leMaxResults]
+              (catMaybes
+                 [("StartTime" .=) <$> _leStartTime,
+                  ("LookupAttributes" .=) <$> _leLookupAttributes,
+                  ("NextToken" .=) <$> _leNextToken,
+                  ("EndTime" .=) <$> _leEndTime,
+                  ("MaxResults" .=) <$> _leMaxResults])
 
 instance ToPath LookupEvents where
         toPath = const "/"
diff --git a/gen/Network/AWS/CloudTrail/StartLogging.hs b/gen/Network/AWS/CloudTrail/StartLogging.hs
--- a/gen/Network/AWS/CloudTrail/StartLogging.hs
+++ b/gen/Network/AWS/CloudTrail/StartLogging.hs
@@ -67,9 +67,8 @@
 sName = lens _sName (\ s a -> s{_sName = a});
 
 instance AWSRequest StartLogging where
-        type Sv StartLogging = CloudTrail
         type Rs StartLogging = StartLoggingResponse
-        request = postJSON
+        request = postJSON cloudTrail
         response
           = receiveEmpty
               (\ s h x ->
@@ -86,7 +85,8 @@
                     ("application/x-amz-json-1.1" :: ByteString)])
 
 instance ToJSON StartLogging where
-        toJSON StartLogging'{..} = object ["Name" .= _sName]
+        toJSON StartLogging'{..}
+          = object (catMaybes [Just ("Name" .= _sName)])
 
 instance ToPath StartLogging where
         toPath = const "/"
diff --git a/gen/Network/AWS/CloudTrail/StopLogging.hs b/gen/Network/AWS/CloudTrail/StopLogging.hs
--- a/gen/Network/AWS/CloudTrail/StopLogging.hs
+++ b/gen/Network/AWS/CloudTrail/StopLogging.hs
@@ -72,9 +72,8 @@
 slName = lens _slName (\ s a -> s{_slName = a});
 
 instance AWSRequest StopLogging where
-        type Sv StopLogging = CloudTrail
         type Rs StopLogging = StopLoggingResponse
-        request = postJSON
+        request = postJSON cloudTrail
         response
           = receiveEmpty
               (\ s h x ->
@@ -91,7 +90,8 @@
                     ("application/x-amz-json-1.1" :: ByteString)])
 
 instance ToJSON StopLogging where
-        toJSON StopLogging'{..} = object ["Name" .= _slName]
+        toJSON StopLogging'{..}
+          = object (catMaybes [Just ("Name" .= _slName)])
 
 instance ToPath StopLogging where
         toPath = const "/"
diff --git a/gen/Network/AWS/CloudTrail/Types.hs b/gen/Network/AWS/CloudTrail/Types.hs
--- a/gen/Network/AWS/CloudTrail/Types.hs
+++ b/gen/Network/AWS/CloudTrail/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.CloudTrail.Types
     (
-    -- * Service
-      CloudTrail
+    -- * Service Configuration
+      cloudTrail
 
     -- * Errors
     , _InvalidTimeRangeException
@@ -77,39 +76,36 @@
 import           Network.AWS.Prelude
 import           Network.AWS.Sign.V4
 
--- | Version @2013-11-01@ of the Amazon CloudTrail SDK.
-data CloudTrail
-
-instance AWSService CloudTrail where
-    type Sg CloudTrail = V4
-    service = const svc
-      where
-        svc =
-            Service
-            { _svcAbbrev = "CloudTrail"
-            , _svcPrefix = "cloudtrail"
-            , _svcVersion = "2013-11-01"
-            , _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 '2013-11-01' of the Amazon CloudTrail SDK configuration.
+cloudTrail :: Service
+cloudTrail =
+    Service
+    { _svcAbbrev = "CloudTrail"
+    , _svcSigner = v4
+    , _svcPrefix = "cloudtrail"
+    , _svcVersion = "2013-11-01"
+    , _svcEndpoint = defaultEndpoint cloudTrail
+    , _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
 
 -- | Occurs if the timestamp values are invalid. Either the start time occurs
 -- after the end time or the time range is outside the range of possible
diff --git a/gen/Network/AWS/CloudTrail/Types/Product.hs b/gen/Network/AWS/CloudTrail/Types/Product.hs
--- a/gen/Network/AWS/CloudTrail/Types/Product.hs
+++ b/gen/Network/AWS/CloudTrail/Types/Product.hs
@@ -2,7 +2,6 @@
 {-# LANGUAGE DeriveGeneric      #-}
 {-# LANGUAGE OverloadedStrings  #-}
 {-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
 
@@ -133,8 +132,9 @@
 instance ToJSON LookupAttribute where
         toJSON LookupAttribute'{..}
           = object
-              ["AttributeKey" .= _laAttributeKey,
-               "AttributeValue" .= _laAttributeValue]
+              (catMaybes
+                 [Just ("AttributeKey" .= _laAttributeKey),
+                  Just ("AttributeValue" .= _laAttributeValue)])
 
 -- | Specifies the type and name of a resource referenced by an event.
 --
diff --git a/gen/Network/AWS/CloudTrail/UpdateTrail.hs b/gen/Network/AWS/CloudTrail/UpdateTrail.hs
--- a/gen/Network/AWS/CloudTrail/UpdateTrail.hs
+++ b/gen/Network/AWS/CloudTrail/UpdateTrail.hs
@@ -141,9 +141,8 @@
 utName = lens _utName (\ s a -> s{_utName = a});
 
 instance AWSRequest UpdateTrail where
-        type Sv UpdateTrail = CloudTrail
         type Rs UpdateTrail = UpdateTrailResponse
-        request = postJSON
+        request = postJSON cloudTrail
         response
           = receiveJSON
               (\ s h x ->
@@ -169,14 +168,17 @@
 instance ToJSON UpdateTrail where
         toJSON UpdateTrail'{..}
           = object
-              ["S3KeyPrefix" .= _utS3KeyPrefix,
-               "SnsTopicName" .= _utSNSTopicName,
-               "CloudWatchLogsLogGroupArn" .=
-                 _utCloudWatchLogsLogGroupARN,
-               "IncludeGlobalServiceEvents" .=
-                 _utIncludeGlobalServiceEvents,
-               "CloudWatchLogsRoleArn" .= _utCloudWatchLogsRoleARN,
-               "S3BucketName" .= _utS3BucketName, "Name" .= _utName]
+              (catMaybes
+                 [("S3KeyPrefix" .=) <$> _utS3KeyPrefix,
+                  ("SnsTopicName" .=) <$> _utSNSTopicName,
+                  ("CloudWatchLogsLogGroupArn" .=) <$>
+                    _utCloudWatchLogsLogGroupARN,
+                  ("IncludeGlobalServiceEvents" .=) <$>
+                    _utIncludeGlobalServiceEvents,
+                  ("CloudWatchLogsRoleArn" .=) <$>
+                    _utCloudWatchLogsRoleARN,
+                  ("S3BucketName" .=) <$> _utS3BucketName,
+                  Just ("Name" .= _utName)])
 
 instance ToPath UpdateTrail where
         toPath = const "/"
diff --git a/test/Test/AWS/Gen/CloudTrail.hs b/test/Test/AWS/Gen/CloudTrail.hs
--- a/test/Test/AWS/Gen/CloudTrail.hs
+++ b/test/Test/AWS/Gen/CloudTrail.hs
@@ -130,46 +130,54 @@
 testDescribeTrailsResponse = res
     "DescribeTrailsResponse"
     "fixture/DescribeTrailsResponse"
+    cloudTrail
     (Proxy :: Proxy DescribeTrails)
 
 testLookupEventsResponse :: LookupEventsResponse -> TestTree
 testLookupEventsResponse = res
     "LookupEventsResponse"
     "fixture/LookupEventsResponse"
+    cloudTrail
     (Proxy :: Proxy LookupEvents)
 
 testStopLoggingResponse :: StopLoggingResponse -> TestTree
 testStopLoggingResponse = res
     "StopLoggingResponse"
     "fixture/StopLoggingResponse"
+    cloudTrail
     (Proxy :: Proxy StopLogging)
 
 testDeleteTrailResponse :: DeleteTrailResponse -> TestTree
 testDeleteTrailResponse = res
     "DeleteTrailResponse"
     "fixture/DeleteTrailResponse"
+    cloudTrail
     (Proxy :: Proxy DeleteTrail)
 
 testUpdateTrailResponse :: UpdateTrailResponse -> TestTree
 testUpdateTrailResponse = res
     "UpdateTrailResponse"
     "fixture/UpdateTrailResponse"
+    cloudTrail
     (Proxy :: Proxy UpdateTrail)
 
 testCreateTrailResponse :: CreateTrailResponse -> TestTree
 testCreateTrailResponse = res
     "CreateTrailResponse"
     "fixture/CreateTrailResponse"
+    cloudTrail
     (Proxy :: Proxy CreateTrail)
 
 testGetTrailStatusResponse :: GetTrailStatusResponse -> TestTree
 testGetTrailStatusResponse = res
     "GetTrailStatusResponse"
     "fixture/GetTrailStatusResponse"
+    cloudTrail
     (Proxy :: Proxy GetTrailStatus)
 
 testStartLoggingResponse :: StartLoggingResponse -> TestTree
 testStartLoggingResponse = res
     "StartLoggingResponse"
     "fixture/StartLoggingResponse"
+    cloudTrail
     (Proxy :: Proxy StartLogging)
