diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,11 @@
 # Change Log
 
+## 0.4.1
+
+* Manually write out all JSON instances to speed up compilation
+* Fix bug in CloudFormation specification where `EvaluationPeriods` was
+  accidentally set to `Double`.
+
 ## 0.4.0
 
 * Derive the `Eq` type class for everything. This is useful when comparing two
diff --git a/library-gen/Stratosphere/ResourceProperties/ApiGatewayApiKeyStageKey.hs b/library-gen/Stratosphere/ResourceProperties/ApiGatewayApiKeyStageKey.hs
--- a/library-gen/Stratosphere/ResourceProperties/ApiGatewayApiKeyStageKey.hs
+++ b/library-gen/Stratosphere/ResourceProperties/ApiGatewayApiKeyStageKey.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-apikey-stagekey.html
 
 module Stratosphere.ResourceProperties.ApiGatewayApiKeyStageKey where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   ApiGatewayApiKeyStageKey
   { _apiGatewayApiKeyStageKeyRestApiId :: Maybe (Val Text)
   , _apiGatewayApiKeyStageKeyStageName :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ApiGatewayApiKeyStageKey where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 25, omitNothingFields = True }
+  toJSON ApiGatewayApiKeyStageKey{..} =
+    object $
+    catMaybes
+    [ ("RestApiId" .=) <$> _apiGatewayApiKeyStageKeyRestApiId
+    , ("StageName" .=) <$> _apiGatewayApiKeyStageKeyStageName
+    ]
 
 instance FromJSON ApiGatewayApiKeyStageKey where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 25, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ApiGatewayApiKeyStageKey <$>
+      obj .:? "RestApiId" <*>
+      obj .:? "StageName"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ApiGatewayApiKeyStageKey' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/ApiGatewayDeploymentMethodSetting.hs b/library-gen/Stratosphere/ResourceProperties/ApiGatewayDeploymentMethodSetting.hs
--- a/library-gen/Stratosphere/ResourceProperties/ApiGatewayDeploymentMethodSetting.hs
+++ b/library-gen/Stratosphere/ResourceProperties/ApiGatewayDeploymentMethodSetting.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-deployment-stagedescription-methodsetting.html
 
 module Stratosphere.ResourceProperties.ApiGatewayDeploymentMethodSetting where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.Types
@@ -28,13 +28,38 @@
   , _apiGatewayDeploymentMethodSettingResourcePath :: Maybe (Val Text)
   , _apiGatewayDeploymentMethodSettingThrottlingBurstLimit :: Maybe (Val Integer')
   , _apiGatewayDeploymentMethodSettingThrottlingRateLimit :: Maybe (Val Double')
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ApiGatewayDeploymentMethodSetting where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 34, omitNothingFields = True }
+  toJSON ApiGatewayDeploymentMethodSetting{..} =
+    object $
+    catMaybes
+    [ ("CacheDataEncrypted" .=) <$> _apiGatewayDeploymentMethodSettingCacheDataEncrypted
+    , ("CacheTtlInSeconds" .=) <$> _apiGatewayDeploymentMethodSettingCacheTtlInSeconds
+    , ("CachingEnabled" .=) <$> _apiGatewayDeploymentMethodSettingCachingEnabled
+    , ("DataTraceEnabled" .=) <$> _apiGatewayDeploymentMethodSettingDataTraceEnabled
+    , ("HttpMethod" .=) <$> _apiGatewayDeploymentMethodSettingHttpMethod
+    , ("LoggingLevel" .=) <$> _apiGatewayDeploymentMethodSettingLoggingLevel
+    , ("MetricsEnabled" .=) <$> _apiGatewayDeploymentMethodSettingMetricsEnabled
+    , ("ResourcePath" .=) <$> _apiGatewayDeploymentMethodSettingResourcePath
+    , ("ThrottlingBurstLimit" .=) <$> _apiGatewayDeploymentMethodSettingThrottlingBurstLimit
+    , ("ThrottlingRateLimit" .=) <$> _apiGatewayDeploymentMethodSettingThrottlingRateLimit
+    ]
 
 instance FromJSON ApiGatewayDeploymentMethodSetting where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 34, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ApiGatewayDeploymentMethodSetting <$>
+      obj .:? "CacheDataEncrypted" <*>
+      obj .:? "CacheTtlInSeconds" <*>
+      obj .:? "CachingEnabled" <*>
+      obj .:? "DataTraceEnabled" <*>
+      obj .:? "HttpMethod" <*>
+      obj .:? "LoggingLevel" <*>
+      obj .:? "MetricsEnabled" <*>
+      obj .:? "ResourcePath" <*>
+      obj .:? "ThrottlingBurstLimit" <*>
+      obj .:? "ThrottlingRateLimit"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ApiGatewayDeploymentMethodSetting' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/ApiGatewayDeploymentStageDescription.hs b/library-gen/Stratosphere/ResourceProperties/ApiGatewayDeploymentStageDescription.hs
--- a/library-gen/Stratosphere/ResourceProperties/ApiGatewayDeploymentStageDescription.hs
+++ b/library-gen/Stratosphere/ResourceProperties/ApiGatewayDeploymentStageDescription.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-deployment-stagedescription.html
 
 module Stratosphere.ResourceProperties.ApiGatewayDeploymentStageDescription where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.Types
@@ -34,13 +34,48 @@
   , _apiGatewayDeploymentStageDescriptionThrottlingBurstLimit :: Maybe (Val Integer')
   , _apiGatewayDeploymentStageDescriptionThrottlingRateLimit :: Maybe (Val Double')
   , _apiGatewayDeploymentStageDescriptionVariables :: Maybe Object
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ApiGatewayDeploymentStageDescription where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 37, omitNothingFields = True }
+  toJSON ApiGatewayDeploymentStageDescription{..} =
+    object $
+    catMaybes
+    [ ("CacheClusterEnabled" .=) <$> _apiGatewayDeploymentStageDescriptionCacheClusterEnabled
+    , ("CacheClusterSize" .=) <$> _apiGatewayDeploymentStageDescriptionCacheClusterSize
+    , ("CacheDataEncrypted" .=) <$> _apiGatewayDeploymentStageDescriptionCacheDataEncrypted
+    , ("CacheTtlInSeconds" .=) <$> _apiGatewayDeploymentStageDescriptionCacheTtlInSeconds
+    , ("CachingEnabled" .=) <$> _apiGatewayDeploymentStageDescriptionCachingEnabled
+    , ("ClientCertificateId" .=) <$> _apiGatewayDeploymentStageDescriptionClientCertificateId
+    , ("DataTraceEnabled" .=) <$> _apiGatewayDeploymentStageDescriptionDataTraceEnabled
+    , ("Description" .=) <$> _apiGatewayDeploymentStageDescriptionDescription
+    , ("LoggingLevel" .=) <$> _apiGatewayDeploymentStageDescriptionLoggingLevel
+    , ("MethodSettings" .=) <$> _apiGatewayDeploymentStageDescriptionMethodSettings
+    , ("MetricsEnabled" .=) <$> _apiGatewayDeploymentStageDescriptionMetricsEnabled
+    , ("StageName" .=) <$> _apiGatewayDeploymentStageDescriptionStageName
+    , ("ThrottlingBurstLimit" .=) <$> _apiGatewayDeploymentStageDescriptionThrottlingBurstLimit
+    , ("ThrottlingRateLimit" .=) <$> _apiGatewayDeploymentStageDescriptionThrottlingRateLimit
+    , ("Variables" .=) <$> _apiGatewayDeploymentStageDescriptionVariables
+    ]
 
 instance FromJSON ApiGatewayDeploymentStageDescription where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 37, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ApiGatewayDeploymentStageDescription <$>
+      obj .:? "CacheClusterEnabled" <*>
+      obj .:? "CacheClusterSize" <*>
+      obj .:? "CacheDataEncrypted" <*>
+      obj .:? "CacheTtlInSeconds" <*>
+      obj .:? "CachingEnabled" <*>
+      obj .:? "ClientCertificateId" <*>
+      obj .:? "DataTraceEnabled" <*>
+      obj .:? "Description" <*>
+      obj .:? "LoggingLevel" <*>
+      obj .:? "MethodSettings" <*>
+      obj .:? "MetricsEnabled" <*>
+      obj .:? "StageName" <*>
+      obj .:? "ThrottlingBurstLimit" <*>
+      obj .:? "ThrottlingRateLimit" <*>
+      obj .:? "Variables"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ApiGatewayDeploymentStageDescription' containing
 -- | required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/ApiGatewayMethodIntegration.hs b/library-gen/Stratosphere/ResourceProperties/ApiGatewayMethodIntegration.hs
--- a/library-gen/Stratosphere/ResourceProperties/ApiGatewayMethodIntegration.hs
+++ b/library-gen/Stratosphere/ResourceProperties/ApiGatewayMethodIntegration.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-method-integration.html
 
 module Stratosphere.ResourceProperties.ApiGatewayMethodIntegration where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.Types
@@ -29,13 +29,38 @@
   , _apiGatewayMethodIntegrationRequestTemplates :: Maybe Object
   , _apiGatewayMethodIntegrationType :: Maybe (Val ApiBackendType)
   , _apiGatewayMethodIntegrationUri :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ApiGatewayMethodIntegration where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+  toJSON ApiGatewayMethodIntegration{..} =
+    object $
+    catMaybes
+    [ ("CacheKeyParameters" .=) <$> _apiGatewayMethodIntegrationCacheKeyParameters
+    , ("CacheNamespace" .=) <$> _apiGatewayMethodIntegrationCacheNamespace
+    , ("Credentials" .=) <$> _apiGatewayMethodIntegrationCredentials
+    , ("IntegrationHttpMethod" .=) <$> _apiGatewayMethodIntegrationIntegrationHttpMethod
+    , ("IntegrationResponses" .=) <$> _apiGatewayMethodIntegrationIntegrationResponses
+    , ("PassthroughBehavior" .=) <$> _apiGatewayMethodIntegrationPassthroughBehavior
+    , ("RequestParameters" .=) <$> _apiGatewayMethodIntegrationRequestParameters
+    , ("RequestTemplates" .=) <$> _apiGatewayMethodIntegrationRequestTemplates
+    , ("Type" .=) <$> _apiGatewayMethodIntegrationType
+    , ("Uri" .=) <$> _apiGatewayMethodIntegrationUri
+    ]
 
 instance FromJSON ApiGatewayMethodIntegration where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ApiGatewayMethodIntegration <$>
+      obj .:? "CacheKeyParameters" <*>
+      obj .:? "CacheNamespace" <*>
+      obj .:? "Credentials" <*>
+      obj .:? "IntegrationHttpMethod" <*>
+      obj .:? "IntegrationResponses" <*>
+      obj .:? "PassthroughBehavior" <*>
+      obj .:? "RequestParameters" <*>
+      obj .:? "RequestTemplates" <*>
+      obj .:? "Type" <*>
+      obj .:? "Uri"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ApiGatewayMethodIntegration' containing required fields
 -- | as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/ApiGatewayMethodIntegrationResponse.hs b/library-gen/Stratosphere/ResourceProperties/ApiGatewayMethodIntegrationResponse.hs
--- a/library-gen/Stratosphere/ResourceProperties/ApiGatewayMethodIntegrationResponse.hs
+++ b/library-gen/Stratosphere/ResourceProperties/ApiGatewayMethodIntegrationResponse.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-method-integration-integrationresponse.html
 
 module Stratosphere.ResourceProperties.ApiGatewayMethodIntegrationResponse where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -22,13 +22,26 @@
   , _apiGatewayMethodIntegrationResponseResponseTemplates :: Maybe Object
   , _apiGatewayMethodIntegrationResponseSelectionPattern :: Maybe (Val Text)
   , _apiGatewayMethodIntegrationResponseStatusCode :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ApiGatewayMethodIntegrationResponse where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 36, omitNothingFields = True }
+  toJSON ApiGatewayMethodIntegrationResponse{..} =
+    object $
+    catMaybes
+    [ ("ResponseParameters" .=) <$> _apiGatewayMethodIntegrationResponseResponseParameters
+    , ("ResponseTemplates" .=) <$> _apiGatewayMethodIntegrationResponseResponseTemplates
+    , ("SelectionPattern" .=) <$> _apiGatewayMethodIntegrationResponseSelectionPattern
+    , ("StatusCode" .=) <$> _apiGatewayMethodIntegrationResponseStatusCode
+    ]
 
 instance FromJSON ApiGatewayMethodIntegrationResponse where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 36, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ApiGatewayMethodIntegrationResponse <$>
+      obj .:? "ResponseParameters" <*>
+      obj .:? "ResponseTemplates" <*>
+      obj .:? "SelectionPattern" <*>
+      obj .:? "StatusCode"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ApiGatewayMethodIntegrationResponse' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/ApiGatewayMethodMethodResponse.hs b/library-gen/Stratosphere/ResourceProperties/ApiGatewayMethodMethodResponse.hs
--- a/library-gen/Stratosphere/ResourceProperties/ApiGatewayMethodMethodResponse.hs
+++ b/library-gen/Stratosphere/ResourceProperties/ApiGatewayMethodMethodResponse.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-method-methodresponse.html
 
 module Stratosphere.ResourceProperties.ApiGatewayMethodMethodResponse where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -21,13 +21,24 @@
   { _apiGatewayMethodMethodResponseResponseModels :: Maybe Object
   , _apiGatewayMethodMethodResponseResponseParameters :: Maybe Object
   , _apiGatewayMethodMethodResponseStatusCode :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ApiGatewayMethodMethodResponse where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 31, omitNothingFields = True }
+  toJSON ApiGatewayMethodMethodResponse{..} =
+    object $
+    catMaybes
+    [ ("ResponseModels" .=) <$> _apiGatewayMethodMethodResponseResponseModels
+    , ("ResponseParameters" .=) <$> _apiGatewayMethodMethodResponseResponseParameters
+    , ("StatusCode" .=) <$> _apiGatewayMethodMethodResponseStatusCode
+    ]
 
 instance FromJSON ApiGatewayMethodMethodResponse where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 31, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ApiGatewayMethodMethodResponse <$>
+      obj .:? "ResponseModels" <*>
+      obj .:? "ResponseParameters" <*>
+      obj .:? "StatusCode"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ApiGatewayMethodMethodResponse' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/ApiGatewayRestApiS3Location.hs b/library-gen/Stratosphere/ResourceProperties/ApiGatewayRestApiS3Location.hs
--- a/library-gen/Stratosphere/ResourceProperties/ApiGatewayRestApiS3Location.hs
+++ b/library-gen/Stratosphere/ResourceProperties/ApiGatewayRestApiS3Location.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-restapi-bodys3location.html
 
 module Stratosphere.ResourceProperties.ApiGatewayRestApiS3Location where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -22,13 +22,26 @@
   , _apiGatewayRestApiS3LocationETag :: Maybe (Val Text)
   , _apiGatewayRestApiS3LocationKey :: Maybe (Val Text)
   , _apiGatewayRestApiS3LocationVersion :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ApiGatewayRestApiS3Location where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+  toJSON ApiGatewayRestApiS3Location{..} =
+    object $
+    catMaybes
+    [ ("Bucket" .=) <$> _apiGatewayRestApiS3LocationBucket
+    , ("ETag" .=) <$> _apiGatewayRestApiS3LocationETag
+    , ("Key" .=) <$> _apiGatewayRestApiS3LocationKey
+    , ("Version" .=) <$> _apiGatewayRestApiS3LocationVersion
+    ]
 
 instance FromJSON ApiGatewayRestApiS3Location where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ApiGatewayRestApiS3Location <$>
+      obj .:? "Bucket" <*>
+      obj .:? "ETag" <*>
+      obj .:? "Key" <*>
+      obj .:? "Version"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ApiGatewayRestApiS3Location' containing required fields
 -- | as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/ApiGatewayStageMethodSetting.hs b/library-gen/Stratosphere/ResourceProperties/ApiGatewayStageMethodSetting.hs
--- a/library-gen/Stratosphere/ResourceProperties/ApiGatewayStageMethodSetting.hs
+++ b/library-gen/Stratosphere/ResourceProperties/ApiGatewayStageMethodSetting.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-stage-methodsetting.html
 
 module Stratosphere.ResourceProperties.ApiGatewayStageMethodSetting where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.Types
@@ -28,13 +28,38 @@
   , _apiGatewayStageMethodSettingResourcePath :: Maybe (Val Text)
   , _apiGatewayStageMethodSettingThrottlingBurstLimit :: Maybe (Val Integer')
   , _apiGatewayStageMethodSettingThrottlingRateLimit :: Maybe (Val Double')
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ApiGatewayStageMethodSetting where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 29, omitNothingFields = True }
+  toJSON ApiGatewayStageMethodSetting{..} =
+    object $
+    catMaybes
+    [ ("CacheDataEncrypted" .=) <$> _apiGatewayStageMethodSettingCacheDataEncrypted
+    , ("CacheTtlInSeconds" .=) <$> _apiGatewayStageMethodSettingCacheTtlInSeconds
+    , ("CachingEnabled" .=) <$> _apiGatewayStageMethodSettingCachingEnabled
+    , ("DataTraceEnabled" .=) <$> _apiGatewayStageMethodSettingDataTraceEnabled
+    , ("HttpMethod" .=) <$> _apiGatewayStageMethodSettingHttpMethod
+    , ("LoggingLevel" .=) <$> _apiGatewayStageMethodSettingLoggingLevel
+    , ("MetricsEnabled" .=) <$> _apiGatewayStageMethodSettingMetricsEnabled
+    , ("ResourcePath" .=) <$> _apiGatewayStageMethodSettingResourcePath
+    , ("ThrottlingBurstLimit" .=) <$> _apiGatewayStageMethodSettingThrottlingBurstLimit
+    , ("ThrottlingRateLimit" .=) <$> _apiGatewayStageMethodSettingThrottlingRateLimit
+    ]
 
 instance FromJSON ApiGatewayStageMethodSetting where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 29, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ApiGatewayStageMethodSetting <$>
+      obj .:? "CacheDataEncrypted" <*>
+      obj .:? "CacheTtlInSeconds" <*>
+      obj .:? "CachingEnabled" <*>
+      obj .:? "DataTraceEnabled" <*>
+      obj .:? "HttpMethod" <*>
+      obj .:? "LoggingLevel" <*>
+      obj .:? "MetricsEnabled" <*>
+      obj .:? "ResourcePath" <*>
+      obj .:? "ThrottlingBurstLimit" <*>
+      obj .:? "ThrottlingRateLimit"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ApiGatewayStageMethodSetting' containing required fields
 -- | as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/ApiGatewayUsagePlanApiStage.hs b/library-gen/Stratosphere/ResourceProperties/ApiGatewayUsagePlanApiStage.hs
--- a/library-gen/Stratosphere/ResourceProperties/ApiGatewayUsagePlanApiStage.hs
+++ b/library-gen/Stratosphere/ResourceProperties/ApiGatewayUsagePlanApiStage.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-usageplan-apistage.html
 
 module Stratosphere.ResourceProperties.ApiGatewayUsagePlanApiStage where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   ApiGatewayUsagePlanApiStage
   { _apiGatewayUsagePlanApiStageApiId :: Maybe (Val Text)
   , _apiGatewayUsagePlanApiStageStage :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ApiGatewayUsagePlanApiStage where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+  toJSON ApiGatewayUsagePlanApiStage{..} =
+    object $
+    catMaybes
+    [ ("ApiId" .=) <$> _apiGatewayUsagePlanApiStageApiId
+    , ("Stage" .=) <$> _apiGatewayUsagePlanApiStageStage
+    ]
 
 instance FromJSON ApiGatewayUsagePlanApiStage where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ApiGatewayUsagePlanApiStage <$>
+      obj .:? "ApiId" <*>
+      obj .:? "Stage"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ApiGatewayUsagePlanApiStage' containing required fields
 -- | as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/ApiGatewayUsagePlanQuotaSettings.hs b/library-gen/Stratosphere/ResourceProperties/ApiGatewayUsagePlanQuotaSettings.hs
--- a/library-gen/Stratosphere/ResourceProperties/ApiGatewayUsagePlanQuotaSettings.hs
+++ b/library-gen/Stratosphere/ResourceProperties/ApiGatewayUsagePlanQuotaSettings.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-usageplan-quotasettings.html
 
 module Stratosphere.ResourceProperties.ApiGatewayUsagePlanQuotaSettings where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.Types
@@ -21,13 +21,24 @@
   { _apiGatewayUsagePlanQuotaSettingsLimit :: Maybe (Val Integer')
   , _apiGatewayUsagePlanQuotaSettingsOffset :: Maybe (Val Integer')
   , _apiGatewayUsagePlanQuotaSettingsPeriod :: Maybe (Val Period)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ApiGatewayUsagePlanQuotaSettings where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 33, omitNothingFields = True }
+  toJSON ApiGatewayUsagePlanQuotaSettings{..} =
+    object $
+    catMaybes
+    [ ("Limit" .=) <$> _apiGatewayUsagePlanQuotaSettingsLimit
+    , ("Offset" .=) <$> _apiGatewayUsagePlanQuotaSettingsOffset
+    , ("Period" .=) <$> _apiGatewayUsagePlanQuotaSettingsPeriod
+    ]
 
 instance FromJSON ApiGatewayUsagePlanQuotaSettings where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 33, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ApiGatewayUsagePlanQuotaSettings <$>
+      obj .:? "Limit" <*>
+      obj .:? "Offset" <*>
+      obj .:? "Period"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ApiGatewayUsagePlanQuotaSettings' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/ApiGatewayUsagePlanThrottleSettings.hs b/library-gen/Stratosphere/ResourceProperties/ApiGatewayUsagePlanThrottleSettings.hs
--- a/library-gen/Stratosphere/ResourceProperties/ApiGatewayUsagePlanThrottleSettings.hs
+++ b/library-gen/Stratosphere/ResourceProperties/ApiGatewayUsagePlanThrottleSettings.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-usageplan-throttlesettings.html
 
 module Stratosphere.ResourceProperties.ApiGatewayUsagePlanThrottleSettings where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   ApiGatewayUsagePlanThrottleSettings
   { _apiGatewayUsagePlanThrottleSettingsBurstLimit :: Maybe (Val Integer')
   , _apiGatewayUsagePlanThrottleSettingsRateLimit :: Maybe (Val Double')
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ApiGatewayUsagePlanThrottleSettings where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 36, omitNothingFields = True }
+  toJSON ApiGatewayUsagePlanThrottleSettings{..} =
+    object $
+    catMaybes
+    [ ("BurstLimit" .=) <$> _apiGatewayUsagePlanThrottleSettingsBurstLimit
+    , ("RateLimit" .=) <$> _apiGatewayUsagePlanThrottleSettingsRateLimit
+    ]
 
 instance FromJSON ApiGatewayUsagePlanThrottleSettings where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 36, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ApiGatewayUsagePlanThrottleSettings <$>
+      obj .:? "BurstLimit" <*>
+      obj .:? "RateLimit"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ApiGatewayUsagePlanThrottleSettings' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/ApplicationAutoScalingScalingPolicyStepAdjustment.hs b/library-gen/Stratosphere/ResourceProperties/ApplicationAutoScalingScalingPolicyStepAdjustment.hs
--- a/library-gen/Stratosphere/ResourceProperties/ApplicationAutoScalingScalingPolicyStepAdjustment.hs
+++ b/library-gen/Stratosphere/ResourceProperties/ApplicationAutoScalingScalingPolicyStepAdjustment.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationautoscaling-scalingpolicy-stepscalingpolicyconfiguration-stepadjustment.html
 
 module Stratosphere.ResourceProperties.ApplicationAutoScalingScalingPolicyStepAdjustment where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -23,13 +23,24 @@
   { _applicationAutoScalingScalingPolicyStepAdjustmentMetricIntervalLowerBound :: Maybe (Val Double')
   , _applicationAutoScalingScalingPolicyStepAdjustmentMetricIntervalUpperBound :: Maybe (Val Double')
   , _applicationAutoScalingScalingPolicyStepAdjustmentScalingAdjustment :: Val Integer'
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ApplicationAutoScalingScalingPolicyStepAdjustment where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 50, omitNothingFields = True }
+  toJSON ApplicationAutoScalingScalingPolicyStepAdjustment{..} =
+    object $
+    catMaybes
+    [ ("MetricIntervalLowerBound" .=) <$> _applicationAutoScalingScalingPolicyStepAdjustmentMetricIntervalLowerBound
+    , ("MetricIntervalUpperBound" .=) <$> _applicationAutoScalingScalingPolicyStepAdjustmentMetricIntervalUpperBound
+    , Just ("ScalingAdjustment" .= _applicationAutoScalingScalingPolicyStepAdjustmentScalingAdjustment)
+    ]
 
 instance FromJSON ApplicationAutoScalingScalingPolicyStepAdjustment where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 50, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ApplicationAutoScalingScalingPolicyStepAdjustment <$>
+      obj .:? "MetricIntervalLowerBound" <*>
+      obj .:? "MetricIntervalUpperBound" <*>
+      obj .: "ScalingAdjustment"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ApplicationAutoScalingScalingPolicyStepAdjustment'
 -- | containing required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/ApplicationAutoScalingScalingPolicyStepScalingPolicyConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/ApplicationAutoScalingScalingPolicyStepScalingPolicyConfiguration.hs
--- a/library-gen/Stratosphere/ResourceProperties/ApplicationAutoScalingScalingPolicyStepScalingPolicyConfiguration.hs
+++ b/library-gen/Stratosphere/ResourceProperties/ApplicationAutoScalingScalingPolicyStepScalingPolicyConfiguration.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationautoscaling-scalingpolicy-stepscalingpolicyconfiguration.html
 
 module Stratosphere.ResourceProperties.ApplicationAutoScalingScalingPolicyStepScalingPolicyConfiguration where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.ApplicationAutoScalingScalingPolicyStepAdjustment
@@ -25,13 +25,28 @@
   , _applicationAutoScalingScalingPolicyStepScalingPolicyConfigurationMetricAggregationType :: Maybe (Val Text)
   , _applicationAutoScalingScalingPolicyStepScalingPolicyConfigurationMinAdjustmentMagnitude :: Maybe (Val Integer')
   , _applicationAutoScalingScalingPolicyStepScalingPolicyConfigurationStepAdjustments :: Maybe [ApplicationAutoScalingScalingPolicyStepAdjustment]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ApplicationAutoScalingScalingPolicyStepScalingPolicyConfiguration where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 66, omitNothingFields = True }
+  toJSON ApplicationAutoScalingScalingPolicyStepScalingPolicyConfiguration{..} =
+    object $
+    catMaybes
+    [ ("AdjustmentType" .=) <$> _applicationAutoScalingScalingPolicyStepScalingPolicyConfigurationAdjustmentType
+    , ("Cooldown" .=) <$> _applicationAutoScalingScalingPolicyStepScalingPolicyConfigurationCooldown
+    , ("MetricAggregationType" .=) <$> _applicationAutoScalingScalingPolicyStepScalingPolicyConfigurationMetricAggregationType
+    , ("MinAdjustmentMagnitude" .=) <$> _applicationAutoScalingScalingPolicyStepScalingPolicyConfigurationMinAdjustmentMagnitude
+    , ("StepAdjustments" .=) <$> _applicationAutoScalingScalingPolicyStepScalingPolicyConfigurationStepAdjustments
+    ]
 
 instance FromJSON ApplicationAutoScalingScalingPolicyStepScalingPolicyConfiguration where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 66, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ApplicationAutoScalingScalingPolicyStepScalingPolicyConfiguration <$>
+      obj .:? "AdjustmentType" <*>
+      obj .:? "Cooldown" <*>
+      obj .:? "MetricAggregationType" <*>
+      obj .:? "MinAdjustmentMagnitude" <*>
+      obj .:? "StepAdjustments"
+  parseJSON _ = mempty
 
 -- | Constructor for
 -- | 'ApplicationAutoScalingScalingPolicyStepScalingPolicyConfiguration'
diff --git a/library-gen/Stratosphere/ResourceProperties/AutoScalingAutoScalingGroupMetricsCollection.hs b/library-gen/Stratosphere/ResourceProperties/AutoScalingAutoScalingGroupMetricsCollection.hs
--- a/library-gen/Stratosphere/ResourceProperties/AutoScalingAutoScalingGroupMetricsCollection.hs
+++ b/library-gen/Stratosphere/ResourceProperties/AutoScalingAutoScalingGroupMetricsCollection.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-metricscollection.html
 
 module Stratosphere.ResourceProperties.AutoScalingAutoScalingGroupMetricsCollection where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -22,13 +22,22 @@
   AutoScalingAutoScalingGroupMetricsCollection
   { _autoScalingAutoScalingGroupMetricsCollectionGranularity :: Val Text
   , _autoScalingAutoScalingGroupMetricsCollectionMetrics :: Maybe [Val Text]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON AutoScalingAutoScalingGroupMetricsCollection where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 45, omitNothingFields = True }
+  toJSON AutoScalingAutoScalingGroupMetricsCollection{..} =
+    object $
+    catMaybes
+    [ Just ("Granularity" .= _autoScalingAutoScalingGroupMetricsCollectionGranularity)
+    , ("Metrics" .=) <$> _autoScalingAutoScalingGroupMetricsCollectionMetrics
+    ]
 
 instance FromJSON AutoScalingAutoScalingGroupMetricsCollection where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 45, omitNothingFields = True }
+  parseJSON (Object obj) =
+    AutoScalingAutoScalingGroupMetricsCollection <$>
+      obj .: "Granularity" <*>
+      obj .:? "Metrics"
+  parseJSON _ = mempty
 
 -- | Constructor for 'AutoScalingAutoScalingGroupMetricsCollection' containing
 -- | required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/AutoScalingAutoScalingGroupNotificationConfigurations.hs b/library-gen/Stratosphere/ResourceProperties/AutoScalingAutoScalingGroupNotificationConfigurations.hs
--- a/library-gen/Stratosphere/ResourceProperties/AutoScalingAutoScalingGroupNotificationConfigurations.hs
+++ b/library-gen/Stratosphere/ResourceProperties/AutoScalingAutoScalingGroupNotificationConfigurations.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-notificationconfigurations.html
 
 module Stratosphere.ResourceProperties.AutoScalingAutoScalingGroupNotificationConfigurations where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -22,13 +22,22 @@
   AutoScalingAutoScalingGroupNotificationConfigurations
   { _autoScalingAutoScalingGroupNotificationConfigurationsNotificationTypes :: Maybe [Val Text]
   , _autoScalingAutoScalingGroupNotificationConfigurationsTopicARN :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON AutoScalingAutoScalingGroupNotificationConfigurations where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 54, omitNothingFields = True }
+  toJSON AutoScalingAutoScalingGroupNotificationConfigurations{..} =
+    object $
+    catMaybes
+    [ ("NotificationTypes" .=) <$> _autoScalingAutoScalingGroupNotificationConfigurationsNotificationTypes
+    , Just ("TopicARN" .= _autoScalingAutoScalingGroupNotificationConfigurationsTopicARN)
+    ]
 
 instance FromJSON AutoScalingAutoScalingGroupNotificationConfigurations where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 54, omitNothingFields = True }
+  parseJSON (Object obj) =
+    AutoScalingAutoScalingGroupNotificationConfigurations <$>
+      obj .:? "NotificationTypes" <*>
+      obj .: "TopicARN"
+  parseJSON _ = mempty
 
 -- | Constructor for 'AutoScalingAutoScalingGroupNotificationConfigurations'
 -- | containing required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/AutoScalingAutoScalingGroupTagProperty.hs b/library-gen/Stratosphere/ResourceProperties/AutoScalingAutoScalingGroupTagProperty.hs
--- a/library-gen/Stratosphere/ResourceProperties/AutoScalingAutoScalingGroupTagProperty.hs
+++ b/library-gen/Stratosphere/ResourceProperties/AutoScalingAutoScalingGroupTagProperty.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-tags.html
 
 module Stratosphere.ResourceProperties.AutoScalingAutoScalingGroupTagProperty where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -22,13 +22,24 @@
   { _autoScalingAutoScalingGroupTagPropertyKey :: Val Text
   , _autoScalingAutoScalingGroupTagPropertyPropagateAtLaunch :: Val Bool'
   , _autoScalingAutoScalingGroupTagPropertyValue :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON AutoScalingAutoScalingGroupTagProperty where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 39, omitNothingFields = True }
+  toJSON AutoScalingAutoScalingGroupTagProperty{..} =
+    object $
+    catMaybes
+    [ Just ("Key" .= _autoScalingAutoScalingGroupTagPropertyKey)
+    , Just ("PropagateAtLaunch" .= _autoScalingAutoScalingGroupTagPropertyPropagateAtLaunch)
+    , Just ("Value" .= _autoScalingAutoScalingGroupTagPropertyValue)
+    ]
 
 instance FromJSON AutoScalingAutoScalingGroupTagProperty where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 39, omitNothingFields = True }
+  parseJSON (Object obj) =
+    AutoScalingAutoScalingGroupTagProperty <$>
+      obj .: "Key" <*>
+      obj .: "PropagateAtLaunch" <*>
+      obj .: "Value"
+  parseJSON _ = mempty
 
 -- | Constructor for 'AutoScalingAutoScalingGroupTagProperty' containing
 -- | required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/AutoScalingLaunchConfigurationBlockDevice.hs b/library-gen/Stratosphere/ResourceProperties/AutoScalingLaunchConfigurationBlockDevice.hs
--- a/library-gen/Stratosphere/ResourceProperties/AutoScalingLaunchConfigurationBlockDevice.hs
+++ b/library-gen/Stratosphere/ResourceProperties/AutoScalingLaunchConfigurationBlockDevice.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-launchconfig-blockdev-template.html
 
 module Stratosphere.ResourceProperties.AutoScalingLaunchConfigurationBlockDevice where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -25,13 +25,30 @@
   , _autoScalingLaunchConfigurationBlockDeviceSnapshotId :: Maybe (Val Text)
   , _autoScalingLaunchConfigurationBlockDeviceVolumeSize :: Maybe (Val Text)
   , _autoScalingLaunchConfigurationBlockDeviceVolumeType :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON AutoScalingLaunchConfigurationBlockDevice where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 42, omitNothingFields = True }
+  toJSON AutoScalingLaunchConfigurationBlockDevice{..} =
+    object $
+    catMaybes
+    [ ("DeleteOnTermination" .=) <$> _autoScalingLaunchConfigurationBlockDeviceDeleteOnTermination
+    , ("Encrypted" .=) <$> _autoScalingLaunchConfigurationBlockDeviceEncrypted
+    , ("Iops" .=) <$> _autoScalingLaunchConfigurationBlockDeviceIops
+    , ("SnapshotId" .=) <$> _autoScalingLaunchConfigurationBlockDeviceSnapshotId
+    , ("VolumeSize" .=) <$> _autoScalingLaunchConfigurationBlockDeviceVolumeSize
+    , ("VolumeType" .=) <$> _autoScalingLaunchConfigurationBlockDeviceVolumeType
+    ]
 
 instance FromJSON AutoScalingLaunchConfigurationBlockDevice where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 42, omitNothingFields = True }
+  parseJSON (Object obj) =
+    AutoScalingLaunchConfigurationBlockDevice <$>
+      obj .:? "DeleteOnTermination" <*>
+      obj .:? "Encrypted" <*>
+      obj .:? "Iops" <*>
+      obj .:? "SnapshotId" <*>
+      obj .:? "VolumeSize" <*>
+      obj .:? "VolumeType"
+  parseJSON _ = mempty
 
 -- | Constructor for 'AutoScalingLaunchConfigurationBlockDevice' containing
 -- | required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/AutoScalingLaunchConfigurationBlockDeviceMapping.hs b/library-gen/Stratosphere/ResourceProperties/AutoScalingLaunchConfigurationBlockDeviceMapping.hs
--- a/library-gen/Stratosphere/ResourceProperties/AutoScalingLaunchConfigurationBlockDeviceMapping.hs
+++ b/library-gen/Stratosphere/ResourceProperties/AutoScalingLaunchConfigurationBlockDeviceMapping.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-launchconfig-blockdev-mapping.html
 
 module Stratosphere.ResourceProperties.AutoScalingLaunchConfigurationBlockDeviceMapping where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.AutoScalingLaunchConfigurationBlockDevice
@@ -24,13 +24,26 @@
   , _autoScalingLaunchConfigurationBlockDeviceMappingEbs :: Maybe AutoScalingLaunchConfigurationBlockDevice
   , _autoScalingLaunchConfigurationBlockDeviceMappingNoDevice :: Maybe (Val Bool')
   , _autoScalingLaunchConfigurationBlockDeviceMappingVirtualName :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON AutoScalingLaunchConfigurationBlockDeviceMapping where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 49, omitNothingFields = True }
+  toJSON AutoScalingLaunchConfigurationBlockDeviceMapping{..} =
+    object $
+    catMaybes
+    [ Just ("DeviceName" .= _autoScalingLaunchConfigurationBlockDeviceMappingDeviceName)
+    , ("Ebs" .=) <$> _autoScalingLaunchConfigurationBlockDeviceMappingEbs
+    , ("NoDevice" .=) <$> _autoScalingLaunchConfigurationBlockDeviceMappingNoDevice
+    , ("VirtualName" .=) <$> _autoScalingLaunchConfigurationBlockDeviceMappingVirtualName
+    ]
 
 instance FromJSON AutoScalingLaunchConfigurationBlockDeviceMapping where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 49, omitNothingFields = True }
+  parseJSON (Object obj) =
+    AutoScalingLaunchConfigurationBlockDeviceMapping <$>
+      obj .: "DeviceName" <*>
+      obj .:? "Ebs" <*>
+      obj .:? "NoDevice" <*>
+      obj .:? "VirtualName"
+  parseJSON _ = mempty
 
 -- | Constructor for 'AutoScalingLaunchConfigurationBlockDeviceMapping'
 -- | containing required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/AutoScalingScalingPolicyStepAdjustment.hs b/library-gen/Stratosphere/ResourceProperties/AutoScalingScalingPolicyStepAdjustment.hs
--- a/library-gen/Stratosphere/ResourceProperties/AutoScalingScalingPolicyStepAdjustment.hs
+++ b/library-gen/Stratosphere/ResourceProperties/AutoScalingScalingPolicyStepAdjustment.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-scalingpolicy-stepadjustments.html
 
 module Stratosphere.ResourceProperties.AutoScalingScalingPolicyStepAdjustment where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -22,13 +22,24 @@
   { _autoScalingScalingPolicyStepAdjustmentMetricIntervalLowerBound :: Maybe (Val Double')
   , _autoScalingScalingPolicyStepAdjustmentMetricIntervalUpperBound :: Maybe (Val Double')
   , _autoScalingScalingPolicyStepAdjustmentScalingAdjustment :: Val Integer'
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON AutoScalingScalingPolicyStepAdjustment where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 39, omitNothingFields = True }
+  toJSON AutoScalingScalingPolicyStepAdjustment{..} =
+    object $
+    catMaybes
+    [ ("MetricIntervalLowerBound" .=) <$> _autoScalingScalingPolicyStepAdjustmentMetricIntervalLowerBound
+    , ("MetricIntervalUpperBound" .=) <$> _autoScalingScalingPolicyStepAdjustmentMetricIntervalUpperBound
+    , Just ("ScalingAdjustment" .= _autoScalingScalingPolicyStepAdjustmentScalingAdjustment)
+    ]
 
 instance FromJSON AutoScalingScalingPolicyStepAdjustment where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 39, omitNothingFields = True }
+  parseJSON (Object obj) =
+    AutoScalingScalingPolicyStepAdjustment <$>
+      obj .:? "MetricIntervalLowerBound" <*>
+      obj .:? "MetricIntervalUpperBound" <*>
+      obj .: "ScalingAdjustment"
+  parseJSON _ = mempty
 
 -- | Constructor for 'AutoScalingScalingPolicyStepAdjustment' containing
 -- | required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/CertificateManagerCertificateDomainValidationOption.hs b/library-gen/Stratosphere/ResourceProperties/CertificateManagerCertificateDomainValidationOption.hs
--- a/library-gen/Stratosphere/ResourceProperties/CertificateManagerCertificateDomainValidationOption.hs
+++ b/library-gen/Stratosphere/ResourceProperties/CertificateManagerCertificateDomainValidationOption.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-certificatemanager-certificate-domainvalidationoption.html
 
 module Stratosphere.ResourceProperties.CertificateManagerCertificateDomainValidationOption where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -22,13 +22,22 @@
   CertificateManagerCertificateDomainValidationOption
   { _certificateManagerCertificateDomainValidationOptionDomainName :: Val Text
   , _certificateManagerCertificateDomainValidationOptionValidationDomain :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON CertificateManagerCertificateDomainValidationOption where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 52, omitNothingFields = True }
+  toJSON CertificateManagerCertificateDomainValidationOption{..} =
+    object $
+    catMaybes
+    [ Just ("DomainName" .= _certificateManagerCertificateDomainValidationOptionDomainName)
+    , Just ("ValidationDomain" .= _certificateManagerCertificateDomainValidationOptionValidationDomain)
+    ]
 
 instance FromJSON CertificateManagerCertificateDomainValidationOption where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 52, omitNothingFields = True }
+  parseJSON (Object obj) =
+    CertificateManagerCertificateDomainValidationOption <$>
+      obj .: "DomainName" <*>
+      obj .: "ValidationDomain"
+  parseJSON _ = mempty
 
 -- | Constructor for 'CertificateManagerCertificateDomainValidationOption'
 -- | containing required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionCacheBehavior.hs b/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionCacheBehavior.hs
--- a/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionCacheBehavior.hs
+++ b/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionCacheBehavior.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-cachebehavior.html
 
 module Stratosphere.ResourceProperties.CloudFrontDistributionCacheBehavior where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.CloudFrontDistributionForwardedValues
@@ -30,13 +30,42 @@
   , _cloudFrontDistributionCacheBehaviorTargetOriginId :: Val Text
   , _cloudFrontDistributionCacheBehaviorTrustedSigners :: Maybe [Val Text]
   , _cloudFrontDistributionCacheBehaviorViewerProtocolPolicy :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON CloudFrontDistributionCacheBehavior where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 36, omitNothingFields = True }
+  toJSON CloudFrontDistributionCacheBehavior{..} =
+    object $
+    catMaybes
+    [ ("AllowedMethods" .=) <$> _cloudFrontDistributionCacheBehaviorAllowedMethods
+    , ("CachedMethods" .=) <$> _cloudFrontDistributionCacheBehaviorCachedMethods
+    , ("Compress" .=) <$> _cloudFrontDistributionCacheBehaviorCompress
+    , ("DefaultTTL" .=) <$> _cloudFrontDistributionCacheBehaviorDefaultTTL
+    , Just ("ForwardedValues" .= _cloudFrontDistributionCacheBehaviorForwardedValues)
+    , ("MaxTTL" .=) <$> _cloudFrontDistributionCacheBehaviorMaxTTL
+    , ("MinTTL" .=) <$> _cloudFrontDistributionCacheBehaviorMinTTL
+    , Just ("PathPattern" .= _cloudFrontDistributionCacheBehaviorPathPattern)
+    , ("SmoothStreaming" .=) <$> _cloudFrontDistributionCacheBehaviorSmoothStreaming
+    , Just ("TargetOriginId" .= _cloudFrontDistributionCacheBehaviorTargetOriginId)
+    , ("TrustedSigners" .=) <$> _cloudFrontDistributionCacheBehaviorTrustedSigners
+    , Just ("ViewerProtocolPolicy" .= _cloudFrontDistributionCacheBehaviorViewerProtocolPolicy)
+    ]
 
 instance FromJSON CloudFrontDistributionCacheBehavior where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 36, omitNothingFields = True }
+  parseJSON (Object obj) =
+    CloudFrontDistributionCacheBehavior <$>
+      obj .:? "AllowedMethods" <*>
+      obj .:? "CachedMethods" <*>
+      obj .:? "Compress" <*>
+      obj .:? "DefaultTTL" <*>
+      obj .: "ForwardedValues" <*>
+      obj .:? "MaxTTL" <*>
+      obj .:? "MinTTL" <*>
+      obj .: "PathPattern" <*>
+      obj .:? "SmoothStreaming" <*>
+      obj .: "TargetOriginId" <*>
+      obj .:? "TrustedSigners" <*>
+      obj .: "ViewerProtocolPolicy"
+  parseJSON _ = mempty
 
 -- | Constructor for 'CloudFrontDistributionCacheBehavior' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionCookies.hs b/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionCookies.hs
--- a/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionCookies.hs
+++ b/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionCookies.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-forwardedvalues-cookies.html
 
 module Stratosphere.ResourceProperties.CloudFrontDistributionCookies where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   CloudFrontDistributionCookies
   { _cloudFrontDistributionCookiesForward :: Val Text
   , _cloudFrontDistributionCookiesWhitelistedNames :: Maybe [Val Text]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON CloudFrontDistributionCookies where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
+  toJSON CloudFrontDistributionCookies{..} =
+    object $
+    catMaybes
+    [ Just ("Forward" .= _cloudFrontDistributionCookiesForward)
+    , ("WhitelistedNames" .=) <$> _cloudFrontDistributionCookiesWhitelistedNames
+    ]
 
 instance FromJSON CloudFrontDistributionCookies where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
+  parseJSON (Object obj) =
+    CloudFrontDistributionCookies <$>
+      obj .: "Forward" <*>
+      obj .:? "WhitelistedNames"
+  parseJSON _ = mempty
 
 -- | Constructor for 'CloudFrontDistributionCookies' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionCustomErrorResponse.hs b/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionCustomErrorResponse.hs
--- a/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionCustomErrorResponse.hs
+++ b/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionCustomErrorResponse.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distributionconfig-customerrorresponse.html
 
 module Stratosphere.ResourceProperties.CloudFrontDistributionCustomErrorResponse where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -23,13 +23,26 @@
   , _cloudFrontDistributionCustomErrorResponseErrorCode :: Val Integer'
   , _cloudFrontDistributionCustomErrorResponseResponseCode :: Maybe (Val Integer')
   , _cloudFrontDistributionCustomErrorResponseResponsePagePath :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON CloudFrontDistributionCustomErrorResponse where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 42, omitNothingFields = True }
+  toJSON CloudFrontDistributionCustomErrorResponse{..} =
+    object $
+    catMaybes
+    [ ("ErrorCachingMinTTL" .=) <$> _cloudFrontDistributionCustomErrorResponseErrorCachingMinTTL
+    , Just ("ErrorCode" .= _cloudFrontDistributionCustomErrorResponseErrorCode)
+    , ("ResponseCode" .=) <$> _cloudFrontDistributionCustomErrorResponseResponseCode
+    , ("ResponsePagePath" .=) <$> _cloudFrontDistributionCustomErrorResponseResponsePagePath
+    ]
 
 instance FromJSON CloudFrontDistributionCustomErrorResponse where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 42, omitNothingFields = True }
+  parseJSON (Object obj) =
+    CloudFrontDistributionCustomErrorResponse <$>
+      obj .:? "ErrorCachingMinTTL" <*>
+      obj .: "ErrorCode" <*>
+      obj .:? "ResponseCode" <*>
+      obj .:? "ResponsePagePath"
+  parseJSON _ = mempty
 
 -- | Constructor for 'CloudFrontDistributionCustomErrorResponse' containing
 -- | required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionCustomOriginConfig.hs b/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionCustomOriginConfig.hs
--- a/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionCustomOriginConfig.hs
+++ b/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionCustomOriginConfig.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-customorigin.html
 
 module Stratosphere.ResourceProperties.CloudFrontDistributionCustomOriginConfig where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -23,13 +23,26 @@
   , _cloudFrontDistributionCustomOriginConfigHTTPSPort :: Maybe (Val Integer')
   , _cloudFrontDistributionCustomOriginConfigOriginProtocolPolicy :: Val Text
   , _cloudFrontDistributionCustomOriginConfigOriginSSLProtocols :: Maybe [Val Text]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON CloudFrontDistributionCustomOriginConfig where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 41, omitNothingFields = True }
+  toJSON CloudFrontDistributionCustomOriginConfig{..} =
+    object $
+    catMaybes
+    [ ("HTTPPort" .=) <$> _cloudFrontDistributionCustomOriginConfigHTTPPort
+    , ("HTTPSPort" .=) <$> _cloudFrontDistributionCustomOriginConfigHTTPSPort
+    , Just ("OriginProtocolPolicy" .= _cloudFrontDistributionCustomOriginConfigOriginProtocolPolicy)
+    , ("OriginSSLProtocols" .=) <$> _cloudFrontDistributionCustomOriginConfigOriginSSLProtocols
+    ]
 
 instance FromJSON CloudFrontDistributionCustomOriginConfig where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 41, omitNothingFields = True }
+  parseJSON (Object obj) =
+    CloudFrontDistributionCustomOriginConfig <$>
+      obj .:? "HTTPPort" <*>
+      obj .:? "HTTPSPort" <*>
+      obj .: "OriginProtocolPolicy" <*>
+      obj .:? "OriginSSLProtocols"
+  parseJSON _ = mempty
 
 -- | Constructor for 'CloudFrontDistributionCustomOriginConfig' containing
 -- | required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionDefaultCacheBehavior.hs b/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionDefaultCacheBehavior.hs
--- a/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionDefaultCacheBehavior.hs
+++ b/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionDefaultCacheBehavior.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-defaultcachebehavior.html
 
 module Stratosphere.ResourceProperties.CloudFrontDistributionDefaultCacheBehavior where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.CloudFrontDistributionForwardedValues
@@ -30,13 +30,40 @@
   , _cloudFrontDistributionDefaultCacheBehaviorTargetOriginId :: Val Text
   , _cloudFrontDistributionDefaultCacheBehaviorTrustedSigners :: Maybe [Val Text]
   , _cloudFrontDistributionDefaultCacheBehaviorViewerProtocolPolicy :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON CloudFrontDistributionDefaultCacheBehavior where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 43, omitNothingFields = True }
+  toJSON CloudFrontDistributionDefaultCacheBehavior{..} =
+    object $
+    catMaybes
+    [ ("AllowedMethods" .=) <$> _cloudFrontDistributionDefaultCacheBehaviorAllowedMethods
+    , ("CachedMethods" .=) <$> _cloudFrontDistributionDefaultCacheBehaviorCachedMethods
+    , ("Compress" .=) <$> _cloudFrontDistributionDefaultCacheBehaviorCompress
+    , ("DefaultTTL" .=) <$> _cloudFrontDistributionDefaultCacheBehaviorDefaultTTL
+    , Just ("ForwardedValues" .= _cloudFrontDistributionDefaultCacheBehaviorForwardedValues)
+    , ("MaxTTL" .=) <$> _cloudFrontDistributionDefaultCacheBehaviorMaxTTL
+    , ("MinTTL" .=) <$> _cloudFrontDistributionDefaultCacheBehaviorMinTTL
+    , ("SmoothStreaming" .=) <$> _cloudFrontDistributionDefaultCacheBehaviorSmoothStreaming
+    , Just ("TargetOriginId" .= _cloudFrontDistributionDefaultCacheBehaviorTargetOriginId)
+    , ("TrustedSigners" .=) <$> _cloudFrontDistributionDefaultCacheBehaviorTrustedSigners
+    , Just ("ViewerProtocolPolicy" .= _cloudFrontDistributionDefaultCacheBehaviorViewerProtocolPolicy)
+    ]
 
 instance FromJSON CloudFrontDistributionDefaultCacheBehavior where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 43, omitNothingFields = True }
+  parseJSON (Object obj) =
+    CloudFrontDistributionDefaultCacheBehavior <$>
+      obj .:? "AllowedMethods" <*>
+      obj .:? "CachedMethods" <*>
+      obj .:? "Compress" <*>
+      obj .:? "DefaultTTL" <*>
+      obj .: "ForwardedValues" <*>
+      obj .:? "MaxTTL" <*>
+      obj .:? "MinTTL" <*>
+      obj .:? "SmoothStreaming" <*>
+      obj .: "TargetOriginId" <*>
+      obj .:? "TrustedSigners" <*>
+      obj .: "ViewerProtocolPolicy"
+  parseJSON _ = mempty
 
 -- | Constructor for 'CloudFrontDistributionDefaultCacheBehavior' containing
 -- | required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionDistributionConfig.hs b/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionDistributionConfig.hs
--- a/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionDistributionConfig.hs
+++ b/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionDistributionConfig.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distributionconfig.html
 
 module Stratosphere.ResourceProperties.CloudFrontDistributionDistributionConfig where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.CloudFrontDistributionCacheBehavior
@@ -39,13 +39,46 @@
   , _cloudFrontDistributionDistributionConfigRestrictions :: Maybe CloudFrontDistributionRestrictions
   , _cloudFrontDistributionDistributionConfigViewerCertificate :: Maybe CloudFrontDistributionViewerCertificate
   , _cloudFrontDistributionDistributionConfigWebACLId :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON CloudFrontDistributionDistributionConfig where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 41, omitNothingFields = True }
+  toJSON CloudFrontDistributionDistributionConfig{..} =
+    object $
+    catMaybes
+    [ ("Aliases" .=) <$> _cloudFrontDistributionDistributionConfigAliases
+    , ("CacheBehaviors" .=) <$> _cloudFrontDistributionDistributionConfigCacheBehaviors
+    , ("Comment" .=) <$> _cloudFrontDistributionDistributionConfigComment
+    , ("CustomErrorResponses" .=) <$> _cloudFrontDistributionDistributionConfigCustomErrorResponses
+    , Just ("DefaultCacheBehavior" .= _cloudFrontDistributionDistributionConfigDefaultCacheBehavior)
+    , ("DefaultRootObject" .=) <$> _cloudFrontDistributionDistributionConfigDefaultRootObject
+    , Just ("Enabled" .= _cloudFrontDistributionDistributionConfigEnabled)
+    , ("HttpVersion" .=) <$> _cloudFrontDistributionDistributionConfigHttpVersion
+    , ("Logging" .=) <$> _cloudFrontDistributionDistributionConfigLogging
+    , Just ("Origins" .= _cloudFrontDistributionDistributionConfigOrigins)
+    , ("PriceClass" .=) <$> _cloudFrontDistributionDistributionConfigPriceClass
+    , ("Restrictions" .=) <$> _cloudFrontDistributionDistributionConfigRestrictions
+    , ("ViewerCertificate" .=) <$> _cloudFrontDistributionDistributionConfigViewerCertificate
+    , ("WebACLId" .=) <$> _cloudFrontDistributionDistributionConfigWebACLId
+    ]
 
 instance FromJSON CloudFrontDistributionDistributionConfig where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 41, omitNothingFields = True }
+  parseJSON (Object obj) =
+    CloudFrontDistributionDistributionConfig <$>
+      obj .:? "Aliases" <*>
+      obj .:? "CacheBehaviors" <*>
+      obj .:? "Comment" <*>
+      obj .:? "CustomErrorResponses" <*>
+      obj .: "DefaultCacheBehavior" <*>
+      obj .:? "DefaultRootObject" <*>
+      obj .: "Enabled" <*>
+      obj .:? "HttpVersion" <*>
+      obj .:? "Logging" <*>
+      obj .: "Origins" <*>
+      obj .:? "PriceClass" <*>
+      obj .:? "Restrictions" <*>
+      obj .:? "ViewerCertificate" <*>
+      obj .:? "WebACLId"
+  parseJSON _ = mempty
 
 -- | Constructor for 'CloudFrontDistributionDistributionConfig' containing
 -- | required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionForwardedValues.hs b/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionForwardedValues.hs
--- a/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionForwardedValues.hs
+++ b/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionForwardedValues.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-forwardedvalues.html
 
 module Stratosphere.ResourceProperties.CloudFrontDistributionForwardedValues where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.CloudFrontDistributionCookies
@@ -23,13 +23,26 @@
   , _cloudFrontDistributionForwardedValuesHeaders :: Maybe [Val Text]
   , _cloudFrontDistributionForwardedValuesQueryString :: Val Bool'
   , _cloudFrontDistributionForwardedValuesQueryStringCacheKeys :: Maybe [Val Text]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON CloudFrontDistributionForwardedValues where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 38, omitNothingFields = True }
+  toJSON CloudFrontDistributionForwardedValues{..} =
+    object $
+    catMaybes
+    [ ("Cookies" .=) <$> _cloudFrontDistributionForwardedValuesCookies
+    , ("Headers" .=) <$> _cloudFrontDistributionForwardedValuesHeaders
+    , Just ("QueryString" .= _cloudFrontDistributionForwardedValuesQueryString)
+    , ("QueryStringCacheKeys" .=) <$> _cloudFrontDistributionForwardedValuesQueryStringCacheKeys
+    ]
 
 instance FromJSON CloudFrontDistributionForwardedValues where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 38, omitNothingFields = True }
+  parseJSON (Object obj) =
+    CloudFrontDistributionForwardedValues <$>
+      obj .:? "Cookies" <*>
+      obj .:? "Headers" <*>
+      obj .: "QueryString" <*>
+      obj .:? "QueryStringCacheKeys"
+  parseJSON _ = mempty
 
 -- | Constructor for 'CloudFrontDistributionForwardedValues' containing
 -- | required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionGeoRestriction.hs b/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionGeoRestriction.hs
--- a/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionGeoRestriction.hs
+++ b/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionGeoRestriction.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distributionconfig-restrictions-georestriction.html
 
 module Stratosphere.ResourceProperties.CloudFrontDistributionGeoRestriction where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   CloudFrontDistributionGeoRestriction
   { _cloudFrontDistributionGeoRestrictionLocations :: Maybe [Val Text]
   , _cloudFrontDistributionGeoRestrictionRestrictionType :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON CloudFrontDistributionGeoRestriction where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 37, omitNothingFields = True }
+  toJSON CloudFrontDistributionGeoRestriction{..} =
+    object $
+    catMaybes
+    [ ("Locations" .=) <$> _cloudFrontDistributionGeoRestrictionLocations
+    , Just ("RestrictionType" .= _cloudFrontDistributionGeoRestrictionRestrictionType)
+    ]
 
 instance FromJSON CloudFrontDistributionGeoRestriction where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 37, omitNothingFields = True }
+  parseJSON (Object obj) =
+    CloudFrontDistributionGeoRestriction <$>
+      obj .:? "Locations" <*>
+      obj .: "RestrictionType"
+  parseJSON _ = mempty
 
 -- | Constructor for 'CloudFrontDistributionGeoRestriction' containing
 -- | required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionLogging.hs b/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionLogging.hs
--- a/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionLogging.hs
+++ b/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionLogging.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-logging.html
 
 module Stratosphere.ResourceProperties.CloudFrontDistributionLogging where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -21,13 +21,24 @@
   { _cloudFrontDistributionLoggingBucket :: Val Text
   , _cloudFrontDistributionLoggingIncludeCookies :: Maybe (Val Bool')
   , _cloudFrontDistributionLoggingPrefix :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON CloudFrontDistributionLogging where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
+  toJSON CloudFrontDistributionLogging{..} =
+    object $
+    catMaybes
+    [ Just ("Bucket" .= _cloudFrontDistributionLoggingBucket)
+    , ("IncludeCookies" .=) <$> _cloudFrontDistributionLoggingIncludeCookies
+    , ("Prefix" .=) <$> _cloudFrontDistributionLoggingPrefix
+    ]
 
 instance FromJSON CloudFrontDistributionLogging where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
+  parseJSON (Object obj) =
+    CloudFrontDistributionLogging <$>
+      obj .: "Bucket" <*>
+      obj .:? "IncludeCookies" <*>
+      obj .:? "Prefix"
+  parseJSON _ = mempty
 
 -- | Constructor for 'CloudFrontDistributionLogging' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionOrigin.hs b/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionOrigin.hs
--- a/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionOrigin.hs
+++ b/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionOrigin.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-origin.html
 
 module Stratosphere.ResourceProperties.CloudFrontDistributionOrigin where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.CloudFrontDistributionCustomOriginConfig
@@ -26,13 +26,30 @@
   , _cloudFrontDistributionOriginOriginCustomHeaders :: Maybe [CloudFrontDistributionOriginCustomHeader]
   , _cloudFrontDistributionOriginOriginPath :: Maybe (Val Text)
   , _cloudFrontDistributionOriginS3OriginConfig :: Maybe CloudFrontDistributionS3OriginConfig
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON CloudFrontDistributionOrigin where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 29, omitNothingFields = True }
+  toJSON CloudFrontDistributionOrigin{..} =
+    object $
+    catMaybes
+    [ ("CustomOriginConfig" .=) <$> _cloudFrontDistributionOriginCustomOriginConfig
+    , Just ("DomainName" .= _cloudFrontDistributionOriginDomainName)
+    , Just ("Id" .= _cloudFrontDistributionOriginId)
+    , ("OriginCustomHeaders" .=) <$> _cloudFrontDistributionOriginOriginCustomHeaders
+    , ("OriginPath" .=) <$> _cloudFrontDistributionOriginOriginPath
+    , ("S3OriginConfig" .=) <$> _cloudFrontDistributionOriginS3OriginConfig
+    ]
 
 instance FromJSON CloudFrontDistributionOrigin where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 29, omitNothingFields = True }
+  parseJSON (Object obj) =
+    CloudFrontDistributionOrigin <$>
+      obj .:? "CustomOriginConfig" <*>
+      obj .: "DomainName" <*>
+      obj .: "Id" <*>
+      obj .:? "OriginCustomHeaders" <*>
+      obj .:? "OriginPath" <*>
+      obj .:? "S3OriginConfig"
+  parseJSON _ = mempty
 
 -- | Constructor for 'CloudFrontDistributionOrigin' containing required fields
 -- | as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionOriginCustomHeader.hs b/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionOriginCustomHeader.hs
--- a/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionOriginCustomHeader.hs
+++ b/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionOriginCustomHeader.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-origin-origincustomheader.html
 
 module Stratosphere.ResourceProperties.CloudFrontDistributionOriginCustomHeader where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -21,13 +21,22 @@
   CloudFrontDistributionOriginCustomHeader
   { _cloudFrontDistributionOriginCustomHeaderHeaderName :: Val Text
   , _cloudFrontDistributionOriginCustomHeaderHeaderValue :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON CloudFrontDistributionOriginCustomHeader where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 41, omitNothingFields = True }
+  toJSON CloudFrontDistributionOriginCustomHeader{..} =
+    object $
+    catMaybes
+    [ Just ("HeaderName" .= _cloudFrontDistributionOriginCustomHeaderHeaderName)
+    , Just ("HeaderValue" .= _cloudFrontDistributionOriginCustomHeaderHeaderValue)
+    ]
 
 instance FromJSON CloudFrontDistributionOriginCustomHeader where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 41, omitNothingFields = True }
+  parseJSON (Object obj) =
+    CloudFrontDistributionOriginCustomHeader <$>
+      obj .: "HeaderName" <*>
+      obj .: "HeaderValue"
+  parseJSON _ = mempty
 
 -- | Constructor for 'CloudFrontDistributionOriginCustomHeader' containing
 -- | required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionRestrictions.hs b/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionRestrictions.hs
--- a/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionRestrictions.hs
+++ b/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionRestrictions.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distributionconfig-restrictions.html
 
 module Stratosphere.ResourceProperties.CloudFrontDistributionRestrictions where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.CloudFrontDistributionGeoRestriction
@@ -19,13 +19,20 @@
 data CloudFrontDistributionRestrictions =
   CloudFrontDistributionRestrictions
   { _cloudFrontDistributionRestrictionsGeoRestriction :: CloudFrontDistributionGeoRestriction
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON CloudFrontDistributionRestrictions where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 35, omitNothingFields = True }
+  toJSON CloudFrontDistributionRestrictions{..} =
+    object $
+    catMaybes
+    [ Just ("GeoRestriction" .= _cloudFrontDistributionRestrictionsGeoRestriction)
+    ]
 
 instance FromJSON CloudFrontDistributionRestrictions where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 35, omitNothingFields = True }
+  parseJSON (Object obj) =
+    CloudFrontDistributionRestrictions <$>
+      obj .: "GeoRestriction"
+  parseJSON _ = mempty
 
 -- | Constructor for 'CloudFrontDistributionRestrictions' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionS3OriginConfig.hs b/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionS3OriginConfig.hs
--- a/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionS3OriginConfig.hs
+++ b/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionS3OriginConfig.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-s3origin.html
 
 module Stratosphere.ResourceProperties.CloudFrontDistributionS3OriginConfig where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -19,13 +19,20 @@
 data CloudFrontDistributionS3OriginConfig =
   CloudFrontDistributionS3OriginConfig
   { _cloudFrontDistributionS3OriginConfigOriginAccessIdentity :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON CloudFrontDistributionS3OriginConfig where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 37, omitNothingFields = True }
+  toJSON CloudFrontDistributionS3OriginConfig{..} =
+    object $
+    catMaybes
+    [ ("OriginAccessIdentity" .=) <$> _cloudFrontDistributionS3OriginConfigOriginAccessIdentity
+    ]
 
 instance FromJSON CloudFrontDistributionS3OriginConfig where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 37, omitNothingFields = True }
+  parseJSON (Object obj) =
+    CloudFrontDistributionS3OriginConfig <$>
+      obj .:? "OriginAccessIdentity"
+  parseJSON _ = mempty
 
 -- | Constructor for 'CloudFrontDistributionS3OriginConfig' containing
 -- | required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionViewerCertificate.hs b/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionViewerCertificate.hs
--- a/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionViewerCertificate.hs
+++ b/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionViewerCertificate.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distributionconfig-viewercertificate.html
 
 module Stratosphere.ResourceProperties.CloudFrontDistributionViewerCertificate where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -24,13 +24,28 @@
   , _cloudFrontDistributionViewerCertificateIamCertificateId :: Maybe (Val Text)
   , _cloudFrontDistributionViewerCertificateMinimumProtocolVersion :: Maybe (Val Text)
   , _cloudFrontDistributionViewerCertificateSslSupportMethod :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON CloudFrontDistributionViewerCertificate where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 40, omitNothingFields = True }
+  toJSON CloudFrontDistributionViewerCertificate{..} =
+    object $
+    catMaybes
+    [ ("AcmCertificateArn" .=) <$> _cloudFrontDistributionViewerCertificateAcmCertificateArn
+    , ("CloudFrontDefaultCertificate" .=) <$> _cloudFrontDistributionViewerCertificateCloudFrontDefaultCertificate
+    , ("IamCertificateId" .=) <$> _cloudFrontDistributionViewerCertificateIamCertificateId
+    , ("MinimumProtocolVersion" .=) <$> _cloudFrontDistributionViewerCertificateMinimumProtocolVersion
+    , ("SslSupportMethod" .=) <$> _cloudFrontDistributionViewerCertificateSslSupportMethod
+    ]
 
 instance FromJSON CloudFrontDistributionViewerCertificate where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 40, omitNothingFields = True }
+  parseJSON (Object obj) =
+    CloudFrontDistributionViewerCertificate <$>
+      obj .:? "AcmCertificateArn" <*>
+      obj .:? "CloudFrontDefaultCertificate" <*>
+      obj .:? "IamCertificateId" <*>
+      obj .:? "MinimumProtocolVersion" <*>
+      obj .:? "SslSupportMethod"
+  parseJSON _ = mempty
 
 -- | Constructor for 'CloudFrontDistributionViewerCertificate' containing
 -- | required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/CloudWatchAlarmDimension.hs b/library-gen/Stratosphere/ResourceProperties/CloudWatchAlarmDimension.hs
--- a/library-gen/Stratosphere/ResourceProperties/CloudWatchAlarmDimension.hs
+++ b/library-gen/Stratosphere/ResourceProperties/CloudWatchAlarmDimension.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cw-dimension.html
 
 module Stratosphere.ResourceProperties.CloudWatchAlarmDimension where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   CloudWatchAlarmDimension
   { _cloudWatchAlarmDimensionName :: Val Text
   , _cloudWatchAlarmDimensionValue :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON CloudWatchAlarmDimension where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 25, omitNothingFields = True }
+  toJSON CloudWatchAlarmDimension{..} =
+    object $
+    catMaybes
+    [ Just ("Name" .= _cloudWatchAlarmDimensionName)
+    , Just ("Value" .= _cloudWatchAlarmDimensionValue)
+    ]
 
 instance FromJSON CloudWatchAlarmDimension where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 25, omitNothingFields = True }
+  parseJSON (Object obj) =
+    CloudWatchAlarmDimension <$>
+      obj .: "Name" <*>
+      obj .: "Value"
+  parseJSON _ = mempty
 
 -- | Constructor for 'CloudWatchAlarmDimension' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/CodeBuildProjectArtifacts.hs b/library-gen/Stratosphere/ResourceProperties/CodeBuildProjectArtifacts.hs
--- a/library-gen/Stratosphere/ResourceProperties/CodeBuildProjectArtifacts.hs
+++ b/library-gen/Stratosphere/ResourceProperties/CodeBuildProjectArtifacts.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codebuild-project-artifacts.html
 
 module Stratosphere.ResourceProperties.CodeBuildProjectArtifacts where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -24,13 +24,30 @@
   , _codeBuildProjectArtifactsPackaging :: Maybe (Val Text)
   , _codeBuildProjectArtifactsPath :: Maybe (Val Text)
   , _codeBuildProjectArtifactsType :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON CodeBuildProjectArtifacts where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 26, omitNothingFields = True }
+  toJSON CodeBuildProjectArtifacts{..} =
+    object $
+    catMaybes
+    [ ("Location" .=) <$> _codeBuildProjectArtifactsLocation
+    , ("Name" .=) <$> _codeBuildProjectArtifactsName
+    , ("NamespaceType" .=) <$> _codeBuildProjectArtifactsNamespaceType
+    , ("Packaging" .=) <$> _codeBuildProjectArtifactsPackaging
+    , ("Path" .=) <$> _codeBuildProjectArtifactsPath
+    , ("Type" .=) <$> _codeBuildProjectArtifactsType
+    ]
 
 instance FromJSON CodeBuildProjectArtifacts where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 26, omitNothingFields = True }
+  parseJSON (Object obj) =
+    CodeBuildProjectArtifacts <$>
+      obj .:? "Location" <*>
+      obj .:? "Name" <*>
+      obj .:? "NamespaceType" <*>
+      obj .:? "Packaging" <*>
+      obj .:? "Path" <*>
+      obj .:? "Type"
+  parseJSON _ = mempty
 
 -- | Constructor for 'CodeBuildProjectArtifacts' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/CodeBuildProjectEnvironment.hs b/library-gen/Stratosphere/ResourceProperties/CodeBuildProjectEnvironment.hs
--- a/library-gen/Stratosphere/ResourceProperties/CodeBuildProjectEnvironment.hs
+++ b/library-gen/Stratosphere/ResourceProperties/CodeBuildProjectEnvironment.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codebuild-project-environment.html
 
 module Stratosphere.ResourceProperties.CodeBuildProjectEnvironment where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.CodeBuildProjectEnvironmentVariable
@@ -22,13 +22,26 @@
   , _codeBuildProjectEnvironmentEnvironmentVariables :: Maybe [CodeBuildProjectEnvironmentVariable]
   , _codeBuildProjectEnvironmentImage :: Maybe (Val Text)
   , _codeBuildProjectEnvironmentType :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON CodeBuildProjectEnvironment where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+  toJSON CodeBuildProjectEnvironment{..} =
+    object $
+    catMaybes
+    [ ("ComputeType" .=) <$> _codeBuildProjectEnvironmentComputeType
+    , ("EnvironmentVariables" .=) <$> _codeBuildProjectEnvironmentEnvironmentVariables
+    , ("Image" .=) <$> _codeBuildProjectEnvironmentImage
+    , ("Type" .=) <$> _codeBuildProjectEnvironmentType
+    ]
 
 instance FromJSON CodeBuildProjectEnvironment where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+  parseJSON (Object obj) =
+    CodeBuildProjectEnvironment <$>
+      obj .:? "ComputeType" <*>
+      obj .:? "EnvironmentVariables" <*>
+      obj .:? "Image" <*>
+      obj .:? "Type"
+  parseJSON _ = mempty
 
 -- | Constructor for 'CodeBuildProjectEnvironment' containing required fields
 -- | as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/CodeBuildProjectEnvironmentVariable.hs b/library-gen/Stratosphere/ResourceProperties/CodeBuildProjectEnvironmentVariable.hs
--- a/library-gen/Stratosphere/ResourceProperties/CodeBuildProjectEnvironmentVariable.hs
+++ b/library-gen/Stratosphere/ResourceProperties/CodeBuildProjectEnvironmentVariable.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codebuild-project-environmentvariable.html
 
 module Stratosphere.ResourceProperties.CodeBuildProjectEnvironmentVariable where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   CodeBuildProjectEnvironmentVariable
   { _codeBuildProjectEnvironmentVariableName :: Maybe (Val Text)
   , _codeBuildProjectEnvironmentVariableValue :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON CodeBuildProjectEnvironmentVariable where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 36, omitNothingFields = True }
+  toJSON CodeBuildProjectEnvironmentVariable{..} =
+    object $
+    catMaybes
+    [ ("Name" .=) <$> _codeBuildProjectEnvironmentVariableName
+    , ("Value" .=) <$> _codeBuildProjectEnvironmentVariableValue
+    ]
 
 instance FromJSON CodeBuildProjectEnvironmentVariable where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 36, omitNothingFields = True }
+  parseJSON (Object obj) =
+    CodeBuildProjectEnvironmentVariable <$>
+      obj .:? "Name" <*>
+      obj .:? "Value"
+  parseJSON _ = mempty
 
 -- | Constructor for 'CodeBuildProjectEnvironmentVariable' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/CodeBuildProjectSource.hs b/library-gen/Stratosphere/ResourceProperties/CodeBuildProjectSource.hs
--- a/library-gen/Stratosphere/ResourceProperties/CodeBuildProjectSource.hs
+++ b/library-gen/Stratosphere/ResourceProperties/CodeBuildProjectSource.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codebuild-project-source.html
 
 module Stratosphere.ResourceProperties.CodeBuildProjectSource where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.CodeBuildProjectSourceAuth
@@ -22,13 +22,26 @@
   , _codeBuildProjectSourceBuildSpec :: Maybe (Val Text)
   , _codeBuildProjectSourceLocation :: Maybe (Val Text)
   , _codeBuildProjectSourceType :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON CodeBuildProjectSource where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 23, omitNothingFields = True }
+  toJSON CodeBuildProjectSource{..} =
+    object $
+    catMaybes
+    [ ("Auth" .=) <$> _codeBuildProjectSourceAuth
+    , ("BuildSpec" .=) <$> _codeBuildProjectSourceBuildSpec
+    , ("Location" .=) <$> _codeBuildProjectSourceLocation
+    , ("Type" .=) <$> _codeBuildProjectSourceType
+    ]
 
 instance FromJSON CodeBuildProjectSource where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 23, omitNothingFields = True }
+  parseJSON (Object obj) =
+    CodeBuildProjectSource <$>
+      obj .:? "Auth" <*>
+      obj .:? "BuildSpec" <*>
+      obj .:? "Location" <*>
+      obj .:? "Type"
+  parseJSON _ = mempty
 
 -- | Constructor for 'CodeBuildProjectSource' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/CodeBuildProjectSourceAuth.hs b/library-gen/Stratosphere/ResourceProperties/CodeBuildProjectSourceAuth.hs
--- a/library-gen/Stratosphere/ResourceProperties/CodeBuildProjectSourceAuth.hs
+++ b/library-gen/Stratosphere/ResourceProperties/CodeBuildProjectSourceAuth.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codebuild-project-sourceauth.html
 
 module Stratosphere.ResourceProperties.CodeBuildProjectSourceAuth where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   CodeBuildProjectSourceAuth
   { _codeBuildProjectSourceAuthResource :: Maybe (Val Text)
   , _codeBuildProjectSourceAuthType :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON CodeBuildProjectSourceAuth where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
+  toJSON CodeBuildProjectSourceAuth{..} =
+    object $
+    catMaybes
+    [ ("Resource" .=) <$> _codeBuildProjectSourceAuthResource
+    , ("Type" .=) <$> _codeBuildProjectSourceAuthType
+    ]
 
 instance FromJSON CodeBuildProjectSourceAuth where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
+  parseJSON (Object obj) =
+    CodeBuildProjectSourceAuth <$>
+      obj .:? "Resource" <*>
+      obj .:? "Type"
+  parseJSON _ = mempty
 
 -- | Constructor for 'CodeBuildProjectSourceAuth' containing required fields
 -- | as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/CodeCommitRepositoryRepositoryTrigger.hs b/library-gen/Stratosphere/ResourceProperties/CodeCommitRepositoryRepositoryTrigger.hs
--- a/library-gen/Stratosphere/ResourceProperties/CodeCommitRepositoryRepositoryTrigger.hs
+++ b/library-gen/Stratosphere/ResourceProperties/CodeCommitRepositoryRepositoryTrigger.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codecommit-repository-repositorytrigger.html
 
 module Stratosphere.ResourceProperties.CodeCommitRepositoryRepositoryTrigger where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -24,13 +24,28 @@
   , _codeCommitRepositoryRepositoryTriggerDestinationArn :: Maybe (Val Text)
   , _codeCommitRepositoryRepositoryTriggerEvents :: Maybe [Val Text]
   , _codeCommitRepositoryRepositoryTriggerName :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON CodeCommitRepositoryRepositoryTrigger where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 38, omitNothingFields = True }
+  toJSON CodeCommitRepositoryRepositoryTrigger{..} =
+    object $
+    catMaybes
+    [ ("Branches" .=) <$> _codeCommitRepositoryRepositoryTriggerBranches
+    , ("CustomData" .=) <$> _codeCommitRepositoryRepositoryTriggerCustomData
+    , ("DestinationArn" .=) <$> _codeCommitRepositoryRepositoryTriggerDestinationArn
+    , ("Events" .=) <$> _codeCommitRepositoryRepositoryTriggerEvents
+    , ("Name" .=) <$> _codeCommitRepositoryRepositoryTriggerName
+    ]
 
 instance FromJSON CodeCommitRepositoryRepositoryTrigger where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 38, omitNothingFields = True }
+  parseJSON (Object obj) =
+    CodeCommitRepositoryRepositoryTrigger <$>
+      obj .:? "Branches" <*>
+      obj .:? "CustomData" <*>
+      obj .:? "DestinationArn" <*>
+      obj .:? "Events" <*>
+      obj .:? "Name"
+  parseJSON _ = mempty
 
 -- | Constructor for 'CodeCommitRepositoryRepositoryTrigger' containing
 -- | required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/CodeDeployDeploymentConfigMinimumHealthyHosts.hs b/library-gen/Stratosphere/ResourceProperties/CodeDeployDeploymentConfigMinimumHealthyHosts.hs
--- a/library-gen/Stratosphere/ResourceProperties/CodeDeployDeploymentConfigMinimumHealthyHosts.hs
+++ b/library-gen/Stratosphere/ResourceProperties/CodeDeployDeploymentConfigMinimumHealthyHosts.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codedeploy-deploymentconfig-minimumhealthyhosts.html
 
 module Stratosphere.ResourceProperties.CodeDeployDeploymentConfigMinimumHealthyHosts where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -22,13 +22,22 @@
   CodeDeployDeploymentConfigMinimumHealthyHosts
   { _codeDeployDeploymentConfigMinimumHealthyHostsType :: Maybe (Val Text)
   , _codeDeployDeploymentConfigMinimumHealthyHostsValue :: Maybe (Val Integer')
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON CodeDeployDeploymentConfigMinimumHealthyHosts where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 46, omitNothingFields = True }
+  toJSON CodeDeployDeploymentConfigMinimumHealthyHosts{..} =
+    object $
+    catMaybes
+    [ ("Type" .=) <$> _codeDeployDeploymentConfigMinimumHealthyHostsType
+    , ("Value" .=) <$> _codeDeployDeploymentConfigMinimumHealthyHostsValue
+    ]
 
 instance FromJSON CodeDeployDeploymentConfigMinimumHealthyHosts where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 46, omitNothingFields = True }
+  parseJSON (Object obj) =
+    CodeDeployDeploymentConfigMinimumHealthyHosts <$>
+      obj .:? "Type" <*>
+      obj .:? "Value"
+  parseJSON _ = mempty
 
 -- | Constructor for 'CodeDeployDeploymentConfigMinimumHealthyHosts'
 -- | containing required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/CodeDeployDeploymentGroupDeployment.hs b/library-gen/Stratosphere/ResourceProperties/CodeDeployDeploymentGroupDeployment.hs
--- a/library-gen/Stratosphere/ResourceProperties/CodeDeployDeploymentGroupDeployment.hs
+++ b/library-gen/Stratosphere/ResourceProperties/CodeDeployDeploymentGroupDeployment.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codedeploy-deploymentgroup-deployment.html
 
 module Stratosphere.ResourceProperties.CodeDeployDeploymentGroupDeployment where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.CodeDeployDeploymentGroupRevision
@@ -21,13 +21,24 @@
   { _codeDeployDeploymentGroupDeploymentDescription :: Maybe (Val Text)
   , _codeDeployDeploymentGroupDeploymentIgnoreApplicationStopFailures :: Maybe (Val Bool')
   , _codeDeployDeploymentGroupDeploymentRevision :: CodeDeployDeploymentGroupRevision
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON CodeDeployDeploymentGroupDeployment where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 36, omitNothingFields = True }
+  toJSON CodeDeployDeploymentGroupDeployment{..} =
+    object $
+    catMaybes
+    [ ("Description" .=) <$> _codeDeployDeploymentGroupDeploymentDescription
+    , ("IgnoreApplicationStopFailures" .=) <$> _codeDeployDeploymentGroupDeploymentIgnoreApplicationStopFailures
+    , Just ("Revision" .= _codeDeployDeploymentGroupDeploymentRevision)
+    ]
 
 instance FromJSON CodeDeployDeploymentGroupDeployment where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 36, omitNothingFields = True }
+  parseJSON (Object obj) =
+    CodeDeployDeploymentGroupDeployment <$>
+      obj .:? "Description" <*>
+      obj .:? "IgnoreApplicationStopFailures" <*>
+      obj .: "Revision"
+  parseJSON _ = mempty
 
 -- | Constructor for 'CodeDeployDeploymentGroupDeployment' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/CodeDeployDeploymentGroupEc2TagFilter.hs b/library-gen/Stratosphere/ResourceProperties/CodeDeployDeploymentGroupEc2TagFilter.hs
--- a/library-gen/Stratosphere/ResourceProperties/CodeDeployDeploymentGroupEc2TagFilter.hs
+++ b/library-gen/Stratosphere/ResourceProperties/CodeDeployDeploymentGroupEc2TagFilter.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codedeploy-deploymentgroup-ec2tagfilters.html
 
 module Stratosphere.ResourceProperties.CodeDeployDeploymentGroupEc2TagFilter where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -22,13 +22,24 @@
   { _codeDeployDeploymentGroupEc2TagFilterKey :: Maybe (Val Text)
   , _codeDeployDeploymentGroupEc2TagFilterType :: Val Text
   , _codeDeployDeploymentGroupEc2TagFilterValue :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON CodeDeployDeploymentGroupEc2TagFilter where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 38, omitNothingFields = True }
+  toJSON CodeDeployDeploymentGroupEc2TagFilter{..} =
+    object $
+    catMaybes
+    [ ("Key" .=) <$> _codeDeployDeploymentGroupEc2TagFilterKey
+    , Just ("Type" .= _codeDeployDeploymentGroupEc2TagFilterType)
+    , ("Value" .=) <$> _codeDeployDeploymentGroupEc2TagFilterValue
+    ]
 
 instance FromJSON CodeDeployDeploymentGroupEc2TagFilter where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 38, omitNothingFields = True }
+  parseJSON (Object obj) =
+    CodeDeployDeploymentGroupEc2TagFilter <$>
+      obj .:? "Key" <*>
+      obj .: "Type" <*>
+      obj .:? "Value"
+  parseJSON _ = mempty
 
 -- | Constructor for 'CodeDeployDeploymentGroupEc2TagFilter' containing
 -- | required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/CodeDeployDeploymentGroupGitHubLocation.hs b/library-gen/Stratosphere/ResourceProperties/CodeDeployDeploymentGroupGitHubLocation.hs
--- a/library-gen/Stratosphere/ResourceProperties/CodeDeployDeploymentGroupGitHubLocation.hs
+++ b/library-gen/Stratosphere/ResourceProperties/CodeDeployDeploymentGroupGitHubLocation.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codedeploy-deploymentgroup-deployment-revision-githublocation.html
 
 module Stratosphere.ResourceProperties.CodeDeployDeploymentGroupGitHubLocation where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -21,13 +21,22 @@
   CodeDeployDeploymentGroupGitHubLocation
   { _codeDeployDeploymentGroupGitHubLocationCommitId :: Val Text
   , _codeDeployDeploymentGroupGitHubLocationRepository :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON CodeDeployDeploymentGroupGitHubLocation where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 40, omitNothingFields = True }
+  toJSON CodeDeployDeploymentGroupGitHubLocation{..} =
+    object $
+    catMaybes
+    [ Just ("CommitId" .= _codeDeployDeploymentGroupGitHubLocationCommitId)
+    , Just ("Repository" .= _codeDeployDeploymentGroupGitHubLocationRepository)
+    ]
 
 instance FromJSON CodeDeployDeploymentGroupGitHubLocation where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 40, omitNothingFields = True }
+  parseJSON (Object obj) =
+    CodeDeployDeploymentGroupGitHubLocation <$>
+      obj .: "CommitId" <*>
+      obj .: "Repository"
+  parseJSON _ = mempty
 
 -- | Constructor for 'CodeDeployDeploymentGroupGitHubLocation' containing
 -- | required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/CodeDeployDeploymentGroupOnPremisesInstanceTagFilter.hs b/library-gen/Stratosphere/ResourceProperties/CodeDeployDeploymentGroupOnPremisesInstanceTagFilter.hs
--- a/library-gen/Stratosphere/ResourceProperties/CodeDeployDeploymentGroupOnPremisesInstanceTagFilter.hs
+++ b/library-gen/Stratosphere/ResourceProperties/CodeDeployDeploymentGroupOnPremisesInstanceTagFilter.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codedeploy-deploymentgroup-onpremisesinstancetagfilters.html
 
 module Stratosphere.ResourceProperties.CodeDeployDeploymentGroupOnPremisesInstanceTagFilter where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -23,13 +23,24 @@
   { _codeDeployDeploymentGroupOnPremisesInstanceTagFilterKey :: Maybe (Val Text)
   , _codeDeployDeploymentGroupOnPremisesInstanceTagFilterType :: Maybe (Val Text)
   , _codeDeployDeploymentGroupOnPremisesInstanceTagFilterValue :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON CodeDeployDeploymentGroupOnPremisesInstanceTagFilter where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 53, omitNothingFields = True }
+  toJSON CodeDeployDeploymentGroupOnPremisesInstanceTagFilter{..} =
+    object $
+    catMaybes
+    [ ("Key" .=) <$> _codeDeployDeploymentGroupOnPremisesInstanceTagFilterKey
+    , ("Type" .=) <$> _codeDeployDeploymentGroupOnPremisesInstanceTagFilterType
+    , ("Value" .=) <$> _codeDeployDeploymentGroupOnPremisesInstanceTagFilterValue
+    ]
 
 instance FromJSON CodeDeployDeploymentGroupOnPremisesInstanceTagFilter where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 53, omitNothingFields = True }
+  parseJSON (Object obj) =
+    CodeDeployDeploymentGroupOnPremisesInstanceTagFilter <$>
+      obj .:? "Key" <*>
+      obj .:? "Type" <*>
+      obj .:? "Value"
+  parseJSON _ = mempty
 
 -- | Constructor for 'CodeDeployDeploymentGroupOnPremisesInstanceTagFilter'
 -- | containing required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/CodeDeployDeploymentGroupRevision.hs b/library-gen/Stratosphere/ResourceProperties/CodeDeployDeploymentGroupRevision.hs
--- a/library-gen/Stratosphere/ResourceProperties/CodeDeployDeploymentGroupRevision.hs
+++ b/library-gen/Stratosphere/ResourceProperties/CodeDeployDeploymentGroupRevision.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codedeploy-deploymentgroup-deployment-revision.html
 
 module Stratosphere.ResourceProperties.CodeDeployDeploymentGroupRevision where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.CodeDeployDeploymentGroupGitHubLocation
@@ -22,13 +22,24 @@
   { _codeDeployDeploymentGroupRevisionGitHubLocation :: Maybe CodeDeployDeploymentGroupGitHubLocation
   , _codeDeployDeploymentGroupRevisionRevisionType :: Maybe (Val Text)
   , _codeDeployDeploymentGroupRevisionS3Location :: Maybe CodeDeployDeploymentGroupS3Location
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON CodeDeployDeploymentGroupRevision where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 34, omitNothingFields = True }
+  toJSON CodeDeployDeploymentGroupRevision{..} =
+    object $
+    catMaybes
+    [ ("GitHubLocation" .=) <$> _codeDeployDeploymentGroupRevisionGitHubLocation
+    , ("RevisionType" .=) <$> _codeDeployDeploymentGroupRevisionRevisionType
+    , ("S3Location" .=) <$> _codeDeployDeploymentGroupRevisionS3Location
+    ]
 
 instance FromJSON CodeDeployDeploymentGroupRevision where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 34, omitNothingFields = True }
+  parseJSON (Object obj) =
+    CodeDeployDeploymentGroupRevision <$>
+      obj .:? "GitHubLocation" <*>
+      obj .:? "RevisionType" <*>
+      obj .:? "S3Location"
+  parseJSON _ = mempty
 
 -- | Constructor for 'CodeDeployDeploymentGroupRevision' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/CodeDeployDeploymentGroupS3Location.hs b/library-gen/Stratosphere/ResourceProperties/CodeDeployDeploymentGroupS3Location.hs
--- a/library-gen/Stratosphere/ResourceProperties/CodeDeployDeploymentGroupS3Location.hs
+++ b/library-gen/Stratosphere/ResourceProperties/CodeDeployDeploymentGroupS3Location.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codedeploy-deploymentgroup-deployment-revision-s3location.html
 
 module Stratosphere.ResourceProperties.CodeDeployDeploymentGroupS3Location where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -23,13 +23,28 @@
   , _codeDeployDeploymentGroupS3LocationETag :: Maybe (Val Text)
   , _codeDeployDeploymentGroupS3LocationKey :: Val Text
   , _codeDeployDeploymentGroupS3LocationVersion :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON CodeDeployDeploymentGroupS3Location where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 36, omitNothingFields = True }
+  toJSON CodeDeployDeploymentGroupS3Location{..} =
+    object $
+    catMaybes
+    [ Just ("Bucket" .= _codeDeployDeploymentGroupS3LocationBucket)
+    , Just ("BundleType" .= _codeDeployDeploymentGroupS3LocationBundleType)
+    , ("ETag" .=) <$> _codeDeployDeploymentGroupS3LocationETag
+    , Just ("Key" .= _codeDeployDeploymentGroupS3LocationKey)
+    , ("Version" .=) <$> _codeDeployDeploymentGroupS3LocationVersion
+    ]
 
 instance FromJSON CodeDeployDeploymentGroupS3Location where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 36, omitNothingFields = True }
+  parseJSON (Object obj) =
+    CodeDeployDeploymentGroupS3Location <$>
+      obj .: "Bucket" <*>
+      obj .: "BundleType" <*>
+      obj .:? "ETag" <*>
+      obj .: "Key" <*>
+      obj .:? "Version"
+  parseJSON _ = mempty
 
 -- | Constructor for 'CodeDeployDeploymentGroupS3Location' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/CodePipelineCustomActionTypeArtifactDetails.hs b/library-gen/Stratosphere/ResourceProperties/CodePipelineCustomActionTypeArtifactDetails.hs
--- a/library-gen/Stratosphere/ResourceProperties/CodePipelineCustomActionTypeArtifactDetails.hs
+++ b/library-gen/Stratosphere/ResourceProperties/CodePipelineCustomActionTypeArtifactDetails.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codepipeline-customactiontype-artifactdetails.html
 
 module Stratosphere.ResourceProperties.CodePipelineCustomActionTypeArtifactDetails where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -22,13 +22,22 @@
   CodePipelineCustomActionTypeArtifactDetails
   { _codePipelineCustomActionTypeArtifactDetailsMaximumCount :: Val Integer'
   , _codePipelineCustomActionTypeArtifactDetailsMinimumCount :: Val Integer'
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON CodePipelineCustomActionTypeArtifactDetails where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 44, omitNothingFields = True }
+  toJSON CodePipelineCustomActionTypeArtifactDetails{..} =
+    object $
+    catMaybes
+    [ Just ("MaximumCount" .= _codePipelineCustomActionTypeArtifactDetailsMaximumCount)
+    , Just ("MinimumCount" .= _codePipelineCustomActionTypeArtifactDetailsMinimumCount)
+    ]
 
 instance FromJSON CodePipelineCustomActionTypeArtifactDetails where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 44, omitNothingFields = True }
+  parseJSON (Object obj) =
+    CodePipelineCustomActionTypeArtifactDetails <$>
+      obj .: "MaximumCount" <*>
+      obj .: "MinimumCount"
+  parseJSON _ = mempty
 
 -- | Constructor for 'CodePipelineCustomActionTypeArtifactDetails' containing
 -- | required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/CodePipelineCustomActionTypeConfigurationProperties.hs b/library-gen/Stratosphere/ResourceProperties/CodePipelineCustomActionTypeConfigurationProperties.hs
--- a/library-gen/Stratosphere/ResourceProperties/CodePipelineCustomActionTypeConfigurationProperties.hs
+++ b/library-gen/Stratosphere/ResourceProperties/CodePipelineCustomActionTypeConfigurationProperties.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codepipeline-customactiontype-configurationproperties.html
 
 module Stratosphere.ResourceProperties.CodePipelineCustomActionTypeConfigurationProperties where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -27,13 +27,32 @@
   , _codePipelineCustomActionTypeConfigurationPropertiesRequired :: Val Bool'
   , _codePipelineCustomActionTypeConfigurationPropertiesSecret :: Val Bool'
   , _codePipelineCustomActionTypeConfigurationPropertiesType :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON CodePipelineCustomActionTypeConfigurationProperties where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 52, omitNothingFields = True }
+  toJSON CodePipelineCustomActionTypeConfigurationProperties{..} =
+    object $
+    catMaybes
+    [ ("Description" .=) <$> _codePipelineCustomActionTypeConfigurationPropertiesDescription
+    , Just ("Key" .= _codePipelineCustomActionTypeConfigurationPropertiesKey)
+    , Just ("Name" .= _codePipelineCustomActionTypeConfigurationPropertiesName)
+    , ("Queryable" .=) <$> _codePipelineCustomActionTypeConfigurationPropertiesQueryable
+    , Just ("Required" .= _codePipelineCustomActionTypeConfigurationPropertiesRequired)
+    , Just ("Secret" .= _codePipelineCustomActionTypeConfigurationPropertiesSecret)
+    , ("Type" .=) <$> _codePipelineCustomActionTypeConfigurationPropertiesType
+    ]
 
 instance FromJSON CodePipelineCustomActionTypeConfigurationProperties where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 52, omitNothingFields = True }
+  parseJSON (Object obj) =
+    CodePipelineCustomActionTypeConfigurationProperties <$>
+      obj .:? "Description" <*>
+      obj .: "Key" <*>
+      obj .: "Name" <*>
+      obj .:? "Queryable" <*>
+      obj .: "Required" <*>
+      obj .: "Secret" <*>
+      obj .:? "Type"
+  parseJSON _ = mempty
 
 -- | Constructor for 'CodePipelineCustomActionTypeConfigurationProperties'
 -- | containing required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/CodePipelineCustomActionTypeSettings.hs b/library-gen/Stratosphere/ResourceProperties/CodePipelineCustomActionTypeSettings.hs
--- a/library-gen/Stratosphere/ResourceProperties/CodePipelineCustomActionTypeSettings.hs
+++ b/library-gen/Stratosphere/ResourceProperties/CodePipelineCustomActionTypeSettings.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codepipeline-customactiontype-settings.html
 
 module Stratosphere.ResourceProperties.CodePipelineCustomActionTypeSettings where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -22,13 +22,26 @@
   , _codePipelineCustomActionTypeSettingsExecutionUrlTemplate :: Maybe (Val Text)
   , _codePipelineCustomActionTypeSettingsRevisionUrlTemplate :: Maybe (Val Text)
   , _codePipelineCustomActionTypeSettingsThirdPartyConfigurationUrl :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON CodePipelineCustomActionTypeSettings where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 37, omitNothingFields = True }
+  toJSON CodePipelineCustomActionTypeSettings{..} =
+    object $
+    catMaybes
+    [ ("EntityUrlTemplate" .=) <$> _codePipelineCustomActionTypeSettingsEntityUrlTemplate
+    , ("ExecutionUrlTemplate" .=) <$> _codePipelineCustomActionTypeSettingsExecutionUrlTemplate
+    , ("RevisionUrlTemplate" .=) <$> _codePipelineCustomActionTypeSettingsRevisionUrlTemplate
+    , ("ThirdPartyConfigurationUrl" .=) <$> _codePipelineCustomActionTypeSettingsThirdPartyConfigurationUrl
+    ]
 
 instance FromJSON CodePipelineCustomActionTypeSettings where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 37, omitNothingFields = True }
+  parseJSON (Object obj) =
+    CodePipelineCustomActionTypeSettings <$>
+      obj .:? "EntityUrlTemplate" <*>
+      obj .:? "ExecutionUrlTemplate" <*>
+      obj .:? "RevisionUrlTemplate" <*>
+      obj .:? "ThirdPartyConfigurationUrl"
+  parseJSON _ = mempty
 
 -- | Constructor for 'CodePipelineCustomActionTypeSettings' containing
 -- | required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/CodePipelinePipelineActionDeclaration.hs b/library-gen/Stratosphere/ResourceProperties/CodePipelinePipelineActionDeclaration.hs
--- a/library-gen/Stratosphere/ResourceProperties/CodePipelinePipelineActionDeclaration.hs
+++ b/library-gen/Stratosphere/ResourceProperties/CodePipelinePipelineActionDeclaration.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codepipeline-pipeline-stages-actions.html
 
 module Stratosphere.ResourceProperties.CodePipelinePipelineActionDeclaration where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.CodePipelinePipelineActionTypeId
@@ -28,13 +28,32 @@
   , _codePipelinePipelineActionDeclarationOutputArtifacts :: Maybe [CodePipelinePipelineOutputArtifact]
   , _codePipelinePipelineActionDeclarationRoleArn :: Maybe (Val Text)
   , _codePipelinePipelineActionDeclarationRunOrder :: Maybe (Val Integer')
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON CodePipelinePipelineActionDeclaration where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 38, omitNothingFields = True }
+  toJSON CodePipelinePipelineActionDeclaration{..} =
+    object $
+    catMaybes
+    [ Just ("ActionTypeId" .= _codePipelinePipelineActionDeclarationActionTypeId)
+    , ("Configuration" .=) <$> _codePipelinePipelineActionDeclarationConfiguration
+    , ("InputArtifacts" .=) <$> _codePipelinePipelineActionDeclarationInputArtifacts
+    , Just ("Name" .= _codePipelinePipelineActionDeclarationName)
+    , ("OutputArtifacts" .=) <$> _codePipelinePipelineActionDeclarationOutputArtifacts
+    , ("RoleArn" .=) <$> _codePipelinePipelineActionDeclarationRoleArn
+    , ("RunOrder" .=) <$> _codePipelinePipelineActionDeclarationRunOrder
+    ]
 
 instance FromJSON CodePipelinePipelineActionDeclaration where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 38, omitNothingFields = True }
+  parseJSON (Object obj) =
+    CodePipelinePipelineActionDeclaration <$>
+      obj .: "ActionTypeId" <*>
+      obj .:? "Configuration" <*>
+      obj .:? "InputArtifacts" <*>
+      obj .: "Name" <*>
+      obj .:? "OutputArtifacts" <*>
+      obj .:? "RoleArn" <*>
+      obj .:? "RunOrder"
+  parseJSON _ = mempty
 
 -- | Constructor for 'CodePipelinePipelineActionDeclaration' containing
 -- | required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/CodePipelinePipelineActionTypeId.hs b/library-gen/Stratosphere/ResourceProperties/CodePipelinePipelineActionTypeId.hs
--- a/library-gen/Stratosphere/ResourceProperties/CodePipelinePipelineActionTypeId.hs
+++ b/library-gen/Stratosphere/ResourceProperties/CodePipelinePipelineActionTypeId.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codepipeline-pipeline-stages-actions-actiontypeid.html
 
 module Stratosphere.ResourceProperties.CodePipelinePipelineActionTypeId where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -22,13 +22,26 @@
   , _codePipelinePipelineActionTypeIdOwner :: Val Text
   , _codePipelinePipelineActionTypeIdProvider :: Val Text
   , _codePipelinePipelineActionTypeIdVersion :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON CodePipelinePipelineActionTypeId where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 33, omitNothingFields = True }
+  toJSON CodePipelinePipelineActionTypeId{..} =
+    object $
+    catMaybes
+    [ Just ("Category" .= _codePipelinePipelineActionTypeIdCategory)
+    , Just ("Owner" .= _codePipelinePipelineActionTypeIdOwner)
+    , Just ("Provider" .= _codePipelinePipelineActionTypeIdProvider)
+    , Just ("Version" .= _codePipelinePipelineActionTypeIdVersion)
+    ]
 
 instance FromJSON CodePipelinePipelineActionTypeId where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 33, omitNothingFields = True }
+  parseJSON (Object obj) =
+    CodePipelinePipelineActionTypeId <$>
+      obj .: "Category" <*>
+      obj .: "Owner" <*>
+      obj .: "Provider" <*>
+      obj .: "Version"
+  parseJSON _ = mempty
 
 -- | Constructor for 'CodePipelinePipelineActionTypeId' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/CodePipelinePipelineArtifactStore.hs b/library-gen/Stratosphere/ResourceProperties/CodePipelinePipelineArtifactStore.hs
--- a/library-gen/Stratosphere/ResourceProperties/CodePipelinePipelineArtifactStore.hs
+++ b/library-gen/Stratosphere/ResourceProperties/CodePipelinePipelineArtifactStore.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codepipeline-pipeline-artifactstore.html
 
 module Stratosphere.ResourceProperties.CodePipelinePipelineArtifactStore where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.CodePipelinePipelineEncryptionKey
@@ -21,13 +21,24 @@
   { _codePipelinePipelineArtifactStoreEncryptionKey :: Maybe CodePipelinePipelineEncryptionKey
   , _codePipelinePipelineArtifactStoreLocation :: Val Text
   , _codePipelinePipelineArtifactStoreType :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON CodePipelinePipelineArtifactStore where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 34, omitNothingFields = True }
+  toJSON CodePipelinePipelineArtifactStore{..} =
+    object $
+    catMaybes
+    [ ("EncryptionKey" .=) <$> _codePipelinePipelineArtifactStoreEncryptionKey
+    , Just ("Location" .= _codePipelinePipelineArtifactStoreLocation)
+    , Just ("Type" .= _codePipelinePipelineArtifactStoreType)
+    ]
 
 instance FromJSON CodePipelinePipelineArtifactStore where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 34, omitNothingFields = True }
+  parseJSON (Object obj) =
+    CodePipelinePipelineArtifactStore <$>
+      obj .:? "EncryptionKey" <*>
+      obj .: "Location" <*>
+      obj .: "Type"
+  parseJSON _ = mempty
 
 -- | Constructor for 'CodePipelinePipelineArtifactStore' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/CodePipelinePipelineBlockerDeclaration.hs b/library-gen/Stratosphere/ResourceProperties/CodePipelinePipelineBlockerDeclaration.hs
--- a/library-gen/Stratosphere/ResourceProperties/CodePipelinePipelineBlockerDeclaration.hs
+++ b/library-gen/Stratosphere/ResourceProperties/CodePipelinePipelineBlockerDeclaration.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codepipeline-pipeline-stages-blockers.html
 
 module Stratosphere.ResourceProperties.CodePipelinePipelineBlockerDeclaration where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -21,13 +21,22 @@
   CodePipelinePipelineBlockerDeclaration
   { _codePipelinePipelineBlockerDeclarationName :: Val Text
   , _codePipelinePipelineBlockerDeclarationType :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON CodePipelinePipelineBlockerDeclaration where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 39, omitNothingFields = True }
+  toJSON CodePipelinePipelineBlockerDeclaration{..} =
+    object $
+    catMaybes
+    [ Just ("Name" .= _codePipelinePipelineBlockerDeclarationName)
+    , Just ("Type" .= _codePipelinePipelineBlockerDeclarationType)
+    ]
 
 instance FromJSON CodePipelinePipelineBlockerDeclaration where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 39, omitNothingFields = True }
+  parseJSON (Object obj) =
+    CodePipelinePipelineBlockerDeclaration <$>
+      obj .: "Name" <*>
+      obj .: "Type"
+  parseJSON _ = mempty
 
 -- | Constructor for 'CodePipelinePipelineBlockerDeclaration' containing
 -- | required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/CodePipelinePipelineEncryptionKey.hs b/library-gen/Stratosphere/ResourceProperties/CodePipelinePipelineEncryptionKey.hs
--- a/library-gen/Stratosphere/ResourceProperties/CodePipelinePipelineEncryptionKey.hs
+++ b/library-gen/Stratosphere/ResourceProperties/CodePipelinePipelineEncryptionKey.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codepipeline-pipeline-artifactstore-encryptionkey.html
 
 module Stratosphere.ResourceProperties.CodePipelinePipelineEncryptionKey where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   CodePipelinePipelineEncryptionKey
   { _codePipelinePipelineEncryptionKeyId :: Val Text
   , _codePipelinePipelineEncryptionKeyType :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON CodePipelinePipelineEncryptionKey where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 34, omitNothingFields = True }
+  toJSON CodePipelinePipelineEncryptionKey{..} =
+    object $
+    catMaybes
+    [ Just ("Id" .= _codePipelinePipelineEncryptionKeyId)
+    , Just ("Type" .= _codePipelinePipelineEncryptionKeyType)
+    ]
 
 instance FromJSON CodePipelinePipelineEncryptionKey where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 34, omitNothingFields = True }
+  parseJSON (Object obj) =
+    CodePipelinePipelineEncryptionKey <$>
+      obj .: "Id" <*>
+      obj .: "Type"
+  parseJSON _ = mempty
 
 -- | Constructor for 'CodePipelinePipelineEncryptionKey' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/CodePipelinePipelineInputArtifact.hs b/library-gen/Stratosphere/ResourceProperties/CodePipelinePipelineInputArtifact.hs
--- a/library-gen/Stratosphere/ResourceProperties/CodePipelinePipelineInputArtifact.hs
+++ b/library-gen/Stratosphere/ResourceProperties/CodePipelinePipelineInputArtifact.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codepipeline-pipeline-stages-actions-inputartifacts.html
 
 module Stratosphere.ResourceProperties.CodePipelinePipelineInputArtifact where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -19,13 +19,20 @@
 data CodePipelinePipelineInputArtifact =
   CodePipelinePipelineInputArtifact
   { _codePipelinePipelineInputArtifactName :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON CodePipelinePipelineInputArtifact where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 34, omitNothingFields = True }
+  toJSON CodePipelinePipelineInputArtifact{..} =
+    object $
+    catMaybes
+    [ Just ("Name" .= _codePipelinePipelineInputArtifactName)
+    ]
 
 instance FromJSON CodePipelinePipelineInputArtifact where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 34, omitNothingFields = True }
+  parseJSON (Object obj) =
+    CodePipelinePipelineInputArtifact <$>
+      obj .: "Name"
+  parseJSON _ = mempty
 
 -- | Constructor for 'CodePipelinePipelineInputArtifact' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/CodePipelinePipelineOutputArtifact.hs b/library-gen/Stratosphere/ResourceProperties/CodePipelinePipelineOutputArtifact.hs
--- a/library-gen/Stratosphere/ResourceProperties/CodePipelinePipelineOutputArtifact.hs
+++ b/library-gen/Stratosphere/ResourceProperties/CodePipelinePipelineOutputArtifact.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codepipeline-pipeline-stages-actions-outputartifacts.html
 
 module Stratosphere.ResourceProperties.CodePipelinePipelineOutputArtifact where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -19,13 +19,20 @@
 data CodePipelinePipelineOutputArtifact =
   CodePipelinePipelineOutputArtifact
   { _codePipelinePipelineOutputArtifactName :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON CodePipelinePipelineOutputArtifact where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 35, omitNothingFields = True }
+  toJSON CodePipelinePipelineOutputArtifact{..} =
+    object $
+    catMaybes
+    [ Just ("Name" .= _codePipelinePipelineOutputArtifactName)
+    ]
 
 instance FromJSON CodePipelinePipelineOutputArtifact where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 35, omitNothingFields = True }
+  parseJSON (Object obj) =
+    CodePipelinePipelineOutputArtifact <$>
+      obj .: "Name"
+  parseJSON _ = mempty
 
 -- | Constructor for 'CodePipelinePipelineOutputArtifact' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/CodePipelinePipelineStageDeclaration.hs b/library-gen/Stratosphere/ResourceProperties/CodePipelinePipelineStageDeclaration.hs
--- a/library-gen/Stratosphere/ResourceProperties/CodePipelinePipelineStageDeclaration.hs
+++ b/library-gen/Stratosphere/ResourceProperties/CodePipelinePipelineStageDeclaration.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codepipeline-pipeline-stages.html
 
 module Stratosphere.ResourceProperties.CodePipelinePipelineStageDeclaration where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.CodePipelinePipelineActionDeclaration
@@ -22,13 +22,24 @@
   { _codePipelinePipelineStageDeclarationActions :: [CodePipelinePipelineActionDeclaration]
   , _codePipelinePipelineStageDeclarationBlockers :: Maybe [CodePipelinePipelineBlockerDeclaration]
   , _codePipelinePipelineStageDeclarationName :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON CodePipelinePipelineStageDeclaration where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 37, omitNothingFields = True }
+  toJSON CodePipelinePipelineStageDeclaration{..} =
+    object $
+    catMaybes
+    [ Just ("Actions" .= _codePipelinePipelineStageDeclarationActions)
+    , ("Blockers" .=) <$> _codePipelinePipelineStageDeclarationBlockers
+    , Just ("Name" .= _codePipelinePipelineStageDeclarationName)
+    ]
 
 instance FromJSON CodePipelinePipelineStageDeclaration where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 37, omitNothingFields = True }
+  parseJSON (Object obj) =
+    CodePipelinePipelineStageDeclaration <$>
+      obj .: "Actions" <*>
+      obj .:? "Blockers" <*>
+      obj .: "Name"
+  parseJSON _ = mempty
 
 -- | Constructor for 'CodePipelinePipelineStageDeclaration' containing
 -- | required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/CodePipelinePipelineStageTransition.hs b/library-gen/Stratosphere/ResourceProperties/CodePipelinePipelineStageTransition.hs
--- a/library-gen/Stratosphere/ResourceProperties/CodePipelinePipelineStageTransition.hs
+++ b/library-gen/Stratosphere/ResourceProperties/CodePipelinePipelineStageTransition.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codepipeline-pipeline-disableinboundstagetransitions.html
 
 module Stratosphere.ResourceProperties.CodePipelinePipelineStageTransition where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   CodePipelinePipelineStageTransition
   { _codePipelinePipelineStageTransitionReason :: Val Text
   , _codePipelinePipelineStageTransitionStageName :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON CodePipelinePipelineStageTransition where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 36, omitNothingFields = True }
+  toJSON CodePipelinePipelineStageTransition{..} =
+    object $
+    catMaybes
+    [ Just ("Reason" .= _codePipelinePipelineStageTransitionReason)
+    , Just ("StageName" .= _codePipelinePipelineStageTransitionStageName)
+    ]
 
 instance FromJSON CodePipelinePipelineStageTransition where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 36, omitNothingFields = True }
+  parseJSON (Object obj) =
+    CodePipelinePipelineStageTransition <$>
+      obj .: "Reason" <*>
+      obj .: "StageName"
+  parseJSON _ = mempty
 
 -- | Constructor for 'CodePipelinePipelineStageTransition' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/ConfigConfigRuleScope.hs b/library-gen/Stratosphere/ResourceProperties/ConfigConfigRuleScope.hs
--- a/library-gen/Stratosphere/ResourceProperties/ConfigConfigRuleScope.hs
+++ b/library-gen/Stratosphere/ResourceProperties/ConfigConfigRuleScope.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-config-configrule-scope.html
 
 module Stratosphere.ResourceProperties.ConfigConfigRuleScope where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -22,13 +22,26 @@
   , _configConfigRuleScopeComplianceResourceTypes :: Maybe [Val Text]
   , _configConfigRuleScopeTagKey :: Maybe (Val Text)
   , _configConfigRuleScopeTagValue :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ConfigConfigRuleScope where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 22, omitNothingFields = True }
+  toJSON ConfigConfigRuleScope{..} =
+    object $
+    catMaybes
+    [ ("ComplianceResourceId" .=) <$> _configConfigRuleScopeComplianceResourceId
+    , ("ComplianceResourceTypes" .=) <$> _configConfigRuleScopeComplianceResourceTypes
+    , ("TagKey" .=) <$> _configConfigRuleScopeTagKey
+    , ("TagValue" .=) <$> _configConfigRuleScopeTagValue
+    ]
 
 instance FromJSON ConfigConfigRuleScope where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 22, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ConfigConfigRuleScope <$>
+      obj .:? "ComplianceResourceId" <*>
+      obj .:? "ComplianceResourceTypes" <*>
+      obj .:? "TagKey" <*>
+      obj .:? "TagValue"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ConfigConfigRuleScope' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/ConfigConfigRuleSource.hs b/library-gen/Stratosphere/ResourceProperties/ConfigConfigRuleSource.hs
--- a/library-gen/Stratosphere/ResourceProperties/ConfigConfigRuleSource.hs
+++ b/library-gen/Stratosphere/ResourceProperties/ConfigConfigRuleSource.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-config-configrule-source.html
 
 module Stratosphere.ResourceProperties.ConfigConfigRuleSource where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.ConfigConfigRuleSourceDetail
@@ -21,13 +21,24 @@
   { _configConfigRuleSourceOwner :: Val Text
   , _configConfigRuleSourceSourceDetails :: Maybe [ConfigConfigRuleSourceDetail]
   , _configConfigRuleSourceSourceIdentifier :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ConfigConfigRuleSource where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 23, omitNothingFields = True }
+  toJSON ConfigConfigRuleSource{..} =
+    object $
+    catMaybes
+    [ Just ("Owner" .= _configConfigRuleSourceOwner)
+    , ("SourceDetails" .=) <$> _configConfigRuleSourceSourceDetails
+    , Just ("SourceIdentifier" .= _configConfigRuleSourceSourceIdentifier)
+    ]
 
 instance FromJSON ConfigConfigRuleSource where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 23, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ConfigConfigRuleSource <$>
+      obj .: "Owner" <*>
+      obj .:? "SourceDetails" <*>
+      obj .: "SourceIdentifier"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ConfigConfigRuleSource' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/ConfigConfigRuleSourceDetail.hs b/library-gen/Stratosphere/ResourceProperties/ConfigConfigRuleSourceDetail.hs
--- a/library-gen/Stratosphere/ResourceProperties/ConfigConfigRuleSourceDetail.hs
+++ b/library-gen/Stratosphere/ResourceProperties/ConfigConfigRuleSourceDetail.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-config-configrule-source-sourcedetails.html
 
 module Stratosphere.ResourceProperties.ConfigConfigRuleSourceDetail where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   ConfigConfigRuleSourceDetail
   { _configConfigRuleSourceDetailEventSource :: Val Text
   , _configConfigRuleSourceDetailMessageType :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ConfigConfigRuleSourceDetail where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 29, omitNothingFields = True }
+  toJSON ConfigConfigRuleSourceDetail{..} =
+    object $
+    catMaybes
+    [ Just ("EventSource" .= _configConfigRuleSourceDetailEventSource)
+    , Just ("MessageType" .= _configConfigRuleSourceDetailMessageType)
+    ]
 
 instance FromJSON ConfigConfigRuleSourceDetail where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 29, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ConfigConfigRuleSourceDetail <$>
+      obj .: "EventSource" <*>
+      obj .: "MessageType"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ConfigConfigRuleSourceDetail' containing required fields
 -- | as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/ConfigConfigurationRecorderRecordingGroup.hs b/library-gen/Stratosphere/ResourceProperties/ConfigConfigurationRecorderRecordingGroup.hs
--- a/library-gen/Stratosphere/ResourceProperties/ConfigConfigurationRecorderRecordingGroup.hs
+++ b/library-gen/Stratosphere/ResourceProperties/ConfigConfigurationRecorderRecordingGroup.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-config-configurationrecorder-recordinggroup.html
 
 module Stratosphere.ResourceProperties.ConfigConfigurationRecorderRecordingGroup where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -22,13 +22,24 @@
   { _configConfigurationRecorderRecordingGroupAllSupported :: Maybe (Val Bool')
   , _configConfigurationRecorderRecordingGroupIncludeGlobalResourceTypes :: Maybe (Val Bool')
   , _configConfigurationRecorderRecordingGroupResourceTypes :: Maybe [Val Text]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ConfigConfigurationRecorderRecordingGroup where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 42, omitNothingFields = True }
+  toJSON ConfigConfigurationRecorderRecordingGroup{..} =
+    object $
+    catMaybes
+    [ ("AllSupported" .=) <$> _configConfigurationRecorderRecordingGroupAllSupported
+    , ("IncludeGlobalResourceTypes" .=) <$> _configConfigurationRecorderRecordingGroupIncludeGlobalResourceTypes
+    , ("ResourceTypes" .=) <$> _configConfigurationRecorderRecordingGroupResourceTypes
+    ]
 
 instance FromJSON ConfigConfigurationRecorderRecordingGroup where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 42, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ConfigConfigurationRecorderRecordingGroup <$>
+      obj .:? "AllSupported" <*>
+      obj .:? "IncludeGlobalResourceTypes" <*>
+      obj .:? "ResourceTypes"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ConfigConfigurationRecorderRecordingGroup' containing
 -- | required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/ConfigDeliveryChannelConfigSnapshotDeliveryProperties.hs b/library-gen/Stratosphere/ResourceProperties/ConfigDeliveryChannelConfigSnapshotDeliveryProperties.hs
--- a/library-gen/Stratosphere/ResourceProperties/ConfigDeliveryChannelConfigSnapshotDeliveryProperties.hs
+++ b/library-gen/Stratosphere/ResourceProperties/ConfigDeliveryChannelConfigSnapshotDeliveryProperties.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-config-deliverychannel-configsnapshotdeliveryproperties.html
 
 module Stratosphere.ResourceProperties.ConfigDeliveryChannelConfigSnapshotDeliveryProperties where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -21,13 +21,20 @@
 data ConfigDeliveryChannelConfigSnapshotDeliveryProperties =
   ConfigDeliveryChannelConfigSnapshotDeliveryProperties
   { _configDeliveryChannelConfigSnapshotDeliveryPropertiesDeliveryFrequency :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ConfigDeliveryChannelConfigSnapshotDeliveryProperties where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 54, omitNothingFields = True }
+  toJSON ConfigDeliveryChannelConfigSnapshotDeliveryProperties{..} =
+    object $
+    catMaybes
+    [ ("DeliveryFrequency" .=) <$> _configDeliveryChannelConfigSnapshotDeliveryPropertiesDeliveryFrequency
+    ]
 
 instance FromJSON ConfigDeliveryChannelConfigSnapshotDeliveryProperties where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 54, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ConfigDeliveryChannelConfigSnapshotDeliveryProperties <$>
+      obj .:? "DeliveryFrequency"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ConfigDeliveryChannelConfigSnapshotDeliveryProperties'
 -- | containing required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/DataPipelinePipelineField.hs b/library-gen/Stratosphere/ResourceProperties/DataPipelinePipelineField.hs
--- a/library-gen/Stratosphere/ResourceProperties/DataPipelinePipelineField.hs
+++ b/library-gen/Stratosphere/ResourceProperties/DataPipelinePipelineField.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datapipeline-pipeline-pipelineobjects-fields.html
 
 module Stratosphere.ResourceProperties.DataPipelinePipelineField where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -21,13 +21,24 @@
   { _dataPipelinePipelineFieldKey :: Val Text
   , _dataPipelinePipelineFieldRefValue :: Maybe (Val Text)
   , _dataPipelinePipelineFieldStringValue :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON DataPipelinePipelineField where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 26, omitNothingFields = True }
+  toJSON DataPipelinePipelineField{..} =
+    object $
+    catMaybes
+    [ Just ("Key" .= _dataPipelinePipelineFieldKey)
+    , ("RefValue" .=) <$> _dataPipelinePipelineFieldRefValue
+    , ("StringValue" .=) <$> _dataPipelinePipelineFieldStringValue
+    ]
 
 instance FromJSON DataPipelinePipelineField where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 26, omitNothingFields = True }
+  parseJSON (Object obj) =
+    DataPipelinePipelineField <$>
+      obj .: "Key" <*>
+      obj .:? "RefValue" <*>
+      obj .:? "StringValue"
+  parseJSON _ = mempty
 
 -- | Constructor for 'DataPipelinePipelineField' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/DataPipelinePipelineParameterAttribute.hs b/library-gen/Stratosphere/ResourceProperties/DataPipelinePipelineParameterAttribute.hs
--- a/library-gen/Stratosphere/ResourceProperties/DataPipelinePipelineParameterAttribute.hs
+++ b/library-gen/Stratosphere/ResourceProperties/DataPipelinePipelineParameterAttribute.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datapipeline-pipeline-parameterobjects-attributes.html
 
 module Stratosphere.ResourceProperties.DataPipelinePipelineParameterAttribute where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -21,13 +21,22 @@
   DataPipelinePipelineParameterAttribute
   { _dataPipelinePipelineParameterAttributeKey :: Val Text
   , _dataPipelinePipelineParameterAttributeStringValue :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON DataPipelinePipelineParameterAttribute where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 39, omitNothingFields = True }
+  toJSON DataPipelinePipelineParameterAttribute{..} =
+    object $
+    catMaybes
+    [ Just ("Key" .= _dataPipelinePipelineParameterAttributeKey)
+    , Just ("StringValue" .= _dataPipelinePipelineParameterAttributeStringValue)
+    ]
 
 instance FromJSON DataPipelinePipelineParameterAttribute where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 39, omitNothingFields = True }
+  parseJSON (Object obj) =
+    DataPipelinePipelineParameterAttribute <$>
+      obj .: "Key" <*>
+      obj .: "StringValue"
+  parseJSON _ = mempty
 
 -- | Constructor for 'DataPipelinePipelineParameterAttribute' containing
 -- | required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/DataPipelinePipelineParameterObject.hs b/library-gen/Stratosphere/ResourceProperties/DataPipelinePipelineParameterObject.hs
--- a/library-gen/Stratosphere/ResourceProperties/DataPipelinePipelineParameterObject.hs
+++ b/library-gen/Stratosphere/ResourceProperties/DataPipelinePipelineParameterObject.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datapipeline-pipeline-parameterobjects.html
 
 module Stratosphere.ResourceProperties.DataPipelinePipelineParameterObject where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.DataPipelinePipelineParameterAttribute
@@ -20,13 +20,22 @@
   DataPipelinePipelineParameterObject
   { _dataPipelinePipelineParameterObjectAttributes :: [DataPipelinePipelineParameterAttribute]
   , _dataPipelinePipelineParameterObjectId :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON DataPipelinePipelineParameterObject where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 36, omitNothingFields = True }
+  toJSON DataPipelinePipelineParameterObject{..} =
+    object $
+    catMaybes
+    [ Just ("Attributes" .= _dataPipelinePipelineParameterObjectAttributes)
+    , Just ("Id" .= _dataPipelinePipelineParameterObjectId)
+    ]
 
 instance FromJSON DataPipelinePipelineParameterObject where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 36, omitNothingFields = True }
+  parseJSON (Object obj) =
+    DataPipelinePipelineParameterObject <$>
+      obj .: "Attributes" <*>
+      obj .: "Id"
+  parseJSON _ = mempty
 
 -- | Constructor for 'DataPipelinePipelineParameterObject' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/DataPipelinePipelineParameterValue.hs b/library-gen/Stratosphere/ResourceProperties/DataPipelinePipelineParameterValue.hs
--- a/library-gen/Stratosphere/ResourceProperties/DataPipelinePipelineParameterValue.hs
+++ b/library-gen/Stratosphere/ResourceProperties/DataPipelinePipelineParameterValue.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datapipeline-pipeline-parametervalues.html
 
 module Stratosphere.ResourceProperties.DataPipelinePipelineParameterValue where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   DataPipelinePipelineParameterValue
   { _dataPipelinePipelineParameterValueId :: Val Text
   , _dataPipelinePipelineParameterValueStringValue :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON DataPipelinePipelineParameterValue where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 35, omitNothingFields = True }
+  toJSON DataPipelinePipelineParameterValue{..} =
+    object $
+    catMaybes
+    [ Just ("Id" .= _dataPipelinePipelineParameterValueId)
+    , Just ("StringValue" .= _dataPipelinePipelineParameterValueStringValue)
+    ]
 
 instance FromJSON DataPipelinePipelineParameterValue where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 35, omitNothingFields = True }
+  parseJSON (Object obj) =
+    DataPipelinePipelineParameterValue <$>
+      obj .: "Id" <*>
+      obj .: "StringValue"
+  parseJSON _ = mempty
 
 -- | Constructor for 'DataPipelinePipelineParameterValue' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/DataPipelinePipelinePipelineObject.hs b/library-gen/Stratosphere/ResourceProperties/DataPipelinePipelinePipelineObject.hs
--- a/library-gen/Stratosphere/ResourceProperties/DataPipelinePipelinePipelineObject.hs
+++ b/library-gen/Stratosphere/ResourceProperties/DataPipelinePipelinePipelineObject.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datapipeline-pipeline-pipelineobjects.html
 
 module Stratosphere.ResourceProperties.DataPipelinePipelinePipelineObject where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.DataPipelinePipelineField
@@ -21,13 +21,24 @@
   { _dataPipelinePipelinePipelineObjectFields :: [DataPipelinePipelineField]
   , _dataPipelinePipelinePipelineObjectId :: Val Text
   , _dataPipelinePipelinePipelineObjectName :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON DataPipelinePipelinePipelineObject where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 35, omitNothingFields = True }
+  toJSON DataPipelinePipelinePipelineObject{..} =
+    object $
+    catMaybes
+    [ Just ("Fields" .= _dataPipelinePipelinePipelineObjectFields)
+    , Just ("Id" .= _dataPipelinePipelinePipelineObjectId)
+    , Just ("Name" .= _dataPipelinePipelinePipelineObjectName)
+    ]
 
 instance FromJSON DataPipelinePipelinePipelineObject where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 35, omitNothingFields = True }
+  parseJSON (Object obj) =
+    DataPipelinePipelinePipelineObject <$>
+      obj .: "Fields" <*>
+      obj .: "Id" <*>
+      obj .: "Name"
+  parseJSON _ = mempty
 
 -- | Constructor for 'DataPipelinePipelinePipelineObject' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/DataPipelinePipelinePipelineTag.hs b/library-gen/Stratosphere/ResourceProperties/DataPipelinePipelinePipelineTag.hs
--- a/library-gen/Stratosphere/ResourceProperties/DataPipelinePipelinePipelineTag.hs
+++ b/library-gen/Stratosphere/ResourceProperties/DataPipelinePipelinePipelineTag.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datapipeline-pipeline-pipelinetags.html
 
 module Stratosphere.ResourceProperties.DataPipelinePipelinePipelineTag where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   DataPipelinePipelinePipelineTag
   { _dataPipelinePipelinePipelineTagKey :: Val Text
   , _dataPipelinePipelinePipelineTagValue :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON DataPipelinePipelinePipelineTag where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 32, omitNothingFields = True }
+  toJSON DataPipelinePipelinePipelineTag{..} =
+    object $
+    catMaybes
+    [ Just ("Key" .= _dataPipelinePipelinePipelineTagKey)
+    , Just ("Value" .= _dataPipelinePipelinePipelineTagValue)
+    ]
 
 instance FromJSON DataPipelinePipelinePipelineTag where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 32, omitNothingFields = True }
+  parseJSON (Object obj) =
+    DataPipelinePipelinePipelineTag <$>
+      obj .: "Key" <*>
+      obj .: "Value"
+  parseJSON _ = mempty
 
 -- | Constructor for 'DataPipelinePipelinePipelineTag' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/DirectoryServiceMicrosoftADVpcSettings.hs b/library-gen/Stratosphere/ResourceProperties/DirectoryServiceMicrosoftADVpcSettings.hs
--- a/library-gen/Stratosphere/ResourceProperties/DirectoryServiceMicrosoftADVpcSettings.hs
+++ b/library-gen/Stratosphere/ResourceProperties/DirectoryServiceMicrosoftADVpcSettings.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-directoryservice-microsoftad-vpcsettings.html
 
 module Stratosphere.ResourceProperties.DirectoryServiceMicrosoftADVpcSettings where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -21,13 +21,22 @@
   DirectoryServiceMicrosoftADVpcSettings
   { _directoryServiceMicrosoftADVpcSettingsSubnetIds :: [Val Text]
   , _directoryServiceMicrosoftADVpcSettingsVpcId :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON DirectoryServiceMicrosoftADVpcSettings where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 39, omitNothingFields = True }
+  toJSON DirectoryServiceMicrosoftADVpcSettings{..} =
+    object $
+    catMaybes
+    [ Just ("SubnetIds" .= _directoryServiceMicrosoftADVpcSettingsSubnetIds)
+    , Just ("VpcId" .= _directoryServiceMicrosoftADVpcSettingsVpcId)
+    ]
 
 instance FromJSON DirectoryServiceMicrosoftADVpcSettings where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 39, omitNothingFields = True }
+  parseJSON (Object obj) =
+    DirectoryServiceMicrosoftADVpcSettings <$>
+      obj .: "SubnetIds" <*>
+      obj .: "VpcId"
+  parseJSON _ = mempty
 
 -- | Constructor for 'DirectoryServiceMicrosoftADVpcSettings' containing
 -- | required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/DirectoryServiceSimpleADVpcSettings.hs b/library-gen/Stratosphere/ResourceProperties/DirectoryServiceSimpleADVpcSettings.hs
--- a/library-gen/Stratosphere/ResourceProperties/DirectoryServiceSimpleADVpcSettings.hs
+++ b/library-gen/Stratosphere/ResourceProperties/DirectoryServiceSimpleADVpcSettings.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-directoryservice-simplead-vpcsettings.html
 
 module Stratosphere.ResourceProperties.DirectoryServiceSimpleADVpcSettings where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   DirectoryServiceSimpleADVpcSettings
   { _directoryServiceSimpleADVpcSettingsSubnetIds :: [Val Text]
   , _directoryServiceSimpleADVpcSettingsVpcId :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON DirectoryServiceSimpleADVpcSettings where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 36, omitNothingFields = True }
+  toJSON DirectoryServiceSimpleADVpcSettings{..} =
+    object $
+    catMaybes
+    [ Just ("SubnetIds" .= _directoryServiceSimpleADVpcSettingsSubnetIds)
+    , Just ("VpcId" .= _directoryServiceSimpleADVpcSettingsVpcId)
+    ]
 
 instance FromJSON DirectoryServiceSimpleADVpcSettings where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 36, omitNothingFields = True }
+  parseJSON (Object obj) =
+    DirectoryServiceSimpleADVpcSettings <$>
+      obj .: "SubnetIds" <*>
+      obj .: "VpcId"
+  parseJSON _ = mempty
 
 -- | Constructor for 'DirectoryServiceSimpleADVpcSettings' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/DynamoDBTableAttributeDefinition.hs b/library-gen/Stratosphere/ResourceProperties/DynamoDBTableAttributeDefinition.hs
--- a/library-gen/Stratosphere/ResourceProperties/DynamoDBTableAttributeDefinition.hs
+++ b/library-gen/Stratosphere/ResourceProperties/DynamoDBTableAttributeDefinition.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-attributedef.html
 
 module Stratosphere.ResourceProperties.DynamoDBTableAttributeDefinition where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.Types
@@ -20,13 +20,22 @@
   DynamoDBTableAttributeDefinition
   { _dynamoDBTableAttributeDefinitionAttributeName :: Val Text
   , _dynamoDBTableAttributeDefinitionAttributeType :: Val AttributeType
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON DynamoDBTableAttributeDefinition where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 33, omitNothingFields = True }
+  toJSON DynamoDBTableAttributeDefinition{..} =
+    object $
+    catMaybes
+    [ Just ("AttributeName" .= _dynamoDBTableAttributeDefinitionAttributeName)
+    , Just ("AttributeType" .= _dynamoDBTableAttributeDefinitionAttributeType)
+    ]
 
 instance FromJSON DynamoDBTableAttributeDefinition where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 33, omitNothingFields = True }
+  parseJSON (Object obj) =
+    DynamoDBTableAttributeDefinition <$>
+      obj .: "AttributeName" <*>
+      obj .: "AttributeType"
+  parseJSON _ = mempty
 
 -- | Constructor for 'DynamoDBTableAttributeDefinition' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/DynamoDBTableGlobalSecondaryIndex.hs b/library-gen/Stratosphere/ResourceProperties/DynamoDBTableGlobalSecondaryIndex.hs
--- a/library-gen/Stratosphere/ResourceProperties/DynamoDBTableGlobalSecondaryIndex.hs
+++ b/library-gen/Stratosphere/ResourceProperties/DynamoDBTableGlobalSecondaryIndex.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-gsi.html
 
 module Stratosphere.ResourceProperties.DynamoDBTableGlobalSecondaryIndex where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.DynamoDBTableKeySchema
@@ -24,13 +24,26 @@
   , _dynamoDBTableGlobalSecondaryIndexKeySchema :: [DynamoDBTableKeySchema]
   , _dynamoDBTableGlobalSecondaryIndexProjection :: DynamoDBTableProjection
   , _dynamoDBTableGlobalSecondaryIndexProvisionedThroughput :: DynamoDBTableProvisionedThroughput
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON DynamoDBTableGlobalSecondaryIndex where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 34, omitNothingFields = True }
+  toJSON DynamoDBTableGlobalSecondaryIndex{..} =
+    object $
+    catMaybes
+    [ Just ("IndexName" .= _dynamoDBTableGlobalSecondaryIndexIndexName)
+    , Just ("KeySchema" .= _dynamoDBTableGlobalSecondaryIndexKeySchema)
+    , Just ("Projection" .= _dynamoDBTableGlobalSecondaryIndexProjection)
+    , Just ("ProvisionedThroughput" .= _dynamoDBTableGlobalSecondaryIndexProvisionedThroughput)
+    ]
 
 instance FromJSON DynamoDBTableGlobalSecondaryIndex where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 34, omitNothingFields = True }
+  parseJSON (Object obj) =
+    DynamoDBTableGlobalSecondaryIndex <$>
+      obj .: "IndexName" <*>
+      obj .: "KeySchema" <*>
+      obj .: "Projection" <*>
+      obj .: "ProvisionedThroughput"
+  parseJSON _ = mempty
 
 -- | Constructor for 'DynamoDBTableGlobalSecondaryIndex' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/DynamoDBTableKeySchema.hs b/library-gen/Stratosphere/ResourceProperties/DynamoDBTableKeySchema.hs
--- a/library-gen/Stratosphere/ResourceProperties/DynamoDBTableKeySchema.hs
+++ b/library-gen/Stratosphere/ResourceProperties/DynamoDBTableKeySchema.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-keyschema.html
 
 module Stratosphere.ResourceProperties.DynamoDBTableKeySchema where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.Types
@@ -20,13 +20,22 @@
   DynamoDBTableKeySchema
   { _dynamoDBTableKeySchemaAttributeName :: Val Text
   , _dynamoDBTableKeySchemaKeyType :: Val KeyType
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON DynamoDBTableKeySchema where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 23, omitNothingFields = True }
+  toJSON DynamoDBTableKeySchema{..} =
+    object $
+    catMaybes
+    [ Just ("AttributeName" .= _dynamoDBTableKeySchemaAttributeName)
+    , Just ("KeyType" .= _dynamoDBTableKeySchemaKeyType)
+    ]
 
 instance FromJSON DynamoDBTableKeySchema where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 23, omitNothingFields = True }
+  parseJSON (Object obj) =
+    DynamoDBTableKeySchema <$>
+      obj .: "AttributeName" <*>
+      obj .: "KeyType"
+  parseJSON _ = mempty
 
 -- | Constructor for 'DynamoDBTableKeySchema' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/DynamoDBTableLocalSecondaryIndex.hs b/library-gen/Stratosphere/ResourceProperties/DynamoDBTableLocalSecondaryIndex.hs
--- a/library-gen/Stratosphere/ResourceProperties/DynamoDBTableLocalSecondaryIndex.hs
+++ b/library-gen/Stratosphere/ResourceProperties/DynamoDBTableLocalSecondaryIndex.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-lsi.html
 
 module Stratosphere.ResourceProperties.DynamoDBTableLocalSecondaryIndex where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.DynamoDBTableKeySchema
@@ -22,13 +22,24 @@
   { _dynamoDBTableLocalSecondaryIndexIndexName :: Val Text
   , _dynamoDBTableLocalSecondaryIndexKeySchema :: [DynamoDBTableKeySchema]
   , _dynamoDBTableLocalSecondaryIndexProjection :: DynamoDBTableProjection
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON DynamoDBTableLocalSecondaryIndex where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 33, omitNothingFields = True }
+  toJSON DynamoDBTableLocalSecondaryIndex{..} =
+    object $
+    catMaybes
+    [ Just ("IndexName" .= _dynamoDBTableLocalSecondaryIndexIndexName)
+    , Just ("KeySchema" .= _dynamoDBTableLocalSecondaryIndexKeySchema)
+    , Just ("Projection" .= _dynamoDBTableLocalSecondaryIndexProjection)
+    ]
 
 instance FromJSON DynamoDBTableLocalSecondaryIndex where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 33, omitNothingFields = True }
+  parseJSON (Object obj) =
+    DynamoDBTableLocalSecondaryIndex <$>
+      obj .: "IndexName" <*>
+      obj .: "KeySchema" <*>
+      obj .: "Projection"
+  parseJSON _ = mempty
 
 -- | Constructor for 'DynamoDBTableLocalSecondaryIndex' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/DynamoDBTableProjection.hs b/library-gen/Stratosphere/ResourceProperties/DynamoDBTableProjection.hs
--- a/library-gen/Stratosphere/ResourceProperties/DynamoDBTableProjection.hs
+++ b/library-gen/Stratosphere/ResourceProperties/DynamoDBTableProjection.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-projectionobject.html
 
 module Stratosphere.ResourceProperties.DynamoDBTableProjection where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.Types
@@ -20,13 +20,22 @@
   DynamoDBTableProjection
   { _dynamoDBTableProjectionNonKeyAttributes :: Maybe [Val Text]
   , _dynamoDBTableProjectionProjectionType :: Maybe (Val ProjectionType)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON DynamoDBTableProjection where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 24, omitNothingFields = True }
+  toJSON DynamoDBTableProjection{..} =
+    object $
+    catMaybes
+    [ ("NonKeyAttributes" .=) <$> _dynamoDBTableProjectionNonKeyAttributes
+    , ("ProjectionType" .=) <$> _dynamoDBTableProjectionProjectionType
+    ]
 
 instance FromJSON DynamoDBTableProjection where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 24, omitNothingFields = True }
+  parseJSON (Object obj) =
+    DynamoDBTableProjection <$>
+      obj .:? "NonKeyAttributes" <*>
+      obj .:? "ProjectionType"
+  parseJSON _ = mempty
 
 -- | Constructor for 'DynamoDBTableProjection' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/DynamoDBTableProvisionedThroughput.hs b/library-gen/Stratosphere/ResourceProperties/DynamoDBTableProvisionedThroughput.hs
--- a/library-gen/Stratosphere/ResourceProperties/DynamoDBTableProvisionedThroughput.hs
+++ b/library-gen/Stratosphere/ResourceProperties/DynamoDBTableProvisionedThroughput.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-provisionedthroughput.html
 
 module Stratosphere.ResourceProperties.DynamoDBTableProvisionedThroughput where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   DynamoDBTableProvisionedThroughput
   { _dynamoDBTableProvisionedThroughputReadCapacityUnits :: Val Integer'
   , _dynamoDBTableProvisionedThroughputWriteCapacityUnits :: Val Integer'
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON DynamoDBTableProvisionedThroughput where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 35, omitNothingFields = True }
+  toJSON DynamoDBTableProvisionedThroughput{..} =
+    object $
+    catMaybes
+    [ Just ("ReadCapacityUnits" .= _dynamoDBTableProvisionedThroughputReadCapacityUnits)
+    , Just ("WriteCapacityUnits" .= _dynamoDBTableProvisionedThroughputWriteCapacityUnits)
+    ]
 
 instance FromJSON DynamoDBTableProvisionedThroughput where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 35, omitNothingFields = True }
+  parseJSON (Object obj) =
+    DynamoDBTableProvisionedThroughput <$>
+      obj .: "ReadCapacityUnits" <*>
+      obj .: "WriteCapacityUnits"
+  parseJSON _ = mempty
 
 -- | Constructor for 'DynamoDBTableProvisionedThroughput' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/DynamoDBTableStreamSpecification.hs b/library-gen/Stratosphere/ResourceProperties/DynamoDBTableStreamSpecification.hs
--- a/library-gen/Stratosphere/ResourceProperties/DynamoDBTableStreamSpecification.hs
+++ b/library-gen/Stratosphere/ResourceProperties/DynamoDBTableStreamSpecification.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-streamspecification.html
 
 module Stratosphere.ResourceProperties.DynamoDBTableStreamSpecification where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.Types
@@ -19,13 +19,20 @@
 data DynamoDBTableStreamSpecification =
   DynamoDBTableStreamSpecification
   { _dynamoDBTableStreamSpecificationStreamViewType :: Val StreamViewType
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON DynamoDBTableStreamSpecification where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 33, omitNothingFields = True }
+  toJSON DynamoDBTableStreamSpecification{..} =
+    object $
+    catMaybes
+    [ Just ("StreamViewType" .= _dynamoDBTableStreamSpecificationStreamViewType)
+    ]
 
 instance FromJSON DynamoDBTableStreamSpecification where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 33, omitNothingFields = True }
+  parseJSON (Object obj) =
+    DynamoDBTableStreamSpecification <$>
+      obj .: "StreamViewType"
+  parseJSON _ = mempty
 
 -- | Constructor for 'DynamoDBTableStreamSpecification' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2InstanceAssociationParameter.hs b/library-gen/Stratosphere/ResourceProperties/EC2InstanceAssociationParameter.hs
--- a/library-gen/Stratosphere/ResourceProperties/EC2InstanceAssociationParameter.hs
+++ b/library-gen/Stratosphere/ResourceProperties/EC2InstanceAssociationParameter.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-ssmassociations-associationparameters.html
 
 module Stratosphere.ResourceProperties.EC2InstanceAssociationParameter where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   EC2InstanceAssociationParameter
   { _eC2InstanceAssociationParameterKey :: Val Text
   , _eC2InstanceAssociationParameterValue :: [Val Text]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EC2InstanceAssociationParameter where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 32, omitNothingFields = True }
+  toJSON EC2InstanceAssociationParameter{..} =
+    object $
+    catMaybes
+    [ Just ("Key" .= _eC2InstanceAssociationParameterKey)
+    , Just ("Value" .= _eC2InstanceAssociationParameterValue)
+    ]
 
 instance FromJSON EC2InstanceAssociationParameter where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 32, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EC2InstanceAssociationParameter <$>
+      obj .: "Key" <*>
+      obj .: "Value"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EC2InstanceAssociationParameter' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2InstanceBlockDeviceMapping.hs b/library-gen/Stratosphere/ResourceProperties/EC2InstanceBlockDeviceMapping.hs
--- a/library-gen/Stratosphere/ResourceProperties/EC2InstanceBlockDeviceMapping.hs
+++ b/library-gen/Stratosphere/ResourceProperties/EC2InstanceBlockDeviceMapping.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-blockdev-mapping.html
 
 module Stratosphere.ResourceProperties.EC2InstanceBlockDeviceMapping where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.EC2InstanceEbs
@@ -23,13 +23,26 @@
   , _eC2InstanceBlockDeviceMappingEbs :: Maybe EC2InstanceEbs
   , _eC2InstanceBlockDeviceMappingNoDevice :: Maybe EC2InstanceNoDevice
   , _eC2InstanceBlockDeviceMappingVirtualName :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EC2InstanceBlockDeviceMapping where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
+  toJSON EC2InstanceBlockDeviceMapping{..} =
+    object $
+    catMaybes
+    [ Just ("DeviceName" .= _eC2InstanceBlockDeviceMappingDeviceName)
+    , ("Ebs" .=) <$> _eC2InstanceBlockDeviceMappingEbs
+    , ("NoDevice" .=) <$> _eC2InstanceBlockDeviceMappingNoDevice
+    , ("VirtualName" .=) <$> _eC2InstanceBlockDeviceMappingVirtualName
+    ]
 
 instance FromJSON EC2InstanceBlockDeviceMapping where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EC2InstanceBlockDeviceMapping <$>
+      obj .: "DeviceName" <*>
+      obj .:? "Ebs" <*>
+      obj .:? "NoDevice" <*>
+      obj .:? "VirtualName"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EC2InstanceBlockDeviceMapping' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2InstanceEbs.hs b/library-gen/Stratosphere/ResourceProperties/EC2InstanceEbs.hs
--- a/library-gen/Stratosphere/ResourceProperties/EC2InstanceEbs.hs
+++ b/library-gen/Stratosphere/ResourceProperties/EC2InstanceEbs.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-blockdev-template.html
 
 module Stratosphere.ResourceProperties.EC2InstanceEbs where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -24,13 +24,30 @@
   , _eC2InstanceEbsSnapshotId :: Maybe (Val Text)
   , _eC2InstanceEbsVolumeSize :: Maybe (Val Integer')
   , _eC2InstanceEbsVolumeType :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EC2InstanceEbs where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 15, omitNothingFields = True }
+  toJSON EC2InstanceEbs{..} =
+    object $
+    catMaybes
+    [ ("DeleteOnTermination" .=) <$> _eC2InstanceEbsDeleteOnTermination
+    , ("Encrypted" .=) <$> _eC2InstanceEbsEncrypted
+    , ("Iops" .=) <$> _eC2InstanceEbsIops
+    , ("SnapshotId" .=) <$> _eC2InstanceEbsSnapshotId
+    , ("VolumeSize" .=) <$> _eC2InstanceEbsVolumeSize
+    , ("VolumeType" .=) <$> _eC2InstanceEbsVolumeType
+    ]
 
 instance FromJSON EC2InstanceEbs where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 15, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EC2InstanceEbs <$>
+      obj .:? "DeleteOnTermination" <*>
+      obj .:? "Encrypted" <*>
+      obj .:? "Iops" <*>
+      obj .:? "SnapshotId" <*>
+      obj .:? "VolumeSize" <*>
+      obj .:? "VolumeType"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EC2InstanceEbs' containing required fields as arguments.
 ec2InstanceEbs
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2InstanceInstanceIpv6Address.hs b/library-gen/Stratosphere/ResourceProperties/EC2InstanceInstanceIpv6Address.hs
--- a/library-gen/Stratosphere/ResourceProperties/EC2InstanceInstanceIpv6Address.hs
+++ b/library-gen/Stratosphere/ResourceProperties/EC2InstanceInstanceIpv6Address.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-instanceipv6address.html
 
 module Stratosphere.ResourceProperties.EC2InstanceInstanceIpv6Address where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -19,13 +19,20 @@
 data EC2InstanceInstanceIpv6Address =
   EC2InstanceInstanceIpv6Address
   { _eC2InstanceInstanceIpv6AddressIpv6Address :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EC2InstanceInstanceIpv6Address where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 31, omitNothingFields = True }
+  toJSON EC2InstanceInstanceIpv6Address{..} =
+    object $
+    catMaybes
+    [ Just ("Ipv6Address" .= _eC2InstanceInstanceIpv6AddressIpv6Address)
+    ]
 
 instance FromJSON EC2InstanceInstanceIpv6Address where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 31, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EC2InstanceInstanceIpv6Address <$>
+      obj .: "Ipv6Address"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EC2InstanceInstanceIpv6Address' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2InstanceNetworkInterface.hs b/library-gen/Stratosphere/ResourceProperties/EC2InstanceNetworkInterface.hs
--- a/library-gen/Stratosphere/ResourceProperties/EC2InstanceNetworkInterface.hs
+++ b/library-gen/Stratosphere/ResourceProperties/EC2InstanceNetworkInterface.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-network-iface-embedded.html
 
 module Stratosphere.ResourceProperties.EC2InstanceNetworkInterface where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.EC2InstanceInstanceIpv6Address
@@ -31,13 +31,42 @@
   , _eC2InstanceNetworkInterfacePrivateIpAddresses :: Maybe [EC2InstancePrivateIpAddressSpecification]
   , _eC2InstanceNetworkInterfaceSecondaryPrivateIpAddressCount :: Maybe (Val Integer')
   , _eC2InstanceNetworkInterfaceSubnetId :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EC2InstanceNetworkInterface where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+  toJSON EC2InstanceNetworkInterface{..} =
+    object $
+    catMaybes
+    [ ("AssociatePublicIpAddress" .=) <$> _eC2InstanceNetworkInterfaceAssociatePublicIpAddress
+    , ("DeleteOnTermination" .=) <$> _eC2InstanceNetworkInterfaceDeleteOnTermination
+    , ("Description" .=) <$> _eC2InstanceNetworkInterfaceDescription
+    , Just ("DeviceIndex" .= _eC2InstanceNetworkInterfaceDeviceIndex)
+    , ("GroupSet" .=) <$> _eC2InstanceNetworkInterfaceGroupSet
+    , ("Ipv6AddressCount" .=) <$> _eC2InstanceNetworkInterfaceIpv6AddressCount
+    , ("Ipv6Addresses" .=) <$> _eC2InstanceNetworkInterfaceIpv6Addresses
+    , ("NetworkInterfaceId" .=) <$> _eC2InstanceNetworkInterfaceNetworkInterfaceId
+    , ("PrivateIpAddress" .=) <$> _eC2InstanceNetworkInterfacePrivateIpAddress
+    , ("PrivateIpAddresses" .=) <$> _eC2InstanceNetworkInterfacePrivateIpAddresses
+    , ("SecondaryPrivateIpAddressCount" .=) <$> _eC2InstanceNetworkInterfaceSecondaryPrivateIpAddressCount
+    , ("SubnetId" .=) <$> _eC2InstanceNetworkInterfaceSubnetId
+    ]
 
 instance FromJSON EC2InstanceNetworkInterface where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EC2InstanceNetworkInterface <$>
+      obj .:? "AssociatePublicIpAddress" <*>
+      obj .:? "DeleteOnTermination" <*>
+      obj .:? "Description" <*>
+      obj .: "DeviceIndex" <*>
+      obj .:? "GroupSet" <*>
+      obj .:? "Ipv6AddressCount" <*>
+      obj .:? "Ipv6Addresses" <*>
+      obj .:? "NetworkInterfaceId" <*>
+      obj .:? "PrivateIpAddress" <*>
+      obj .:? "PrivateIpAddresses" <*>
+      obj .:? "SecondaryPrivateIpAddressCount" <*>
+      obj .:? "SubnetId"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EC2InstanceNetworkInterface' containing required fields
 -- | as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2InstanceNoDevice.hs b/library-gen/Stratosphere/ResourceProperties/EC2InstanceNoDevice.hs
--- a/library-gen/Stratosphere/ResourceProperties/EC2InstanceNoDevice.hs
+++ b/library-gen/Stratosphere/ResourceProperties/EC2InstanceNoDevice.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-nodevice.html
 
 module Stratosphere.ResourceProperties.EC2InstanceNoDevice where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -19,13 +19,14 @@
 data EC2InstanceNoDevice =
   EC2InstanceNoDevice
   { 
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EC2InstanceNoDevice where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 20, omitNothingFields = True }
+  toJSON _ = toJSON ([] :: [String])
 
 instance FromJSON EC2InstanceNoDevice where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 20, omitNothingFields = True }
+  parseJSON (Array _) = return EC2InstanceNoDevice
+  parseJSON _ = mempty
 
 -- | Constructor for 'EC2InstanceNoDevice' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2InstancePrivateIpAddressSpecification.hs b/library-gen/Stratosphere/ResourceProperties/EC2InstancePrivateIpAddressSpecification.hs
--- a/library-gen/Stratosphere/ResourceProperties/EC2InstancePrivateIpAddressSpecification.hs
+++ b/library-gen/Stratosphere/ResourceProperties/EC2InstancePrivateIpAddressSpecification.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-network-interface-privateipspec.html
 
 module Stratosphere.ResourceProperties.EC2InstancePrivateIpAddressSpecification where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -21,13 +21,22 @@
   EC2InstancePrivateIpAddressSpecification
   { _eC2InstancePrivateIpAddressSpecificationPrimary :: Val Bool'
   , _eC2InstancePrivateIpAddressSpecificationPrivateIpAddress :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EC2InstancePrivateIpAddressSpecification where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 41, omitNothingFields = True }
+  toJSON EC2InstancePrivateIpAddressSpecification{..} =
+    object $
+    catMaybes
+    [ Just ("Primary" .= _eC2InstancePrivateIpAddressSpecificationPrimary)
+    , Just ("PrivateIpAddress" .= _eC2InstancePrivateIpAddressSpecificationPrivateIpAddress)
+    ]
 
 instance FromJSON EC2InstancePrivateIpAddressSpecification where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 41, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EC2InstancePrivateIpAddressSpecification <$>
+      obj .: "Primary" <*>
+      obj .: "PrivateIpAddress"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EC2InstancePrivateIpAddressSpecification' containing
 -- | required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2InstanceSsmAssociation.hs b/library-gen/Stratosphere/ResourceProperties/EC2InstanceSsmAssociation.hs
--- a/library-gen/Stratosphere/ResourceProperties/EC2InstanceSsmAssociation.hs
+++ b/library-gen/Stratosphere/ResourceProperties/EC2InstanceSsmAssociation.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-ssmassociations.html
 
 module Stratosphere.ResourceProperties.EC2InstanceSsmAssociation where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.EC2InstanceAssociationParameter
@@ -20,13 +20,22 @@
   EC2InstanceSsmAssociation
   { _eC2InstanceSsmAssociationAssociationParameters :: Maybe [EC2InstanceAssociationParameter]
   , _eC2InstanceSsmAssociationDocumentName :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EC2InstanceSsmAssociation where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 26, omitNothingFields = True }
+  toJSON EC2InstanceSsmAssociation{..} =
+    object $
+    catMaybes
+    [ ("AssociationParameters" .=) <$> _eC2InstanceSsmAssociationAssociationParameters
+    , Just ("DocumentName" .= _eC2InstanceSsmAssociationDocumentName)
+    ]
 
 instance FromJSON EC2InstanceSsmAssociation where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 26, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EC2InstanceSsmAssociation <$>
+      obj .:? "AssociationParameters" <*>
+      obj .: "DocumentName"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EC2InstanceSsmAssociation' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2InstanceVolume.hs b/library-gen/Stratosphere/ResourceProperties/EC2InstanceVolume.hs
--- a/library-gen/Stratosphere/ResourceProperties/EC2InstanceVolume.hs
+++ b/library-gen/Stratosphere/ResourceProperties/EC2InstanceVolume.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-mount-point.html
 
 module Stratosphere.ResourceProperties.EC2InstanceVolume where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   EC2InstanceVolume
   { _eC2InstanceVolumeDevice :: Val Text
   , _eC2InstanceVolumeVolumeId :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EC2InstanceVolume where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 18, omitNothingFields = True }
+  toJSON EC2InstanceVolume{..} =
+    object $
+    catMaybes
+    [ Just ("Device" .= _eC2InstanceVolumeDevice)
+    , Just ("VolumeId" .= _eC2InstanceVolumeVolumeId)
+    ]
 
 instance FromJSON EC2InstanceVolume where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 18, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EC2InstanceVolume <$>
+      obj .: "Device" <*>
+      obj .: "VolumeId"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EC2InstanceVolume' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2NetworkAclEntryIcmp.hs b/library-gen/Stratosphere/ResourceProperties/EC2NetworkAclEntryIcmp.hs
--- a/library-gen/Stratosphere/ResourceProperties/EC2NetworkAclEntryIcmp.hs
+++ b/library-gen/Stratosphere/ResourceProperties/EC2NetworkAclEntryIcmp.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkaclentry-icmp.html
 
 module Stratosphere.ResourceProperties.EC2NetworkAclEntryIcmp where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   EC2NetworkAclEntryIcmp
   { _eC2NetworkAclEntryIcmpCode :: Maybe (Val Integer')
   , _eC2NetworkAclEntryIcmpType :: Maybe (Val Integer')
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EC2NetworkAclEntryIcmp where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 23, omitNothingFields = True }
+  toJSON EC2NetworkAclEntryIcmp{..} =
+    object $
+    catMaybes
+    [ ("Code" .=) <$> _eC2NetworkAclEntryIcmpCode
+    , ("Type" .=) <$> _eC2NetworkAclEntryIcmpType
+    ]
 
 instance FromJSON EC2NetworkAclEntryIcmp where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 23, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EC2NetworkAclEntryIcmp <$>
+      obj .:? "Code" <*>
+      obj .:? "Type"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EC2NetworkAclEntryIcmp' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2NetworkAclEntryPortRange.hs b/library-gen/Stratosphere/ResourceProperties/EC2NetworkAclEntryPortRange.hs
--- a/library-gen/Stratosphere/ResourceProperties/EC2NetworkAclEntryPortRange.hs
+++ b/library-gen/Stratosphere/ResourceProperties/EC2NetworkAclEntryPortRange.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkaclentry-portrange.html
 
 module Stratosphere.ResourceProperties.EC2NetworkAclEntryPortRange where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   EC2NetworkAclEntryPortRange
   { _eC2NetworkAclEntryPortRangeFrom :: Maybe (Val Integer')
   , _eC2NetworkAclEntryPortRangeTo :: Maybe (Val Integer')
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EC2NetworkAclEntryPortRange where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+  toJSON EC2NetworkAclEntryPortRange{..} =
+    object $
+    catMaybes
+    [ ("From" .=) <$> _eC2NetworkAclEntryPortRangeFrom
+    , ("To" .=) <$> _eC2NetworkAclEntryPortRangeTo
+    ]
 
 instance FromJSON EC2NetworkAclEntryPortRange where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EC2NetworkAclEntryPortRange <$>
+      obj .:? "From" <*>
+      obj .:? "To"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EC2NetworkAclEntryPortRange' containing required fields
 -- | as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2NetworkInterfaceInstanceIpv6Address.hs b/library-gen/Stratosphere/ResourceProperties/EC2NetworkInterfaceInstanceIpv6Address.hs
--- a/library-gen/Stratosphere/ResourceProperties/EC2NetworkInterfaceInstanceIpv6Address.hs
+++ b/library-gen/Stratosphere/ResourceProperties/EC2NetworkInterfaceInstanceIpv6Address.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinterface-instanceipv6address.html
 
 module Stratosphere.ResourceProperties.EC2NetworkInterfaceInstanceIpv6Address where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,20 @@
 data EC2NetworkInterfaceInstanceIpv6Address =
   EC2NetworkInterfaceInstanceIpv6Address
   { _eC2NetworkInterfaceInstanceIpv6AddressIpv6Address :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EC2NetworkInterfaceInstanceIpv6Address where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 39, omitNothingFields = True }
+  toJSON EC2NetworkInterfaceInstanceIpv6Address{..} =
+    object $
+    catMaybes
+    [ Just ("Ipv6Address" .= _eC2NetworkInterfaceInstanceIpv6AddressIpv6Address)
+    ]
 
 instance FromJSON EC2NetworkInterfaceInstanceIpv6Address where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 39, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EC2NetworkInterfaceInstanceIpv6Address <$>
+      obj .: "Ipv6Address"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EC2NetworkInterfaceInstanceIpv6Address' containing
 -- | required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2NetworkInterfacePrivateIpAddressSpecification.hs b/library-gen/Stratosphere/ResourceProperties/EC2NetworkInterfacePrivateIpAddressSpecification.hs
--- a/library-gen/Stratosphere/ResourceProperties/EC2NetworkInterfacePrivateIpAddressSpecification.hs
+++ b/library-gen/Stratosphere/ResourceProperties/EC2NetworkInterfacePrivateIpAddressSpecification.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-network-interface-privateipspec.html
 
 module Stratosphere.ResourceProperties.EC2NetworkInterfacePrivateIpAddressSpecification where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -22,13 +22,22 @@
   EC2NetworkInterfacePrivateIpAddressSpecification
   { _eC2NetworkInterfacePrivateIpAddressSpecificationPrimary :: Val Bool'
   , _eC2NetworkInterfacePrivateIpAddressSpecificationPrivateIpAddress :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EC2NetworkInterfacePrivateIpAddressSpecification where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 49, omitNothingFields = True }
+  toJSON EC2NetworkInterfacePrivateIpAddressSpecification{..} =
+    object $
+    catMaybes
+    [ Just ("Primary" .= _eC2NetworkInterfacePrivateIpAddressSpecificationPrimary)
+    , Just ("PrivateIpAddress" .= _eC2NetworkInterfacePrivateIpAddressSpecificationPrivateIpAddress)
+    ]
 
 instance FromJSON EC2NetworkInterfacePrivateIpAddressSpecification where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 49, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EC2NetworkInterfacePrivateIpAddressSpecification <$>
+      obj .: "Primary" <*>
+      obj .: "PrivateIpAddress"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EC2NetworkInterfacePrivateIpAddressSpecification'
 -- | containing required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2SecurityGroupRule.hs b/library-gen/Stratosphere/ResourceProperties/EC2SecurityGroupRule.hs
--- a/library-gen/Stratosphere/ResourceProperties/EC2SecurityGroupRule.hs
+++ b/library-gen/Stratosphere/ResourceProperties/EC2SecurityGroupRule.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group-rule.html
 
 module Stratosphere.ResourceProperties.EC2SecurityGroupRule where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -25,13 +25,32 @@
   , _eC2SecurityGroupRuleSourceSecurityGroupName :: Maybe (Val Text)
   , _eC2SecurityGroupRuleSourceSecurityGroupOwnerId :: Maybe (Val Text)
   , _eC2SecurityGroupRuleToPort :: Maybe (Val Integer')
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EC2SecurityGroupRule where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 21, omitNothingFields = True }
+  toJSON EC2SecurityGroupRule{..} =
+    object $
+    catMaybes
+    [ ("CidrIp" .=) <$> _eC2SecurityGroupRuleCidrIp
+    , ("FromPort" .=) <$> _eC2SecurityGroupRuleFromPort
+    , Just ("IpProtocol" .= _eC2SecurityGroupRuleIpProtocol)
+    , ("SourceSecurityGroupId" .=) <$> _eC2SecurityGroupRuleSourceSecurityGroupId
+    , ("SourceSecurityGroupName" .=) <$> _eC2SecurityGroupRuleSourceSecurityGroupName
+    , ("SourceSecurityGroupOwnerId" .=) <$> _eC2SecurityGroupRuleSourceSecurityGroupOwnerId
+    , ("ToPort" .=) <$> _eC2SecurityGroupRuleToPort
+    ]
 
 instance FromJSON EC2SecurityGroupRule where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 21, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EC2SecurityGroupRule <$>
+      obj .:? "CidrIp" <*>
+      obj .:? "FromPort" <*>
+      obj .: "IpProtocol" <*>
+      obj .:? "SourceSecurityGroupId" <*>
+      obj .:? "SourceSecurityGroupName" <*>
+      obj .:? "SourceSecurityGroupOwnerId" <*>
+      obj .:? "ToPort"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EC2SecurityGroupRule' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetBlockDeviceMappings.hs b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetBlockDeviceMappings.hs
--- a/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetBlockDeviceMappings.hs
+++ b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetBlockDeviceMappings.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-blockdevicemappings.html
 
 module Stratosphere.ResourceProperties.EC2SpotFleetBlockDeviceMappings where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.EC2SpotFleetEbs
@@ -22,13 +22,26 @@
   , _eC2SpotFleetBlockDeviceMappingsEbs :: Maybe EC2SpotFleetEbs
   , _eC2SpotFleetBlockDeviceMappingsNoDevice :: Maybe (Val Bool')
   , _eC2SpotFleetBlockDeviceMappingsVirtualName :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EC2SpotFleetBlockDeviceMappings where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 32, omitNothingFields = True }
+  toJSON EC2SpotFleetBlockDeviceMappings{..} =
+    object $
+    catMaybes
+    [ Just ("DeviceName" .= _eC2SpotFleetBlockDeviceMappingsDeviceName)
+    , ("Ebs" .=) <$> _eC2SpotFleetBlockDeviceMappingsEbs
+    , ("NoDevice" .=) <$> _eC2SpotFleetBlockDeviceMappingsNoDevice
+    , ("VirtualName" .=) <$> _eC2SpotFleetBlockDeviceMappingsVirtualName
+    ]
 
 instance FromJSON EC2SpotFleetBlockDeviceMappings where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 32, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EC2SpotFleetBlockDeviceMappings <$>
+      obj .: "DeviceName" <*>
+      obj .:? "Ebs" <*>
+      obj .:? "NoDevice" <*>
+      obj .:? "VirtualName"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EC2SpotFleetBlockDeviceMappings' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetEbs.hs b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetEbs.hs
--- a/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetEbs.hs
+++ b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetEbs.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-blockdevicemappings-ebs.html
 
 module Stratosphere.ResourceProperties.EC2SpotFleetEbs where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -24,13 +24,30 @@
   , _eC2SpotFleetEbsSnapshotId :: Maybe (Val Text)
   , _eC2SpotFleetEbsVolumeSize :: Maybe (Val Integer')
   , _eC2SpotFleetEbsVolumeType :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EC2SpotFleetEbs where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 16, omitNothingFields = True }
+  toJSON EC2SpotFleetEbs{..} =
+    object $
+    catMaybes
+    [ ("DeleteOnTermination" .=) <$> _eC2SpotFleetEbsDeleteOnTermination
+    , ("Encrypted" .=) <$> _eC2SpotFleetEbsEncrypted
+    , ("Iops" .=) <$> _eC2SpotFleetEbsIops
+    , ("SnapshotId" .=) <$> _eC2SpotFleetEbsSnapshotId
+    , ("VolumeSize" .=) <$> _eC2SpotFleetEbsVolumeSize
+    , ("VolumeType" .=) <$> _eC2SpotFleetEbsVolumeType
+    ]
 
 instance FromJSON EC2SpotFleetEbs where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 16, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EC2SpotFleetEbs <$>
+      obj .:? "DeleteOnTermination" <*>
+      obj .:? "Encrypted" <*>
+      obj .:? "Iops" <*>
+      obj .:? "SnapshotId" <*>
+      obj .:? "VolumeSize" <*>
+      obj .:? "VolumeType"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EC2SpotFleetEbs' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetIamInstanceProfile.hs b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetIamInstanceProfile.hs
--- a/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetIamInstanceProfile.hs
+++ b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetIamInstanceProfile.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-iaminstanceprofile.html
 
 module Stratosphere.ResourceProperties.EC2SpotFleetIamInstanceProfile where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -19,13 +19,20 @@
 data EC2SpotFleetIamInstanceProfile =
   EC2SpotFleetIamInstanceProfile
   { _eC2SpotFleetIamInstanceProfileArn :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EC2SpotFleetIamInstanceProfile where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 31, omitNothingFields = True }
+  toJSON EC2SpotFleetIamInstanceProfile{..} =
+    object $
+    catMaybes
+    [ ("Arn" .=) <$> _eC2SpotFleetIamInstanceProfileArn
+    ]
 
 instance FromJSON EC2SpotFleetIamInstanceProfile where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 31, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EC2SpotFleetIamInstanceProfile <$>
+      obj .:? "Arn"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EC2SpotFleetIamInstanceProfile' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetInstanceIpv6Address.hs b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetInstanceIpv6Address.hs
--- a/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetInstanceIpv6Address.hs
+++ b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetInstanceIpv6Address.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-instanceipv6address.html
 
 module Stratosphere.ResourceProperties.EC2SpotFleetInstanceIpv6Address where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -19,13 +19,20 @@
 data EC2SpotFleetInstanceIpv6Address =
   EC2SpotFleetInstanceIpv6Address
   { _eC2SpotFleetInstanceIpv6AddressIpv6Address :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EC2SpotFleetInstanceIpv6Address where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 32, omitNothingFields = True }
+  toJSON EC2SpotFleetInstanceIpv6Address{..} =
+    object $
+    catMaybes
+    [ Just ("Ipv6Address" .= _eC2SpotFleetInstanceIpv6AddressIpv6Address)
+    ]
 
 instance FromJSON EC2SpotFleetInstanceIpv6Address where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 32, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EC2SpotFleetInstanceIpv6Address <$>
+      obj .: "Ipv6Address"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EC2SpotFleetInstanceIpv6Address' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetLaunchSpecifications.hs b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetLaunchSpecifications.hs
--- a/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetLaunchSpecifications.hs
+++ b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetLaunchSpecifications.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html
 
 module Stratosphere.ResourceProperties.EC2SpotFleetLaunchSpecifications where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.EC2SpotFleetBlockDeviceMappings
@@ -39,13 +39,50 @@
   , _eC2SpotFleetLaunchSpecificationsSubnetId :: Maybe (Val Text)
   , _eC2SpotFleetLaunchSpecificationsUserData :: Maybe (Val Text)
   , _eC2SpotFleetLaunchSpecificationsWeightedCapacity :: Maybe (Val Double')
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EC2SpotFleetLaunchSpecifications where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 33, omitNothingFields = True }
+  toJSON EC2SpotFleetLaunchSpecifications{..} =
+    object $
+    catMaybes
+    [ ("BlockDeviceMappings" .=) <$> _eC2SpotFleetLaunchSpecificationsBlockDeviceMappings
+    , ("EbsOptimized" .=) <$> _eC2SpotFleetLaunchSpecificationsEbsOptimized
+    , ("IamInstanceProfile" .=) <$> _eC2SpotFleetLaunchSpecificationsIamInstanceProfile
+    , Just ("ImageId" .= _eC2SpotFleetLaunchSpecificationsImageId)
+    , Just ("InstanceType" .= _eC2SpotFleetLaunchSpecificationsInstanceType)
+    , ("KernelId" .=) <$> _eC2SpotFleetLaunchSpecificationsKernelId
+    , ("KeyName" .=) <$> _eC2SpotFleetLaunchSpecificationsKeyName
+    , ("Monitoring" .=) <$> _eC2SpotFleetLaunchSpecificationsMonitoring
+    , ("NetworkInterfaces" .=) <$> _eC2SpotFleetLaunchSpecificationsNetworkInterfaces
+    , ("Placement" .=) <$> _eC2SpotFleetLaunchSpecificationsPlacement
+    , ("RamdiskId" .=) <$> _eC2SpotFleetLaunchSpecificationsRamdiskId
+    , ("SecurityGroups" .=) <$> _eC2SpotFleetLaunchSpecificationsSecurityGroups
+    , ("SpotPrice" .=) <$> _eC2SpotFleetLaunchSpecificationsSpotPrice
+    , ("SubnetId" .=) <$> _eC2SpotFleetLaunchSpecificationsSubnetId
+    , ("UserData" .=) <$> _eC2SpotFleetLaunchSpecificationsUserData
+    , ("WeightedCapacity" .=) <$> _eC2SpotFleetLaunchSpecificationsWeightedCapacity
+    ]
 
 instance FromJSON EC2SpotFleetLaunchSpecifications where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 33, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EC2SpotFleetLaunchSpecifications <$>
+      obj .:? "BlockDeviceMappings" <*>
+      obj .:? "EbsOptimized" <*>
+      obj .:? "IamInstanceProfile" <*>
+      obj .: "ImageId" <*>
+      obj .: "InstanceType" <*>
+      obj .:? "KernelId" <*>
+      obj .:? "KeyName" <*>
+      obj .:? "Monitoring" <*>
+      obj .:? "NetworkInterfaces" <*>
+      obj .:? "Placement" <*>
+      obj .:? "RamdiskId" <*>
+      obj .:? "SecurityGroups" <*>
+      obj .:? "SpotPrice" <*>
+      obj .:? "SubnetId" <*>
+      obj .:? "UserData" <*>
+      obj .:? "WeightedCapacity"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EC2SpotFleetLaunchSpecifications' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetMonitoring.hs b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetMonitoring.hs
--- a/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetMonitoring.hs
+++ b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetMonitoring.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-monitoring.html
 
 module Stratosphere.ResourceProperties.EC2SpotFleetMonitoring where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -19,13 +19,20 @@
 data EC2SpotFleetMonitoring =
   EC2SpotFleetMonitoring
   { _eC2SpotFleetMonitoringEnabled :: Maybe (Val Bool')
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EC2SpotFleetMonitoring where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 23, omitNothingFields = True }
+  toJSON EC2SpotFleetMonitoring{..} =
+    object $
+    catMaybes
+    [ ("Enabled" .=) <$> _eC2SpotFleetMonitoringEnabled
+    ]
 
 instance FromJSON EC2SpotFleetMonitoring where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 23, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EC2SpotFleetMonitoring <$>
+      obj .:? "Enabled"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EC2SpotFleetMonitoring' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetNetworkInterfaces.hs b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetNetworkInterfaces.hs
--- a/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetNetworkInterfaces.hs
+++ b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetNetworkInterfaces.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-networkinterfaces.html
 
 module Stratosphere.ResourceProperties.EC2SpotFleetNetworkInterfaces where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.EC2SpotFleetInstanceIpv6Address
@@ -30,13 +30,40 @@
   , _eC2SpotFleetNetworkInterfacesPrivateIpAddresses :: Maybe [EC2SpotFleetPrivateIpAddresses]
   , _eC2SpotFleetNetworkInterfacesSecondaryPrivateIpAddressCount :: Maybe (Val Integer')
   , _eC2SpotFleetNetworkInterfacesSubnetId :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EC2SpotFleetNetworkInterfaces where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
+  toJSON EC2SpotFleetNetworkInterfaces{..} =
+    object $
+    catMaybes
+    [ ("AssociatePublicIpAddress" .=) <$> _eC2SpotFleetNetworkInterfacesAssociatePublicIpAddress
+    , ("DeleteOnTermination" .=) <$> _eC2SpotFleetNetworkInterfacesDeleteOnTermination
+    , ("Description" .=) <$> _eC2SpotFleetNetworkInterfacesDescription
+    , Just ("DeviceIndex" .= _eC2SpotFleetNetworkInterfacesDeviceIndex)
+    , ("Groups" .=) <$> _eC2SpotFleetNetworkInterfacesGroups
+    , ("Ipv6AddressCount" .=) <$> _eC2SpotFleetNetworkInterfacesIpv6AddressCount
+    , ("Ipv6Addresses" .=) <$> _eC2SpotFleetNetworkInterfacesIpv6Addresses
+    , ("NetworkInterfaceId" .=) <$> _eC2SpotFleetNetworkInterfacesNetworkInterfaceId
+    , ("PrivateIpAddresses" .=) <$> _eC2SpotFleetNetworkInterfacesPrivateIpAddresses
+    , ("SecondaryPrivateIpAddressCount" .=) <$> _eC2SpotFleetNetworkInterfacesSecondaryPrivateIpAddressCount
+    , ("SubnetId" .=) <$> _eC2SpotFleetNetworkInterfacesSubnetId
+    ]
 
 instance FromJSON EC2SpotFleetNetworkInterfaces where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EC2SpotFleetNetworkInterfaces <$>
+      obj .:? "AssociatePublicIpAddress" <*>
+      obj .:? "DeleteOnTermination" <*>
+      obj .:? "Description" <*>
+      obj .: "DeviceIndex" <*>
+      obj .:? "Groups" <*>
+      obj .:? "Ipv6AddressCount" <*>
+      obj .:? "Ipv6Addresses" <*>
+      obj .:? "NetworkInterfaceId" <*>
+      obj .:? "PrivateIpAddresses" <*>
+      obj .:? "SecondaryPrivateIpAddressCount" <*>
+      obj .:? "SubnetId"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EC2SpotFleetNetworkInterfaces' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetPlacement.hs b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetPlacement.hs
--- a/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetPlacement.hs
+++ b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetPlacement.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-placement.html
 
 module Stratosphere.ResourceProperties.EC2SpotFleetPlacement where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   EC2SpotFleetPlacement
   { _eC2SpotFleetPlacementAvailabilityZone :: Maybe (Val Text)
   , _eC2SpotFleetPlacementGroupName :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EC2SpotFleetPlacement where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 22, omitNothingFields = True }
+  toJSON EC2SpotFleetPlacement{..} =
+    object $
+    catMaybes
+    [ ("AvailabilityZone" .=) <$> _eC2SpotFleetPlacementAvailabilityZone
+    , ("GroupName" .=) <$> _eC2SpotFleetPlacementGroupName
+    ]
 
 instance FromJSON EC2SpotFleetPlacement where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 22, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EC2SpotFleetPlacement <$>
+      obj .:? "AvailabilityZone" <*>
+      obj .:? "GroupName"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EC2SpotFleetPlacement' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetPrivateIpAddresses.hs b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetPrivateIpAddresses.hs
--- a/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetPrivateIpAddresses.hs
+++ b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetPrivateIpAddresses.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-networkinterfaces-privateipaddresses.html
 
 module Stratosphere.ResourceProperties.EC2SpotFleetPrivateIpAddresses where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   EC2SpotFleetPrivateIpAddresses
   { _eC2SpotFleetPrivateIpAddressesPrimary :: Maybe (Val Bool')
   , _eC2SpotFleetPrivateIpAddressesPrivateIpAddress :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EC2SpotFleetPrivateIpAddresses where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 31, omitNothingFields = True }
+  toJSON EC2SpotFleetPrivateIpAddresses{..} =
+    object $
+    catMaybes
+    [ ("Primary" .=) <$> _eC2SpotFleetPrivateIpAddressesPrimary
+    , Just ("PrivateIpAddress" .= _eC2SpotFleetPrivateIpAddressesPrivateIpAddress)
+    ]
 
 instance FromJSON EC2SpotFleetPrivateIpAddresses where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 31, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EC2SpotFleetPrivateIpAddresses <$>
+      obj .:? "Primary" <*>
+      obj .: "PrivateIpAddress"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EC2SpotFleetPrivateIpAddresses' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetSecurityGroups.hs b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetSecurityGroups.hs
--- a/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetSecurityGroups.hs
+++ b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetSecurityGroups.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-securitygroups.html
 
 module Stratosphere.ResourceProperties.EC2SpotFleetSecurityGroups where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -19,13 +19,20 @@
 data EC2SpotFleetSecurityGroups =
   EC2SpotFleetSecurityGroups
   { _eC2SpotFleetSecurityGroupsGroupId :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EC2SpotFleetSecurityGroups where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
+  toJSON EC2SpotFleetSecurityGroups{..} =
+    object $
+    catMaybes
+    [ ("GroupId" .=) <$> _eC2SpotFleetSecurityGroupsGroupId
+    ]
 
 instance FromJSON EC2SpotFleetSecurityGroups where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EC2SpotFleetSecurityGroups <$>
+      obj .:? "GroupId"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EC2SpotFleetSecurityGroups' containing required fields
 -- | as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetSpotFleetRequestConfigData.hs b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetSpotFleetRequestConfigData.hs
--- a/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetSpotFleetRequestConfigData.hs
+++ b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetSpotFleetRequestConfigData.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata.html
 
 module Stratosphere.ResourceProperties.EC2SpotFleetSpotFleetRequestConfigData where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.EC2SpotFleetLaunchSpecifications
@@ -28,13 +28,36 @@
   , _eC2SpotFleetSpotFleetRequestConfigDataTerminateInstancesWithExpiration :: Maybe (Val Bool')
   , _eC2SpotFleetSpotFleetRequestConfigDataValidFrom :: Maybe (Val Text)
   , _eC2SpotFleetSpotFleetRequestConfigDataValidUntil :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EC2SpotFleetSpotFleetRequestConfigData where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 39, omitNothingFields = True }
+  toJSON EC2SpotFleetSpotFleetRequestConfigData{..} =
+    object $
+    catMaybes
+    [ ("AllocationStrategy" .=) <$> _eC2SpotFleetSpotFleetRequestConfigDataAllocationStrategy
+    , ("ExcessCapacityTerminationPolicy" .=) <$> _eC2SpotFleetSpotFleetRequestConfigDataExcessCapacityTerminationPolicy
+    , Just ("IamFleetRole" .= _eC2SpotFleetSpotFleetRequestConfigDataIamFleetRole)
+    , Just ("LaunchSpecifications" .= _eC2SpotFleetSpotFleetRequestConfigDataLaunchSpecifications)
+    , Just ("SpotPrice" .= _eC2SpotFleetSpotFleetRequestConfigDataSpotPrice)
+    , Just ("TargetCapacity" .= _eC2SpotFleetSpotFleetRequestConfigDataTargetCapacity)
+    , ("TerminateInstancesWithExpiration" .=) <$> _eC2SpotFleetSpotFleetRequestConfigDataTerminateInstancesWithExpiration
+    , ("ValidFrom" .=) <$> _eC2SpotFleetSpotFleetRequestConfigDataValidFrom
+    , ("ValidUntil" .=) <$> _eC2SpotFleetSpotFleetRequestConfigDataValidUntil
+    ]
 
 instance FromJSON EC2SpotFleetSpotFleetRequestConfigData where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 39, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EC2SpotFleetSpotFleetRequestConfigData <$>
+      obj .:? "AllocationStrategy" <*>
+      obj .:? "ExcessCapacityTerminationPolicy" <*>
+      obj .: "IamFleetRole" <*>
+      obj .: "LaunchSpecifications" <*>
+      obj .: "SpotPrice" <*>
+      obj .: "TargetCapacity" <*>
+      obj .:? "TerminateInstancesWithExpiration" <*>
+      obj .:? "ValidFrom" <*>
+      obj .:? "ValidUntil"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EC2SpotFleetSpotFleetRequestConfigData' containing
 -- | required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/ECSServiceDeploymentConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/ECSServiceDeploymentConfiguration.hs
--- a/library-gen/Stratosphere/ResourceProperties/ECSServiceDeploymentConfiguration.hs
+++ b/library-gen/Stratosphere/ResourceProperties/ECSServiceDeploymentConfiguration.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-deploymentconfiguration.html
 
 module Stratosphere.ResourceProperties.ECSServiceDeploymentConfiguration where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   ECSServiceDeploymentConfiguration
   { _eCSServiceDeploymentConfigurationMaximumPercent :: Maybe (Val Integer')
   , _eCSServiceDeploymentConfigurationMinimumHealthyPercent :: Maybe (Val Integer')
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ECSServiceDeploymentConfiguration where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 34, omitNothingFields = True }
+  toJSON ECSServiceDeploymentConfiguration{..} =
+    object $
+    catMaybes
+    [ ("MaximumPercent" .=) <$> _eCSServiceDeploymentConfigurationMaximumPercent
+    , ("MinimumHealthyPercent" .=) <$> _eCSServiceDeploymentConfigurationMinimumHealthyPercent
+    ]
 
 instance FromJSON ECSServiceDeploymentConfiguration where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 34, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ECSServiceDeploymentConfiguration <$>
+      obj .:? "MaximumPercent" <*>
+      obj .:? "MinimumHealthyPercent"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ECSServiceDeploymentConfiguration' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/ECSServiceLoadBalancer.hs b/library-gen/Stratosphere/ResourceProperties/ECSServiceLoadBalancer.hs
--- a/library-gen/Stratosphere/ResourceProperties/ECSServiceLoadBalancer.hs
+++ b/library-gen/Stratosphere/ResourceProperties/ECSServiceLoadBalancer.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-loadbalancers.html
 
 module Stratosphere.ResourceProperties.ECSServiceLoadBalancer where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -22,13 +22,26 @@
   , _eCSServiceLoadBalancerContainerPort :: Val Integer'
   , _eCSServiceLoadBalancerLoadBalancerName :: Maybe (Val Text)
   , _eCSServiceLoadBalancerTargetGroupArn :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ECSServiceLoadBalancer where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 23, omitNothingFields = True }
+  toJSON ECSServiceLoadBalancer{..} =
+    object $
+    catMaybes
+    [ ("ContainerName" .=) <$> _eCSServiceLoadBalancerContainerName
+    , Just ("ContainerPort" .= _eCSServiceLoadBalancerContainerPort)
+    , ("LoadBalancerName" .=) <$> _eCSServiceLoadBalancerLoadBalancerName
+    , ("TargetGroupArn" .=) <$> _eCSServiceLoadBalancerTargetGroupArn
+    ]
 
 instance FromJSON ECSServiceLoadBalancer where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 23, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ECSServiceLoadBalancer <$>
+      obj .:? "ContainerName" <*>
+      obj .: "ContainerPort" <*>
+      obj .:? "LoadBalancerName" <*>
+      obj .:? "TargetGroupArn"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ECSServiceLoadBalancer' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionContainerDefinition.hs b/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionContainerDefinition.hs
--- a/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionContainerDefinition.hs
+++ b/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionContainerDefinition.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html
 
 module Stratosphere.ResourceProperties.ECSTaskDefinitionContainerDefinition where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.ECSTaskDefinitionKeyValuePair
@@ -50,13 +50,70 @@
   , _eCSTaskDefinitionContainerDefinitionUser :: Maybe (Val Text)
   , _eCSTaskDefinitionContainerDefinitionVolumesFrom :: Maybe [ECSTaskDefinitionVolumeFrom]
   , _eCSTaskDefinitionContainerDefinitionWorkingDirectory :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ECSTaskDefinitionContainerDefinition where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 37, omitNothingFields = True }
+  toJSON ECSTaskDefinitionContainerDefinition{..} =
+    object $
+    catMaybes
+    [ ("Command" .=) <$> _eCSTaskDefinitionContainerDefinitionCommand
+    , ("Cpu" .=) <$> _eCSTaskDefinitionContainerDefinitionCpu
+    , ("DisableNetworking" .=) <$> _eCSTaskDefinitionContainerDefinitionDisableNetworking
+    , ("DnsSearchDomains" .=) <$> _eCSTaskDefinitionContainerDefinitionDnsSearchDomains
+    , ("DnsServers" .=) <$> _eCSTaskDefinitionContainerDefinitionDnsServers
+    , ("DockerLabels" .=) <$> _eCSTaskDefinitionContainerDefinitionDockerLabels
+    , ("DockerSecurityOptions" .=) <$> _eCSTaskDefinitionContainerDefinitionDockerSecurityOptions
+    , ("EntryPoint" .=) <$> _eCSTaskDefinitionContainerDefinitionEntryPoint
+    , ("Environment" .=) <$> _eCSTaskDefinitionContainerDefinitionEnvironment
+    , ("Essential" .=) <$> _eCSTaskDefinitionContainerDefinitionEssential
+    , ("ExtraHosts" .=) <$> _eCSTaskDefinitionContainerDefinitionExtraHosts
+    , ("Hostname" .=) <$> _eCSTaskDefinitionContainerDefinitionHostname
+    , Just ("Image" .= _eCSTaskDefinitionContainerDefinitionImage)
+    , ("Links" .=) <$> _eCSTaskDefinitionContainerDefinitionLinks
+    , ("LogConfiguration" .=) <$> _eCSTaskDefinitionContainerDefinitionLogConfiguration
+    , ("Memory" .=) <$> _eCSTaskDefinitionContainerDefinitionMemory
+    , ("MemoryReservation" .=) <$> _eCSTaskDefinitionContainerDefinitionMemoryReservation
+    , ("MountPoints" .=) <$> _eCSTaskDefinitionContainerDefinitionMountPoints
+    , Just ("Name" .= _eCSTaskDefinitionContainerDefinitionName)
+    , ("PortMappings" .=) <$> _eCSTaskDefinitionContainerDefinitionPortMappings
+    , ("Privileged" .=) <$> _eCSTaskDefinitionContainerDefinitionPrivileged
+    , ("ReadonlyRootFilesystem" .=) <$> _eCSTaskDefinitionContainerDefinitionReadonlyRootFilesystem
+    , ("Ulimits" .=) <$> _eCSTaskDefinitionContainerDefinitionUlimits
+    , ("User" .=) <$> _eCSTaskDefinitionContainerDefinitionUser
+    , ("VolumesFrom" .=) <$> _eCSTaskDefinitionContainerDefinitionVolumesFrom
+    , ("WorkingDirectory" .=) <$> _eCSTaskDefinitionContainerDefinitionWorkingDirectory
+    ]
 
 instance FromJSON ECSTaskDefinitionContainerDefinition where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 37, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ECSTaskDefinitionContainerDefinition <$>
+      obj .:? "Command" <*>
+      obj .:? "Cpu" <*>
+      obj .:? "DisableNetworking" <*>
+      obj .:? "DnsSearchDomains" <*>
+      obj .:? "DnsServers" <*>
+      obj .:? "DockerLabels" <*>
+      obj .:? "DockerSecurityOptions" <*>
+      obj .:? "EntryPoint" <*>
+      obj .:? "Environment" <*>
+      obj .:? "Essential" <*>
+      obj .:? "ExtraHosts" <*>
+      obj .:? "Hostname" <*>
+      obj .: "Image" <*>
+      obj .:? "Links" <*>
+      obj .:? "LogConfiguration" <*>
+      obj .:? "Memory" <*>
+      obj .:? "MemoryReservation" <*>
+      obj .:? "MountPoints" <*>
+      obj .: "Name" <*>
+      obj .:? "PortMappings" <*>
+      obj .:? "Privileged" <*>
+      obj .:? "ReadonlyRootFilesystem" <*>
+      obj .:? "Ulimits" <*>
+      obj .:? "User" <*>
+      obj .:? "VolumesFrom" <*>
+      obj .:? "WorkingDirectory"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ECSTaskDefinitionContainerDefinition' containing
 -- | required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionHostEntry.hs b/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionHostEntry.hs
--- a/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionHostEntry.hs
+++ b/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionHostEntry.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-hostentry.html
 
 module Stratosphere.ResourceProperties.ECSTaskDefinitionHostEntry where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   ECSTaskDefinitionHostEntry
   { _eCSTaskDefinitionHostEntryHostname :: Val Text
   , _eCSTaskDefinitionHostEntryIpAddress :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ECSTaskDefinitionHostEntry where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
+  toJSON ECSTaskDefinitionHostEntry{..} =
+    object $
+    catMaybes
+    [ Just ("Hostname" .= _eCSTaskDefinitionHostEntryHostname)
+    , Just ("IpAddress" .= _eCSTaskDefinitionHostEntryIpAddress)
+    ]
 
 instance FromJSON ECSTaskDefinitionHostEntry where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ECSTaskDefinitionHostEntry <$>
+      obj .: "Hostname" <*>
+      obj .: "IpAddress"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ECSTaskDefinitionHostEntry' containing required fields
 -- | as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionHostVolumeProperties.hs b/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionHostVolumeProperties.hs
--- a/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionHostVolumeProperties.hs
+++ b/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionHostVolumeProperties.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-volumes-host.html
 
 module Stratosphere.ResourceProperties.ECSTaskDefinitionHostVolumeProperties where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,20 @@
 data ECSTaskDefinitionHostVolumeProperties =
   ECSTaskDefinitionHostVolumeProperties
   { _eCSTaskDefinitionHostVolumePropertiesSourcePath :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ECSTaskDefinitionHostVolumeProperties where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 38, omitNothingFields = True }
+  toJSON ECSTaskDefinitionHostVolumeProperties{..} =
+    object $
+    catMaybes
+    [ ("SourcePath" .=) <$> _eCSTaskDefinitionHostVolumePropertiesSourcePath
+    ]
 
 instance FromJSON ECSTaskDefinitionHostVolumeProperties where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 38, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ECSTaskDefinitionHostVolumeProperties <$>
+      obj .:? "SourcePath"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ECSTaskDefinitionHostVolumeProperties' containing
 -- | required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionKeyValuePair.hs b/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionKeyValuePair.hs
--- a/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionKeyValuePair.hs
+++ b/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionKeyValuePair.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-environment.html
 
 module Stratosphere.ResourceProperties.ECSTaskDefinitionKeyValuePair where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   ECSTaskDefinitionKeyValuePair
   { _eCSTaskDefinitionKeyValuePairName :: Maybe (Val Text)
   , _eCSTaskDefinitionKeyValuePairValue :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ECSTaskDefinitionKeyValuePair where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
+  toJSON ECSTaskDefinitionKeyValuePair{..} =
+    object $
+    catMaybes
+    [ ("Name" .=) <$> _eCSTaskDefinitionKeyValuePairName
+    , ("Value" .=) <$> _eCSTaskDefinitionKeyValuePairValue
+    ]
 
 instance FromJSON ECSTaskDefinitionKeyValuePair where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ECSTaskDefinitionKeyValuePair <$>
+      obj .:? "Name" <*>
+      obj .:? "Value"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ECSTaskDefinitionKeyValuePair' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionLogConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionLogConfiguration.hs
--- a/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionLogConfiguration.hs
+++ b/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionLogConfiguration.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-logconfiguration.html
 
 module Stratosphere.ResourceProperties.ECSTaskDefinitionLogConfiguration where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   ECSTaskDefinitionLogConfiguration
   { _eCSTaskDefinitionLogConfigurationLogDriver :: Val Text
   , _eCSTaskDefinitionLogConfigurationOptions :: Maybe Object
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ECSTaskDefinitionLogConfiguration where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 34, omitNothingFields = True }
+  toJSON ECSTaskDefinitionLogConfiguration{..} =
+    object $
+    catMaybes
+    [ Just ("LogDriver" .= _eCSTaskDefinitionLogConfigurationLogDriver)
+    , ("Options" .=) <$> _eCSTaskDefinitionLogConfigurationOptions
+    ]
 
 instance FromJSON ECSTaskDefinitionLogConfiguration where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 34, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ECSTaskDefinitionLogConfiguration <$>
+      obj .: "LogDriver" <*>
+      obj .:? "Options"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ECSTaskDefinitionLogConfiguration' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionMountPoint.hs b/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionMountPoint.hs
--- a/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionMountPoint.hs
+++ b/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionMountPoint.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-mountpoints.html
 
 module Stratosphere.ResourceProperties.ECSTaskDefinitionMountPoint where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -21,13 +21,24 @@
   { _eCSTaskDefinitionMountPointContainerPath :: Maybe (Val Text)
   , _eCSTaskDefinitionMountPointReadOnly :: Maybe (Val Bool')
   , _eCSTaskDefinitionMountPointSourceVolume :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ECSTaskDefinitionMountPoint where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+  toJSON ECSTaskDefinitionMountPoint{..} =
+    object $
+    catMaybes
+    [ ("ContainerPath" .=) <$> _eCSTaskDefinitionMountPointContainerPath
+    , ("ReadOnly" .=) <$> _eCSTaskDefinitionMountPointReadOnly
+    , ("SourceVolume" .=) <$> _eCSTaskDefinitionMountPointSourceVolume
+    ]
 
 instance FromJSON ECSTaskDefinitionMountPoint where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ECSTaskDefinitionMountPoint <$>
+      obj .:? "ContainerPath" <*>
+      obj .:? "ReadOnly" <*>
+      obj .:? "SourceVolume"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ECSTaskDefinitionMountPoint' containing required fields
 -- | as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionPortMapping.hs b/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionPortMapping.hs
--- a/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionPortMapping.hs
+++ b/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionPortMapping.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-portmappings.html
 
 module Stratosphere.ResourceProperties.ECSTaskDefinitionPortMapping where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -21,13 +21,24 @@
   { _eCSTaskDefinitionPortMappingContainerPort :: Maybe (Val Integer')
   , _eCSTaskDefinitionPortMappingHostPort :: Maybe (Val Integer')
   , _eCSTaskDefinitionPortMappingProtocol :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ECSTaskDefinitionPortMapping where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 29, omitNothingFields = True }
+  toJSON ECSTaskDefinitionPortMapping{..} =
+    object $
+    catMaybes
+    [ ("ContainerPort" .=) <$> _eCSTaskDefinitionPortMappingContainerPort
+    , ("HostPort" .=) <$> _eCSTaskDefinitionPortMappingHostPort
+    , ("Protocol" .=) <$> _eCSTaskDefinitionPortMappingProtocol
+    ]
 
 instance FromJSON ECSTaskDefinitionPortMapping where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 29, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ECSTaskDefinitionPortMapping <$>
+      obj .:? "ContainerPort" <*>
+      obj .:? "HostPort" <*>
+      obj .:? "Protocol"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ECSTaskDefinitionPortMapping' containing required fields
 -- | as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionUlimit.hs b/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionUlimit.hs
--- a/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionUlimit.hs
+++ b/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionUlimit.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-ulimit.html
 
 module Stratosphere.ResourceProperties.ECSTaskDefinitionUlimit where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -21,13 +21,24 @@
   { _eCSTaskDefinitionUlimitHardLimit :: Val Integer'
   , _eCSTaskDefinitionUlimitName :: Val Text
   , _eCSTaskDefinitionUlimitSoftLimit :: Val Integer'
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ECSTaskDefinitionUlimit where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 24, omitNothingFields = True }
+  toJSON ECSTaskDefinitionUlimit{..} =
+    object $
+    catMaybes
+    [ Just ("HardLimit" .= _eCSTaskDefinitionUlimitHardLimit)
+    , Just ("Name" .= _eCSTaskDefinitionUlimitName)
+    , Just ("SoftLimit" .= _eCSTaskDefinitionUlimitSoftLimit)
+    ]
 
 instance FromJSON ECSTaskDefinitionUlimit where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 24, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ECSTaskDefinitionUlimit <$>
+      obj .: "HardLimit" <*>
+      obj .: "Name" <*>
+      obj .: "SoftLimit"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ECSTaskDefinitionUlimit' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionVolume.hs b/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionVolume.hs
--- a/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionVolume.hs
+++ b/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionVolume.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-volumes.html
 
 module Stratosphere.ResourceProperties.ECSTaskDefinitionVolume where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.ECSTaskDefinitionHostVolumeProperties
@@ -20,13 +20,22 @@
   ECSTaskDefinitionVolume
   { _eCSTaskDefinitionVolumeHost :: Maybe ECSTaskDefinitionHostVolumeProperties
   , _eCSTaskDefinitionVolumeName :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ECSTaskDefinitionVolume where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 24, omitNothingFields = True }
+  toJSON ECSTaskDefinitionVolume{..} =
+    object $
+    catMaybes
+    [ ("Host" .=) <$> _eCSTaskDefinitionVolumeHost
+    , ("Name" .=) <$> _eCSTaskDefinitionVolumeName
+    ]
 
 instance FromJSON ECSTaskDefinitionVolume where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 24, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ECSTaskDefinitionVolume <$>
+      obj .:? "Host" <*>
+      obj .:? "Name"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ECSTaskDefinitionVolume' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionVolumeFrom.hs b/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionVolumeFrom.hs
--- a/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionVolumeFrom.hs
+++ b/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionVolumeFrom.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-volumesfrom.html
 
 module Stratosphere.ResourceProperties.ECSTaskDefinitionVolumeFrom where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   ECSTaskDefinitionVolumeFrom
   { _eCSTaskDefinitionVolumeFromReadOnly :: Maybe (Val Bool')
   , _eCSTaskDefinitionVolumeFromSourceContainer :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ECSTaskDefinitionVolumeFrom where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+  toJSON ECSTaskDefinitionVolumeFrom{..} =
+    object $
+    catMaybes
+    [ ("ReadOnly" .=) <$> _eCSTaskDefinitionVolumeFromReadOnly
+    , ("SourceContainer" .=) <$> _eCSTaskDefinitionVolumeFromSourceContainer
+    ]
 
 instance FromJSON ECSTaskDefinitionVolumeFrom where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ECSTaskDefinitionVolumeFrom <$>
+      obj .:? "ReadOnly" <*>
+      obj .:? "SourceContainer"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ECSTaskDefinitionVolumeFrom' containing required fields
 -- | as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/EFSFileSystemElasticFileSystemTag.hs b/library-gen/Stratosphere/ResourceProperties/EFSFileSystemElasticFileSystemTag.hs
--- a/library-gen/Stratosphere/ResourceProperties/EFSFileSystemElasticFileSystemTag.hs
+++ b/library-gen/Stratosphere/ResourceProperties/EFSFileSystemElasticFileSystemTag.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-efs-filesystem-filesystemtags.html
 
 module Stratosphere.ResourceProperties.EFSFileSystemElasticFileSystemTag where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   EFSFileSystemElasticFileSystemTag
   { _eFSFileSystemElasticFileSystemTagKey :: Val Text
   , _eFSFileSystemElasticFileSystemTagValue :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EFSFileSystemElasticFileSystemTag where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 34, omitNothingFields = True }
+  toJSON EFSFileSystemElasticFileSystemTag{..} =
+    object $
+    catMaybes
+    [ Just ("Key" .= _eFSFileSystemElasticFileSystemTagKey)
+    , Just ("Value" .= _eFSFileSystemElasticFileSystemTagValue)
+    ]
 
 instance FromJSON EFSFileSystemElasticFileSystemTag where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 34, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EFSFileSystemElasticFileSystemTag <$>
+      obj .: "Key" <*>
+      obj .: "Value"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EFSFileSystemElasticFileSystemTag' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/EMRClusterApplication.hs b/library-gen/Stratosphere/ResourceProperties/EMRClusterApplication.hs
--- a/library-gen/Stratosphere/ResourceProperties/EMRClusterApplication.hs
+++ b/library-gen/Stratosphere/ResourceProperties/EMRClusterApplication.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-cluster-application.html
 
 module Stratosphere.ResourceProperties.EMRClusterApplication where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -22,13 +22,26 @@
   , _eMRClusterApplicationArgs :: Maybe [Val Text]
   , _eMRClusterApplicationName :: Maybe (Val Text)
   , _eMRClusterApplicationVersion :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EMRClusterApplication where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 22, omitNothingFields = True }
+  toJSON EMRClusterApplication{..} =
+    object $
+    catMaybes
+    [ ("AdditionalInfo" .=) <$> _eMRClusterApplicationAdditionalInfo
+    , ("Args" .=) <$> _eMRClusterApplicationArgs
+    , ("Name" .=) <$> _eMRClusterApplicationName
+    , ("Version" .=) <$> _eMRClusterApplicationVersion
+    ]
 
 instance FromJSON EMRClusterApplication where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 22, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EMRClusterApplication <$>
+      obj .:? "AdditionalInfo" <*>
+      obj .:? "Args" <*>
+      obj .:? "Name" <*>
+      obj .:? "Version"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EMRClusterApplication' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/EMRClusterBootstrapActionConfig.hs b/library-gen/Stratosphere/ResourceProperties/EMRClusterBootstrapActionConfig.hs
--- a/library-gen/Stratosphere/ResourceProperties/EMRClusterBootstrapActionConfig.hs
+++ b/library-gen/Stratosphere/ResourceProperties/EMRClusterBootstrapActionConfig.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-cluster-bootstrapactionconfig.html
 
 module Stratosphere.ResourceProperties.EMRClusterBootstrapActionConfig where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.EMRClusterScriptBootstrapActionConfig
@@ -20,13 +20,22 @@
   EMRClusterBootstrapActionConfig
   { _eMRClusterBootstrapActionConfigName :: Val Text
   , _eMRClusterBootstrapActionConfigScriptBootstrapAction :: EMRClusterScriptBootstrapActionConfig
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EMRClusterBootstrapActionConfig where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 32, omitNothingFields = True }
+  toJSON EMRClusterBootstrapActionConfig{..} =
+    object $
+    catMaybes
+    [ Just ("Name" .= _eMRClusterBootstrapActionConfigName)
+    , Just ("ScriptBootstrapAction" .= _eMRClusterBootstrapActionConfigScriptBootstrapAction)
+    ]
 
 instance FromJSON EMRClusterBootstrapActionConfig where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 32, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EMRClusterBootstrapActionConfig <$>
+      obj .: "Name" <*>
+      obj .: "ScriptBootstrapAction"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EMRClusterBootstrapActionConfig' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/EMRClusterConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/EMRClusterConfiguration.hs
--- a/library-gen/Stratosphere/ResourceProperties/EMRClusterConfiguration.hs
+++ b/library-gen/Stratosphere/ResourceProperties/EMRClusterConfiguration.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-cluster-configuration.html
 
 module Stratosphere.ResourceProperties.EMRClusterConfiguration where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -21,13 +21,24 @@
   { _eMRClusterConfigurationClassification :: Maybe (Val Text)
   , _eMRClusterConfigurationConfigurationProperties :: Maybe Object
   , _eMRClusterConfigurationConfigurations :: Maybe [EMRClusterConfiguration]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EMRClusterConfiguration where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 24, omitNothingFields = True }
+  toJSON EMRClusterConfiguration{..} =
+    object $
+    catMaybes
+    [ ("Classification" .=) <$> _eMRClusterConfigurationClassification
+    , ("ConfigurationProperties" .=) <$> _eMRClusterConfigurationConfigurationProperties
+    , ("Configurations" .=) <$> _eMRClusterConfigurationConfigurations
+    ]
 
 instance FromJSON EMRClusterConfiguration where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 24, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EMRClusterConfiguration <$>
+      obj .:? "Classification" <*>
+      obj .:? "ConfigurationProperties" <*>
+      obj .:? "Configurations"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EMRClusterConfiguration' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/EMRClusterEbsBlockDeviceConfig.hs b/library-gen/Stratosphere/ResourceProperties/EMRClusterEbsBlockDeviceConfig.hs
--- a/library-gen/Stratosphere/ResourceProperties/EMRClusterEbsBlockDeviceConfig.hs
+++ b/library-gen/Stratosphere/ResourceProperties/EMRClusterEbsBlockDeviceConfig.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-ebsconfiguration-ebsblockdeviceconfig.html
 
 module Stratosphere.ResourceProperties.EMRClusterEbsBlockDeviceConfig where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.EMRClusterVolumeSpecification
@@ -20,13 +20,22 @@
   EMRClusterEbsBlockDeviceConfig
   { _eMRClusterEbsBlockDeviceConfigVolumeSpecification :: EMRClusterVolumeSpecification
   , _eMRClusterEbsBlockDeviceConfigVolumesPerInstance :: Maybe (Val Integer')
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EMRClusterEbsBlockDeviceConfig where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 31, omitNothingFields = True }
+  toJSON EMRClusterEbsBlockDeviceConfig{..} =
+    object $
+    catMaybes
+    [ Just ("VolumeSpecification" .= _eMRClusterEbsBlockDeviceConfigVolumeSpecification)
+    , ("VolumesPerInstance" .=) <$> _eMRClusterEbsBlockDeviceConfigVolumesPerInstance
+    ]
 
 instance FromJSON EMRClusterEbsBlockDeviceConfig where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 31, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EMRClusterEbsBlockDeviceConfig <$>
+      obj .: "VolumeSpecification" <*>
+      obj .:? "VolumesPerInstance"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EMRClusterEbsBlockDeviceConfig' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/EMRClusterEbsConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/EMRClusterEbsConfiguration.hs
--- a/library-gen/Stratosphere/ResourceProperties/EMRClusterEbsConfiguration.hs
+++ b/library-gen/Stratosphere/ResourceProperties/EMRClusterEbsConfiguration.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-ebsconfiguration.html
 
 module Stratosphere.ResourceProperties.EMRClusterEbsConfiguration where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.EMRClusterEbsBlockDeviceConfig
@@ -20,13 +20,22 @@
   EMRClusterEbsConfiguration
   { _eMRClusterEbsConfigurationEbsBlockDeviceConfigs :: Maybe [EMRClusterEbsBlockDeviceConfig]
   , _eMRClusterEbsConfigurationEbsOptimized :: Maybe (Val Bool')
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EMRClusterEbsConfiguration where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
+  toJSON EMRClusterEbsConfiguration{..} =
+    object $
+    catMaybes
+    [ ("EbsBlockDeviceConfigs" .=) <$> _eMRClusterEbsConfigurationEbsBlockDeviceConfigs
+    , ("EbsOptimized" .=) <$> _eMRClusterEbsConfigurationEbsOptimized
+    ]
 
 instance FromJSON EMRClusterEbsConfiguration where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EMRClusterEbsConfiguration <$>
+      obj .:? "EbsBlockDeviceConfigs" <*>
+      obj .:? "EbsOptimized"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EMRClusterEbsConfiguration' containing required fields
 -- | as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/EMRClusterInstanceGroupConfig.hs b/library-gen/Stratosphere/ResourceProperties/EMRClusterInstanceGroupConfig.hs
--- a/library-gen/Stratosphere/ResourceProperties/EMRClusterInstanceGroupConfig.hs
+++ b/library-gen/Stratosphere/ResourceProperties/EMRClusterInstanceGroupConfig.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-cluster-jobflowinstancesconfig-instancegroupconfig.html
 
 module Stratosphere.ResourceProperties.EMRClusterInstanceGroupConfig where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.EMRClusterConfiguration
@@ -26,13 +26,32 @@
   , _eMRClusterInstanceGroupConfigInstanceType :: Val Text
   , _eMRClusterInstanceGroupConfigMarket :: Maybe (Val Text)
   , _eMRClusterInstanceGroupConfigName :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EMRClusterInstanceGroupConfig where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
+  toJSON EMRClusterInstanceGroupConfig{..} =
+    object $
+    catMaybes
+    [ ("BidPrice" .=) <$> _eMRClusterInstanceGroupConfigBidPrice
+    , ("Configurations" .=) <$> _eMRClusterInstanceGroupConfigConfigurations
+    , ("EbsConfiguration" .=) <$> _eMRClusterInstanceGroupConfigEbsConfiguration
+    , Just ("InstanceCount" .= _eMRClusterInstanceGroupConfigInstanceCount)
+    , Just ("InstanceType" .= _eMRClusterInstanceGroupConfigInstanceType)
+    , ("Market" .=) <$> _eMRClusterInstanceGroupConfigMarket
+    , ("Name" .=) <$> _eMRClusterInstanceGroupConfigName
+    ]
 
 instance FromJSON EMRClusterInstanceGroupConfig where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EMRClusterInstanceGroupConfig <$>
+      obj .:? "BidPrice" <*>
+      obj .:? "Configurations" <*>
+      obj .:? "EbsConfiguration" <*>
+      obj .: "InstanceCount" <*>
+      obj .: "InstanceType" <*>
+      obj .:? "Market" <*>
+      obj .:? "Name"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EMRClusterInstanceGroupConfig' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/EMRClusterJobFlowInstancesConfig.hs b/library-gen/Stratosphere/ResourceProperties/EMRClusterJobFlowInstancesConfig.hs
--- a/library-gen/Stratosphere/ResourceProperties/EMRClusterJobFlowInstancesConfig.hs
+++ b/library-gen/Stratosphere/ResourceProperties/EMRClusterJobFlowInstancesConfig.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-cluster-jobflowinstancesconfig.html
 
 module Stratosphere.ResourceProperties.EMRClusterJobFlowInstancesConfig where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.EMRClusterInstanceGroupConfig
@@ -31,13 +31,42 @@
   , _eMRClusterJobFlowInstancesConfigPlacement :: Maybe EMRClusterPlacementType
   , _eMRClusterJobFlowInstancesConfigServiceAccessSecurityGroup :: Maybe (Val Text)
   , _eMRClusterJobFlowInstancesConfigTerminationProtected :: Maybe (Val Bool')
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EMRClusterJobFlowInstancesConfig where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 33, omitNothingFields = True }
+  toJSON EMRClusterJobFlowInstancesConfig{..} =
+    object $
+    catMaybes
+    [ ("AdditionalMasterSecurityGroups" .=) <$> _eMRClusterJobFlowInstancesConfigAdditionalMasterSecurityGroups
+    , ("AdditionalSlaveSecurityGroups" .=) <$> _eMRClusterJobFlowInstancesConfigAdditionalSlaveSecurityGroups
+    , Just ("CoreInstanceGroup" .= _eMRClusterJobFlowInstancesConfigCoreInstanceGroup)
+    , ("Ec2KeyName" .=) <$> _eMRClusterJobFlowInstancesConfigEc2KeyName
+    , ("Ec2SubnetId" .=) <$> _eMRClusterJobFlowInstancesConfigEc2SubnetId
+    , ("EmrManagedMasterSecurityGroup" .=) <$> _eMRClusterJobFlowInstancesConfigEmrManagedMasterSecurityGroup
+    , ("EmrManagedSlaveSecurityGroup" .=) <$> _eMRClusterJobFlowInstancesConfigEmrManagedSlaveSecurityGroup
+    , ("HadoopVersion" .=) <$> _eMRClusterJobFlowInstancesConfigHadoopVersion
+    , Just ("MasterInstanceGroup" .= _eMRClusterJobFlowInstancesConfigMasterInstanceGroup)
+    , ("Placement" .=) <$> _eMRClusterJobFlowInstancesConfigPlacement
+    , ("ServiceAccessSecurityGroup" .=) <$> _eMRClusterJobFlowInstancesConfigServiceAccessSecurityGroup
+    , ("TerminationProtected" .=) <$> _eMRClusterJobFlowInstancesConfigTerminationProtected
+    ]
 
 instance FromJSON EMRClusterJobFlowInstancesConfig where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 33, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EMRClusterJobFlowInstancesConfig <$>
+      obj .:? "AdditionalMasterSecurityGroups" <*>
+      obj .:? "AdditionalSlaveSecurityGroups" <*>
+      obj .: "CoreInstanceGroup" <*>
+      obj .:? "Ec2KeyName" <*>
+      obj .:? "Ec2SubnetId" <*>
+      obj .:? "EmrManagedMasterSecurityGroup" <*>
+      obj .:? "EmrManagedSlaveSecurityGroup" <*>
+      obj .:? "HadoopVersion" <*>
+      obj .: "MasterInstanceGroup" <*>
+      obj .:? "Placement" <*>
+      obj .:? "ServiceAccessSecurityGroup" <*>
+      obj .:? "TerminationProtected"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EMRClusterJobFlowInstancesConfig' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/EMRClusterPlacementType.hs b/library-gen/Stratosphere/ResourceProperties/EMRClusterPlacementType.hs
--- a/library-gen/Stratosphere/ResourceProperties/EMRClusterPlacementType.hs
+++ b/library-gen/Stratosphere/ResourceProperties/EMRClusterPlacementType.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-cluster-jobflowinstancesconfig-placementtype.html
 
 module Stratosphere.ResourceProperties.EMRClusterPlacementType where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -19,13 +19,20 @@
 data EMRClusterPlacementType =
   EMRClusterPlacementType
   { _eMRClusterPlacementTypeAvailabilityZone :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EMRClusterPlacementType where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 24, omitNothingFields = True }
+  toJSON EMRClusterPlacementType{..} =
+    object $
+    catMaybes
+    [ Just ("AvailabilityZone" .= _eMRClusterPlacementTypeAvailabilityZone)
+    ]
 
 instance FromJSON EMRClusterPlacementType where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 24, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EMRClusterPlacementType <$>
+      obj .: "AvailabilityZone"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EMRClusterPlacementType' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/EMRClusterScriptBootstrapActionConfig.hs b/library-gen/Stratosphere/ResourceProperties/EMRClusterScriptBootstrapActionConfig.hs
--- a/library-gen/Stratosphere/ResourceProperties/EMRClusterScriptBootstrapActionConfig.hs
+++ b/library-gen/Stratosphere/ResourceProperties/EMRClusterScriptBootstrapActionConfig.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-cluster-bootstrapactionconfig-scriptbootstrapactionconfig.html
 
 module Stratosphere.ResourceProperties.EMRClusterScriptBootstrapActionConfig where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -21,13 +21,22 @@
   EMRClusterScriptBootstrapActionConfig
   { _eMRClusterScriptBootstrapActionConfigArgs :: Maybe [Val Text]
   , _eMRClusterScriptBootstrapActionConfigPath :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EMRClusterScriptBootstrapActionConfig where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 38, omitNothingFields = True }
+  toJSON EMRClusterScriptBootstrapActionConfig{..} =
+    object $
+    catMaybes
+    [ ("Args" .=) <$> _eMRClusterScriptBootstrapActionConfigArgs
+    , Just ("Path" .= _eMRClusterScriptBootstrapActionConfigPath)
+    ]
 
 instance FromJSON EMRClusterScriptBootstrapActionConfig where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 38, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EMRClusterScriptBootstrapActionConfig <$>
+      obj .:? "Args" <*>
+      obj .: "Path"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EMRClusterScriptBootstrapActionConfig' containing
 -- | required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/EMRClusterVolumeSpecification.hs b/library-gen/Stratosphere/ResourceProperties/EMRClusterVolumeSpecification.hs
--- a/library-gen/Stratosphere/ResourceProperties/EMRClusterVolumeSpecification.hs
+++ b/library-gen/Stratosphere/ResourceProperties/EMRClusterVolumeSpecification.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-ebsconfiguration-ebsblockdeviceconfig-volumespecification.html
 
 module Stratosphere.ResourceProperties.EMRClusterVolumeSpecification where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -21,13 +21,24 @@
   { _eMRClusterVolumeSpecificationIops :: Maybe (Val Integer')
   , _eMRClusterVolumeSpecificationSizeInGB :: Val Integer'
   , _eMRClusterVolumeSpecificationVolumeType :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EMRClusterVolumeSpecification where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
+  toJSON EMRClusterVolumeSpecification{..} =
+    object $
+    catMaybes
+    [ ("Iops" .=) <$> _eMRClusterVolumeSpecificationIops
+    , Just ("SizeInGB" .= _eMRClusterVolumeSpecificationSizeInGB)
+    , Just ("VolumeType" .= _eMRClusterVolumeSpecificationVolumeType)
+    ]
 
 instance FromJSON EMRClusterVolumeSpecification where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EMRClusterVolumeSpecification <$>
+      obj .:? "Iops" <*>
+      obj .: "SizeInGB" <*>
+      obj .: "VolumeType"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EMRClusterVolumeSpecification' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/EMRInstanceGroupConfigConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/EMRInstanceGroupConfigConfiguration.hs
--- a/library-gen/Stratosphere/ResourceProperties/EMRInstanceGroupConfigConfiguration.hs
+++ b/library-gen/Stratosphere/ResourceProperties/EMRInstanceGroupConfigConfiguration.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-cluster-configuration.html
 
 module Stratosphere.ResourceProperties.EMRInstanceGroupConfigConfiguration where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -21,13 +21,24 @@
   { _eMRInstanceGroupConfigConfigurationClassification :: Maybe (Val Text)
   , _eMRInstanceGroupConfigConfigurationConfigurationProperties :: Maybe Object
   , _eMRInstanceGroupConfigConfigurationConfigurations :: Maybe [EMRInstanceGroupConfigConfiguration]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EMRInstanceGroupConfigConfiguration where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 36, omitNothingFields = True }
+  toJSON EMRInstanceGroupConfigConfiguration{..} =
+    object $
+    catMaybes
+    [ ("Classification" .=) <$> _eMRInstanceGroupConfigConfigurationClassification
+    , ("ConfigurationProperties" .=) <$> _eMRInstanceGroupConfigConfigurationConfigurationProperties
+    , ("Configurations" .=) <$> _eMRInstanceGroupConfigConfigurationConfigurations
+    ]
 
 instance FromJSON EMRInstanceGroupConfigConfiguration where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 36, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EMRInstanceGroupConfigConfiguration <$>
+      obj .:? "Classification" <*>
+      obj .:? "ConfigurationProperties" <*>
+      obj .:? "Configurations"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EMRInstanceGroupConfigConfiguration' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/EMRInstanceGroupConfigEbsBlockDeviceConfig.hs b/library-gen/Stratosphere/ResourceProperties/EMRInstanceGroupConfigEbsBlockDeviceConfig.hs
--- a/library-gen/Stratosphere/ResourceProperties/EMRInstanceGroupConfigEbsBlockDeviceConfig.hs
+++ b/library-gen/Stratosphere/ResourceProperties/EMRInstanceGroupConfigEbsBlockDeviceConfig.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-ebsconfiguration-ebsblockdeviceconfig.html
 
 module Stratosphere.ResourceProperties.EMRInstanceGroupConfigEbsBlockDeviceConfig where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.EMRInstanceGroupConfigVolumeSpecification
@@ -21,13 +21,22 @@
   EMRInstanceGroupConfigEbsBlockDeviceConfig
   { _eMRInstanceGroupConfigEbsBlockDeviceConfigVolumeSpecification :: EMRInstanceGroupConfigVolumeSpecification
   , _eMRInstanceGroupConfigEbsBlockDeviceConfigVolumesPerInstance :: Maybe (Val Integer')
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EMRInstanceGroupConfigEbsBlockDeviceConfig where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 43, omitNothingFields = True }
+  toJSON EMRInstanceGroupConfigEbsBlockDeviceConfig{..} =
+    object $
+    catMaybes
+    [ Just ("VolumeSpecification" .= _eMRInstanceGroupConfigEbsBlockDeviceConfigVolumeSpecification)
+    , ("VolumesPerInstance" .=) <$> _eMRInstanceGroupConfigEbsBlockDeviceConfigVolumesPerInstance
+    ]
 
 instance FromJSON EMRInstanceGroupConfigEbsBlockDeviceConfig where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 43, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EMRInstanceGroupConfigEbsBlockDeviceConfig <$>
+      obj .: "VolumeSpecification" <*>
+      obj .:? "VolumesPerInstance"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EMRInstanceGroupConfigEbsBlockDeviceConfig' containing
 -- | required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/EMRInstanceGroupConfigEbsConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/EMRInstanceGroupConfigEbsConfiguration.hs
--- a/library-gen/Stratosphere/ResourceProperties/EMRInstanceGroupConfigEbsConfiguration.hs
+++ b/library-gen/Stratosphere/ResourceProperties/EMRInstanceGroupConfigEbsConfiguration.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-ebsconfiguration.html
 
 module Stratosphere.ResourceProperties.EMRInstanceGroupConfigEbsConfiguration where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.EMRInstanceGroupConfigEbsBlockDeviceConfig
@@ -21,13 +21,22 @@
   EMRInstanceGroupConfigEbsConfiguration
   { _eMRInstanceGroupConfigEbsConfigurationEbsBlockDeviceConfigs :: Maybe [EMRInstanceGroupConfigEbsBlockDeviceConfig]
   , _eMRInstanceGroupConfigEbsConfigurationEbsOptimized :: Maybe (Val Bool')
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EMRInstanceGroupConfigEbsConfiguration where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 39, omitNothingFields = True }
+  toJSON EMRInstanceGroupConfigEbsConfiguration{..} =
+    object $
+    catMaybes
+    [ ("EbsBlockDeviceConfigs" .=) <$> _eMRInstanceGroupConfigEbsConfigurationEbsBlockDeviceConfigs
+    , ("EbsOptimized" .=) <$> _eMRInstanceGroupConfigEbsConfigurationEbsOptimized
+    ]
 
 instance FromJSON EMRInstanceGroupConfigEbsConfiguration where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 39, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EMRInstanceGroupConfigEbsConfiguration <$>
+      obj .:? "EbsBlockDeviceConfigs" <*>
+      obj .:? "EbsOptimized"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EMRInstanceGroupConfigEbsConfiguration' containing
 -- | required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/EMRInstanceGroupConfigVolumeSpecification.hs b/library-gen/Stratosphere/ResourceProperties/EMRInstanceGroupConfigVolumeSpecification.hs
--- a/library-gen/Stratosphere/ResourceProperties/EMRInstanceGroupConfigVolumeSpecification.hs
+++ b/library-gen/Stratosphere/ResourceProperties/EMRInstanceGroupConfigVolumeSpecification.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-ebsconfiguration-ebsblockdeviceconfig-volumespecification.html
 
 module Stratosphere.ResourceProperties.EMRInstanceGroupConfigVolumeSpecification where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -22,13 +22,24 @@
   { _eMRInstanceGroupConfigVolumeSpecificationIops :: Maybe (Val Integer')
   , _eMRInstanceGroupConfigVolumeSpecificationSizeInGB :: Val Integer'
   , _eMRInstanceGroupConfigVolumeSpecificationVolumeType :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EMRInstanceGroupConfigVolumeSpecification where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 42, omitNothingFields = True }
+  toJSON EMRInstanceGroupConfigVolumeSpecification{..} =
+    object $
+    catMaybes
+    [ ("Iops" .=) <$> _eMRInstanceGroupConfigVolumeSpecificationIops
+    , Just ("SizeInGB" .= _eMRInstanceGroupConfigVolumeSpecificationSizeInGB)
+    , Just ("VolumeType" .= _eMRInstanceGroupConfigVolumeSpecificationVolumeType)
+    ]
 
 instance FromJSON EMRInstanceGroupConfigVolumeSpecification where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 42, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EMRInstanceGroupConfigVolumeSpecification <$>
+      obj .:? "Iops" <*>
+      obj .: "SizeInGB" <*>
+      obj .: "VolumeType"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EMRInstanceGroupConfigVolumeSpecification' containing
 -- | required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/EMRStepHadoopJarStepConfig.hs b/library-gen/Stratosphere/ResourceProperties/EMRStepHadoopJarStepConfig.hs
--- a/library-gen/Stratosphere/ResourceProperties/EMRStepHadoopJarStepConfig.hs
+++ b/library-gen/Stratosphere/ResourceProperties/EMRStepHadoopJarStepConfig.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-step-hadoopjarstepconfig.html
 
 module Stratosphere.ResourceProperties.EMRStepHadoopJarStepConfig where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.EMRStepKeyValue
@@ -22,13 +22,26 @@
   , _eMRStepHadoopJarStepConfigJar :: Val Text
   , _eMRStepHadoopJarStepConfigMainClass :: Maybe (Val Text)
   , _eMRStepHadoopJarStepConfigStepProperties :: Maybe [EMRStepKeyValue]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EMRStepHadoopJarStepConfig where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
+  toJSON EMRStepHadoopJarStepConfig{..} =
+    object $
+    catMaybes
+    [ ("Args" .=) <$> _eMRStepHadoopJarStepConfigArgs
+    , Just ("Jar" .= _eMRStepHadoopJarStepConfigJar)
+    , ("MainClass" .=) <$> _eMRStepHadoopJarStepConfigMainClass
+    , ("StepProperties" .=) <$> _eMRStepHadoopJarStepConfigStepProperties
+    ]
 
 instance FromJSON EMRStepHadoopJarStepConfig where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EMRStepHadoopJarStepConfig <$>
+      obj .:? "Args" <*>
+      obj .: "Jar" <*>
+      obj .:? "MainClass" <*>
+      obj .:? "StepProperties"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EMRStepHadoopJarStepConfig' containing required fields
 -- | as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/EMRStepKeyValue.hs b/library-gen/Stratosphere/ResourceProperties/EMRStepKeyValue.hs
--- a/library-gen/Stratosphere/ResourceProperties/EMRStepKeyValue.hs
+++ b/library-gen/Stratosphere/ResourceProperties/EMRStepKeyValue.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-step-keyvalue.html
 
 module Stratosphere.ResourceProperties.EMRStepKeyValue where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   EMRStepKeyValue
   { _eMRStepKeyValueKey :: Maybe (Val Text)
   , _eMRStepKeyValueValue :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EMRStepKeyValue where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 16, omitNothingFields = True }
+  toJSON EMRStepKeyValue{..} =
+    object $
+    catMaybes
+    [ ("Key" .=) <$> _eMRStepKeyValueKey
+    , ("Value" .=) <$> _eMRStepKeyValueValue
+    ]
 
 instance FromJSON EMRStepKeyValue where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 16, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EMRStepKeyValue <$>
+      obj .:? "Key" <*>
+      obj .:? "Value"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EMRStepKeyValue' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/ElastiCacheReplicationGroupNodeGroupConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/ElastiCacheReplicationGroupNodeGroupConfiguration.hs
--- a/library-gen/Stratosphere/ResourceProperties/ElastiCacheReplicationGroupNodeGroupConfiguration.hs
+++ b/library-gen/Stratosphere/ResourceProperties/ElastiCacheReplicationGroupNodeGroupConfiguration.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-replicationgroup-nodegroupconfiguration.html
 
 module Stratosphere.ResourceProperties.ElastiCacheReplicationGroupNodeGroupConfiguration where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -24,13 +24,26 @@
   , _elastiCacheReplicationGroupNodeGroupConfigurationReplicaAvailabilityZones :: Maybe [Val Text]
   , _elastiCacheReplicationGroupNodeGroupConfigurationReplicaCount :: Maybe (Val Integer')
   , _elastiCacheReplicationGroupNodeGroupConfigurationSlots :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ElastiCacheReplicationGroupNodeGroupConfiguration where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 50, omitNothingFields = True }
+  toJSON ElastiCacheReplicationGroupNodeGroupConfiguration{..} =
+    object $
+    catMaybes
+    [ ("PrimaryAvailabilityZone" .=) <$> _elastiCacheReplicationGroupNodeGroupConfigurationPrimaryAvailabilityZone
+    , ("ReplicaAvailabilityZones" .=) <$> _elastiCacheReplicationGroupNodeGroupConfigurationReplicaAvailabilityZones
+    , ("ReplicaCount" .=) <$> _elastiCacheReplicationGroupNodeGroupConfigurationReplicaCount
+    , ("Slots" .=) <$> _elastiCacheReplicationGroupNodeGroupConfigurationSlots
+    ]
 
 instance FromJSON ElastiCacheReplicationGroupNodeGroupConfiguration where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 50, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ElastiCacheReplicationGroupNodeGroupConfiguration <$>
+      obj .:? "PrimaryAvailabilityZone" <*>
+      obj .:? "ReplicaAvailabilityZones" <*>
+      obj .:? "ReplicaCount" <*>
+      obj .:? "Slots"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ElastiCacheReplicationGroupNodeGroupConfiguration'
 -- | containing required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/ElasticBeanstalkApplicationVersionSourceBundle.hs b/library-gen/Stratosphere/ResourceProperties/ElasticBeanstalkApplicationVersionSourceBundle.hs
--- a/library-gen/Stratosphere/ResourceProperties/ElasticBeanstalkApplicationVersionSourceBundle.hs
+++ b/library-gen/Stratosphere/ResourceProperties/ElasticBeanstalkApplicationVersionSourceBundle.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-beanstalk-sourcebundle.html
 
 module Stratosphere.ResourceProperties.ElasticBeanstalkApplicationVersionSourceBundle where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -22,13 +22,22 @@
   ElasticBeanstalkApplicationVersionSourceBundle
   { _elasticBeanstalkApplicationVersionSourceBundleS3Bucket :: Val Text
   , _elasticBeanstalkApplicationVersionSourceBundleS3Key :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ElasticBeanstalkApplicationVersionSourceBundle where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 47, omitNothingFields = True }
+  toJSON ElasticBeanstalkApplicationVersionSourceBundle{..} =
+    object $
+    catMaybes
+    [ Just ("S3Bucket" .= _elasticBeanstalkApplicationVersionSourceBundleS3Bucket)
+    , Just ("S3Key" .= _elasticBeanstalkApplicationVersionSourceBundleS3Key)
+    ]
 
 instance FromJSON ElasticBeanstalkApplicationVersionSourceBundle where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 47, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ElasticBeanstalkApplicationVersionSourceBundle <$>
+      obj .: "S3Bucket" <*>
+      obj .: "S3Key"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ElasticBeanstalkApplicationVersionSourceBundle'
 -- | containing required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/ElasticBeanstalkConfigurationTemplateConfigurationOptionSetting.hs b/library-gen/Stratosphere/ResourceProperties/ElasticBeanstalkConfigurationTemplateConfigurationOptionSetting.hs
--- a/library-gen/Stratosphere/ResourceProperties/ElasticBeanstalkConfigurationTemplateConfigurationOptionSetting.hs
+++ b/library-gen/Stratosphere/ResourceProperties/ElasticBeanstalkConfigurationTemplateConfigurationOptionSetting.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-beanstalk-option-settings.html
 
 module Stratosphere.ResourceProperties.ElasticBeanstalkConfigurationTemplateConfigurationOptionSetting where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -23,13 +23,24 @@
   { _elasticBeanstalkConfigurationTemplateConfigurationOptionSettingNamespace :: Val Text
   , _elasticBeanstalkConfigurationTemplateConfigurationOptionSettingOptionName :: Val Text
   , _elasticBeanstalkConfigurationTemplateConfigurationOptionSettingValue :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ElasticBeanstalkConfigurationTemplateConfigurationOptionSetting where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 64, omitNothingFields = True }
+  toJSON ElasticBeanstalkConfigurationTemplateConfigurationOptionSetting{..} =
+    object $
+    catMaybes
+    [ Just ("Namespace" .= _elasticBeanstalkConfigurationTemplateConfigurationOptionSettingNamespace)
+    , Just ("OptionName" .= _elasticBeanstalkConfigurationTemplateConfigurationOptionSettingOptionName)
+    , Just ("Value" .= _elasticBeanstalkConfigurationTemplateConfigurationOptionSettingValue)
+    ]
 
 instance FromJSON ElasticBeanstalkConfigurationTemplateConfigurationOptionSetting where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 64, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ElasticBeanstalkConfigurationTemplateConfigurationOptionSetting <$>
+      obj .: "Namespace" <*>
+      obj .: "OptionName" <*>
+      obj .: "Value"
+  parseJSON _ = mempty
 
 -- | Constructor for
 -- | 'ElasticBeanstalkConfigurationTemplateConfigurationOptionSetting'
diff --git a/library-gen/Stratosphere/ResourceProperties/ElasticBeanstalkConfigurationTemplateSourceConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/ElasticBeanstalkConfigurationTemplateSourceConfiguration.hs
--- a/library-gen/Stratosphere/ResourceProperties/ElasticBeanstalkConfigurationTemplateSourceConfiguration.hs
+++ b/library-gen/Stratosphere/ResourceProperties/ElasticBeanstalkConfigurationTemplateSourceConfiguration.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-beanstalk-configurationtemplate-sourceconfiguration.html
 
 module Stratosphere.ResourceProperties.ElasticBeanstalkConfigurationTemplateSourceConfiguration where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -22,13 +22,22 @@
   ElasticBeanstalkConfigurationTemplateSourceConfiguration
   { _elasticBeanstalkConfigurationTemplateSourceConfigurationApplicationName :: Val Text
   , _elasticBeanstalkConfigurationTemplateSourceConfigurationTemplateName :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ElasticBeanstalkConfigurationTemplateSourceConfiguration where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 57, omitNothingFields = True }
+  toJSON ElasticBeanstalkConfigurationTemplateSourceConfiguration{..} =
+    object $
+    catMaybes
+    [ Just ("ApplicationName" .= _elasticBeanstalkConfigurationTemplateSourceConfigurationApplicationName)
+    , Just ("TemplateName" .= _elasticBeanstalkConfigurationTemplateSourceConfigurationTemplateName)
+    ]
 
 instance FromJSON ElasticBeanstalkConfigurationTemplateSourceConfiguration where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 57, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ElasticBeanstalkConfigurationTemplateSourceConfiguration <$>
+      obj .: "ApplicationName" <*>
+      obj .: "TemplateName"
+  parseJSON _ = mempty
 
 -- | Constructor for
 -- | 'ElasticBeanstalkConfigurationTemplateSourceConfiguration' containing
diff --git a/library-gen/Stratosphere/ResourceProperties/ElasticBeanstalkEnvironmentOptionSettings.hs b/library-gen/Stratosphere/ResourceProperties/ElasticBeanstalkEnvironmentOptionSettings.hs
--- a/library-gen/Stratosphere/ResourceProperties/ElasticBeanstalkEnvironmentOptionSettings.hs
+++ b/library-gen/Stratosphere/ResourceProperties/ElasticBeanstalkEnvironmentOptionSettings.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-beanstalk-option-settings.html
 
 module Stratosphere.ResourceProperties.ElasticBeanstalkEnvironmentOptionSettings where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -22,13 +22,24 @@
   { _elasticBeanstalkEnvironmentOptionSettingsNamespace :: Val Text
   , _elasticBeanstalkEnvironmentOptionSettingsOptionName :: Val Text
   , _elasticBeanstalkEnvironmentOptionSettingsValue :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ElasticBeanstalkEnvironmentOptionSettings where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 42, omitNothingFields = True }
+  toJSON ElasticBeanstalkEnvironmentOptionSettings{..} =
+    object $
+    catMaybes
+    [ Just ("Namespace" .= _elasticBeanstalkEnvironmentOptionSettingsNamespace)
+    , Just ("OptionName" .= _elasticBeanstalkEnvironmentOptionSettingsOptionName)
+    , Just ("Value" .= _elasticBeanstalkEnvironmentOptionSettingsValue)
+    ]
 
 instance FromJSON ElasticBeanstalkEnvironmentOptionSettings where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 42, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ElasticBeanstalkEnvironmentOptionSettings <$>
+      obj .: "Namespace" <*>
+      obj .: "OptionName" <*>
+      obj .: "Value"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ElasticBeanstalkEnvironmentOptionSettings' containing
 -- | required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/ElasticBeanstalkEnvironmentTier.hs b/library-gen/Stratosphere/ResourceProperties/ElasticBeanstalkEnvironmentTier.hs
--- a/library-gen/Stratosphere/ResourceProperties/ElasticBeanstalkEnvironmentTier.hs
+++ b/library-gen/Stratosphere/ResourceProperties/ElasticBeanstalkEnvironmentTier.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-beanstalk-environment-tier.html
 
 module Stratosphere.ResourceProperties.ElasticBeanstalkEnvironmentTier where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -21,13 +21,24 @@
   { _elasticBeanstalkEnvironmentTierName :: Maybe (Val Text)
   , _elasticBeanstalkEnvironmentTierType :: Maybe (Val Text)
   , _elasticBeanstalkEnvironmentTierVersion :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ElasticBeanstalkEnvironmentTier where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 32, omitNothingFields = True }
+  toJSON ElasticBeanstalkEnvironmentTier{..} =
+    object $
+    catMaybes
+    [ ("Name" .=) <$> _elasticBeanstalkEnvironmentTierName
+    , ("Type" .=) <$> _elasticBeanstalkEnvironmentTierType
+    , ("Version" .=) <$> _elasticBeanstalkEnvironmentTierVersion
+    ]
 
 instance FromJSON ElasticBeanstalkEnvironmentTier where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 32, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ElasticBeanstalkEnvironmentTier <$>
+      obj .:? "Name" <*>
+      obj .:? "Type" <*>
+      obj .:? "Version"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ElasticBeanstalkEnvironmentTier' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingLoadBalancerAccessLoggingPolicy.hs b/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingLoadBalancerAccessLoggingPolicy.hs
--- a/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingLoadBalancerAccessLoggingPolicy.hs
+++ b/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingLoadBalancerAccessLoggingPolicy.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb-accessloggingpolicy.html
 
 module Stratosphere.ResourceProperties.ElasticLoadBalancingLoadBalancerAccessLoggingPolicy where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -24,13 +24,26 @@
   , _elasticLoadBalancingLoadBalancerAccessLoggingPolicyEnabled :: Val Bool'
   , _elasticLoadBalancingLoadBalancerAccessLoggingPolicyS3BucketName :: Val Text
   , _elasticLoadBalancingLoadBalancerAccessLoggingPolicyS3BucketPrefix :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ElasticLoadBalancingLoadBalancerAccessLoggingPolicy where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 52, omitNothingFields = True }
+  toJSON ElasticLoadBalancingLoadBalancerAccessLoggingPolicy{..} =
+    object $
+    catMaybes
+    [ ("EmitInterval" .=) <$> _elasticLoadBalancingLoadBalancerAccessLoggingPolicyEmitInterval
+    , Just ("Enabled" .= _elasticLoadBalancingLoadBalancerAccessLoggingPolicyEnabled)
+    , Just ("S3BucketName" .= _elasticLoadBalancingLoadBalancerAccessLoggingPolicyS3BucketName)
+    , ("S3BucketPrefix" .=) <$> _elasticLoadBalancingLoadBalancerAccessLoggingPolicyS3BucketPrefix
+    ]
 
 instance FromJSON ElasticLoadBalancingLoadBalancerAccessLoggingPolicy where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 52, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ElasticLoadBalancingLoadBalancerAccessLoggingPolicy <$>
+      obj .:? "EmitInterval" <*>
+      obj .: "Enabled" <*>
+      obj .: "S3BucketName" <*>
+      obj .:? "S3BucketPrefix"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ElasticLoadBalancingLoadBalancerAccessLoggingPolicy'
 -- | containing required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingLoadBalancerAppCookieStickinessPolicy.hs b/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingLoadBalancerAppCookieStickinessPolicy.hs
--- a/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingLoadBalancerAppCookieStickinessPolicy.hs
+++ b/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingLoadBalancerAppCookieStickinessPolicy.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb-AppCookieStickinessPolicy.html
 
 module Stratosphere.ResourceProperties.ElasticLoadBalancingLoadBalancerAppCookieStickinessPolicy where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -22,13 +22,22 @@
   ElasticLoadBalancingLoadBalancerAppCookieStickinessPolicy
   { _elasticLoadBalancingLoadBalancerAppCookieStickinessPolicyCookieName :: Val Text
   , _elasticLoadBalancingLoadBalancerAppCookieStickinessPolicyPolicyName :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ElasticLoadBalancingLoadBalancerAppCookieStickinessPolicy where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 58, omitNothingFields = True }
+  toJSON ElasticLoadBalancingLoadBalancerAppCookieStickinessPolicy{..} =
+    object $
+    catMaybes
+    [ Just ("CookieName" .= _elasticLoadBalancingLoadBalancerAppCookieStickinessPolicyCookieName)
+    , Just ("PolicyName" .= _elasticLoadBalancingLoadBalancerAppCookieStickinessPolicyPolicyName)
+    ]
 
 instance FromJSON ElasticLoadBalancingLoadBalancerAppCookieStickinessPolicy where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 58, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ElasticLoadBalancingLoadBalancerAppCookieStickinessPolicy <$>
+      obj .: "CookieName" <*>
+      obj .: "PolicyName"
+  parseJSON _ = mempty
 
 -- | Constructor for
 -- | 'ElasticLoadBalancingLoadBalancerAppCookieStickinessPolicy' containing
diff --git a/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingLoadBalancerConnectionDrainingPolicy.hs b/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingLoadBalancerConnectionDrainingPolicy.hs
--- a/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingLoadBalancerConnectionDrainingPolicy.hs
+++ b/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingLoadBalancerConnectionDrainingPolicy.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb-connectiondrainingpolicy.html
 
 module Stratosphere.ResourceProperties.ElasticLoadBalancingLoadBalancerConnectionDrainingPolicy where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -22,13 +22,22 @@
   ElasticLoadBalancingLoadBalancerConnectionDrainingPolicy
   { _elasticLoadBalancingLoadBalancerConnectionDrainingPolicyEnabled :: Val Bool'
   , _elasticLoadBalancingLoadBalancerConnectionDrainingPolicyTimeout :: Maybe (Val Integer')
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ElasticLoadBalancingLoadBalancerConnectionDrainingPolicy where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 57, omitNothingFields = True }
+  toJSON ElasticLoadBalancingLoadBalancerConnectionDrainingPolicy{..} =
+    object $
+    catMaybes
+    [ Just ("Enabled" .= _elasticLoadBalancingLoadBalancerConnectionDrainingPolicyEnabled)
+    , ("Timeout" .=) <$> _elasticLoadBalancingLoadBalancerConnectionDrainingPolicyTimeout
+    ]
 
 instance FromJSON ElasticLoadBalancingLoadBalancerConnectionDrainingPolicy where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 57, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ElasticLoadBalancingLoadBalancerConnectionDrainingPolicy <$>
+      obj .: "Enabled" <*>
+      obj .:? "Timeout"
+  parseJSON _ = mempty
 
 -- | Constructor for
 -- | 'ElasticLoadBalancingLoadBalancerConnectionDrainingPolicy' containing
diff --git a/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingLoadBalancerConnectionSettings.hs b/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingLoadBalancerConnectionSettings.hs
--- a/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingLoadBalancerConnectionSettings.hs
+++ b/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingLoadBalancerConnectionSettings.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb-connectionsettings.html
 
 module Stratosphere.ResourceProperties.ElasticLoadBalancingLoadBalancerConnectionSettings where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -21,13 +21,20 @@
 data ElasticLoadBalancingLoadBalancerConnectionSettings =
   ElasticLoadBalancingLoadBalancerConnectionSettings
   { _elasticLoadBalancingLoadBalancerConnectionSettingsIdleTimeout :: Val Integer'
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ElasticLoadBalancingLoadBalancerConnectionSettings where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 51, omitNothingFields = True }
+  toJSON ElasticLoadBalancingLoadBalancerConnectionSettings{..} =
+    object $
+    catMaybes
+    [ Just ("IdleTimeout" .= _elasticLoadBalancingLoadBalancerConnectionSettingsIdleTimeout)
+    ]
 
 instance FromJSON ElasticLoadBalancingLoadBalancerConnectionSettings where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 51, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ElasticLoadBalancingLoadBalancerConnectionSettings <$>
+      obj .: "IdleTimeout"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ElasticLoadBalancingLoadBalancerConnectionSettings'
 -- | containing required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingLoadBalancerHealthCheck.hs b/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingLoadBalancerHealthCheck.hs
--- a/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingLoadBalancerHealthCheck.hs
+++ b/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingLoadBalancerHealthCheck.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb-health-check.html
 
 module Stratosphere.ResourceProperties.ElasticLoadBalancingLoadBalancerHealthCheck where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -25,13 +25,28 @@
   , _elasticLoadBalancingLoadBalancerHealthCheckTarget :: Val Text
   , _elasticLoadBalancingLoadBalancerHealthCheckTimeout :: Val Text
   , _elasticLoadBalancingLoadBalancerHealthCheckUnhealthyThreshold :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ElasticLoadBalancingLoadBalancerHealthCheck where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 44, omitNothingFields = True }
+  toJSON ElasticLoadBalancingLoadBalancerHealthCheck{..} =
+    object $
+    catMaybes
+    [ Just ("HealthyThreshold" .= _elasticLoadBalancingLoadBalancerHealthCheckHealthyThreshold)
+    , Just ("Interval" .= _elasticLoadBalancingLoadBalancerHealthCheckInterval)
+    , Just ("Target" .= _elasticLoadBalancingLoadBalancerHealthCheckTarget)
+    , Just ("Timeout" .= _elasticLoadBalancingLoadBalancerHealthCheckTimeout)
+    , Just ("UnhealthyThreshold" .= _elasticLoadBalancingLoadBalancerHealthCheckUnhealthyThreshold)
+    ]
 
 instance FromJSON ElasticLoadBalancingLoadBalancerHealthCheck where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 44, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ElasticLoadBalancingLoadBalancerHealthCheck <$>
+      obj .: "HealthyThreshold" <*>
+      obj .: "Interval" <*>
+      obj .: "Target" <*>
+      obj .: "Timeout" <*>
+      obj .: "UnhealthyThreshold"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ElasticLoadBalancingLoadBalancerHealthCheck' containing
 -- | required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingLoadBalancerLBCookieStickinessPolicy.hs b/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingLoadBalancerLBCookieStickinessPolicy.hs
--- a/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingLoadBalancerLBCookieStickinessPolicy.hs
+++ b/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingLoadBalancerLBCookieStickinessPolicy.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb-LBCookieStickinessPolicy.html
 
 module Stratosphere.ResourceProperties.ElasticLoadBalancingLoadBalancerLBCookieStickinessPolicy where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -22,13 +22,22 @@
   ElasticLoadBalancingLoadBalancerLBCookieStickinessPolicy
   { _elasticLoadBalancingLoadBalancerLBCookieStickinessPolicyCookieExpirationPeriod :: Maybe (Val Text)
   , _elasticLoadBalancingLoadBalancerLBCookieStickinessPolicyPolicyName :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ElasticLoadBalancingLoadBalancerLBCookieStickinessPolicy where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 57, omitNothingFields = True }
+  toJSON ElasticLoadBalancingLoadBalancerLBCookieStickinessPolicy{..} =
+    object $
+    catMaybes
+    [ ("CookieExpirationPeriod" .=) <$> _elasticLoadBalancingLoadBalancerLBCookieStickinessPolicyCookieExpirationPeriod
+    , ("PolicyName" .=) <$> _elasticLoadBalancingLoadBalancerLBCookieStickinessPolicyPolicyName
+    ]
 
 instance FromJSON ElasticLoadBalancingLoadBalancerLBCookieStickinessPolicy where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 57, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ElasticLoadBalancingLoadBalancerLBCookieStickinessPolicy <$>
+      obj .:? "CookieExpirationPeriod" <*>
+      obj .:? "PolicyName"
+  parseJSON _ = mempty
 
 -- | Constructor for
 -- | 'ElasticLoadBalancingLoadBalancerLBCookieStickinessPolicy' containing
diff --git a/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingLoadBalancerListeners.hs b/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingLoadBalancerListeners.hs
--- a/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingLoadBalancerListeners.hs
+++ b/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingLoadBalancerListeners.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb-listener.html
 
 module Stratosphere.ResourceProperties.ElasticLoadBalancingLoadBalancerListeners where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -25,13 +25,30 @@
   , _elasticLoadBalancingLoadBalancerListenersPolicyNames :: Maybe [Val Text]
   , _elasticLoadBalancingLoadBalancerListenersProtocol :: Val Text
   , _elasticLoadBalancingLoadBalancerListenersSSLCertificateId :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ElasticLoadBalancingLoadBalancerListeners where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 42, omitNothingFields = True }
+  toJSON ElasticLoadBalancingLoadBalancerListeners{..} =
+    object $
+    catMaybes
+    [ Just ("InstancePort" .= _elasticLoadBalancingLoadBalancerListenersInstancePort)
+    , ("InstanceProtocol" .=) <$> _elasticLoadBalancingLoadBalancerListenersInstanceProtocol
+    , Just ("LoadBalancerPort" .= _elasticLoadBalancingLoadBalancerListenersLoadBalancerPort)
+    , ("PolicyNames" .=) <$> _elasticLoadBalancingLoadBalancerListenersPolicyNames
+    , Just ("Protocol" .= _elasticLoadBalancingLoadBalancerListenersProtocol)
+    , ("SSLCertificateId" .=) <$> _elasticLoadBalancingLoadBalancerListenersSSLCertificateId
+    ]
 
 instance FromJSON ElasticLoadBalancingLoadBalancerListeners where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 42, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ElasticLoadBalancingLoadBalancerListeners <$>
+      obj .: "InstancePort" <*>
+      obj .:? "InstanceProtocol" <*>
+      obj .: "LoadBalancerPort" <*>
+      obj .:? "PolicyNames" <*>
+      obj .: "Protocol" <*>
+      obj .:? "SSLCertificateId"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ElasticLoadBalancingLoadBalancerListeners' containing
 -- | required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingLoadBalancerPolicies.hs b/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingLoadBalancerPolicies.hs
--- a/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingLoadBalancerPolicies.hs
+++ b/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingLoadBalancerPolicies.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb-policy.html
 
 module Stratosphere.ResourceProperties.ElasticLoadBalancingLoadBalancerPolicies where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -24,13 +24,28 @@
   , _elasticLoadBalancingLoadBalancerPoliciesLoadBalancerPorts :: Maybe [Val Text]
   , _elasticLoadBalancingLoadBalancerPoliciesPolicyName :: Val Text
   , _elasticLoadBalancingLoadBalancerPoliciesPolicyType :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ElasticLoadBalancingLoadBalancerPolicies where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 41, omitNothingFields = True }
+  toJSON ElasticLoadBalancingLoadBalancerPolicies{..} =
+    object $
+    catMaybes
+    [ Just ("Attributes" .= _elasticLoadBalancingLoadBalancerPoliciesAttributes)
+    , ("InstancePorts" .=) <$> _elasticLoadBalancingLoadBalancerPoliciesInstancePorts
+    , ("LoadBalancerPorts" .=) <$> _elasticLoadBalancingLoadBalancerPoliciesLoadBalancerPorts
+    , Just ("PolicyName" .= _elasticLoadBalancingLoadBalancerPoliciesPolicyName)
+    , Just ("PolicyType" .= _elasticLoadBalancingLoadBalancerPoliciesPolicyType)
+    ]
 
 instance FromJSON ElasticLoadBalancingLoadBalancerPolicies where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 41, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ElasticLoadBalancingLoadBalancerPolicies <$>
+      obj .: "Attributes" <*>
+      obj .:? "InstancePorts" <*>
+      obj .:? "LoadBalancerPorts" <*>
+      obj .: "PolicyName" <*>
+      obj .: "PolicyType"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ElasticLoadBalancingLoadBalancerPolicies' containing
 -- | required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingV2ListenerAction.hs b/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingV2ListenerAction.hs
--- a/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingV2ListenerAction.hs
+++ b/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingV2ListenerAction.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-defaultactions.html
 
 module Stratosphere.ResourceProperties.ElasticLoadBalancingV2ListenerAction where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   ElasticLoadBalancingV2ListenerAction
   { _elasticLoadBalancingV2ListenerActionTargetGroupArn :: Val Text
   , _elasticLoadBalancingV2ListenerActionType :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ElasticLoadBalancingV2ListenerAction where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 37, omitNothingFields = True }
+  toJSON ElasticLoadBalancingV2ListenerAction{..} =
+    object $
+    catMaybes
+    [ Just ("TargetGroupArn" .= _elasticLoadBalancingV2ListenerActionTargetGroupArn)
+    , Just ("Type" .= _elasticLoadBalancingV2ListenerActionType)
+    ]
 
 instance FromJSON ElasticLoadBalancingV2ListenerAction where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 37, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ElasticLoadBalancingV2ListenerAction <$>
+      obj .: "TargetGroupArn" <*>
+      obj .: "Type"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ElasticLoadBalancingV2ListenerAction' containing
 -- | required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingV2ListenerCertificate.hs b/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingV2ListenerCertificate.hs
--- a/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingV2ListenerCertificate.hs
+++ b/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingV2ListenerCertificate.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-certificates.html
 
 module Stratosphere.ResourceProperties.ElasticLoadBalancingV2ListenerCertificate where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,20 @@
 data ElasticLoadBalancingV2ListenerCertificate =
   ElasticLoadBalancingV2ListenerCertificate
   { _elasticLoadBalancingV2ListenerCertificateCertificateArn :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ElasticLoadBalancingV2ListenerCertificate where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 42, omitNothingFields = True }
+  toJSON ElasticLoadBalancingV2ListenerCertificate{..} =
+    object $
+    catMaybes
+    [ ("CertificateArn" .=) <$> _elasticLoadBalancingV2ListenerCertificateCertificateArn
+    ]
 
 instance FromJSON ElasticLoadBalancingV2ListenerCertificate where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 42, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ElasticLoadBalancingV2ListenerCertificate <$>
+      obj .:? "CertificateArn"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ElasticLoadBalancingV2ListenerCertificate' containing
 -- | required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingV2ListenerRuleAction.hs b/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingV2ListenerRuleAction.hs
--- a/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingV2ListenerRuleAction.hs
+++ b/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingV2ListenerRuleAction.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-actions.html
 
 module Stratosphere.ResourceProperties.ElasticLoadBalancingV2ListenerRuleAction where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -21,13 +21,22 @@
   ElasticLoadBalancingV2ListenerRuleAction
   { _elasticLoadBalancingV2ListenerRuleActionTargetGroupArn :: Val Text
   , _elasticLoadBalancingV2ListenerRuleActionType :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ElasticLoadBalancingV2ListenerRuleAction where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 41, omitNothingFields = True }
+  toJSON ElasticLoadBalancingV2ListenerRuleAction{..} =
+    object $
+    catMaybes
+    [ Just ("TargetGroupArn" .= _elasticLoadBalancingV2ListenerRuleActionTargetGroupArn)
+    , Just ("Type" .= _elasticLoadBalancingV2ListenerRuleActionType)
+    ]
 
 instance FromJSON ElasticLoadBalancingV2ListenerRuleAction where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 41, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ElasticLoadBalancingV2ListenerRuleAction <$>
+      obj .: "TargetGroupArn" <*>
+      obj .: "Type"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ElasticLoadBalancingV2ListenerRuleAction' containing
 -- | required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingV2ListenerRuleRuleCondition.hs b/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingV2ListenerRuleRuleCondition.hs
--- a/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingV2ListenerRuleRuleCondition.hs
+++ b/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingV2ListenerRuleRuleCondition.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-conditions.html
 
 module Stratosphere.ResourceProperties.ElasticLoadBalancingV2ListenerRuleRuleCondition where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -22,13 +22,22 @@
   ElasticLoadBalancingV2ListenerRuleRuleCondition
   { _elasticLoadBalancingV2ListenerRuleRuleConditionField :: Maybe (Val Text)
   , _elasticLoadBalancingV2ListenerRuleRuleConditionValues :: Maybe [Val Text]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ElasticLoadBalancingV2ListenerRuleRuleCondition where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 48, omitNothingFields = True }
+  toJSON ElasticLoadBalancingV2ListenerRuleRuleCondition{..} =
+    object $
+    catMaybes
+    [ ("Field" .=) <$> _elasticLoadBalancingV2ListenerRuleRuleConditionField
+    , ("Values" .=) <$> _elasticLoadBalancingV2ListenerRuleRuleConditionValues
+    ]
 
 instance FromJSON ElasticLoadBalancingV2ListenerRuleRuleCondition where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 48, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ElasticLoadBalancingV2ListenerRuleRuleCondition <$>
+      obj .:? "Field" <*>
+      obj .:? "Values"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ElasticLoadBalancingV2ListenerRuleRuleCondition'
 -- | containing required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingV2LoadBalancerLoadBalancerAttribute.hs b/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingV2LoadBalancerLoadBalancerAttribute.hs
--- a/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingV2LoadBalancerLoadBalancerAttribute.hs
+++ b/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingV2LoadBalancerLoadBalancerAttribute.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-loadbalancer-loadbalancerattributes.html
 
 module Stratosphere.ResourceProperties.ElasticLoadBalancingV2LoadBalancerLoadBalancerAttribute where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -22,13 +22,22 @@
   ElasticLoadBalancingV2LoadBalancerLoadBalancerAttribute
   { _elasticLoadBalancingV2LoadBalancerLoadBalancerAttributeKey :: Maybe (Val Text)
   , _elasticLoadBalancingV2LoadBalancerLoadBalancerAttributeValue :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ElasticLoadBalancingV2LoadBalancerLoadBalancerAttribute where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 56, omitNothingFields = True }
+  toJSON ElasticLoadBalancingV2LoadBalancerLoadBalancerAttribute{..} =
+    object $
+    catMaybes
+    [ ("Key" .=) <$> _elasticLoadBalancingV2LoadBalancerLoadBalancerAttributeKey
+    , ("Value" .=) <$> _elasticLoadBalancingV2LoadBalancerLoadBalancerAttributeValue
+    ]
 
 instance FromJSON ElasticLoadBalancingV2LoadBalancerLoadBalancerAttribute where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 56, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ElasticLoadBalancingV2LoadBalancerLoadBalancerAttribute <$>
+      obj .:? "Key" <*>
+      obj .:? "Value"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ElasticLoadBalancingV2LoadBalancerLoadBalancerAttribute'
 -- | containing required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingV2TargetGroupMatcher.hs b/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingV2TargetGroupMatcher.hs
--- a/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingV2TargetGroupMatcher.hs
+++ b/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingV2TargetGroupMatcher.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-targetgroup-matcher.html
 
 module Stratosphere.ResourceProperties.ElasticLoadBalancingV2TargetGroupMatcher where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,20 @@
 data ElasticLoadBalancingV2TargetGroupMatcher =
   ElasticLoadBalancingV2TargetGroupMatcher
   { _elasticLoadBalancingV2TargetGroupMatcherHttpCode :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ElasticLoadBalancingV2TargetGroupMatcher where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 41, omitNothingFields = True }
+  toJSON ElasticLoadBalancingV2TargetGroupMatcher{..} =
+    object $
+    catMaybes
+    [ Just ("HttpCode" .= _elasticLoadBalancingV2TargetGroupMatcherHttpCode)
+    ]
 
 instance FromJSON ElasticLoadBalancingV2TargetGroupMatcher where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 41, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ElasticLoadBalancingV2TargetGroupMatcher <$>
+      obj .: "HttpCode"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ElasticLoadBalancingV2TargetGroupMatcher' containing
 -- | required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingV2TargetGroupTargetDescription.hs b/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingV2TargetGroupTargetDescription.hs
--- a/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingV2TargetGroupTargetDescription.hs
+++ b/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingV2TargetGroupTargetDescription.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-targetgroup-targetdescription.html
 
 module Stratosphere.ResourceProperties.ElasticLoadBalancingV2TargetGroupTargetDescription where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -22,13 +22,22 @@
   ElasticLoadBalancingV2TargetGroupTargetDescription
   { _elasticLoadBalancingV2TargetGroupTargetDescriptionId :: Val Text
   , _elasticLoadBalancingV2TargetGroupTargetDescriptionPort :: Maybe (Val Integer')
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ElasticLoadBalancingV2TargetGroupTargetDescription where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 51, omitNothingFields = True }
+  toJSON ElasticLoadBalancingV2TargetGroupTargetDescription{..} =
+    object $
+    catMaybes
+    [ Just ("Id" .= _elasticLoadBalancingV2TargetGroupTargetDescriptionId)
+    , ("Port" .=) <$> _elasticLoadBalancingV2TargetGroupTargetDescriptionPort
+    ]
 
 instance FromJSON ElasticLoadBalancingV2TargetGroupTargetDescription where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 51, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ElasticLoadBalancingV2TargetGroupTargetDescription <$>
+      obj .: "Id" <*>
+      obj .:? "Port"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ElasticLoadBalancingV2TargetGroupTargetDescription'
 -- | containing required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingV2TargetGroupTargetGroupAttribute.hs b/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingV2TargetGroupTargetGroupAttribute.hs
--- a/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingV2TargetGroupTargetGroupAttribute.hs
+++ b/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingV2TargetGroupTargetGroupAttribute.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-targetgroup-targetgroupattributes.html
 
 module Stratosphere.ResourceProperties.ElasticLoadBalancingV2TargetGroupTargetGroupAttribute where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -22,13 +22,22 @@
   ElasticLoadBalancingV2TargetGroupTargetGroupAttribute
   { _elasticLoadBalancingV2TargetGroupTargetGroupAttributeKey :: Maybe (Val Text)
   , _elasticLoadBalancingV2TargetGroupTargetGroupAttributeValue :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ElasticLoadBalancingV2TargetGroupTargetGroupAttribute where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 54, omitNothingFields = True }
+  toJSON ElasticLoadBalancingV2TargetGroupTargetGroupAttribute{..} =
+    object $
+    catMaybes
+    [ ("Key" .=) <$> _elasticLoadBalancingV2TargetGroupTargetGroupAttributeKey
+    , ("Value" .=) <$> _elasticLoadBalancingV2TargetGroupTargetGroupAttributeValue
+    ]
 
 instance FromJSON ElasticLoadBalancingV2TargetGroupTargetGroupAttribute where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 54, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ElasticLoadBalancingV2TargetGroupTargetGroupAttribute <$>
+      obj .:? "Key" <*>
+      obj .:? "Value"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ElasticLoadBalancingV2TargetGroupTargetGroupAttribute'
 -- | containing required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/ElasticsearchDomainEBSOptions.hs b/library-gen/Stratosphere/ResourceProperties/ElasticsearchDomainEBSOptions.hs
--- a/library-gen/Stratosphere/ResourceProperties/ElasticsearchDomainEBSOptions.hs
+++ b/library-gen/Stratosphere/ResourceProperties/ElasticsearchDomainEBSOptions.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticsearch-domain-ebsoptions.html
 
 module Stratosphere.ResourceProperties.ElasticsearchDomainEBSOptions where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -22,13 +22,26 @@
   , _elasticsearchDomainEBSOptionsIops :: Maybe (Val Integer')
   , _elasticsearchDomainEBSOptionsVolumeSize :: Maybe (Val Integer')
   , _elasticsearchDomainEBSOptionsVolumeType :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ElasticsearchDomainEBSOptions where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
+  toJSON ElasticsearchDomainEBSOptions{..} =
+    object $
+    catMaybes
+    [ ("EBSEnabled" .=) <$> _elasticsearchDomainEBSOptionsEBSEnabled
+    , ("Iops" .=) <$> _elasticsearchDomainEBSOptionsIops
+    , ("VolumeSize" .=) <$> _elasticsearchDomainEBSOptionsVolumeSize
+    , ("VolumeType" .=) <$> _elasticsearchDomainEBSOptionsVolumeType
+    ]
 
 instance FromJSON ElasticsearchDomainEBSOptions where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ElasticsearchDomainEBSOptions <$>
+      obj .:? "EBSEnabled" <*>
+      obj .:? "Iops" <*>
+      obj .:? "VolumeSize" <*>
+      obj .:? "VolumeType"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ElasticsearchDomainEBSOptions' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/ElasticsearchDomainElasticsearchClusterConfig.hs b/library-gen/Stratosphere/ResourceProperties/ElasticsearchDomainElasticsearchClusterConfig.hs
--- a/library-gen/Stratosphere/ResourceProperties/ElasticsearchDomainElasticsearchClusterConfig.hs
+++ b/library-gen/Stratosphere/ResourceProperties/ElasticsearchDomainElasticsearchClusterConfig.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticsearch-domain-elasticsearchclusterconfig.html
 
 module Stratosphere.ResourceProperties.ElasticsearchDomainElasticsearchClusterConfig where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -26,13 +26,30 @@
   , _elasticsearchDomainElasticsearchClusterConfigInstanceCount :: Maybe (Val Integer')
   , _elasticsearchDomainElasticsearchClusterConfigInstanceType :: Maybe (Val Text)
   , _elasticsearchDomainElasticsearchClusterConfigZoneAwarenessEnabled :: Maybe (Val Bool')
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ElasticsearchDomainElasticsearchClusterConfig where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 46, omitNothingFields = True }
+  toJSON ElasticsearchDomainElasticsearchClusterConfig{..} =
+    object $
+    catMaybes
+    [ ("DedicatedMasterCount" .=) <$> _elasticsearchDomainElasticsearchClusterConfigDedicatedMasterCount
+    , ("DedicatedMasterEnabled" .=) <$> _elasticsearchDomainElasticsearchClusterConfigDedicatedMasterEnabled
+    , ("DedicatedMasterType" .=) <$> _elasticsearchDomainElasticsearchClusterConfigDedicatedMasterType
+    , ("InstanceCount" .=) <$> _elasticsearchDomainElasticsearchClusterConfigInstanceCount
+    , ("InstanceType" .=) <$> _elasticsearchDomainElasticsearchClusterConfigInstanceType
+    , ("ZoneAwarenessEnabled" .=) <$> _elasticsearchDomainElasticsearchClusterConfigZoneAwarenessEnabled
+    ]
 
 instance FromJSON ElasticsearchDomainElasticsearchClusterConfig where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 46, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ElasticsearchDomainElasticsearchClusterConfig <$>
+      obj .:? "DedicatedMasterCount" <*>
+      obj .:? "DedicatedMasterEnabled" <*>
+      obj .:? "DedicatedMasterType" <*>
+      obj .:? "InstanceCount" <*>
+      obj .:? "InstanceType" <*>
+      obj .:? "ZoneAwarenessEnabled"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ElasticsearchDomainElasticsearchClusterConfig'
 -- | containing required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/ElasticsearchDomainSnapshotOptions.hs b/library-gen/Stratosphere/ResourceProperties/ElasticsearchDomainSnapshotOptions.hs
--- a/library-gen/Stratosphere/ResourceProperties/ElasticsearchDomainSnapshotOptions.hs
+++ b/library-gen/Stratosphere/ResourceProperties/ElasticsearchDomainSnapshotOptions.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticsearch-domain-snapshotoptions.html
 
 module Stratosphere.ResourceProperties.ElasticsearchDomainSnapshotOptions where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -19,13 +19,20 @@
 data ElasticsearchDomainSnapshotOptions =
   ElasticsearchDomainSnapshotOptions
   { _elasticsearchDomainSnapshotOptionsAutomatedSnapshotStartHour :: Maybe (Val Integer')
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ElasticsearchDomainSnapshotOptions where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 35, omitNothingFields = True }
+  toJSON ElasticsearchDomainSnapshotOptions{..} =
+    object $
+    catMaybes
+    [ ("AutomatedSnapshotStartHour" .=) <$> _elasticsearchDomainSnapshotOptionsAutomatedSnapshotStartHour
+    ]
 
 instance FromJSON ElasticsearchDomainSnapshotOptions where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 35, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ElasticsearchDomainSnapshotOptions <$>
+      obj .:? "AutomatedSnapshotStartHour"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ElasticsearchDomainSnapshotOptions' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/EventsRuleTarget.hs b/library-gen/Stratosphere/ResourceProperties/EventsRuleTarget.hs
--- a/library-gen/Stratosphere/ResourceProperties/EventsRuleTarget.hs
+++ b/library-gen/Stratosphere/ResourceProperties/EventsRuleTarget.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-events-rule-target.html
 
 module Stratosphere.ResourceProperties.EventsRuleTarget where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -22,13 +22,26 @@
   , _eventsRuleTargetId :: Val Text
   , _eventsRuleTargetInput :: Maybe (Val Text)
   , _eventsRuleTargetInputPath :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EventsRuleTarget where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
+  toJSON EventsRuleTarget{..} =
+    object $
+    catMaybes
+    [ Just ("Arn" .= _eventsRuleTargetArn)
+    , Just ("Id" .= _eventsRuleTargetId)
+    , ("Input" .=) <$> _eventsRuleTargetInput
+    , ("InputPath" .=) <$> _eventsRuleTargetInputPath
+    ]
 
 instance FromJSON EventsRuleTarget where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EventsRuleTarget <$>
+      obj .: "Arn" <*>
+      obj .: "Id" <*>
+      obj .:? "Input" <*>
+      obj .:? "InputPath"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EventsRuleTarget' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/GameLiftAliasRoutingStrategy.hs b/library-gen/Stratosphere/ResourceProperties/GameLiftAliasRoutingStrategy.hs
--- a/library-gen/Stratosphere/ResourceProperties/GameLiftAliasRoutingStrategy.hs
+++ b/library-gen/Stratosphere/ResourceProperties/GameLiftAliasRoutingStrategy.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-alias-routingstrategy.html
 
 module Stratosphere.ResourceProperties.GameLiftAliasRoutingStrategy where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -21,13 +21,24 @@
   { _gameLiftAliasRoutingStrategyFleetId :: Maybe (Val Text)
   , _gameLiftAliasRoutingStrategyMessage :: Maybe (Val Text)
   , _gameLiftAliasRoutingStrategyType :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON GameLiftAliasRoutingStrategy where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 29, omitNothingFields = True }
+  toJSON GameLiftAliasRoutingStrategy{..} =
+    object $
+    catMaybes
+    [ ("FleetId" .=) <$> _gameLiftAliasRoutingStrategyFleetId
+    , ("Message" .=) <$> _gameLiftAliasRoutingStrategyMessage
+    , Just ("Type" .= _gameLiftAliasRoutingStrategyType)
+    ]
 
 instance FromJSON GameLiftAliasRoutingStrategy where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 29, omitNothingFields = True }
+  parseJSON (Object obj) =
+    GameLiftAliasRoutingStrategy <$>
+      obj .:? "FleetId" <*>
+      obj .:? "Message" <*>
+      obj .: "Type"
+  parseJSON _ = mempty
 
 -- | Constructor for 'GameLiftAliasRoutingStrategy' containing required fields
 -- | as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/GameLiftBuildS3Location.hs b/library-gen/Stratosphere/ResourceProperties/GameLiftBuildS3Location.hs
--- a/library-gen/Stratosphere/ResourceProperties/GameLiftBuildS3Location.hs
+++ b/library-gen/Stratosphere/ResourceProperties/GameLiftBuildS3Location.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-build-storagelocation.html
 
 module Stratosphere.ResourceProperties.GameLiftBuildS3Location where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -21,13 +21,24 @@
   { _gameLiftBuildS3LocationBucket :: Val Text
   , _gameLiftBuildS3LocationKey :: Val Text
   , _gameLiftBuildS3LocationRoleArn :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON GameLiftBuildS3Location where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 24, omitNothingFields = True }
+  toJSON GameLiftBuildS3Location{..} =
+    object $
+    catMaybes
+    [ Just ("Bucket" .= _gameLiftBuildS3LocationBucket)
+    , Just ("Key" .= _gameLiftBuildS3LocationKey)
+    , Just ("RoleArn" .= _gameLiftBuildS3LocationRoleArn)
+    ]
 
 instance FromJSON GameLiftBuildS3Location where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 24, omitNothingFields = True }
+  parseJSON (Object obj) =
+    GameLiftBuildS3Location <$>
+      obj .: "Bucket" <*>
+      obj .: "Key" <*>
+      obj .: "RoleArn"
+  parseJSON _ = mempty
 
 -- | Constructor for 'GameLiftBuildS3Location' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/GameLiftFleetIpPermission.hs b/library-gen/Stratosphere/ResourceProperties/GameLiftFleetIpPermission.hs
--- a/library-gen/Stratosphere/ResourceProperties/GameLiftFleetIpPermission.hs
+++ b/library-gen/Stratosphere/ResourceProperties/GameLiftFleetIpPermission.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-fleet-ec2inboundpermission.html
 
 module Stratosphere.ResourceProperties.GameLiftFleetIpPermission where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -22,13 +22,26 @@
   , _gameLiftFleetIpPermissionIpRange :: Val Text
   , _gameLiftFleetIpPermissionProtocol :: Val Text
   , _gameLiftFleetIpPermissionToPort :: Val Integer'
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON GameLiftFleetIpPermission where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 26, omitNothingFields = True }
+  toJSON GameLiftFleetIpPermission{..} =
+    object $
+    catMaybes
+    [ Just ("FromPort" .= _gameLiftFleetIpPermissionFromPort)
+    , Just ("IpRange" .= _gameLiftFleetIpPermissionIpRange)
+    , Just ("Protocol" .= _gameLiftFleetIpPermissionProtocol)
+    , Just ("ToPort" .= _gameLiftFleetIpPermissionToPort)
+    ]
 
 instance FromJSON GameLiftFleetIpPermission where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 26, omitNothingFields = True }
+  parseJSON (Object obj) =
+    GameLiftFleetIpPermission <$>
+      obj .: "FromPort" <*>
+      obj .: "IpRange" <*>
+      obj .: "Protocol" <*>
+      obj .: "ToPort"
+  parseJSON _ = mempty
 
 -- | Constructor for 'GameLiftFleetIpPermission' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/IAMGroupPolicy.hs b/library-gen/Stratosphere/ResourceProperties/IAMGroupPolicy.hs
--- a/library-gen/Stratosphere/ResourceProperties/IAMGroupPolicy.hs
+++ b/library-gen/Stratosphere/ResourceProperties/IAMGroupPolicy.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-policy.html
 
 module Stratosphere.ResourceProperties.IAMGroupPolicy where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   IAMGroupPolicy
   { _iAMGroupPolicyPolicyDocument :: Object
   , _iAMGroupPolicyPolicyName :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON IAMGroupPolicy where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 15, omitNothingFields = True }
+  toJSON IAMGroupPolicy{..} =
+    object $
+    catMaybes
+    [ Just ("PolicyDocument" .= _iAMGroupPolicyPolicyDocument)
+    , Just ("PolicyName" .= _iAMGroupPolicyPolicyName)
+    ]
 
 instance FromJSON IAMGroupPolicy where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 15, omitNothingFields = True }
+  parseJSON (Object obj) =
+    IAMGroupPolicy <$>
+      obj .: "PolicyDocument" <*>
+      obj .: "PolicyName"
+  parseJSON _ = mempty
 
 -- | Constructor for 'IAMGroupPolicy' containing required fields as arguments.
 iamGroupPolicy
diff --git a/library-gen/Stratosphere/ResourceProperties/IAMRolePolicy.hs b/library-gen/Stratosphere/ResourceProperties/IAMRolePolicy.hs
--- a/library-gen/Stratosphere/ResourceProperties/IAMRolePolicy.hs
+++ b/library-gen/Stratosphere/ResourceProperties/IAMRolePolicy.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-policy.html
 
 module Stratosphere.ResourceProperties.IAMRolePolicy where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   IAMRolePolicy
   { _iAMRolePolicyPolicyDocument :: Object
   , _iAMRolePolicyPolicyName :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON IAMRolePolicy where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
+  toJSON IAMRolePolicy{..} =
+    object $
+    catMaybes
+    [ Just ("PolicyDocument" .= _iAMRolePolicyPolicyDocument)
+    , Just ("PolicyName" .= _iAMRolePolicyPolicyName)
+    ]
 
 instance FromJSON IAMRolePolicy where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
+  parseJSON (Object obj) =
+    IAMRolePolicy <$>
+      obj .: "PolicyDocument" <*>
+      obj .: "PolicyName"
+  parseJSON _ = mempty
 
 -- | Constructor for 'IAMRolePolicy' containing required fields as arguments.
 iamRolePolicy
diff --git a/library-gen/Stratosphere/ResourceProperties/IAMUserLoginProfile.hs b/library-gen/Stratosphere/ResourceProperties/IAMUserLoginProfile.hs
--- a/library-gen/Stratosphere/ResourceProperties/IAMUserLoginProfile.hs
+++ b/library-gen/Stratosphere/ResourceProperties/IAMUserLoginProfile.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-user-loginprofile.html
 
 module Stratosphere.ResourceProperties.IAMUserLoginProfile where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   IAMUserLoginProfile
   { _iAMUserLoginProfilePassword :: Val Text
   , _iAMUserLoginProfilePasswordResetRequired :: Maybe (Val Bool')
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON IAMUserLoginProfile where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 20, omitNothingFields = True }
+  toJSON IAMUserLoginProfile{..} =
+    object $
+    catMaybes
+    [ Just ("Password" .= _iAMUserLoginProfilePassword)
+    , ("PasswordResetRequired" .=) <$> _iAMUserLoginProfilePasswordResetRequired
+    ]
 
 instance FromJSON IAMUserLoginProfile where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 20, omitNothingFields = True }
+  parseJSON (Object obj) =
+    IAMUserLoginProfile <$>
+      obj .: "Password" <*>
+      obj .:? "PasswordResetRequired"
+  parseJSON _ = mempty
 
 -- | Constructor for 'IAMUserLoginProfile' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/IAMUserPolicy.hs b/library-gen/Stratosphere/ResourceProperties/IAMUserPolicy.hs
--- a/library-gen/Stratosphere/ResourceProperties/IAMUserPolicy.hs
+++ b/library-gen/Stratosphere/ResourceProperties/IAMUserPolicy.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-policy.html
 
 module Stratosphere.ResourceProperties.IAMUserPolicy where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   IAMUserPolicy
   { _iAMUserPolicyPolicyDocument :: Object
   , _iAMUserPolicyPolicyName :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON IAMUserPolicy where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
+  toJSON IAMUserPolicy{..} =
+    object $
+    catMaybes
+    [ Just ("PolicyDocument" .= _iAMUserPolicyPolicyDocument)
+    , Just ("PolicyName" .= _iAMUserPolicyPolicyName)
+    ]
 
 instance FromJSON IAMUserPolicy where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
+  parseJSON (Object obj) =
+    IAMUserPolicy <$>
+      obj .: "PolicyDocument" <*>
+      obj .: "PolicyName"
+  parseJSON _ = mempty
 
 -- | Constructor for 'IAMUserPolicy' containing required fields as arguments.
 iamUserPolicy
diff --git a/library-gen/Stratosphere/ResourceProperties/IoTThingAttributePayload.hs b/library-gen/Stratosphere/ResourceProperties/IoTThingAttributePayload.hs
--- a/library-gen/Stratosphere/ResourceProperties/IoTThingAttributePayload.hs
+++ b/library-gen/Stratosphere/ResourceProperties/IoTThingAttributePayload.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-thing-attributepayload.html
 
 module Stratosphere.ResourceProperties.IoTThingAttributePayload where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -19,13 +19,20 @@
 data IoTThingAttributePayload =
   IoTThingAttributePayload
   { _ioTThingAttributePayloadAttributes :: Maybe Object
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON IoTThingAttributePayload where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 25, omitNothingFields = True }
+  toJSON IoTThingAttributePayload{..} =
+    object $
+    catMaybes
+    [ ("Attributes" .=) <$> _ioTThingAttributePayloadAttributes
+    ]
 
 instance FromJSON IoTThingAttributePayload where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 25, omitNothingFields = True }
+  parseJSON (Object obj) =
+    IoTThingAttributePayload <$>
+      obj .:? "Attributes"
+  parseJSON _ = mempty
 
 -- | Constructor for 'IoTThingAttributePayload' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleAction.hs b/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleAction.hs
--- a/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleAction.hs
+++ b/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleAction.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-actions.html
 
 module Stratosphere.ResourceProperties.IoTTopicRuleAction where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.IoTTopicRuleCloudwatchAlarmAction
@@ -39,13 +39,40 @@
   , _ioTTopicRuleActionS3 :: Maybe IoTTopicRuleS3Action
   , _ioTTopicRuleActionSns :: Maybe IoTTopicRuleSnsAction
   , _ioTTopicRuleActionSqs :: Maybe IoTTopicRuleSqsAction
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON IoTTopicRuleAction where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 19, omitNothingFields = True }
+  toJSON IoTTopicRuleAction{..} =
+    object $
+    catMaybes
+    [ ("CloudwatchAlarm" .=) <$> _ioTTopicRuleActionCloudwatchAlarm
+    , ("CloudwatchMetric" .=) <$> _ioTTopicRuleActionCloudwatchMetric
+    , ("DynamoDB" .=) <$> _ioTTopicRuleActionDynamoDB
+    , ("Elasticsearch" .=) <$> _ioTTopicRuleActionElasticsearch
+    , ("Firehose" .=) <$> _ioTTopicRuleActionFirehose
+    , ("Kinesis" .=) <$> _ioTTopicRuleActionKinesis
+    , ("Lambda" .=) <$> _ioTTopicRuleActionLambda
+    , ("Republish" .=) <$> _ioTTopicRuleActionRepublish
+    , ("S3" .=) <$> _ioTTopicRuleActionS3
+    , ("Sns" .=) <$> _ioTTopicRuleActionSns
+    , ("Sqs" .=) <$> _ioTTopicRuleActionSqs
+    ]
 
 instance FromJSON IoTTopicRuleAction where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 19, omitNothingFields = True }
+  parseJSON (Object obj) =
+    IoTTopicRuleAction <$>
+      obj .:? "CloudwatchAlarm" <*>
+      obj .:? "CloudwatchMetric" <*>
+      obj .:? "DynamoDB" <*>
+      obj .:? "Elasticsearch" <*>
+      obj .:? "Firehose" <*>
+      obj .:? "Kinesis" <*>
+      obj .:? "Lambda" <*>
+      obj .:? "Republish" <*>
+      obj .:? "S3" <*>
+      obj .:? "Sns" <*>
+      obj .:? "Sqs"
+  parseJSON _ = mempty
 
 -- | Constructor for 'IoTTopicRuleAction' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleCloudwatchAlarmAction.hs b/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleCloudwatchAlarmAction.hs
--- a/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleCloudwatchAlarmAction.hs
+++ b/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleCloudwatchAlarmAction.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-cloudwatchalarm.html
 
 module Stratosphere.ResourceProperties.IoTTopicRuleCloudwatchAlarmAction where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -22,13 +22,26 @@
   , _ioTTopicRuleCloudwatchAlarmActionRoleArn :: Val Text
   , _ioTTopicRuleCloudwatchAlarmActionStateReason :: Val Text
   , _ioTTopicRuleCloudwatchAlarmActionStateValue :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON IoTTopicRuleCloudwatchAlarmAction where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 34, omitNothingFields = True }
+  toJSON IoTTopicRuleCloudwatchAlarmAction{..} =
+    object $
+    catMaybes
+    [ Just ("AlarmName" .= _ioTTopicRuleCloudwatchAlarmActionAlarmName)
+    , Just ("RoleArn" .= _ioTTopicRuleCloudwatchAlarmActionRoleArn)
+    , Just ("StateReason" .= _ioTTopicRuleCloudwatchAlarmActionStateReason)
+    , Just ("StateValue" .= _ioTTopicRuleCloudwatchAlarmActionStateValue)
+    ]
 
 instance FromJSON IoTTopicRuleCloudwatchAlarmAction where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 34, omitNothingFields = True }
+  parseJSON (Object obj) =
+    IoTTopicRuleCloudwatchAlarmAction <$>
+      obj .: "AlarmName" <*>
+      obj .: "RoleArn" <*>
+      obj .: "StateReason" <*>
+      obj .: "StateValue"
+  parseJSON _ = mempty
 
 -- | Constructor for 'IoTTopicRuleCloudwatchAlarmAction' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleCloudwatchMetricAction.hs b/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleCloudwatchMetricAction.hs
--- a/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleCloudwatchMetricAction.hs
+++ b/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleCloudwatchMetricAction.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-cloudwatchmetric.html
 
 module Stratosphere.ResourceProperties.IoTTopicRuleCloudwatchMetricAction where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -24,13 +24,30 @@
   , _ioTTopicRuleCloudwatchMetricActionMetricUnit :: Val Text
   , _ioTTopicRuleCloudwatchMetricActionMetricValue :: Val Text
   , _ioTTopicRuleCloudwatchMetricActionRoleArn :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON IoTTopicRuleCloudwatchMetricAction where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 35, omitNothingFields = True }
+  toJSON IoTTopicRuleCloudwatchMetricAction{..} =
+    object $
+    catMaybes
+    [ Just ("MetricName" .= _ioTTopicRuleCloudwatchMetricActionMetricName)
+    , Just ("MetricNamespace" .= _ioTTopicRuleCloudwatchMetricActionMetricNamespace)
+    , ("MetricTimestamp" .=) <$> _ioTTopicRuleCloudwatchMetricActionMetricTimestamp
+    , Just ("MetricUnit" .= _ioTTopicRuleCloudwatchMetricActionMetricUnit)
+    , Just ("MetricValue" .= _ioTTopicRuleCloudwatchMetricActionMetricValue)
+    , Just ("RoleArn" .= _ioTTopicRuleCloudwatchMetricActionRoleArn)
+    ]
 
 instance FromJSON IoTTopicRuleCloudwatchMetricAction where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 35, omitNothingFields = True }
+  parseJSON (Object obj) =
+    IoTTopicRuleCloudwatchMetricAction <$>
+      obj .: "MetricName" <*>
+      obj .: "MetricNamespace" <*>
+      obj .:? "MetricTimestamp" <*>
+      obj .: "MetricUnit" <*>
+      obj .: "MetricValue" <*>
+      obj .: "RoleArn"
+  parseJSON _ = mempty
 
 -- | Constructor for 'IoTTopicRuleCloudwatchMetricAction' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleDynamoDBAction.hs b/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleDynamoDBAction.hs
--- a/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleDynamoDBAction.hs
+++ b/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleDynamoDBAction.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-dynamodb.html
 
 module Stratosphere.ResourceProperties.IoTTopicRuleDynamoDBAction where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -25,13 +25,32 @@
   , _ioTTopicRuleDynamoDBActionRangeKeyValue :: Val Text
   , _ioTTopicRuleDynamoDBActionRoleArn :: Val Text
   , _ioTTopicRuleDynamoDBActionTableName :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON IoTTopicRuleDynamoDBAction where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
+  toJSON IoTTopicRuleDynamoDBAction{..} =
+    object $
+    catMaybes
+    [ Just ("HashKeyField" .= _ioTTopicRuleDynamoDBActionHashKeyField)
+    , Just ("HashKeyValue" .= _ioTTopicRuleDynamoDBActionHashKeyValue)
+    , ("PayloadField" .=) <$> _ioTTopicRuleDynamoDBActionPayloadField
+    , Just ("RangeKeyField" .= _ioTTopicRuleDynamoDBActionRangeKeyField)
+    , Just ("RangeKeyValue" .= _ioTTopicRuleDynamoDBActionRangeKeyValue)
+    , Just ("RoleArn" .= _ioTTopicRuleDynamoDBActionRoleArn)
+    , Just ("TableName" .= _ioTTopicRuleDynamoDBActionTableName)
+    ]
 
 instance FromJSON IoTTopicRuleDynamoDBAction where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
+  parseJSON (Object obj) =
+    IoTTopicRuleDynamoDBAction <$>
+      obj .: "HashKeyField" <*>
+      obj .: "HashKeyValue" <*>
+      obj .:? "PayloadField" <*>
+      obj .: "RangeKeyField" <*>
+      obj .: "RangeKeyValue" <*>
+      obj .: "RoleArn" <*>
+      obj .: "TableName"
+  parseJSON _ = mempty
 
 -- | Constructor for 'IoTTopicRuleDynamoDBAction' containing required fields
 -- | as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleElasticsearchAction.hs b/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleElasticsearchAction.hs
--- a/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleElasticsearchAction.hs
+++ b/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleElasticsearchAction.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-elasticsearch.html
 
 module Stratosphere.ResourceProperties.IoTTopicRuleElasticsearchAction where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -23,13 +23,28 @@
   , _ioTTopicRuleElasticsearchActionIndex :: Val Text
   , _ioTTopicRuleElasticsearchActionRoleArn :: Val Text
   , _ioTTopicRuleElasticsearchActionType :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON IoTTopicRuleElasticsearchAction where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 32, omitNothingFields = True }
+  toJSON IoTTopicRuleElasticsearchAction{..} =
+    object $
+    catMaybes
+    [ Just ("Endpoint" .= _ioTTopicRuleElasticsearchActionEndpoint)
+    , Just ("Id" .= _ioTTopicRuleElasticsearchActionId)
+    , Just ("Index" .= _ioTTopicRuleElasticsearchActionIndex)
+    , Just ("RoleArn" .= _ioTTopicRuleElasticsearchActionRoleArn)
+    , Just ("Type" .= _ioTTopicRuleElasticsearchActionType)
+    ]
 
 instance FromJSON IoTTopicRuleElasticsearchAction where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 32, omitNothingFields = True }
+  parseJSON (Object obj) =
+    IoTTopicRuleElasticsearchAction <$>
+      obj .: "Endpoint" <*>
+      obj .: "Id" <*>
+      obj .: "Index" <*>
+      obj .: "RoleArn" <*>
+      obj .: "Type"
+  parseJSON _ = mempty
 
 -- | Constructor for 'IoTTopicRuleElasticsearchAction' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleFirehoseAction.hs b/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleFirehoseAction.hs
--- a/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleFirehoseAction.hs
+++ b/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleFirehoseAction.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-firehose.html
 
 module Stratosphere.ResourceProperties.IoTTopicRuleFirehoseAction where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -21,13 +21,24 @@
   { _ioTTopicRuleFirehoseActionDeliveryStreamName :: Val Text
   , _ioTTopicRuleFirehoseActionRoleArn :: Val Text
   , _ioTTopicRuleFirehoseActionSeparator :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON IoTTopicRuleFirehoseAction where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
+  toJSON IoTTopicRuleFirehoseAction{..} =
+    object $
+    catMaybes
+    [ Just ("DeliveryStreamName" .= _ioTTopicRuleFirehoseActionDeliveryStreamName)
+    , Just ("RoleArn" .= _ioTTopicRuleFirehoseActionRoleArn)
+    , ("Separator" .=) <$> _ioTTopicRuleFirehoseActionSeparator
+    ]
 
 instance FromJSON IoTTopicRuleFirehoseAction where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
+  parseJSON (Object obj) =
+    IoTTopicRuleFirehoseAction <$>
+      obj .: "DeliveryStreamName" <*>
+      obj .: "RoleArn" <*>
+      obj .:? "Separator"
+  parseJSON _ = mempty
 
 -- | Constructor for 'IoTTopicRuleFirehoseAction' containing required fields
 -- | as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleKinesisAction.hs b/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleKinesisAction.hs
--- a/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleKinesisAction.hs
+++ b/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleKinesisAction.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-kinesis.html
 
 module Stratosphere.ResourceProperties.IoTTopicRuleKinesisAction where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -21,13 +21,24 @@
   { _ioTTopicRuleKinesisActionPartitionKey :: Maybe (Val Text)
   , _ioTTopicRuleKinesisActionRoleArn :: Val Text
   , _ioTTopicRuleKinesisActionStreamName :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON IoTTopicRuleKinesisAction where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 26, omitNothingFields = True }
+  toJSON IoTTopicRuleKinesisAction{..} =
+    object $
+    catMaybes
+    [ ("PartitionKey" .=) <$> _ioTTopicRuleKinesisActionPartitionKey
+    , Just ("RoleArn" .= _ioTTopicRuleKinesisActionRoleArn)
+    , Just ("StreamName" .= _ioTTopicRuleKinesisActionStreamName)
+    ]
 
 instance FromJSON IoTTopicRuleKinesisAction where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 26, omitNothingFields = True }
+  parseJSON (Object obj) =
+    IoTTopicRuleKinesisAction <$>
+      obj .:? "PartitionKey" <*>
+      obj .: "RoleArn" <*>
+      obj .: "StreamName"
+  parseJSON _ = mempty
 
 -- | Constructor for 'IoTTopicRuleKinesisAction' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleLambdaAction.hs b/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleLambdaAction.hs
--- a/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleLambdaAction.hs
+++ b/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleLambdaAction.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-lambda.html
 
 module Stratosphere.ResourceProperties.IoTTopicRuleLambdaAction where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -19,13 +19,20 @@
 data IoTTopicRuleLambdaAction =
   IoTTopicRuleLambdaAction
   { _ioTTopicRuleLambdaActionFunctionArn :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON IoTTopicRuleLambdaAction where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 25, omitNothingFields = True }
+  toJSON IoTTopicRuleLambdaAction{..} =
+    object $
+    catMaybes
+    [ Just ("FunctionArn" .= _ioTTopicRuleLambdaActionFunctionArn)
+    ]
 
 instance FromJSON IoTTopicRuleLambdaAction where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 25, omitNothingFields = True }
+  parseJSON (Object obj) =
+    IoTTopicRuleLambdaAction <$>
+      obj .: "FunctionArn"
+  parseJSON _ = mempty
 
 -- | Constructor for 'IoTTopicRuleLambdaAction' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleRepublishAction.hs b/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleRepublishAction.hs
--- a/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleRepublishAction.hs
+++ b/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleRepublishAction.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-republish.html
 
 module Stratosphere.ResourceProperties.IoTTopicRuleRepublishAction where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   IoTTopicRuleRepublishAction
   { _ioTTopicRuleRepublishActionRoleArn :: Val Text
   , _ioTTopicRuleRepublishActionTopic :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON IoTTopicRuleRepublishAction where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+  toJSON IoTTopicRuleRepublishAction{..} =
+    object $
+    catMaybes
+    [ Just ("RoleArn" .= _ioTTopicRuleRepublishActionRoleArn)
+    , Just ("Topic" .= _ioTTopicRuleRepublishActionTopic)
+    ]
 
 instance FromJSON IoTTopicRuleRepublishAction where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+  parseJSON (Object obj) =
+    IoTTopicRuleRepublishAction <$>
+      obj .: "RoleArn" <*>
+      obj .: "Topic"
+  parseJSON _ = mempty
 
 -- | Constructor for 'IoTTopicRuleRepublishAction' containing required fields
 -- | as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleS3Action.hs b/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleS3Action.hs
--- a/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleS3Action.hs
+++ b/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleS3Action.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-s3.html
 
 module Stratosphere.ResourceProperties.IoTTopicRuleS3Action where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -21,13 +21,24 @@
   { _ioTTopicRuleS3ActionBucketName :: Val Text
   , _ioTTopicRuleS3ActionKey :: Val Text
   , _ioTTopicRuleS3ActionRoleArn :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON IoTTopicRuleS3Action where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 21, omitNothingFields = True }
+  toJSON IoTTopicRuleS3Action{..} =
+    object $
+    catMaybes
+    [ Just ("BucketName" .= _ioTTopicRuleS3ActionBucketName)
+    , Just ("Key" .= _ioTTopicRuleS3ActionKey)
+    , Just ("RoleArn" .= _ioTTopicRuleS3ActionRoleArn)
+    ]
 
 instance FromJSON IoTTopicRuleS3Action where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 21, omitNothingFields = True }
+  parseJSON (Object obj) =
+    IoTTopicRuleS3Action <$>
+      obj .: "BucketName" <*>
+      obj .: "Key" <*>
+      obj .: "RoleArn"
+  parseJSON _ = mempty
 
 -- | Constructor for 'IoTTopicRuleS3Action' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleSnsAction.hs b/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleSnsAction.hs
--- a/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleSnsAction.hs
+++ b/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleSnsAction.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-sns.html
 
 module Stratosphere.ResourceProperties.IoTTopicRuleSnsAction where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -21,13 +21,24 @@
   { _ioTTopicRuleSnsActionMessageFormat :: Maybe (Val Text)
   , _ioTTopicRuleSnsActionRoleArn :: Val Text
   , _ioTTopicRuleSnsActionTargetArn :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON IoTTopicRuleSnsAction where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 22, omitNothingFields = True }
+  toJSON IoTTopicRuleSnsAction{..} =
+    object $
+    catMaybes
+    [ ("MessageFormat" .=) <$> _ioTTopicRuleSnsActionMessageFormat
+    , Just ("RoleArn" .= _ioTTopicRuleSnsActionRoleArn)
+    , Just ("TargetArn" .= _ioTTopicRuleSnsActionTargetArn)
+    ]
 
 instance FromJSON IoTTopicRuleSnsAction where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 22, omitNothingFields = True }
+  parseJSON (Object obj) =
+    IoTTopicRuleSnsAction <$>
+      obj .:? "MessageFormat" <*>
+      obj .: "RoleArn" <*>
+      obj .: "TargetArn"
+  parseJSON _ = mempty
 
 -- | Constructor for 'IoTTopicRuleSnsAction' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleSqsAction.hs b/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleSqsAction.hs
--- a/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleSqsAction.hs
+++ b/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleSqsAction.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-sqs.html
 
 module Stratosphere.ResourceProperties.IoTTopicRuleSqsAction where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -21,13 +21,24 @@
   { _ioTTopicRuleSqsActionQueueUrl :: Val Text
   , _ioTTopicRuleSqsActionRoleArn :: Val Text
   , _ioTTopicRuleSqsActionUseBase64 :: Maybe (Val Bool')
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON IoTTopicRuleSqsAction where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 22, omitNothingFields = True }
+  toJSON IoTTopicRuleSqsAction{..} =
+    object $
+    catMaybes
+    [ Just ("QueueUrl" .= _ioTTopicRuleSqsActionQueueUrl)
+    , Just ("RoleArn" .= _ioTTopicRuleSqsActionRoleArn)
+    , ("UseBase64" .=) <$> _ioTTopicRuleSqsActionUseBase64
+    ]
 
 instance FromJSON IoTTopicRuleSqsAction where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 22, omitNothingFields = True }
+  parseJSON (Object obj) =
+    IoTTopicRuleSqsAction <$>
+      obj .: "QueueUrl" <*>
+      obj .: "RoleArn" <*>
+      obj .:? "UseBase64"
+  parseJSON _ = mempty
 
 -- | Constructor for 'IoTTopicRuleSqsAction' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleTopicRulePayload.hs b/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleTopicRulePayload.hs
--- a/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleTopicRulePayload.hs
+++ b/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleTopicRulePayload.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-topicrulepayload.html
 
 module Stratosphere.ResourceProperties.IoTTopicRuleTopicRulePayload where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.IoTTopicRuleAction
@@ -23,13 +23,28 @@
   , _ioTTopicRuleTopicRulePayloadDescription :: Maybe (Val Text)
   , _ioTTopicRuleTopicRulePayloadRuleDisabled :: Val Bool'
   , _ioTTopicRuleTopicRulePayloadSql :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON IoTTopicRuleTopicRulePayload where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 29, omitNothingFields = True }
+  toJSON IoTTopicRuleTopicRulePayload{..} =
+    object $
+    catMaybes
+    [ Just ("Actions" .= _ioTTopicRuleTopicRulePayloadActions)
+    , ("AwsIotSqlVersion" .=) <$> _ioTTopicRuleTopicRulePayloadAwsIotSqlVersion
+    , ("Description" .=) <$> _ioTTopicRuleTopicRulePayloadDescription
+    , Just ("RuleDisabled" .= _ioTTopicRuleTopicRulePayloadRuleDisabled)
+    , Just ("Sql" .= _ioTTopicRuleTopicRulePayloadSql)
+    ]
 
 instance FromJSON IoTTopicRuleTopicRulePayload where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 29, omitNothingFields = True }
+  parseJSON (Object obj) =
+    IoTTopicRuleTopicRulePayload <$>
+      obj .: "Actions" <*>
+      obj .:? "AwsIotSqlVersion" <*>
+      obj .:? "Description" <*>
+      obj .: "RuleDisabled" <*>
+      obj .: "Sql"
+  parseJSON _ = mempty
 
 -- | Constructor for 'IoTTopicRuleTopicRulePayload' containing required fields
 -- | as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamBufferingHints.hs b/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamBufferingHints.hs
--- a/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamBufferingHints.hs
+++ b/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamBufferingHints.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-s3destinationconfiguration-bufferinghints.html
 
 module Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamBufferingHints where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -22,13 +22,22 @@
   KinesisFirehoseDeliveryStreamBufferingHints
   { _kinesisFirehoseDeliveryStreamBufferingHintsIntervalInSeconds :: Val Integer'
   , _kinesisFirehoseDeliveryStreamBufferingHintsSizeInMBs :: Val Integer'
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON KinesisFirehoseDeliveryStreamBufferingHints where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 44, omitNothingFields = True }
+  toJSON KinesisFirehoseDeliveryStreamBufferingHints{..} =
+    object $
+    catMaybes
+    [ Just ("IntervalInSeconds" .= _kinesisFirehoseDeliveryStreamBufferingHintsIntervalInSeconds)
+    , Just ("SizeInMBs" .= _kinesisFirehoseDeliveryStreamBufferingHintsSizeInMBs)
+    ]
 
 instance FromJSON KinesisFirehoseDeliveryStreamBufferingHints where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 44, omitNothingFields = True }
+  parseJSON (Object obj) =
+    KinesisFirehoseDeliveryStreamBufferingHints <$>
+      obj .: "IntervalInSeconds" <*>
+      obj .: "SizeInMBs"
+  parseJSON _ = mempty
 
 -- | Constructor for 'KinesisFirehoseDeliveryStreamBufferingHints' containing
 -- | required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamCloudWatchLoggingOptions.hs b/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamCloudWatchLoggingOptions.hs
--- a/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamCloudWatchLoggingOptions.hs
+++ b/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamCloudWatchLoggingOptions.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-destination-cloudwatchloggingoptions.html
 
 module Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamCloudWatchLoggingOptions where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -23,13 +23,24 @@
   { _kinesisFirehoseDeliveryStreamCloudWatchLoggingOptionsEnabled :: Maybe (Val Bool')
   , _kinesisFirehoseDeliveryStreamCloudWatchLoggingOptionsLogGroupName :: Maybe (Val Text)
   , _kinesisFirehoseDeliveryStreamCloudWatchLoggingOptionsLogStreamName :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON KinesisFirehoseDeliveryStreamCloudWatchLoggingOptions where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 54, omitNothingFields = True }
+  toJSON KinesisFirehoseDeliveryStreamCloudWatchLoggingOptions{..} =
+    object $
+    catMaybes
+    [ ("Enabled" .=) <$> _kinesisFirehoseDeliveryStreamCloudWatchLoggingOptionsEnabled
+    , ("LogGroupName" .=) <$> _kinesisFirehoseDeliveryStreamCloudWatchLoggingOptionsLogGroupName
+    , ("LogStreamName" .=) <$> _kinesisFirehoseDeliveryStreamCloudWatchLoggingOptionsLogStreamName
+    ]
 
 instance FromJSON KinesisFirehoseDeliveryStreamCloudWatchLoggingOptions where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 54, omitNothingFields = True }
+  parseJSON (Object obj) =
+    KinesisFirehoseDeliveryStreamCloudWatchLoggingOptions <$>
+      obj .:? "Enabled" <*>
+      obj .:? "LogGroupName" <*>
+      obj .:? "LogStreamName"
+  parseJSON _ = mempty
 
 -- | Constructor for 'KinesisFirehoseDeliveryStreamCloudWatchLoggingOptions'
 -- | containing required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamCopyCommand.hs b/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamCopyCommand.hs
--- a/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamCopyCommand.hs
+++ b/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamCopyCommand.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-redshiftdestinationconfiguration-copycommand.html
 
 module Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamCopyCommand where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -22,13 +22,24 @@
   { _kinesisFirehoseDeliveryStreamCopyCommandCopyOptions :: Maybe (Val Text)
   , _kinesisFirehoseDeliveryStreamCopyCommandDataTableColumns :: Maybe (Val Text)
   , _kinesisFirehoseDeliveryStreamCopyCommandDataTableName :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON KinesisFirehoseDeliveryStreamCopyCommand where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 41, omitNothingFields = True }
+  toJSON KinesisFirehoseDeliveryStreamCopyCommand{..} =
+    object $
+    catMaybes
+    [ ("CopyOptions" .=) <$> _kinesisFirehoseDeliveryStreamCopyCommandCopyOptions
+    , ("DataTableColumns" .=) <$> _kinesisFirehoseDeliveryStreamCopyCommandDataTableColumns
+    , Just ("DataTableName" .= _kinesisFirehoseDeliveryStreamCopyCommandDataTableName)
+    ]
 
 instance FromJSON KinesisFirehoseDeliveryStreamCopyCommand where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 41, omitNothingFields = True }
+  parseJSON (Object obj) =
+    KinesisFirehoseDeliveryStreamCopyCommand <$>
+      obj .:? "CopyOptions" <*>
+      obj .:? "DataTableColumns" <*>
+      obj .: "DataTableName"
+  parseJSON _ = mempty
 
 -- | Constructor for 'KinesisFirehoseDeliveryStreamCopyCommand' containing
 -- | required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamElasticsearchBufferingHints.hs b/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamElasticsearchBufferingHints.hs
--- a/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamElasticsearchBufferingHints.hs
+++ b/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamElasticsearchBufferingHints.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-elasticsearchdestinationconfiguration.html
 
 module Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamElasticsearchBufferingHints where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -22,13 +22,22 @@
   KinesisFirehoseDeliveryStreamElasticsearchBufferingHints
   { _kinesisFirehoseDeliveryStreamElasticsearchBufferingHintsIntervalInSeconds :: Val Integer'
   , _kinesisFirehoseDeliveryStreamElasticsearchBufferingHintsSizeInMBs :: Val Integer'
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON KinesisFirehoseDeliveryStreamElasticsearchBufferingHints where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 57, omitNothingFields = True }
+  toJSON KinesisFirehoseDeliveryStreamElasticsearchBufferingHints{..} =
+    object $
+    catMaybes
+    [ Just ("IntervalInSeconds" .= _kinesisFirehoseDeliveryStreamElasticsearchBufferingHintsIntervalInSeconds)
+    , Just ("SizeInMBs" .= _kinesisFirehoseDeliveryStreamElasticsearchBufferingHintsSizeInMBs)
+    ]
 
 instance FromJSON KinesisFirehoseDeliveryStreamElasticsearchBufferingHints where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 57, omitNothingFields = True }
+  parseJSON (Object obj) =
+    KinesisFirehoseDeliveryStreamElasticsearchBufferingHints <$>
+      obj .: "IntervalInSeconds" <*>
+      obj .: "SizeInMBs"
+  parseJSON _ = mempty
 
 -- | Constructor for
 -- | 'KinesisFirehoseDeliveryStreamElasticsearchBufferingHints' containing
diff --git a/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamElasticsearchDestinationConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamElasticsearchDestinationConfiguration.hs
--- a/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamElasticsearchDestinationConfiguration.hs
+++ b/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamElasticsearchDestinationConfiguration.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-elasticsearchdestinationconfiguration.html
 
 module Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamElasticsearchDestinationConfiguration where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.Types
@@ -34,13 +34,38 @@
   , _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationS3BackupMode :: Val KinesisFirehoseElasticsearchS3BackupMode
   , _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationS3Configuration :: KinesisFirehoseDeliveryStreamS3DestinationConfiguration
   , _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationTypeName :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON KinesisFirehoseDeliveryStreamElasticsearchDestinationConfiguration where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 67, omitNothingFields = True }
+  toJSON KinesisFirehoseDeliveryStreamElasticsearchDestinationConfiguration{..} =
+    object $
+    catMaybes
+    [ Just ("BufferingHints" .= _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationBufferingHints)
+    , ("CloudWatchLoggingOptions" .=) <$> _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationCloudWatchLoggingOptions
+    , Just ("DomainARN" .= _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationDomainARN)
+    , Just ("IndexName" .= _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationIndexName)
+    , Just ("IndexRotationPeriod" .= _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationIndexRotationPeriod)
+    , Just ("RetryOptions" .= _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationRetryOptions)
+    , Just ("RoleARN" .= _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationRoleARN)
+    , Just ("S3BackupMode" .= _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationS3BackupMode)
+    , Just ("S3Configuration" .= _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationS3Configuration)
+    , Just ("TypeName" .= _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationTypeName)
+    ]
 
 instance FromJSON KinesisFirehoseDeliveryStreamElasticsearchDestinationConfiguration where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 67, omitNothingFields = True }
+  parseJSON (Object obj) =
+    KinesisFirehoseDeliveryStreamElasticsearchDestinationConfiguration <$>
+      obj .: "BufferingHints" <*>
+      obj .:? "CloudWatchLoggingOptions" <*>
+      obj .: "DomainARN" <*>
+      obj .: "IndexName" <*>
+      obj .: "IndexRotationPeriod" <*>
+      obj .: "RetryOptions" <*>
+      obj .: "RoleARN" <*>
+      obj .: "S3BackupMode" <*>
+      obj .: "S3Configuration" <*>
+      obj .: "TypeName"
+  parseJSON _ = mempty
 
 -- | Constructor for
 -- | 'KinesisFirehoseDeliveryStreamElasticsearchDestinationConfiguration'
diff --git a/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamElasticsearchRetryOptions.hs b/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamElasticsearchRetryOptions.hs
--- a/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamElasticsearchRetryOptions.hs
+++ b/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamElasticsearchRetryOptions.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-elasticsearchdestinationconfiguration-retryoptions.html
 
 module Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamElasticsearchRetryOptions where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -21,13 +21,20 @@
 data KinesisFirehoseDeliveryStreamElasticsearchRetryOptions =
   KinesisFirehoseDeliveryStreamElasticsearchRetryOptions
   { _kinesisFirehoseDeliveryStreamElasticsearchRetryOptionsDurationInSeconds :: Val Integer'
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON KinesisFirehoseDeliveryStreamElasticsearchRetryOptions where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 55, omitNothingFields = True }
+  toJSON KinesisFirehoseDeliveryStreamElasticsearchRetryOptions{..} =
+    object $
+    catMaybes
+    [ Just ("DurationInSeconds" .= _kinesisFirehoseDeliveryStreamElasticsearchRetryOptionsDurationInSeconds)
+    ]
 
 instance FromJSON KinesisFirehoseDeliveryStreamElasticsearchRetryOptions where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 55, omitNothingFields = True }
+  parseJSON (Object obj) =
+    KinesisFirehoseDeliveryStreamElasticsearchRetryOptions <$>
+      obj .: "DurationInSeconds"
+  parseJSON _ = mempty
 
 -- | Constructor for 'KinesisFirehoseDeliveryStreamElasticsearchRetryOptions'
 -- | containing required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamEncryptionConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamEncryptionConfiguration.hs
--- a/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamEncryptionConfiguration.hs
+++ b/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamEncryptionConfiguration.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-s3destinationconfiguration-encryptionconfiguration.html
 
 module Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamEncryptionConfiguration where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.Types
@@ -23,13 +23,22 @@
   KinesisFirehoseDeliveryStreamEncryptionConfiguration
   { _kinesisFirehoseDeliveryStreamEncryptionConfigurationKMSEncryptionConfig :: Maybe KinesisFirehoseDeliveryStreamKMSEncryptionConfig
   , _kinesisFirehoseDeliveryStreamEncryptionConfigurationNoEncryptionConfig :: Maybe (Val KinesisFirehoseNoEncryptionConfig)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON KinesisFirehoseDeliveryStreamEncryptionConfiguration where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 53, omitNothingFields = True }
+  toJSON KinesisFirehoseDeliveryStreamEncryptionConfiguration{..} =
+    object $
+    catMaybes
+    [ ("KMSEncryptionConfig" .=) <$> _kinesisFirehoseDeliveryStreamEncryptionConfigurationKMSEncryptionConfig
+    , ("NoEncryptionConfig" .=) <$> _kinesisFirehoseDeliveryStreamEncryptionConfigurationNoEncryptionConfig
+    ]
 
 instance FromJSON KinesisFirehoseDeliveryStreamEncryptionConfiguration where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 53, omitNothingFields = True }
+  parseJSON (Object obj) =
+    KinesisFirehoseDeliveryStreamEncryptionConfiguration <$>
+      obj .:? "KMSEncryptionConfig" <*>
+      obj .:? "NoEncryptionConfig"
+  parseJSON _ = mempty
 
 -- | Constructor for 'KinesisFirehoseDeliveryStreamEncryptionConfiguration'
 -- | containing required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamKMSEncryptionConfig.hs b/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamKMSEncryptionConfig.hs
--- a/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamKMSEncryptionConfig.hs
+++ b/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamKMSEncryptionConfig.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-s3destinationconfiguration-encryptionconfiguration-kmsencryptionconfig.html
 
 module Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamKMSEncryptionConfig where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -21,13 +21,20 @@
 data KinesisFirehoseDeliveryStreamKMSEncryptionConfig =
   KinesisFirehoseDeliveryStreamKMSEncryptionConfig
   { _kinesisFirehoseDeliveryStreamKMSEncryptionConfigAWSKMSKeyARN :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON KinesisFirehoseDeliveryStreamKMSEncryptionConfig where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 49, omitNothingFields = True }
+  toJSON KinesisFirehoseDeliveryStreamKMSEncryptionConfig{..} =
+    object $
+    catMaybes
+    [ Just ("AWSKMSKeyARN" .= _kinesisFirehoseDeliveryStreamKMSEncryptionConfigAWSKMSKeyARN)
+    ]
 
 instance FromJSON KinesisFirehoseDeliveryStreamKMSEncryptionConfig where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 49, omitNothingFields = True }
+  parseJSON (Object obj) =
+    KinesisFirehoseDeliveryStreamKMSEncryptionConfig <$>
+      obj .: "AWSKMSKeyARN"
+  parseJSON _ = mempty
 
 -- | Constructor for 'KinesisFirehoseDeliveryStreamKMSEncryptionConfig'
 -- | containing required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamRedshiftDestinationConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamRedshiftDestinationConfiguration.hs
--- a/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamRedshiftDestinationConfiguration.hs
+++ b/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamRedshiftDestinationConfiguration.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-redshiftdestinationconfiguration.html
 
 module Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamRedshiftDestinationConfiguration where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamCloudWatchLoggingOptions
@@ -29,13 +29,32 @@
   , _kinesisFirehoseDeliveryStreamRedshiftDestinationConfigurationRoleARN :: Val Text
   , _kinesisFirehoseDeliveryStreamRedshiftDestinationConfigurationS3Configuration :: KinesisFirehoseDeliveryStreamS3DestinationConfiguration
   , _kinesisFirehoseDeliveryStreamRedshiftDestinationConfigurationUsername :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON KinesisFirehoseDeliveryStreamRedshiftDestinationConfiguration where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 62, omitNothingFields = True }
+  toJSON KinesisFirehoseDeliveryStreamRedshiftDestinationConfiguration{..} =
+    object $
+    catMaybes
+    [ ("CloudWatchLoggingOptions" .=) <$> _kinesisFirehoseDeliveryStreamRedshiftDestinationConfigurationCloudWatchLoggingOptions
+    , Just ("ClusterJDBCURL" .= _kinesisFirehoseDeliveryStreamRedshiftDestinationConfigurationClusterJDBCURL)
+    , Just ("CopyCommand" .= _kinesisFirehoseDeliveryStreamRedshiftDestinationConfigurationCopyCommand)
+    , Just ("Password" .= _kinesisFirehoseDeliveryStreamRedshiftDestinationConfigurationPassword)
+    , Just ("RoleARN" .= _kinesisFirehoseDeliveryStreamRedshiftDestinationConfigurationRoleARN)
+    , Just ("S3Configuration" .= _kinesisFirehoseDeliveryStreamRedshiftDestinationConfigurationS3Configuration)
+    , Just ("Username" .= _kinesisFirehoseDeliveryStreamRedshiftDestinationConfigurationUsername)
+    ]
 
 instance FromJSON KinesisFirehoseDeliveryStreamRedshiftDestinationConfiguration where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 62, omitNothingFields = True }
+  parseJSON (Object obj) =
+    KinesisFirehoseDeliveryStreamRedshiftDestinationConfiguration <$>
+      obj .:? "CloudWatchLoggingOptions" <*>
+      obj .: "ClusterJDBCURL" <*>
+      obj .: "CopyCommand" <*>
+      obj .: "Password" <*>
+      obj .: "RoleARN" <*>
+      obj .: "S3Configuration" <*>
+      obj .: "Username"
+  parseJSON _ = mempty
 
 -- | Constructor for
 -- | 'KinesisFirehoseDeliveryStreamRedshiftDestinationConfiguration'
diff --git a/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamS3DestinationConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamS3DestinationConfiguration.hs
--- a/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamS3DestinationConfiguration.hs
+++ b/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamS3DestinationConfiguration.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-s3destinationconfiguration.html
 
 module Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamS3DestinationConfiguration where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.Types
@@ -30,13 +30,32 @@
   , _kinesisFirehoseDeliveryStreamS3DestinationConfigurationEncryptionConfiguration :: Maybe KinesisFirehoseDeliveryStreamEncryptionConfiguration
   , _kinesisFirehoseDeliveryStreamS3DestinationConfigurationPrefix :: Val Text
   , _kinesisFirehoseDeliveryStreamS3DestinationConfigurationRoleARN :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON KinesisFirehoseDeliveryStreamS3DestinationConfiguration where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 56, omitNothingFields = True }
+  toJSON KinesisFirehoseDeliveryStreamS3DestinationConfiguration{..} =
+    object $
+    catMaybes
+    [ Just ("BucketARN" .= _kinesisFirehoseDeliveryStreamS3DestinationConfigurationBucketARN)
+    , Just ("BufferingHints" .= _kinesisFirehoseDeliveryStreamS3DestinationConfigurationBufferingHints)
+    , ("CloudWatchLoggingOptions" .=) <$> _kinesisFirehoseDeliveryStreamS3DestinationConfigurationCloudWatchLoggingOptions
+    , Just ("CompressionFormat" .= _kinesisFirehoseDeliveryStreamS3DestinationConfigurationCompressionFormat)
+    , ("EncryptionConfiguration" .=) <$> _kinesisFirehoseDeliveryStreamS3DestinationConfigurationEncryptionConfiguration
+    , Just ("Prefix" .= _kinesisFirehoseDeliveryStreamS3DestinationConfigurationPrefix)
+    , Just ("RoleARN" .= _kinesisFirehoseDeliveryStreamS3DestinationConfigurationRoleARN)
+    ]
 
 instance FromJSON KinesisFirehoseDeliveryStreamS3DestinationConfiguration where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 56, omitNothingFields = True }
+  parseJSON (Object obj) =
+    KinesisFirehoseDeliveryStreamS3DestinationConfiguration <$>
+      obj .: "BucketARN" <*>
+      obj .: "BufferingHints" <*>
+      obj .:? "CloudWatchLoggingOptions" <*>
+      obj .: "CompressionFormat" <*>
+      obj .:? "EncryptionConfiguration" <*>
+      obj .: "Prefix" <*>
+      obj .: "RoleARN"
+  parseJSON _ = mempty
 
 -- | Constructor for 'KinesisFirehoseDeliveryStreamS3DestinationConfiguration'
 -- | containing required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/LambdaFunctionCode.hs b/library-gen/Stratosphere/ResourceProperties/LambdaFunctionCode.hs
--- a/library-gen/Stratosphere/ResourceProperties/LambdaFunctionCode.hs
+++ b/library-gen/Stratosphere/ResourceProperties/LambdaFunctionCode.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lambda-function-code.html
 
 module Stratosphere.ResourceProperties.LambdaFunctionCode where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -22,13 +22,26 @@
   , _lambdaFunctionCodeS3Key :: Maybe (Val Text)
   , _lambdaFunctionCodeS3ObjectVersion :: Maybe (Val Text)
   , _lambdaFunctionCodeZipFile :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON LambdaFunctionCode where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 19, omitNothingFields = True }
+  toJSON LambdaFunctionCode{..} =
+    object $
+    catMaybes
+    [ ("S3Bucket" .=) <$> _lambdaFunctionCodeS3Bucket
+    , ("S3Key" .=) <$> _lambdaFunctionCodeS3Key
+    , ("S3ObjectVersion" .=) <$> _lambdaFunctionCodeS3ObjectVersion
+    , ("ZipFile" .=) <$> _lambdaFunctionCodeZipFile
+    ]
 
 instance FromJSON LambdaFunctionCode where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 19, omitNothingFields = True }
+  parseJSON (Object obj) =
+    LambdaFunctionCode <$>
+      obj .:? "S3Bucket" <*>
+      obj .:? "S3Key" <*>
+      obj .:? "S3ObjectVersion" <*>
+      obj .:? "ZipFile"
+  parseJSON _ = mempty
 
 -- | Constructor for 'LambdaFunctionCode' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/LambdaFunctionEnvironment.hs b/library-gen/Stratosphere/ResourceProperties/LambdaFunctionEnvironment.hs
--- a/library-gen/Stratosphere/ResourceProperties/LambdaFunctionEnvironment.hs
+++ b/library-gen/Stratosphere/ResourceProperties/LambdaFunctionEnvironment.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lambda-function-environment.html
 
 module Stratosphere.ResourceProperties.LambdaFunctionEnvironment where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -19,13 +19,20 @@
 data LambdaFunctionEnvironment =
   LambdaFunctionEnvironment
   { _lambdaFunctionEnvironmentVariables :: Maybe Object
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON LambdaFunctionEnvironment where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 26, omitNothingFields = True }
+  toJSON LambdaFunctionEnvironment{..} =
+    object $
+    catMaybes
+    [ ("Variables" .=) <$> _lambdaFunctionEnvironmentVariables
+    ]
 
 instance FromJSON LambdaFunctionEnvironment where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 26, omitNothingFields = True }
+  parseJSON (Object obj) =
+    LambdaFunctionEnvironment <$>
+      obj .:? "Variables"
+  parseJSON _ = mempty
 
 -- | Constructor for 'LambdaFunctionEnvironment' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/LambdaFunctionVpcConfig.hs b/library-gen/Stratosphere/ResourceProperties/LambdaFunctionVpcConfig.hs
--- a/library-gen/Stratosphere/ResourceProperties/LambdaFunctionVpcConfig.hs
+++ b/library-gen/Stratosphere/ResourceProperties/LambdaFunctionVpcConfig.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lambda-function-vpcconfig.html
 
 module Stratosphere.ResourceProperties.LambdaFunctionVpcConfig where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   LambdaFunctionVpcConfig
   { _lambdaFunctionVpcConfigSecurityGroupIds :: [Val Text]
   , _lambdaFunctionVpcConfigSubnetIds :: [Val Text]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON LambdaFunctionVpcConfig where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 24, omitNothingFields = True }
+  toJSON LambdaFunctionVpcConfig{..} =
+    object $
+    catMaybes
+    [ Just ("SecurityGroupIds" .= _lambdaFunctionVpcConfigSecurityGroupIds)
+    , Just ("SubnetIds" .= _lambdaFunctionVpcConfigSubnetIds)
+    ]
 
 instance FromJSON LambdaFunctionVpcConfig where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 24, omitNothingFields = True }
+  parseJSON (Object obj) =
+    LambdaFunctionVpcConfig <$>
+      obj .: "SecurityGroupIds" <*>
+      obj .: "SubnetIds"
+  parseJSON _ = mempty
 
 -- | Constructor for 'LambdaFunctionVpcConfig' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/LogsMetricFilterMetricTransformation.hs b/library-gen/Stratosphere/ResourceProperties/LogsMetricFilterMetricTransformation.hs
--- a/library-gen/Stratosphere/ResourceProperties/LogsMetricFilterMetricTransformation.hs
+++ b/library-gen/Stratosphere/ResourceProperties/LogsMetricFilterMetricTransformation.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-logs-metricfilter-metrictransformation.html
 
 module Stratosphere.ResourceProperties.LogsMetricFilterMetricTransformation where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -21,13 +21,24 @@
   { _logsMetricFilterMetricTransformationMetricName :: Val Text
   , _logsMetricFilterMetricTransformationMetricNamespace :: Val Text
   , _logsMetricFilterMetricTransformationMetricValue :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON LogsMetricFilterMetricTransformation where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 37, omitNothingFields = True }
+  toJSON LogsMetricFilterMetricTransformation{..} =
+    object $
+    catMaybes
+    [ Just ("MetricName" .= _logsMetricFilterMetricTransformationMetricName)
+    , Just ("MetricNamespace" .= _logsMetricFilterMetricTransformationMetricNamespace)
+    , Just ("MetricValue" .= _logsMetricFilterMetricTransformationMetricValue)
+    ]
 
 instance FromJSON LogsMetricFilterMetricTransformation where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 37, omitNothingFields = True }
+  parseJSON (Object obj) =
+    LogsMetricFilterMetricTransformation <$>
+      obj .: "MetricName" <*>
+      obj .: "MetricNamespace" <*>
+      obj .: "MetricValue"
+  parseJSON _ = mempty
 
 -- | Constructor for 'LogsMetricFilterMetricTransformation' containing
 -- | required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/OpsWorksAppDataSource.hs b/library-gen/Stratosphere/ResourceProperties/OpsWorksAppDataSource.hs
--- a/library-gen/Stratosphere/ResourceProperties/OpsWorksAppDataSource.hs
+++ b/library-gen/Stratosphere/ResourceProperties/OpsWorksAppDataSource.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-app-datasource.html
 
 module Stratosphere.ResourceProperties.OpsWorksAppDataSource where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -21,13 +21,24 @@
   { _opsWorksAppDataSourceArn :: Maybe (Val Text)
   , _opsWorksAppDataSourceDatabaseName :: Maybe (Val Text)
   , _opsWorksAppDataSourceType :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON OpsWorksAppDataSource where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 22, omitNothingFields = True }
+  toJSON OpsWorksAppDataSource{..} =
+    object $
+    catMaybes
+    [ ("Arn" .=) <$> _opsWorksAppDataSourceArn
+    , ("DatabaseName" .=) <$> _opsWorksAppDataSourceDatabaseName
+    , ("Type" .=) <$> _opsWorksAppDataSourceType
+    ]
 
 instance FromJSON OpsWorksAppDataSource where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 22, omitNothingFields = True }
+  parseJSON (Object obj) =
+    OpsWorksAppDataSource <$>
+      obj .:? "Arn" <*>
+      obj .:? "DatabaseName" <*>
+      obj .:? "Type"
+  parseJSON _ = mempty
 
 -- | Constructor for 'OpsWorksAppDataSource' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/OpsWorksAppEnvironmentVariable.hs b/library-gen/Stratosphere/ResourceProperties/OpsWorksAppEnvironmentVariable.hs
--- a/library-gen/Stratosphere/ResourceProperties/OpsWorksAppEnvironmentVariable.hs
+++ b/library-gen/Stratosphere/ResourceProperties/OpsWorksAppEnvironmentVariable.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-app-environment.html
 
 module Stratosphere.ResourceProperties.OpsWorksAppEnvironmentVariable where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -21,13 +21,24 @@
   { _opsWorksAppEnvironmentVariableKey :: Val Text
   , _opsWorksAppEnvironmentVariableSecure :: Maybe (Val Bool')
   , _opsWorksAppEnvironmentVariableValue :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON OpsWorksAppEnvironmentVariable where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 31, omitNothingFields = True }
+  toJSON OpsWorksAppEnvironmentVariable{..} =
+    object $
+    catMaybes
+    [ Just ("Key" .= _opsWorksAppEnvironmentVariableKey)
+    , ("Secure" .=) <$> _opsWorksAppEnvironmentVariableSecure
+    , Just ("Value" .= _opsWorksAppEnvironmentVariableValue)
+    ]
 
 instance FromJSON OpsWorksAppEnvironmentVariable where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 31, omitNothingFields = True }
+  parseJSON (Object obj) =
+    OpsWorksAppEnvironmentVariable <$>
+      obj .: "Key" <*>
+      obj .:? "Secure" <*>
+      obj .: "Value"
+  parseJSON _ = mempty
 
 -- | Constructor for 'OpsWorksAppEnvironmentVariable' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/OpsWorksAppSource.hs b/library-gen/Stratosphere/ResourceProperties/OpsWorksAppSource.hs
--- a/library-gen/Stratosphere/ResourceProperties/OpsWorksAppSource.hs
+++ b/library-gen/Stratosphere/ResourceProperties/OpsWorksAppSource.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-stack-source.html
 
 module Stratosphere.ResourceProperties.OpsWorksAppSource where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -24,13 +24,30 @@
   , _opsWorksAppSourceType :: Maybe (Val Text)
   , _opsWorksAppSourceUrl :: Maybe (Val Text)
   , _opsWorksAppSourceUsername :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON OpsWorksAppSource where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 18, omitNothingFields = True }
+  toJSON OpsWorksAppSource{..} =
+    object $
+    catMaybes
+    [ ("Password" .=) <$> _opsWorksAppSourcePassword
+    , ("Revision" .=) <$> _opsWorksAppSourceRevision
+    , ("SshKey" .=) <$> _opsWorksAppSourceSshKey
+    , ("Type" .=) <$> _opsWorksAppSourceType
+    , ("Url" .=) <$> _opsWorksAppSourceUrl
+    , ("Username" .=) <$> _opsWorksAppSourceUsername
+    ]
 
 instance FromJSON OpsWorksAppSource where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 18, omitNothingFields = True }
+  parseJSON (Object obj) =
+    OpsWorksAppSource <$>
+      obj .:? "Password" <*>
+      obj .:? "Revision" <*>
+      obj .:? "SshKey" <*>
+      obj .:? "Type" <*>
+      obj .:? "Url" <*>
+      obj .:? "Username"
+  parseJSON _ = mempty
 
 -- | Constructor for 'OpsWorksAppSource' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/OpsWorksAppSslConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/OpsWorksAppSslConfiguration.hs
--- a/library-gen/Stratosphere/ResourceProperties/OpsWorksAppSslConfiguration.hs
+++ b/library-gen/Stratosphere/ResourceProperties/OpsWorksAppSslConfiguration.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-app-sslconfiguration.html
 
 module Stratosphere.ResourceProperties.OpsWorksAppSslConfiguration where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -21,13 +21,24 @@
   { _opsWorksAppSslConfigurationCertificate :: Maybe (Val Text)
   , _opsWorksAppSslConfigurationChain :: Maybe (Val Text)
   , _opsWorksAppSslConfigurationPrivateKey :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON OpsWorksAppSslConfiguration where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+  toJSON OpsWorksAppSslConfiguration{..} =
+    object $
+    catMaybes
+    [ ("Certificate" .=) <$> _opsWorksAppSslConfigurationCertificate
+    , ("Chain" .=) <$> _opsWorksAppSslConfigurationChain
+    , ("PrivateKey" .=) <$> _opsWorksAppSslConfigurationPrivateKey
+    ]
 
 instance FromJSON OpsWorksAppSslConfiguration where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+  parseJSON (Object obj) =
+    OpsWorksAppSslConfiguration <$>
+      obj .:? "Certificate" <*>
+      obj .:? "Chain" <*>
+      obj .:? "PrivateKey"
+  parseJSON _ = mempty
 
 -- | Constructor for 'OpsWorksAppSslConfiguration' containing required fields
 -- | as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/OpsWorksInstanceBlockDeviceMapping.hs b/library-gen/Stratosphere/ResourceProperties/OpsWorksInstanceBlockDeviceMapping.hs
--- a/library-gen/Stratosphere/ResourceProperties/OpsWorksInstanceBlockDeviceMapping.hs
+++ b/library-gen/Stratosphere/ResourceProperties/OpsWorksInstanceBlockDeviceMapping.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-instance-blockdevicemapping.html
 
 module Stratosphere.ResourceProperties.OpsWorksInstanceBlockDeviceMapping where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.OpsWorksInstanceEbsBlockDevice
@@ -22,13 +22,26 @@
   , _opsWorksInstanceBlockDeviceMappingEbs :: Maybe OpsWorksInstanceEbsBlockDevice
   , _opsWorksInstanceBlockDeviceMappingNoDevice :: Maybe (Val Text)
   , _opsWorksInstanceBlockDeviceMappingVirtualName :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON OpsWorksInstanceBlockDeviceMapping where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 35, omitNothingFields = True }
+  toJSON OpsWorksInstanceBlockDeviceMapping{..} =
+    object $
+    catMaybes
+    [ ("DeviceName" .=) <$> _opsWorksInstanceBlockDeviceMappingDeviceName
+    , ("Ebs" .=) <$> _opsWorksInstanceBlockDeviceMappingEbs
+    , ("NoDevice" .=) <$> _opsWorksInstanceBlockDeviceMappingNoDevice
+    , ("VirtualName" .=) <$> _opsWorksInstanceBlockDeviceMappingVirtualName
+    ]
 
 instance FromJSON OpsWorksInstanceBlockDeviceMapping where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 35, omitNothingFields = True }
+  parseJSON (Object obj) =
+    OpsWorksInstanceBlockDeviceMapping <$>
+      obj .:? "DeviceName" <*>
+      obj .:? "Ebs" <*>
+      obj .:? "NoDevice" <*>
+      obj .:? "VirtualName"
+  parseJSON _ = mempty
 
 -- | Constructor for 'OpsWorksInstanceBlockDeviceMapping' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/OpsWorksInstanceEbsBlockDevice.hs b/library-gen/Stratosphere/ResourceProperties/OpsWorksInstanceEbsBlockDevice.hs
--- a/library-gen/Stratosphere/ResourceProperties/OpsWorksInstanceEbsBlockDevice.hs
+++ b/library-gen/Stratosphere/ResourceProperties/OpsWorksInstanceEbsBlockDevice.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-instance-ebsblockdevice.html
 
 module Stratosphere.ResourceProperties.OpsWorksInstanceEbsBlockDevice where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -23,13 +23,28 @@
   , _opsWorksInstanceEbsBlockDeviceSnapshotId :: Maybe (Val Text)
   , _opsWorksInstanceEbsBlockDeviceVolumeSize :: Maybe (Val Integer')
   , _opsWorksInstanceEbsBlockDeviceVolumeType :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON OpsWorksInstanceEbsBlockDevice where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 31, omitNothingFields = True }
+  toJSON OpsWorksInstanceEbsBlockDevice{..} =
+    object $
+    catMaybes
+    [ ("DeleteOnTermination" .=) <$> _opsWorksInstanceEbsBlockDeviceDeleteOnTermination
+    , ("Iops" .=) <$> _opsWorksInstanceEbsBlockDeviceIops
+    , ("SnapshotId" .=) <$> _opsWorksInstanceEbsBlockDeviceSnapshotId
+    , ("VolumeSize" .=) <$> _opsWorksInstanceEbsBlockDeviceVolumeSize
+    , ("VolumeType" .=) <$> _opsWorksInstanceEbsBlockDeviceVolumeType
+    ]
 
 instance FromJSON OpsWorksInstanceEbsBlockDevice where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 31, omitNothingFields = True }
+  parseJSON (Object obj) =
+    OpsWorksInstanceEbsBlockDevice <$>
+      obj .:? "DeleteOnTermination" <*>
+      obj .:? "Iops" <*>
+      obj .:? "SnapshotId" <*>
+      obj .:? "VolumeSize" <*>
+      obj .:? "VolumeType"
+  parseJSON _ = mempty
 
 -- | Constructor for 'OpsWorksInstanceEbsBlockDevice' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/OpsWorksInstanceTimeBasedAutoScaling.hs b/library-gen/Stratosphere/ResourceProperties/OpsWorksInstanceTimeBasedAutoScaling.hs
--- a/library-gen/Stratosphere/ResourceProperties/OpsWorksInstanceTimeBasedAutoScaling.hs
+++ b/library-gen/Stratosphere/ResourceProperties/OpsWorksInstanceTimeBasedAutoScaling.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-instance-timebasedautoscaling.html
 
 module Stratosphere.ResourceProperties.OpsWorksInstanceTimeBasedAutoScaling where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -25,13 +25,32 @@
   , _opsWorksInstanceTimeBasedAutoScalingThursday :: Maybe Object
   , _opsWorksInstanceTimeBasedAutoScalingTuesday :: Maybe Object
   , _opsWorksInstanceTimeBasedAutoScalingWednesday :: Maybe Object
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON OpsWorksInstanceTimeBasedAutoScaling where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 37, omitNothingFields = True }
+  toJSON OpsWorksInstanceTimeBasedAutoScaling{..} =
+    object $
+    catMaybes
+    [ ("Friday" .=) <$> _opsWorksInstanceTimeBasedAutoScalingFriday
+    , ("Monday" .=) <$> _opsWorksInstanceTimeBasedAutoScalingMonday
+    , ("Saturday" .=) <$> _opsWorksInstanceTimeBasedAutoScalingSaturday
+    , ("Sunday" .=) <$> _opsWorksInstanceTimeBasedAutoScalingSunday
+    , ("Thursday" .=) <$> _opsWorksInstanceTimeBasedAutoScalingThursday
+    , ("Tuesday" .=) <$> _opsWorksInstanceTimeBasedAutoScalingTuesday
+    , ("Wednesday" .=) <$> _opsWorksInstanceTimeBasedAutoScalingWednesday
+    ]
 
 instance FromJSON OpsWorksInstanceTimeBasedAutoScaling where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 37, omitNothingFields = True }
+  parseJSON (Object obj) =
+    OpsWorksInstanceTimeBasedAutoScaling <$>
+      obj .:? "Friday" <*>
+      obj .:? "Monday" <*>
+      obj .:? "Saturday" <*>
+      obj .:? "Sunday" <*>
+      obj .:? "Thursday" <*>
+      obj .:? "Tuesday" <*>
+      obj .:? "Wednesday"
+  parseJSON _ = mempty
 
 -- | Constructor for 'OpsWorksInstanceTimeBasedAutoScaling' containing
 -- | required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/OpsWorksLayerAutoScalingThresholds.hs b/library-gen/Stratosphere/ResourceProperties/OpsWorksLayerAutoScalingThresholds.hs
--- a/library-gen/Stratosphere/ResourceProperties/OpsWorksLayerAutoScalingThresholds.hs
+++ b/library-gen/Stratosphere/ResourceProperties/OpsWorksLayerAutoScalingThresholds.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-layer-loadbasedautoscaling-autoscalingthresholds.html
 
 module Stratosphere.ResourceProperties.OpsWorksLayerAutoScalingThresholds where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -24,13 +24,30 @@
   , _opsWorksLayerAutoScalingThresholdsLoadThreshold :: Maybe (Val Double')
   , _opsWorksLayerAutoScalingThresholdsMemoryThreshold :: Maybe (Val Double')
   , _opsWorksLayerAutoScalingThresholdsThresholdsWaitTime :: Maybe (Val Integer')
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON OpsWorksLayerAutoScalingThresholds where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 35, omitNothingFields = True }
+  toJSON OpsWorksLayerAutoScalingThresholds{..} =
+    object $
+    catMaybes
+    [ ("CpuThreshold" .=) <$> _opsWorksLayerAutoScalingThresholdsCpuThreshold
+    , ("IgnoreMetricsTime" .=) <$> _opsWorksLayerAutoScalingThresholdsIgnoreMetricsTime
+    , ("InstanceCount" .=) <$> _opsWorksLayerAutoScalingThresholdsInstanceCount
+    , ("LoadThreshold" .=) <$> _opsWorksLayerAutoScalingThresholdsLoadThreshold
+    , ("MemoryThreshold" .=) <$> _opsWorksLayerAutoScalingThresholdsMemoryThreshold
+    , ("ThresholdsWaitTime" .=) <$> _opsWorksLayerAutoScalingThresholdsThresholdsWaitTime
+    ]
 
 instance FromJSON OpsWorksLayerAutoScalingThresholds where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 35, omitNothingFields = True }
+  parseJSON (Object obj) =
+    OpsWorksLayerAutoScalingThresholds <$>
+      obj .:? "CpuThreshold" <*>
+      obj .:? "IgnoreMetricsTime" <*>
+      obj .:? "InstanceCount" <*>
+      obj .:? "LoadThreshold" <*>
+      obj .:? "MemoryThreshold" <*>
+      obj .:? "ThresholdsWaitTime"
+  parseJSON _ = mempty
 
 -- | Constructor for 'OpsWorksLayerAutoScalingThresholds' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/OpsWorksLayerLifecycleEventConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/OpsWorksLayerLifecycleEventConfiguration.hs
--- a/library-gen/Stratosphere/ResourceProperties/OpsWorksLayerLifecycleEventConfiguration.hs
+++ b/library-gen/Stratosphere/ResourceProperties/OpsWorksLayerLifecycleEventConfiguration.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-layer-lifecycleeventconfiguration.html
 
 module Stratosphere.ResourceProperties.OpsWorksLayerLifecycleEventConfiguration where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.OpsWorksLayerShutdownEventConfiguration
@@ -20,13 +20,20 @@
 data OpsWorksLayerLifecycleEventConfiguration =
   OpsWorksLayerLifecycleEventConfiguration
   { _opsWorksLayerLifecycleEventConfigurationShutdownEventConfiguration :: Maybe OpsWorksLayerShutdownEventConfiguration
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON OpsWorksLayerLifecycleEventConfiguration where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 41, omitNothingFields = True }
+  toJSON OpsWorksLayerLifecycleEventConfiguration{..} =
+    object $
+    catMaybes
+    [ ("ShutdownEventConfiguration" .=) <$> _opsWorksLayerLifecycleEventConfigurationShutdownEventConfiguration
+    ]
 
 instance FromJSON OpsWorksLayerLifecycleEventConfiguration where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 41, omitNothingFields = True }
+  parseJSON (Object obj) =
+    OpsWorksLayerLifecycleEventConfiguration <$>
+      obj .:? "ShutdownEventConfiguration"
+  parseJSON _ = mempty
 
 -- | Constructor for 'OpsWorksLayerLifecycleEventConfiguration' containing
 -- | required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/OpsWorksLayerLoadBasedAutoScaling.hs b/library-gen/Stratosphere/ResourceProperties/OpsWorksLayerLoadBasedAutoScaling.hs
--- a/library-gen/Stratosphere/ResourceProperties/OpsWorksLayerLoadBasedAutoScaling.hs
+++ b/library-gen/Stratosphere/ResourceProperties/OpsWorksLayerLoadBasedAutoScaling.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-layer-loadbasedautoscaling.html
 
 module Stratosphere.ResourceProperties.OpsWorksLayerLoadBasedAutoScaling where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.OpsWorksLayerAutoScalingThresholds
@@ -21,13 +21,24 @@
   { _opsWorksLayerLoadBasedAutoScalingDownScaling :: Maybe OpsWorksLayerAutoScalingThresholds
   , _opsWorksLayerLoadBasedAutoScalingEnable :: Maybe (Val Bool')
   , _opsWorksLayerLoadBasedAutoScalingUpScaling :: Maybe OpsWorksLayerAutoScalingThresholds
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON OpsWorksLayerLoadBasedAutoScaling where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 34, omitNothingFields = True }
+  toJSON OpsWorksLayerLoadBasedAutoScaling{..} =
+    object $
+    catMaybes
+    [ ("DownScaling" .=) <$> _opsWorksLayerLoadBasedAutoScalingDownScaling
+    , ("Enable" .=) <$> _opsWorksLayerLoadBasedAutoScalingEnable
+    , ("UpScaling" .=) <$> _opsWorksLayerLoadBasedAutoScalingUpScaling
+    ]
 
 instance FromJSON OpsWorksLayerLoadBasedAutoScaling where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 34, omitNothingFields = True }
+  parseJSON (Object obj) =
+    OpsWorksLayerLoadBasedAutoScaling <$>
+      obj .:? "DownScaling" <*>
+      obj .:? "Enable" <*>
+      obj .:? "UpScaling"
+  parseJSON _ = mempty
 
 -- | Constructor for 'OpsWorksLayerLoadBasedAutoScaling' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/OpsWorksLayerRecipes.hs b/library-gen/Stratosphere/ResourceProperties/OpsWorksLayerRecipes.hs
--- a/library-gen/Stratosphere/ResourceProperties/OpsWorksLayerRecipes.hs
+++ b/library-gen/Stratosphere/ResourceProperties/OpsWorksLayerRecipes.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-layer-recipes.html
 
 module Stratosphere.ResourceProperties.OpsWorksLayerRecipes where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -23,13 +23,28 @@
   , _opsWorksLayerRecipesSetup :: Maybe [Val Text]
   , _opsWorksLayerRecipesShutdown :: Maybe [Val Text]
   , _opsWorksLayerRecipesUndeploy :: Maybe [Val Text]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON OpsWorksLayerRecipes where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 21, omitNothingFields = True }
+  toJSON OpsWorksLayerRecipes{..} =
+    object $
+    catMaybes
+    [ ("Configure" .=) <$> _opsWorksLayerRecipesConfigure
+    , ("Deploy" .=) <$> _opsWorksLayerRecipesDeploy
+    , ("Setup" .=) <$> _opsWorksLayerRecipesSetup
+    , ("Shutdown" .=) <$> _opsWorksLayerRecipesShutdown
+    , ("Undeploy" .=) <$> _opsWorksLayerRecipesUndeploy
+    ]
 
 instance FromJSON OpsWorksLayerRecipes where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 21, omitNothingFields = True }
+  parseJSON (Object obj) =
+    OpsWorksLayerRecipes <$>
+      obj .:? "Configure" <*>
+      obj .:? "Deploy" <*>
+      obj .:? "Setup" <*>
+      obj .:? "Shutdown" <*>
+      obj .:? "Undeploy"
+  parseJSON _ = mempty
 
 -- | Constructor for 'OpsWorksLayerRecipes' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/OpsWorksLayerShutdownEventConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/OpsWorksLayerShutdownEventConfiguration.hs
--- a/library-gen/Stratosphere/ResourceProperties/OpsWorksLayerShutdownEventConfiguration.hs
+++ b/library-gen/Stratosphere/ResourceProperties/OpsWorksLayerShutdownEventConfiguration.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-layer-lifecycleeventconfiguration-shutdowneventconfiguration.html
 
 module Stratosphere.ResourceProperties.OpsWorksLayerShutdownEventConfiguration where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -21,13 +21,22 @@
   OpsWorksLayerShutdownEventConfiguration
   { _opsWorksLayerShutdownEventConfigurationDelayUntilElbConnectionsDrained :: Maybe (Val Bool')
   , _opsWorksLayerShutdownEventConfigurationExecutionTimeout :: Maybe (Val Integer')
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON OpsWorksLayerShutdownEventConfiguration where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 40, omitNothingFields = True }
+  toJSON OpsWorksLayerShutdownEventConfiguration{..} =
+    object $
+    catMaybes
+    [ ("DelayUntilElbConnectionsDrained" .=) <$> _opsWorksLayerShutdownEventConfigurationDelayUntilElbConnectionsDrained
+    , ("ExecutionTimeout" .=) <$> _opsWorksLayerShutdownEventConfigurationExecutionTimeout
+    ]
 
 instance FromJSON OpsWorksLayerShutdownEventConfiguration where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 40, omitNothingFields = True }
+  parseJSON (Object obj) =
+    OpsWorksLayerShutdownEventConfiguration <$>
+      obj .:? "DelayUntilElbConnectionsDrained" <*>
+      obj .:? "ExecutionTimeout"
+  parseJSON _ = mempty
 
 -- | Constructor for 'OpsWorksLayerShutdownEventConfiguration' containing
 -- | required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/OpsWorksLayerVolumeConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/OpsWorksLayerVolumeConfiguration.hs
--- a/library-gen/Stratosphere/ResourceProperties/OpsWorksLayerVolumeConfiguration.hs
+++ b/library-gen/Stratosphere/ResourceProperties/OpsWorksLayerVolumeConfiguration.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-layer-volumeconfiguration.html
 
 module Stratosphere.ResourceProperties.OpsWorksLayerVolumeConfiguration where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -24,13 +24,30 @@
   , _opsWorksLayerVolumeConfigurationRaidLevel :: Maybe (Val Integer')
   , _opsWorksLayerVolumeConfigurationSize :: Maybe (Val Integer')
   , _opsWorksLayerVolumeConfigurationVolumeType :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON OpsWorksLayerVolumeConfiguration where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 33, omitNothingFields = True }
+  toJSON OpsWorksLayerVolumeConfiguration{..} =
+    object $
+    catMaybes
+    [ ("Iops" .=) <$> _opsWorksLayerVolumeConfigurationIops
+    , ("MountPoint" .=) <$> _opsWorksLayerVolumeConfigurationMountPoint
+    , ("NumberOfDisks" .=) <$> _opsWorksLayerVolumeConfigurationNumberOfDisks
+    , ("RaidLevel" .=) <$> _opsWorksLayerVolumeConfigurationRaidLevel
+    , ("Size" .=) <$> _opsWorksLayerVolumeConfigurationSize
+    , ("VolumeType" .=) <$> _opsWorksLayerVolumeConfigurationVolumeType
+    ]
 
 instance FromJSON OpsWorksLayerVolumeConfiguration where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 33, omitNothingFields = True }
+  parseJSON (Object obj) =
+    OpsWorksLayerVolumeConfiguration <$>
+      obj .:? "Iops" <*>
+      obj .:? "MountPoint" <*>
+      obj .:? "NumberOfDisks" <*>
+      obj .:? "RaidLevel" <*>
+      obj .:? "Size" <*>
+      obj .:? "VolumeType"
+  parseJSON _ = mempty
 
 -- | Constructor for 'OpsWorksLayerVolumeConfiguration' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/OpsWorksStackChefConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/OpsWorksStackChefConfiguration.hs
--- a/library-gen/Stratosphere/ResourceProperties/OpsWorksStackChefConfiguration.hs
+++ b/library-gen/Stratosphere/ResourceProperties/OpsWorksStackChefConfiguration.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-stack-chefconfiguration.html
 
 module Stratosphere.ResourceProperties.OpsWorksStackChefConfiguration where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   OpsWorksStackChefConfiguration
   { _opsWorksStackChefConfigurationBerkshelfVersion :: Maybe (Val Text)
   , _opsWorksStackChefConfigurationManageBerkshelf :: Maybe (Val Bool')
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON OpsWorksStackChefConfiguration where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 31, omitNothingFields = True }
+  toJSON OpsWorksStackChefConfiguration{..} =
+    object $
+    catMaybes
+    [ ("BerkshelfVersion" .=) <$> _opsWorksStackChefConfigurationBerkshelfVersion
+    , ("ManageBerkshelf" .=) <$> _opsWorksStackChefConfigurationManageBerkshelf
+    ]
 
 instance FromJSON OpsWorksStackChefConfiguration where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 31, omitNothingFields = True }
+  parseJSON (Object obj) =
+    OpsWorksStackChefConfiguration <$>
+      obj .:? "BerkshelfVersion" <*>
+      obj .:? "ManageBerkshelf"
+  parseJSON _ = mempty
 
 -- | Constructor for 'OpsWorksStackChefConfiguration' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/OpsWorksStackElasticIp.hs b/library-gen/Stratosphere/ResourceProperties/OpsWorksStackElasticIp.hs
--- a/library-gen/Stratosphere/ResourceProperties/OpsWorksStackElasticIp.hs
+++ b/library-gen/Stratosphere/ResourceProperties/OpsWorksStackElasticIp.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-stack-elasticip.html
 
 module Stratosphere.ResourceProperties.OpsWorksStackElasticIp where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   OpsWorksStackElasticIp
   { _opsWorksStackElasticIpIp :: Val Text
   , _opsWorksStackElasticIpName :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON OpsWorksStackElasticIp where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 23, omitNothingFields = True }
+  toJSON OpsWorksStackElasticIp{..} =
+    object $
+    catMaybes
+    [ Just ("Ip" .= _opsWorksStackElasticIpIp)
+    , ("Name" .=) <$> _opsWorksStackElasticIpName
+    ]
 
 instance FromJSON OpsWorksStackElasticIp where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 23, omitNothingFields = True }
+  parseJSON (Object obj) =
+    OpsWorksStackElasticIp <$>
+      obj .: "Ip" <*>
+      obj .:? "Name"
+  parseJSON _ = mempty
 
 -- | Constructor for 'OpsWorksStackElasticIp' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/OpsWorksStackRdsDbInstance.hs b/library-gen/Stratosphere/ResourceProperties/OpsWorksStackRdsDbInstance.hs
--- a/library-gen/Stratosphere/ResourceProperties/OpsWorksStackRdsDbInstance.hs
+++ b/library-gen/Stratosphere/ResourceProperties/OpsWorksStackRdsDbInstance.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-stack-rdsdbinstance.html
 
 module Stratosphere.ResourceProperties.OpsWorksStackRdsDbInstance where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -21,13 +21,24 @@
   { _opsWorksStackRdsDbInstanceDbPassword :: Val Text
   , _opsWorksStackRdsDbInstanceDbUser :: Val Text
   , _opsWorksStackRdsDbInstanceRdsDbInstanceArn :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON OpsWorksStackRdsDbInstance where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
+  toJSON OpsWorksStackRdsDbInstance{..} =
+    object $
+    catMaybes
+    [ Just ("DbPassword" .= _opsWorksStackRdsDbInstanceDbPassword)
+    , Just ("DbUser" .= _opsWorksStackRdsDbInstanceDbUser)
+    , Just ("RdsDbInstanceArn" .= _opsWorksStackRdsDbInstanceRdsDbInstanceArn)
+    ]
 
 instance FromJSON OpsWorksStackRdsDbInstance where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
+  parseJSON (Object obj) =
+    OpsWorksStackRdsDbInstance <$>
+      obj .: "DbPassword" <*>
+      obj .: "DbUser" <*>
+      obj .: "RdsDbInstanceArn"
+  parseJSON _ = mempty
 
 -- | Constructor for 'OpsWorksStackRdsDbInstance' containing required fields
 -- | as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/OpsWorksStackSource.hs b/library-gen/Stratosphere/ResourceProperties/OpsWorksStackSource.hs
--- a/library-gen/Stratosphere/ResourceProperties/OpsWorksStackSource.hs
+++ b/library-gen/Stratosphere/ResourceProperties/OpsWorksStackSource.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-stack-source.html
 
 module Stratosphere.ResourceProperties.OpsWorksStackSource where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -24,13 +24,30 @@
   , _opsWorksStackSourceType :: Maybe (Val Text)
   , _opsWorksStackSourceUrl :: Maybe (Val Text)
   , _opsWorksStackSourceUsername :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON OpsWorksStackSource where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 20, omitNothingFields = True }
+  toJSON OpsWorksStackSource{..} =
+    object $
+    catMaybes
+    [ ("Password" .=) <$> _opsWorksStackSourcePassword
+    , ("Revision" .=) <$> _opsWorksStackSourceRevision
+    , ("SshKey" .=) <$> _opsWorksStackSourceSshKey
+    , ("Type" .=) <$> _opsWorksStackSourceType
+    , ("Url" .=) <$> _opsWorksStackSourceUrl
+    , ("Username" .=) <$> _opsWorksStackSourceUsername
+    ]
 
 instance FromJSON OpsWorksStackSource where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 20, omitNothingFields = True }
+  parseJSON (Object obj) =
+    OpsWorksStackSource <$>
+      obj .:? "Password" <*>
+      obj .:? "Revision" <*>
+      obj .:? "SshKey" <*>
+      obj .:? "Type" <*>
+      obj .:? "Url" <*>
+      obj .:? "Username"
+  parseJSON _ = mempty
 
 -- | Constructor for 'OpsWorksStackSource' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/OpsWorksStackStackConfigurationManager.hs b/library-gen/Stratosphere/ResourceProperties/OpsWorksStackStackConfigurationManager.hs
--- a/library-gen/Stratosphere/ResourceProperties/OpsWorksStackStackConfigurationManager.hs
+++ b/library-gen/Stratosphere/ResourceProperties/OpsWorksStackStackConfigurationManager.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-stack-stackconfigmanager.html
 
 module Stratosphere.ResourceProperties.OpsWorksStackStackConfigurationManager where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -21,13 +21,22 @@
   OpsWorksStackStackConfigurationManager
   { _opsWorksStackStackConfigurationManagerName :: Maybe (Val Text)
   , _opsWorksStackStackConfigurationManagerVersion :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON OpsWorksStackStackConfigurationManager where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 39, omitNothingFields = True }
+  toJSON OpsWorksStackStackConfigurationManager{..} =
+    object $
+    catMaybes
+    [ ("Name" .=) <$> _opsWorksStackStackConfigurationManagerName
+    , ("Version" .=) <$> _opsWorksStackStackConfigurationManagerVersion
+    ]
 
 instance FromJSON OpsWorksStackStackConfigurationManager where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 39, omitNothingFields = True }
+  parseJSON (Object obj) =
+    OpsWorksStackStackConfigurationManager <$>
+      obj .:? "Name" <*>
+      obj .:? "Version"
+  parseJSON _ = mempty
 
 -- | Constructor for 'OpsWorksStackStackConfigurationManager' containing
 -- | required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/RDSDBSecurityGroupIngressProperty.hs b/library-gen/Stratosphere/ResourceProperties/RDSDBSecurityGroupIngressProperty.hs
--- a/library-gen/Stratosphere/ResourceProperties/RDSDBSecurityGroupIngressProperty.hs
+++ b/library-gen/Stratosphere/ResourceProperties/RDSDBSecurityGroupIngressProperty.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-security-group-rule.html
 
 module Stratosphere.ResourceProperties.RDSDBSecurityGroupIngressProperty where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -22,13 +22,26 @@
   , _rDSDBSecurityGroupIngressPropertyEC2SecurityGroupId :: Maybe (Val Text)
   , _rDSDBSecurityGroupIngressPropertyEC2SecurityGroupName :: Maybe (Val Text)
   , _rDSDBSecurityGroupIngressPropertyEC2SecurityGroupOwnerId :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON RDSDBSecurityGroupIngressProperty where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 34, omitNothingFields = True }
+  toJSON RDSDBSecurityGroupIngressProperty{..} =
+    object $
+    catMaybes
+    [ ("CDIRIP" .=) <$> _rDSDBSecurityGroupIngressPropertyCDIRIP
+    , ("EC2SecurityGroupId" .=) <$> _rDSDBSecurityGroupIngressPropertyEC2SecurityGroupId
+    , ("EC2SecurityGroupName" .=) <$> _rDSDBSecurityGroupIngressPropertyEC2SecurityGroupName
+    , ("EC2SecurityGroupOwnerId" .=) <$> _rDSDBSecurityGroupIngressPropertyEC2SecurityGroupOwnerId
+    ]
 
 instance FromJSON RDSDBSecurityGroupIngressProperty where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 34, omitNothingFields = True }
+  parseJSON (Object obj) =
+    RDSDBSecurityGroupIngressProperty <$>
+      obj .:? "CDIRIP" <*>
+      obj .:? "EC2SecurityGroupId" <*>
+      obj .:? "EC2SecurityGroupName" <*>
+      obj .:? "EC2SecurityGroupOwnerId"
+  parseJSON _ = mempty
 
 -- | Constructor for 'RDSDBSecurityGroupIngressProperty' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/RDSOptionGroupOptionConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/RDSOptionGroupOptionConfiguration.hs
--- a/library-gen/Stratosphere/ResourceProperties/RDSOptionGroupOptionConfiguration.hs
+++ b/library-gen/Stratosphere/ResourceProperties/RDSOptionGroupOptionConfiguration.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-optiongroup-optionconfigurations.html
 
 module Stratosphere.ResourceProperties.RDSOptionGroupOptionConfiguration where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.RDSOptionGroupOptionSetting
@@ -23,13 +23,28 @@
   , _rDSOptionGroupOptionConfigurationOptionSettings :: Maybe RDSOptionGroupOptionSetting
   , _rDSOptionGroupOptionConfigurationPort :: Maybe (Val Integer')
   , _rDSOptionGroupOptionConfigurationVpcSecurityGroupMemberships :: Maybe [Val Text]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON RDSOptionGroupOptionConfiguration where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 34, omitNothingFields = True }
+  toJSON RDSOptionGroupOptionConfiguration{..} =
+    object $
+    catMaybes
+    [ ("DBSecurityGroupMemberships" .=) <$> _rDSOptionGroupOptionConfigurationDBSecurityGroupMemberships
+    , Just ("OptionName" .= _rDSOptionGroupOptionConfigurationOptionName)
+    , ("OptionSettings" .=) <$> _rDSOptionGroupOptionConfigurationOptionSettings
+    , ("Port" .=) <$> _rDSOptionGroupOptionConfigurationPort
+    , ("VpcSecurityGroupMemberships" .=) <$> _rDSOptionGroupOptionConfigurationVpcSecurityGroupMemberships
+    ]
 
 instance FromJSON RDSOptionGroupOptionConfiguration where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 34, omitNothingFields = True }
+  parseJSON (Object obj) =
+    RDSOptionGroupOptionConfiguration <$>
+      obj .:? "DBSecurityGroupMemberships" <*>
+      obj .: "OptionName" <*>
+      obj .:? "OptionSettings" <*>
+      obj .:? "Port" <*>
+      obj .:? "VpcSecurityGroupMemberships"
+  parseJSON _ = mempty
 
 -- | Constructor for 'RDSOptionGroupOptionConfiguration' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/RDSOptionGroupOptionSetting.hs b/library-gen/Stratosphere/ResourceProperties/RDSOptionGroupOptionSetting.hs
--- a/library-gen/Stratosphere/ResourceProperties/RDSOptionGroupOptionSetting.hs
+++ b/library-gen/Stratosphere/ResourceProperties/RDSOptionGroupOptionSetting.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-optiongroup-optionconfigurations-optionsettings.html
 
 module Stratosphere.ResourceProperties.RDSOptionGroupOptionSetting where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   RDSOptionGroupOptionSetting
   { _rDSOptionGroupOptionSettingName :: Maybe (Val Text)
   , _rDSOptionGroupOptionSettingValue :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON RDSOptionGroupOptionSetting where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+  toJSON RDSOptionGroupOptionSetting{..} =
+    object $
+    catMaybes
+    [ ("Name" .=) <$> _rDSOptionGroupOptionSettingName
+    , ("Value" .=) <$> _rDSOptionGroupOptionSettingValue
+    ]
 
 instance FromJSON RDSOptionGroupOptionSetting where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+  parseJSON (Object obj) =
+    RDSOptionGroupOptionSetting <$>
+      obj .:? "Name" <*>
+      obj .:? "Value"
+  parseJSON _ = mempty
 
 -- | Constructor for 'RDSOptionGroupOptionSetting' containing required fields
 -- | as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/RedshiftClusterParameterGroupParameter.hs b/library-gen/Stratosphere/ResourceProperties/RedshiftClusterParameterGroupParameter.hs
--- a/library-gen/Stratosphere/ResourceProperties/RedshiftClusterParameterGroupParameter.hs
+++ b/library-gen/Stratosphere/ResourceProperties/RedshiftClusterParameterGroupParameter.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-property-redshift-clusterparametergroup-parameter.html
 
 module Stratosphere.ResourceProperties.RedshiftClusterParameterGroupParameter where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -21,13 +21,22 @@
   RedshiftClusterParameterGroupParameter
   { _redshiftClusterParameterGroupParameterParameterName :: Val Text
   , _redshiftClusterParameterGroupParameterParameterValue :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON RedshiftClusterParameterGroupParameter where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 39, omitNothingFields = True }
+  toJSON RedshiftClusterParameterGroupParameter{..} =
+    object $
+    catMaybes
+    [ Just ("ParameterName" .= _redshiftClusterParameterGroupParameterParameterName)
+    , Just ("ParameterValue" .= _redshiftClusterParameterGroupParameterParameterValue)
+    ]
 
 instance FromJSON RedshiftClusterParameterGroupParameter where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 39, omitNothingFields = True }
+  parseJSON (Object obj) =
+    RedshiftClusterParameterGroupParameter <$>
+      obj .: "ParameterName" <*>
+      obj .: "ParameterValue"
+  parseJSON _ = mempty
 
 -- | Constructor for 'RedshiftClusterParameterGroupParameter' containing
 -- | required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/Route53HealthCheckHealthCheckConfig.hs b/library-gen/Stratosphere/ResourceProperties/Route53HealthCheckHealthCheckConfig.hs
--- a/library-gen/Stratosphere/ResourceProperties/Route53HealthCheckHealthCheckConfig.hs
+++ b/library-gen/Stratosphere/ResourceProperties/Route53HealthCheckHealthCheckConfig.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-healthcheck-healthcheckconfig.html
 
 module Stratosphere.ResourceProperties.Route53HealthCheckHealthCheckConfig where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -26,13 +26,34 @@
   , _route53HealthCheckHealthCheckConfigResourcePath :: Maybe (Val Text)
   , _route53HealthCheckHealthCheckConfigSearchString :: Maybe (Val Text)
   , _route53HealthCheckHealthCheckConfigType :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON Route53HealthCheckHealthCheckConfig where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 36, omitNothingFields = True }
+  toJSON Route53HealthCheckHealthCheckConfig{..} =
+    object $
+    catMaybes
+    [ ("FailureThreshold" .=) <$> _route53HealthCheckHealthCheckConfigFailureThreshold
+    , ("FullyQualifiedDomainName" .=) <$> _route53HealthCheckHealthCheckConfigFullyQualifiedDomainName
+    , ("IPAddress" .=) <$> _route53HealthCheckHealthCheckConfigIPAddress
+    , ("Port" .=) <$> _route53HealthCheckHealthCheckConfigPort
+    , ("RequestInterval" .=) <$> _route53HealthCheckHealthCheckConfigRequestInterval
+    , ("ResourcePath" .=) <$> _route53HealthCheckHealthCheckConfigResourcePath
+    , ("SearchString" .=) <$> _route53HealthCheckHealthCheckConfigSearchString
+    , Just ("Type" .= _route53HealthCheckHealthCheckConfigType)
+    ]
 
 instance FromJSON Route53HealthCheckHealthCheckConfig where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 36, omitNothingFields = True }
+  parseJSON (Object obj) =
+    Route53HealthCheckHealthCheckConfig <$>
+      obj .:? "FailureThreshold" <*>
+      obj .:? "FullyQualifiedDomainName" <*>
+      obj .:? "IPAddress" <*>
+      obj .:? "Port" <*>
+      obj .:? "RequestInterval" <*>
+      obj .:? "ResourcePath" <*>
+      obj .:? "SearchString" <*>
+      obj .: "Type"
+  parseJSON _ = mempty
 
 -- | Constructor for 'Route53HealthCheckHealthCheckConfig' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/Route53HealthCheckHealthCheckTag.hs b/library-gen/Stratosphere/ResourceProperties/Route53HealthCheckHealthCheckTag.hs
--- a/library-gen/Stratosphere/ResourceProperties/Route53HealthCheckHealthCheckTag.hs
+++ b/library-gen/Stratosphere/ResourceProperties/Route53HealthCheckHealthCheckTag.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-healthcheck-healthchecktags.html
 
 module Stratosphere.ResourceProperties.Route53HealthCheckHealthCheckTag where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   Route53HealthCheckHealthCheckTag
   { _route53HealthCheckHealthCheckTagKey :: Val Text
   , _route53HealthCheckHealthCheckTagValue :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON Route53HealthCheckHealthCheckTag where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 33, omitNothingFields = True }
+  toJSON Route53HealthCheckHealthCheckTag{..} =
+    object $
+    catMaybes
+    [ Just ("Key" .= _route53HealthCheckHealthCheckTagKey)
+    , Just ("Value" .= _route53HealthCheckHealthCheckTagValue)
+    ]
 
 instance FromJSON Route53HealthCheckHealthCheckTag where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 33, omitNothingFields = True }
+  parseJSON (Object obj) =
+    Route53HealthCheckHealthCheckTag <$>
+      obj .: "Key" <*>
+      obj .: "Value"
+  parseJSON _ = mempty
 
 -- | Constructor for 'Route53HealthCheckHealthCheckTag' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/Route53HostedZoneHostedZoneConfig.hs b/library-gen/Stratosphere/ResourceProperties/Route53HostedZoneHostedZoneConfig.hs
--- a/library-gen/Stratosphere/ResourceProperties/Route53HostedZoneHostedZoneConfig.hs
+++ b/library-gen/Stratosphere/ResourceProperties/Route53HostedZoneHostedZoneConfig.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-hostedzone-hostedzoneconfig.html
 
 module Stratosphere.ResourceProperties.Route53HostedZoneHostedZoneConfig where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -19,13 +19,20 @@
 data Route53HostedZoneHostedZoneConfig =
   Route53HostedZoneHostedZoneConfig
   { _route53HostedZoneHostedZoneConfigComment :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON Route53HostedZoneHostedZoneConfig where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 34, omitNothingFields = True }
+  toJSON Route53HostedZoneHostedZoneConfig{..} =
+    object $
+    catMaybes
+    [ ("Comment" .=) <$> _route53HostedZoneHostedZoneConfigComment
+    ]
 
 instance FromJSON Route53HostedZoneHostedZoneConfig where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 34, omitNothingFields = True }
+  parseJSON (Object obj) =
+    Route53HostedZoneHostedZoneConfig <$>
+      obj .:? "Comment"
+  parseJSON _ = mempty
 
 -- | Constructor for 'Route53HostedZoneHostedZoneConfig' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/Route53HostedZoneHostedZoneTag.hs b/library-gen/Stratosphere/ResourceProperties/Route53HostedZoneHostedZoneTag.hs
--- a/library-gen/Stratosphere/ResourceProperties/Route53HostedZoneHostedZoneTag.hs
+++ b/library-gen/Stratosphere/ResourceProperties/Route53HostedZoneHostedZoneTag.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-hostedzone-hostedzonetags.html
 
 module Stratosphere.ResourceProperties.Route53HostedZoneHostedZoneTag where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   Route53HostedZoneHostedZoneTag
   { _route53HostedZoneHostedZoneTagKey :: Val Text
   , _route53HostedZoneHostedZoneTagValue :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON Route53HostedZoneHostedZoneTag where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 31, omitNothingFields = True }
+  toJSON Route53HostedZoneHostedZoneTag{..} =
+    object $
+    catMaybes
+    [ Just ("Key" .= _route53HostedZoneHostedZoneTagKey)
+    , Just ("Value" .= _route53HostedZoneHostedZoneTagValue)
+    ]
 
 instance FromJSON Route53HostedZoneHostedZoneTag where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 31, omitNothingFields = True }
+  parseJSON (Object obj) =
+    Route53HostedZoneHostedZoneTag <$>
+      obj .: "Key" <*>
+      obj .: "Value"
+  parseJSON _ = mempty
 
 -- | Constructor for 'Route53HostedZoneHostedZoneTag' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/Route53HostedZoneVPC.hs b/library-gen/Stratosphere/ResourceProperties/Route53HostedZoneVPC.hs
--- a/library-gen/Stratosphere/ResourceProperties/Route53HostedZoneVPC.hs
+++ b/library-gen/Stratosphere/ResourceProperties/Route53HostedZoneVPC.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53-hostedzone-hostedzonevpcs.html
 
 module Stratosphere.ResourceProperties.Route53HostedZoneVPC where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   Route53HostedZoneVPC
   { _route53HostedZoneVPCVPCId :: Val Text
   , _route53HostedZoneVPCVPCRegion :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON Route53HostedZoneVPC where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 21, omitNothingFields = True }
+  toJSON Route53HostedZoneVPC{..} =
+    object $
+    catMaybes
+    [ Just ("VPCId" .= _route53HostedZoneVPCVPCId)
+    , Just ("VPCRegion" .= _route53HostedZoneVPCVPCRegion)
+    ]
 
 instance FromJSON Route53HostedZoneVPC where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 21, omitNothingFields = True }
+  parseJSON (Object obj) =
+    Route53HostedZoneVPC <$>
+      obj .: "VPCId" <*>
+      obj .: "VPCRegion"
+  parseJSON _ = mempty
 
 -- | Constructor for 'Route53HostedZoneVPC' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/Route53RecordSetAliasTarget.hs b/library-gen/Stratosphere/ResourceProperties/Route53RecordSetAliasTarget.hs
--- a/library-gen/Stratosphere/ResourceProperties/Route53RecordSetAliasTarget.hs
+++ b/library-gen/Stratosphere/ResourceProperties/Route53RecordSetAliasTarget.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-aliastarget.html
 
 module Stratosphere.ResourceProperties.Route53RecordSetAliasTarget where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -21,13 +21,24 @@
   { _route53RecordSetAliasTargetDNSName :: Val Text
   , _route53RecordSetAliasTargetEvaluateTargetHealth :: Maybe (Val Bool')
   , _route53RecordSetAliasTargetHostedZoneId :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON Route53RecordSetAliasTarget where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+  toJSON Route53RecordSetAliasTarget{..} =
+    object $
+    catMaybes
+    [ Just ("DNSName" .= _route53RecordSetAliasTargetDNSName)
+    , ("EvaluateTargetHealth" .=) <$> _route53RecordSetAliasTargetEvaluateTargetHealth
+    , Just ("HostedZoneId" .= _route53RecordSetAliasTargetHostedZoneId)
+    ]
 
 instance FromJSON Route53RecordSetAliasTarget where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+  parseJSON (Object obj) =
+    Route53RecordSetAliasTarget <$>
+      obj .: "DNSName" <*>
+      obj .:? "EvaluateTargetHealth" <*>
+      obj .: "HostedZoneId"
+  parseJSON _ = mempty
 
 -- | Constructor for 'Route53RecordSetAliasTarget' containing required fields
 -- | as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/Route53RecordSetGeoLocation.hs b/library-gen/Stratosphere/ResourceProperties/Route53RecordSetGeoLocation.hs
--- a/library-gen/Stratosphere/ResourceProperties/Route53RecordSetGeoLocation.hs
+++ b/library-gen/Stratosphere/ResourceProperties/Route53RecordSetGeoLocation.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-recordset-geolocation.html
 
 module Stratosphere.ResourceProperties.Route53RecordSetGeoLocation where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -21,13 +21,24 @@
   { _route53RecordSetGeoLocationContinentCode :: Maybe (Val Text)
   , _route53RecordSetGeoLocationCountryCode :: Maybe (Val Text)
   , _route53RecordSetGeoLocationSubdivisionCode :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON Route53RecordSetGeoLocation where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+  toJSON Route53RecordSetGeoLocation{..} =
+    object $
+    catMaybes
+    [ ("ContinentCode" .=) <$> _route53RecordSetGeoLocationContinentCode
+    , ("CountryCode" .=) <$> _route53RecordSetGeoLocationCountryCode
+    , ("SubdivisionCode" .=) <$> _route53RecordSetGeoLocationSubdivisionCode
+    ]
 
 instance FromJSON Route53RecordSetGeoLocation where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+  parseJSON (Object obj) =
+    Route53RecordSetGeoLocation <$>
+      obj .:? "ContinentCode" <*>
+      obj .:? "CountryCode" <*>
+      obj .:? "SubdivisionCode"
+  parseJSON _ = mempty
 
 -- | Constructor for 'Route53RecordSetGeoLocation' containing required fields
 -- | as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/Route53RecordSetGroupAliasTarget.hs b/library-gen/Stratosphere/ResourceProperties/Route53RecordSetGroupAliasTarget.hs
--- a/library-gen/Stratosphere/ResourceProperties/Route53RecordSetGroupAliasTarget.hs
+++ b/library-gen/Stratosphere/ResourceProperties/Route53RecordSetGroupAliasTarget.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-aliastarget.html
 
 module Stratosphere.ResourceProperties.Route53RecordSetGroupAliasTarget where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -21,13 +21,24 @@
   { _route53RecordSetGroupAliasTargetDNSName :: Val Text
   , _route53RecordSetGroupAliasTargetEvaluateTargetHealth :: Maybe (Val Bool')
   , _route53RecordSetGroupAliasTargetHostedZoneId :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON Route53RecordSetGroupAliasTarget where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 33, omitNothingFields = True }
+  toJSON Route53RecordSetGroupAliasTarget{..} =
+    object $
+    catMaybes
+    [ Just ("DNSName" .= _route53RecordSetGroupAliasTargetDNSName)
+    , ("EvaluateTargetHealth" .=) <$> _route53RecordSetGroupAliasTargetEvaluateTargetHealth
+    , Just ("HostedZoneId" .= _route53RecordSetGroupAliasTargetHostedZoneId)
+    ]
 
 instance FromJSON Route53RecordSetGroupAliasTarget where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 33, omitNothingFields = True }
+  parseJSON (Object obj) =
+    Route53RecordSetGroupAliasTarget <$>
+      obj .: "DNSName" <*>
+      obj .:? "EvaluateTargetHealth" <*>
+      obj .: "HostedZoneId"
+  parseJSON _ = mempty
 
 -- | Constructor for 'Route53RecordSetGroupAliasTarget' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/Route53RecordSetGroupGeoLocation.hs b/library-gen/Stratosphere/ResourceProperties/Route53RecordSetGroupGeoLocation.hs
--- a/library-gen/Stratosphere/ResourceProperties/Route53RecordSetGroupGeoLocation.hs
+++ b/library-gen/Stratosphere/ResourceProperties/Route53RecordSetGroupGeoLocation.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-recordset-geolocation.html
 
 module Stratosphere.ResourceProperties.Route53RecordSetGroupGeoLocation where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -21,13 +21,24 @@
   { _route53RecordSetGroupGeoLocationContinentCode :: Maybe (Val Text)
   , _route53RecordSetGroupGeoLocationCountryCode :: Maybe (Val Text)
   , _route53RecordSetGroupGeoLocationSubdivisionCode :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON Route53RecordSetGroupGeoLocation where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 33, omitNothingFields = True }
+  toJSON Route53RecordSetGroupGeoLocation{..} =
+    object $
+    catMaybes
+    [ ("ContinentCode" .=) <$> _route53RecordSetGroupGeoLocationContinentCode
+    , ("CountryCode" .=) <$> _route53RecordSetGroupGeoLocationCountryCode
+    , ("SubdivisionCode" .=) <$> _route53RecordSetGroupGeoLocationSubdivisionCode
+    ]
 
 instance FromJSON Route53RecordSetGroupGeoLocation where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 33, omitNothingFields = True }
+  parseJSON (Object obj) =
+    Route53RecordSetGroupGeoLocation <$>
+      obj .:? "ContinentCode" <*>
+      obj .:? "CountryCode" <*>
+      obj .:? "SubdivisionCode"
+  parseJSON _ = mempty
 
 -- | Constructor for 'Route53RecordSetGroupGeoLocation' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/Route53RecordSetGroupRecordSet.hs b/library-gen/Stratosphere/ResourceProperties/Route53RecordSetGroupRecordSet.hs
--- a/library-gen/Stratosphere/ResourceProperties/Route53RecordSetGroupRecordSet.hs
+++ b/library-gen/Stratosphere/ResourceProperties/Route53RecordSetGroupRecordSet.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-recordset.html
 
 module Stratosphere.ResourceProperties.Route53RecordSetGroupRecordSet where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.Route53RecordSetGroupAliasTarget
@@ -33,13 +33,46 @@
   , _route53RecordSetGroupRecordSetTTL :: Maybe (Val Text)
   , _route53RecordSetGroupRecordSetType :: Val Text
   , _route53RecordSetGroupRecordSetWeight :: Maybe (Val Integer')
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON Route53RecordSetGroupRecordSet where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 31, omitNothingFields = True }
+  toJSON Route53RecordSetGroupRecordSet{..} =
+    object $
+    catMaybes
+    [ ("AliasTarget" .=) <$> _route53RecordSetGroupRecordSetAliasTarget
+    , ("Comment" .=) <$> _route53RecordSetGroupRecordSetComment
+    , ("Failover" .=) <$> _route53RecordSetGroupRecordSetFailover
+    , ("GeoLocation" .=) <$> _route53RecordSetGroupRecordSetGeoLocation
+    , ("HealthCheckId" .=) <$> _route53RecordSetGroupRecordSetHealthCheckId
+    , ("HostedZoneId" .=) <$> _route53RecordSetGroupRecordSetHostedZoneId
+    , ("HostedZoneName" .=) <$> _route53RecordSetGroupRecordSetHostedZoneName
+    , Just ("Name" .= _route53RecordSetGroupRecordSetName)
+    , ("Region" .=) <$> _route53RecordSetGroupRecordSetRegion
+    , ("ResourceRecords" .=) <$> _route53RecordSetGroupRecordSetResourceRecords
+    , ("SetIdentifier" .=) <$> _route53RecordSetGroupRecordSetSetIdentifier
+    , ("TTL" .=) <$> _route53RecordSetGroupRecordSetTTL
+    , Just ("Type" .= _route53RecordSetGroupRecordSetType)
+    , ("Weight" .=) <$> _route53RecordSetGroupRecordSetWeight
+    ]
 
 instance FromJSON Route53RecordSetGroupRecordSet where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 31, omitNothingFields = True }
+  parseJSON (Object obj) =
+    Route53RecordSetGroupRecordSet <$>
+      obj .:? "AliasTarget" <*>
+      obj .:? "Comment" <*>
+      obj .:? "Failover" <*>
+      obj .:? "GeoLocation" <*>
+      obj .:? "HealthCheckId" <*>
+      obj .:? "HostedZoneId" <*>
+      obj .:? "HostedZoneName" <*>
+      obj .: "Name" <*>
+      obj .:? "Region" <*>
+      obj .:? "ResourceRecords" <*>
+      obj .:? "SetIdentifier" <*>
+      obj .:? "TTL" <*>
+      obj .: "Type" <*>
+      obj .:? "Weight"
+  parseJSON _ = mempty
 
 -- | Constructor for 'Route53RecordSetGroupRecordSet' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/S3BucketCorsConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/S3BucketCorsConfiguration.hs
--- a/library-gen/Stratosphere/ResourceProperties/S3BucketCorsConfiguration.hs
+++ b/library-gen/Stratosphere/ResourceProperties/S3BucketCorsConfiguration.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-cors.html
 
 module Stratosphere.ResourceProperties.S3BucketCorsConfiguration where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.S3BucketCorsRule
@@ -19,13 +19,20 @@
 data S3BucketCorsConfiguration =
   S3BucketCorsConfiguration
   { _s3BucketCorsConfigurationCorsRules :: [S3BucketCorsRule]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON S3BucketCorsConfiguration where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 26, omitNothingFields = True }
+  toJSON S3BucketCorsConfiguration{..} =
+    object $
+    catMaybes
+    [ Just ("CorsRules" .= _s3BucketCorsConfigurationCorsRules)
+    ]
 
 instance FromJSON S3BucketCorsConfiguration where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 26, omitNothingFields = True }
+  parseJSON (Object obj) =
+    S3BucketCorsConfiguration <$>
+      obj .: "CorsRules"
+  parseJSON _ = mempty
 
 -- | Constructor for 'S3BucketCorsConfiguration' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/S3BucketCorsRule.hs b/library-gen/Stratosphere/ResourceProperties/S3BucketCorsRule.hs
--- a/library-gen/Stratosphere/ResourceProperties/S3BucketCorsRule.hs
+++ b/library-gen/Stratosphere/ResourceProperties/S3BucketCorsRule.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-cors-corsrule.html
 
 module Stratosphere.ResourceProperties.S3BucketCorsRule where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -24,13 +24,30 @@
   , _s3BucketCorsRuleExposedHeaders :: Maybe [Val Text]
   , _s3BucketCorsRuleId :: Maybe (Val Text)
   , _s3BucketCorsRuleMaxAge :: Maybe (Val Integer')
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON S3BucketCorsRule where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
+  toJSON S3BucketCorsRule{..} =
+    object $
+    catMaybes
+    [ ("AllowedHeaders" .=) <$> _s3BucketCorsRuleAllowedHeaders
+    , Just ("AllowedMethods" .= _s3BucketCorsRuleAllowedMethods)
+    , Just ("AllowedOrigins" .= _s3BucketCorsRuleAllowedOrigins)
+    , ("ExposedHeaders" .=) <$> _s3BucketCorsRuleExposedHeaders
+    , ("Id" .=) <$> _s3BucketCorsRuleId
+    , ("MaxAge" .=) <$> _s3BucketCorsRuleMaxAge
+    ]
 
 instance FromJSON S3BucketCorsRule where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
+  parseJSON (Object obj) =
+    S3BucketCorsRule <$>
+      obj .:? "AllowedHeaders" <*>
+      obj .: "AllowedMethods" <*>
+      obj .: "AllowedOrigins" <*>
+      obj .:? "ExposedHeaders" <*>
+      obj .:? "Id" <*>
+      obj .:? "MaxAge"
+  parseJSON _ = mempty
 
 -- | Constructor for 'S3BucketCorsRule' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/S3BucketFilterRule.hs b/library-gen/Stratosphere/ResourceProperties/S3BucketFilterRule.hs
--- a/library-gen/Stratosphere/ResourceProperties/S3BucketFilterRule.hs
+++ b/library-gen/Stratosphere/ResourceProperties/S3BucketFilterRule.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfiguration-config-filter-s3key-rules.html
 
 module Stratosphere.ResourceProperties.S3BucketFilterRule where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   S3BucketFilterRule
   { _s3BucketFilterRuleName :: Val Text
   , _s3BucketFilterRuleValue :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON S3BucketFilterRule where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 19, omitNothingFields = True }
+  toJSON S3BucketFilterRule{..} =
+    object $
+    catMaybes
+    [ Just ("Name" .= _s3BucketFilterRuleName)
+    , Just ("Value" .= _s3BucketFilterRuleValue)
+    ]
 
 instance FromJSON S3BucketFilterRule where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 19, omitNothingFields = True }
+  parseJSON (Object obj) =
+    S3BucketFilterRule <$>
+      obj .: "Name" <*>
+      obj .: "Value"
+  parseJSON _ = mempty
 
 -- | Constructor for 'S3BucketFilterRule' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/S3BucketLambdaConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/S3BucketLambdaConfiguration.hs
--- a/library-gen/Stratosphere/ResourceProperties/S3BucketLambdaConfiguration.hs
+++ b/library-gen/Stratosphere/ResourceProperties/S3BucketLambdaConfiguration.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfig-lambdaconfig.html
 
 module Stratosphere.ResourceProperties.S3BucketLambdaConfiguration where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.S3BucketNotificationFilter
@@ -21,13 +21,24 @@
   { _s3BucketLambdaConfigurationEvent :: Val Text
   , _s3BucketLambdaConfigurationFilter :: Maybe S3BucketNotificationFilter
   , _s3BucketLambdaConfigurationFunction :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON S3BucketLambdaConfiguration where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+  toJSON S3BucketLambdaConfiguration{..} =
+    object $
+    catMaybes
+    [ Just ("Event" .= _s3BucketLambdaConfigurationEvent)
+    , ("Filter" .=) <$> _s3BucketLambdaConfigurationFilter
+    , Just ("Function" .= _s3BucketLambdaConfigurationFunction)
+    ]
 
 instance FromJSON S3BucketLambdaConfiguration where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+  parseJSON (Object obj) =
+    S3BucketLambdaConfiguration <$>
+      obj .: "Event" <*>
+      obj .:? "Filter" <*>
+      obj .: "Function"
+  parseJSON _ = mempty
 
 -- | Constructor for 'S3BucketLambdaConfiguration' containing required fields
 -- | as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/S3BucketLifecycleConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/S3BucketLifecycleConfiguration.hs
--- a/library-gen/Stratosphere/ResourceProperties/S3BucketLifecycleConfiguration.hs
+++ b/library-gen/Stratosphere/ResourceProperties/S3BucketLifecycleConfiguration.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-lifecycleconfig.html
 
 module Stratosphere.ResourceProperties.S3BucketLifecycleConfiguration where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.S3BucketRule
@@ -19,13 +19,20 @@
 data S3BucketLifecycleConfiguration =
   S3BucketLifecycleConfiguration
   { _s3BucketLifecycleConfigurationRules :: [S3BucketRule]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON S3BucketLifecycleConfiguration where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 31, omitNothingFields = True }
+  toJSON S3BucketLifecycleConfiguration{..} =
+    object $
+    catMaybes
+    [ Just ("Rules" .= _s3BucketLifecycleConfigurationRules)
+    ]
 
 instance FromJSON S3BucketLifecycleConfiguration where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 31, omitNothingFields = True }
+  parseJSON (Object obj) =
+    S3BucketLifecycleConfiguration <$>
+      obj .: "Rules"
+  parseJSON _ = mempty
 
 -- | Constructor for 'S3BucketLifecycleConfiguration' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/S3BucketLoggingConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/S3BucketLoggingConfiguration.hs
--- a/library-gen/Stratosphere/ResourceProperties/S3BucketLoggingConfiguration.hs
+++ b/library-gen/Stratosphere/ResourceProperties/S3BucketLoggingConfiguration.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-loggingconfig.html
 
 module Stratosphere.ResourceProperties.S3BucketLoggingConfiguration where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   S3BucketLoggingConfiguration
   { _s3BucketLoggingConfigurationDestinationBucketName :: Maybe (Val Text)
   , _s3BucketLoggingConfigurationLogFilePrefix :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON S3BucketLoggingConfiguration where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 29, omitNothingFields = True }
+  toJSON S3BucketLoggingConfiguration{..} =
+    object $
+    catMaybes
+    [ ("DestinationBucketName" .=) <$> _s3BucketLoggingConfigurationDestinationBucketName
+    , ("LogFilePrefix" .=) <$> _s3BucketLoggingConfigurationLogFilePrefix
+    ]
 
 instance FromJSON S3BucketLoggingConfiguration where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 29, omitNothingFields = True }
+  parseJSON (Object obj) =
+    S3BucketLoggingConfiguration <$>
+      obj .:? "DestinationBucketName" <*>
+      obj .:? "LogFilePrefix"
+  parseJSON _ = mempty
 
 -- | Constructor for 'S3BucketLoggingConfiguration' containing required fields
 -- | as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/S3BucketNoncurrentVersionTransition.hs b/library-gen/Stratosphere/ResourceProperties/S3BucketNoncurrentVersionTransition.hs
--- a/library-gen/Stratosphere/ResourceProperties/S3BucketNoncurrentVersionTransition.hs
+++ b/library-gen/Stratosphere/ResourceProperties/S3BucketNoncurrentVersionTransition.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-lifecycleconfig-rule-noncurrentversiontransition.html
 
 module Stratosphere.ResourceProperties.S3BucketNoncurrentVersionTransition where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   S3BucketNoncurrentVersionTransition
   { _s3BucketNoncurrentVersionTransitionStorageClass :: Val Text
   , _s3BucketNoncurrentVersionTransitionTransitionInDays :: Val Integer'
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON S3BucketNoncurrentVersionTransition where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 36, omitNothingFields = True }
+  toJSON S3BucketNoncurrentVersionTransition{..} =
+    object $
+    catMaybes
+    [ Just ("StorageClass" .= _s3BucketNoncurrentVersionTransitionStorageClass)
+    , Just ("TransitionInDays" .= _s3BucketNoncurrentVersionTransitionTransitionInDays)
+    ]
 
 instance FromJSON S3BucketNoncurrentVersionTransition where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 36, omitNothingFields = True }
+  parseJSON (Object obj) =
+    S3BucketNoncurrentVersionTransition <$>
+      obj .: "StorageClass" <*>
+      obj .: "TransitionInDays"
+  parseJSON _ = mempty
 
 -- | Constructor for 'S3BucketNoncurrentVersionTransition' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/S3BucketNotificationConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/S3BucketNotificationConfiguration.hs
--- a/library-gen/Stratosphere/ResourceProperties/S3BucketNotificationConfiguration.hs
+++ b/library-gen/Stratosphere/ResourceProperties/S3BucketNotificationConfiguration.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfig.html
 
 module Stratosphere.ResourceProperties.S3BucketNotificationConfiguration where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.S3BucketLambdaConfiguration
@@ -23,13 +23,24 @@
   { _s3BucketNotificationConfigurationLambdaConfigurations :: Maybe [S3BucketLambdaConfiguration]
   , _s3BucketNotificationConfigurationQueueConfigurations :: Maybe [S3BucketQueueConfiguration]
   , _s3BucketNotificationConfigurationTopicConfigurations :: Maybe [S3BucketTopicConfiguration]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON S3BucketNotificationConfiguration where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 34, omitNothingFields = True }
+  toJSON S3BucketNotificationConfiguration{..} =
+    object $
+    catMaybes
+    [ ("LambdaConfigurations" .=) <$> _s3BucketNotificationConfigurationLambdaConfigurations
+    , ("QueueConfigurations" .=) <$> _s3BucketNotificationConfigurationQueueConfigurations
+    , ("TopicConfigurations" .=) <$> _s3BucketNotificationConfigurationTopicConfigurations
+    ]
 
 instance FromJSON S3BucketNotificationConfiguration where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 34, omitNothingFields = True }
+  parseJSON (Object obj) =
+    S3BucketNotificationConfiguration <$>
+      obj .:? "LambdaConfigurations" <*>
+      obj .:? "QueueConfigurations" <*>
+      obj .:? "TopicConfigurations"
+  parseJSON _ = mempty
 
 -- | Constructor for 'S3BucketNotificationConfiguration' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/S3BucketNotificationFilter.hs b/library-gen/Stratosphere/ResourceProperties/S3BucketNotificationFilter.hs
--- a/library-gen/Stratosphere/ResourceProperties/S3BucketNotificationFilter.hs
+++ b/library-gen/Stratosphere/ResourceProperties/S3BucketNotificationFilter.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfiguration-config-filter.html
 
 module Stratosphere.ResourceProperties.S3BucketNotificationFilter where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.S3BucketS3KeyFilter
@@ -19,13 +19,20 @@
 data S3BucketNotificationFilter =
   S3BucketNotificationFilter
   { _s3BucketNotificationFilterS3Key :: S3BucketS3KeyFilter
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON S3BucketNotificationFilter where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
+  toJSON S3BucketNotificationFilter{..} =
+    object $
+    catMaybes
+    [ Just ("S3Key" .= _s3BucketNotificationFilterS3Key)
+    ]
 
 instance FromJSON S3BucketNotificationFilter where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
+  parseJSON (Object obj) =
+    S3BucketNotificationFilter <$>
+      obj .: "S3Key"
+  parseJSON _ = mempty
 
 -- | Constructor for 'S3BucketNotificationFilter' containing required fields
 -- | as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/S3BucketQueueConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/S3BucketQueueConfiguration.hs
--- a/library-gen/Stratosphere/ResourceProperties/S3BucketQueueConfiguration.hs
+++ b/library-gen/Stratosphere/ResourceProperties/S3BucketQueueConfiguration.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfig-queueconfig.html
 
 module Stratosphere.ResourceProperties.S3BucketQueueConfiguration where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.S3BucketNotificationFilter
@@ -21,13 +21,24 @@
   { _s3BucketQueueConfigurationEvent :: Val Text
   , _s3BucketQueueConfigurationFilter :: Maybe S3BucketNotificationFilter
   , _s3BucketQueueConfigurationQueue :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON S3BucketQueueConfiguration where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
+  toJSON S3BucketQueueConfiguration{..} =
+    object $
+    catMaybes
+    [ Just ("Event" .= _s3BucketQueueConfigurationEvent)
+    , ("Filter" .=) <$> _s3BucketQueueConfigurationFilter
+    , Just ("Queue" .= _s3BucketQueueConfigurationQueue)
+    ]
 
 instance FromJSON S3BucketQueueConfiguration where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
+  parseJSON (Object obj) =
+    S3BucketQueueConfiguration <$>
+      obj .: "Event" <*>
+      obj .:? "Filter" <*>
+      obj .: "Queue"
+  parseJSON _ = mempty
 
 -- | Constructor for 'S3BucketQueueConfiguration' containing required fields
 -- | as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/S3BucketRedirectAllRequestsTo.hs b/library-gen/Stratosphere/ResourceProperties/S3BucketRedirectAllRequestsTo.hs
--- a/library-gen/Stratosphere/ResourceProperties/S3BucketRedirectAllRequestsTo.hs
+++ b/library-gen/Stratosphere/ResourceProperties/S3BucketRedirectAllRequestsTo.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-websiteconfiguration-redirectallrequeststo.html
 
 module Stratosphere.ResourceProperties.S3BucketRedirectAllRequestsTo where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   S3BucketRedirectAllRequestsTo
   { _s3BucketRedirectAllRequestsToHostName :: Val Text
   , _s3BucketRedirectAllRequestsToProtocol :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON S3BucketRedirectAllRequestsTo where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
+  toJSON S3BucketRedirectAllRequestsTo{..} =
+    object $
+    catMaybes
+    [ Just ("HostName" .= _s3BucketRedirectAllRequestsToHostName)
+    , ("Protocol" .=) <$> _s3BucketRedirectAllRequestsToProtocol
+    ]
 
 instance FromJSON S3BucketRedirectAllRequestsTo where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
+  parseJSON (Object obj) =
+    S3BucketRedirectAllRequestsTo <$>
+      obj .: "HostName" <*>
+      obj .:? "Protocol"
+  parseJSON _ = mempty
 
 -- | Constructor for 'S3BucketRedirectAllRequestsTo' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/S3BucketRedirectRule.hs b/library-gen/Stratosphere/ResourceProperties/S3BucketRedirectRule.hs
--- a/library-gen/Stratosphere/ResourceProperties/S3BucketRedirectRule.hs
+++ b/library-gen/Stratosphere/ResourceProperties/S3BucketRedirectRule.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-websiteconfiguration-routingrules-redirectrule.html
 
 module Stratosphere.ResourceProperties.S3BucketRedirectRule where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -23,13 +23,28 @@
   , _s3BucketRedirectRuleProtocol :: Maybe (Val Text)
   , _s3BucketRedirectRuleReplaceKeyPrefixWith :: Maybe (Val Text)
   , _s3BucketRedirectRuleReplaceKeyWith :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON S3BucketRedirectRule where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 21, omitNothingFields = True }
+  toJSON S3BucketRedirectRule{..} =
+    object $
+    catMaybes
+    [ ("HostName" .=) <$> _s3BucketRedirectRuleHostName
+    , ("HttpRedirectCode" .=) <$> _s3BucketRedirectRuleHttpRedirectCode
+    , ("Protocol" .=) <$> _s3BucketRedirectRuleProtocol
+    , ("ReplaceKeyPrefixWith" .=) <$> _s3BucketRedirectRuleReplaceKeyPrefixWith
+    , ("ReplaceKeyWith" .=) <$> _s3BucketRedirectRuleReplaceKeyWith
+    ]
 
 instance FromJSON S3BucketRedirectRule where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 21, omitNothingFields = True }
+  parseJSON (Object obj) =
+    S3BucketRedirectRule <$>
+      obj .:? "HostName" <*>
+      obj .:? "HttpRedirectCode" <*>
+      obj .:? "Protocol" <*>
+      obj .:? "ReplaceKeyPrefixWith" <*>
+      obj .:? "ReplaceKeyWith"
+  parseJSON _ = mempty
 
 -- | Constructor for 'S3BucketRedirectRule' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/S3BucketReplicationConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/S3BucketReplicationConfiguration.hs
--- a/library-gen/Stratosphere/ResourceProperties/S3BucketReplicationConfiguration.hs
+++ b/library-gen/Stratosphere/ResourceProperties/S3BucketReplicationConfiguration.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-replicationconfiguration.html
 
 module Stratosphere.ResourceProperties.S3BucketReplicationConfiguration where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.S3BucketReplicationRule
@@ -20,13 +20,22 @@
   S3BucketReplicationConfiguration
   { _s3BucketReplicationConfigurationRole :: Val Text
   , _s3BucketReplicationConfigurationRules :: [S3BucketReplicationRule]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON S3BucketReplicationConfiguration where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 33, omitNothingFields = True }
+  toJSON S3BucketReplicationConfiguration{..} =
+    object $
+    catMaybes
+    [ Just ("Role" .= _s3BucketReplicationConfigurationRole)
+    , Just ("Rules" .= _s3BucketReplicationConfigurationRules)
+    ]
 
 instance FromJSON S3BucketReplicationConfiguration where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 33, omitNothingFields = True }
+  parseJSON (Object obj) =
+    S3BucketReplicationConfiguration <$>
+      obj .: "Role" <*>
+      obj .: "Rules"
+  parseJSON _ = mempty
 
 -- | Constructor for 'S3BucketReplicationConfiguration' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/S3BucketReplicationDestination.hs b/library-gen/Stratosphere/ResourceProperties/S3BucketReplicationDestination.hs
--- a/library-gen/Stratosphere/ResourceProperties/S3BucketReplicationDestination.hs
+++ b/library-gen/Stratosphere/ResourceProperties/S3BucketReplicationDestination.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-replicationconfiguration-rules-destination.html
 
 module Stratosphere.ResourceProperties.S3BucketReplicationDestination where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   S3BucketReplicationDestination
   { _s3BucketReplicationDestinationBucket :: Val Text
   , _s3BucketReplicationDestinationStorageClass :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON S3BucketReplicationDestination where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 31, omitNothingFields = True }
+  toJSON S3BucketReplicationDestination{..} =
+    object $
+    catMaybes
+    [ Just ("Bucket" .= _s3BucketReplicationDestinationBucket)
+    , ("StorageClass" .=) <$> _s3BucketReplicationDestinationStorageClass
+    ]
 
 instance FromJSON S3BucketReplicationDestination where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 31, omitNothingFields = True }
+  parseJSON (Object obj) =
+    S3BucketReplicationDestination <$>
+      obj .: "Bucket" <*>
+      obj .:? "StorageClass"
+  parseJSON _ = mempty
 
 -- | Constructor for 'S3BucketReplicationDestination' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/S3BucketReplicationRule.hs b/library-gen/Stratosphere/ResourceProperties/S3BucketReplicationRule.hs
--- a/library-gen/Stratosphere/ResourceProperties/S3BucketReplicationRule.hs
+++ b/library-gen/Stratosphere/ResourceProperties/S3BucketReplicationRule.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-replicationconfiguration-rules.html
 
 module Stratosphere.ResourceProperties.S3BucketReplicationRule where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.S3BucketReplicationDestination
@@ -22,13 +22,26 @@
   , _s3BucketReplicationRuleId :: Maybe (Val Text)
   , _s3BucketReplicationRulePrefix :: Val Text
   , _s3BucketReplicationRuleStatus :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON S3BucketReplicationRule where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 24, omitNothingFields = True }
+  toJSON S3BucketReplicationRule{..} =
+    object $
+    catMaybes
+    [ Just ("Destination" .= _s3BucketReplicationRuleDestination)
+    , ("Id" .=) <$> _s3BucketReplicationRuleId
+    , Just ("Prefix" .= _s3BucketReplicationRulePrefix)
+    , Just ("Status" .= _s3BucketReplicationRuleStatus)
+    ]
 
 instance FromJSON S3BucketReplicationRule where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 24, omitNothingFields = True }
+  parseJSON (Object obj) =
+    S3BucketReplicationRule <$>
+      obj .: "Destination" <*>
+      obj .:? "Id" <*>
+      obj .: "Prefix" <*>
+      obj .: "Status"
+  parseJSON _ = mempty
 
 -- | Constructor for 'S3BucketReplicationRule' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/S3BucketRoutingRule.hs b/library-gen/Stratosphere/ResourceProperties/S3BucketRoutingRule.hs
--- a/library-gen/Stratosphere/ResourceProperties/S3BucketRoutingRule.hs
+++ b/library-gen/Stratosphere/ResourceProperties/S3BucketRoutingRule.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-websiteconfiguration-routingrules.html
 
 module Stratosphere.ResourceProperties.S3BucketRoutingRule where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.S3BucketRedirectRule
@@ -21,13 +21,22 @@
   S3BucketRoutingRule
   { _s3BucketRoutingRuleRedirectRule :: S3BucketRedirectRule
   , _s3BucketRoutingRuleRoutingRuleCondition :: Maybe S3BucketRoutingRuleCondition
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON S3BucketRoutingRule where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 20, omitNothingFields = True }
+  toJSON S3BucketRoutingRule{..} =
+    object $
+    catMaybes
+    [ Just ("RedirectRule" .= _s3BucketRoutingRuleRedirectRule)
+    , ("RoutingRuleCondition" .=) <$> _s3BucketRoutingRuleRoutingRuleCondition
+    ]
 
 instance FromJSON S3BucketRoutingRule where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 20, omitNothingFields = True }
+  parseJSON (Object obj) =
+    S3BucketRoutingRule <$>
+      obj .: "RedirectRule" <*>
+      obj .:? "RoutingRuleCondition"
+  parseJSON _ = mempty
 
 -- | Constructor for 'S3BucketRoutingRule' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/S3BucketRoutingRuleCondition.hs b/library-gen/Stratosphere/ResourceProperties/S3BucketRoutingRuleCondition.hs
--- a/library-gen/Stratosphere/ResourceProperties/S3BucketRoutingRuleCondition.hs
+++ b/library-gen/Stratosphere/ResourceProperties/S3BucketRoutingRuleCondition.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-websiteconfiguration-routingrules-routingrulecondition.html
 
 module Stratosphere.ResourceProperties.S3BucketRoutingRuleCondition where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   S3BucketRoutingRuleCondition
   { _s3BucketRoutingRuleConditionHttpErrorCodeReturnedEquals :: Maybe (Val Text)
   , _s3BucketRoutingRuleConditionKeyPrefixEquals :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON S3BucketRoutingRuleCondition where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 29, omitNothingFields = True }
+  toJSON S3BucketRoutingRuleCondition{..} =
+    object $
+    catMaybes
+    [ ("HttpErrorCodeReturnedEquals" .=) <$> _s3BucketRoutingRuleConditionHttpErrorCodeReturnedEquals
+    , ("KeyPrefixEquals" .=) <$> _s3BucketRoutingRuleConditionKeyPrefixEquals
+    ]
 
 instance FromJSON S3BucketRoutingRuleCondition where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 29, omitNothingFields = True }
+  parseJSON (Object obj) =
+    S3BucketRoutingRuleCondition <$>
+      obj .:? "HttpErrorCodeReturnedEquals" <*>
+      obj .:? "KeyPrefixEquals"
+  parseJSON _ = mempty
 
 -- | Constructor for 'S3BucketRoutingRuleCondition' containing required fields
 -- | as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/S3BucketRule.hs b/library-gen/Stratosphere/ResourceProperties/S3BucketRule.hs
--- a/library-gen/Stratosphere/ResourceProperties/S3BucketRule.hs
+++ b/library-gen/Stratosphere/ResourceProperties/S3BucketRule.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-lifecycleconfig-rule.html
 
 module Stratosphere.ResourceProperties.S3BucketRule where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.S3BucketNoncurrentVersionTransition
@@ -29,13 +29,38 @@
   , _s3BucketRuleStatus :: Val Text
   , _s3BucketRuleTransition :: Maybe S3BucketTransition
   , _s3BucketRuleTransitions :: Maybe S3BucketTransition
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON S3BucketRule where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 13, omitNothingFields = True }
+  toJSON S3BucketRule{..} =
+    object $
+    catMaybes
+    [ ("ExpirationDate" .=) <$> _s3BucketRuleExpirationDate
+    , ("ExpirationInDays" .=) <$> _s3BucketRuleExpirationInDays
+    , ("Id" .=) <$> _s3BucketRuleId
+    , ("NoncurrentVersionExpirationInDays" .=) <$> _s3BucketRuleNoncurrentVersionExpirationInDays
+    , ("NoncurrentVersionTransition" .=) <$> _s3BucketRuleNoncurrentVersionTransition
+    , ("NoncurrentVersionTransitions" .=) <$> _s3BucketRuleNoncurrentVersionTransitions
+    , ("Prefix" .=) <$> _s3BucketRulePrefix
+    , Just ("Status" .= _s3BucketRuleStatus)
+    , ("Transition" .=) <$> _s3BucketRuleTransition
+    , ("Transitions" .=) <$> _s3BucketRuleTransitions
+    ]
 
 instance FromJSON S3BucketRule where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 13, omitNothingFields = True }
+  parseJSON (Object obj) =
+    S3BucketRule <$>
+      obj .:? "ExpirationDate" <*>
+      obj .:? "ExpirationInDays" <*>
+      obj .:? "Id" <*>
+      obj .:? "NoncurrentVersionExpirationInDays" <*>
+      obj .:? "NoncurrentVersionTransition" <*>
+      obj .:? "NoncurrentVersionTransitions" <*>
+      obj .:? "Prefix" <*>
+      obj .: "Status" <*>
+      obj .:? "Transition" <*>
+      obj .:? "Transitions"
+  parseJSON _ = mempty
 
 -- | Constructor for 'S3BucketRule' containing required fields as arguments.
 s3BucketRule
diff --git a/library-gen/Stratosphere/ResourceProperties/S3BucketS3KeyFilter.hs b/library-gen/Stratosphere/ResourceProperties/S3BucketS3KeyFilter.hs
--- a/library-gen/Stratosphere/ResourceProperties/S3BucketS3KeyFilter.hs
+++ b/library-gen/Stratosphere/ResourceProperties/S3BucketS3KeyFilter.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfiguration-config-filter-s3key.html
 
 module Stratosphere.ResourceProperties.S3BucketS3KeyFilter where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.S3BucketFilterRule
@@ -19,13 +19,20 @@
 data S3BucketS3KeyFilter =
   S3BucketS3KeyFilter
   { _s3BucketS3KeyFilterRules :: [S3BucketFilterRule]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON S3BucketS3KeyFilter where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 20, omitNothingFields = True }
+  toJSON S3BucketS3KeyFilter{..} =
+    object $
+    catMaybes
+    [ Just ("Rules" .= _s3BucketS3KeyFilterRules)
+    ]
 
 instance FromJSON S3BucketS3KeyFilter where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 20, omitNothingFields = True }
+  parseJSON (Object obj) =
+    S3BucketS3KeyFilter <$>
+      obj .: "Rules"
+  parseJSON _ = mempty
 
 -- | Constructor for 'S3BucketS3KeyFilter' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/S3BucketTopicConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/S3BucketTopicConfiguration.hs
--- a/library-gen/Stratosphere/ResourceProperties/S3BucketTopicConfiguration.hs
+++ b/library-gen/Stratosphere/ResourceProperties/S3BucketTopicConfiguration.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfig-topicconfig.html
 
 module Stratosphere.ResourceProperties.S3BucketTopicConfiguration where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.S3BucketNotificationFilter
@@ -21,13 +21,24 @@
   { _s3BucketTopicConfigurationEvent :: Val Text
   , _s3BucketTopicConfigurationFilter :: Maybe S3BucketNotificationFilter
   , _s3BucketTopicConfigurationTopic :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON S3BucketTopicConfiguration where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
+  toJSON S3BucketTopicConfiguration{..} =
+    object $
+    catMaybes
+    [ Just ("Event" .= _s3BucketTopicConfigurationEvent)
+    , ("Filter" .=) <$> _s3BucketTopicConfigurationFilter
+    , Just ("Topic" .= _s3BucketTopicConfigurationTopic)
+    ]
 
 instance FromJSON S3BucketTopicConfiguration where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
+  parseJSON (Object obj) =
+    S3BucketTopicConfiguration <$>
+      obj .: "Event" <*>
+      obj .:? "Filter" <*>
+      obj .: "Topic"
+  parseJSON _ = mempty
 
 -- | Constructor for 'S3BucketTopicConfiguration' containing required fields
 -- | as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/S3BucketTransition.hs b/library-gen/Stratosphere/ResourceProperties/S3BucketTransition.hs
--- a/library-gen/Stratosphere/ResourceProperties/S3BucketTransition.hs
+++ b/library-gen/Stratosphere/ResourceProperties/S3BucketTransition.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-lifecycleconfig-rule-transition.html
 
 module Stratosphere.ResourceProperties.S3BucketTransition where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -21,13 +21,24 @@
   { _s3BucketTransitionStorageClass :: Val Text
   , _s3BucketTransitionTransitionDate :: Maybe (Val Text)
   , _s3BucketTransitionTransitionInDays :: Maybe (Val Integer')
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON S3BucketTransition where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 19, omitNothingFields = True }
+  toJSON S3BucketTransition{..} =
+    object $
+    catMaybes
+    [ Just ("StorageClass" .= _s3BucketTransitionStorageClass)
+    , ("TransitionDate" .=) <$> _s3BucketTransitionTransitionDate
+    , ("TransitionInDays" .=) <$> _s3BucketTransitionTransitionInDays
+    ]
 
 instance FromJSON S3BucketTransition where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 19, omitNothingFields = True }
+  parseJSON (Object obj) =
+    S3BucketTransition <$>
+      obj .: "StorageClass" <*>
+      obj .:? "TransitionDate" <*>
+      obj .:? "TransitionInDays"
+  parseJSON _ = mempty
 
 -- | Constructor for 'S3BucketTransition' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/S3BucketVersioningConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/S3BucketVersioningConfiguration.hs
--- a/library-gen/Stratosphere/ResourceProperties/S3BucketVersioningConfiguration.hs
+++ b/library-gen/Stratosphere/ResourceProperties/S3BucketVersioningConfiguration.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-versioningconfig.html
 
 module Stratosphere.ResourceProperties.S3BucketVersioningConfiguration where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -19,13 +19,20 @@
 data S3BucketVersioningConfiguration =
   S3BucketVersioningConfiguration
   { _s3BucketVersioningConfigurationStatus :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON S3BucketVersioningConfiguration where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 32, omitNothingFields = True }
+  toJSON S3BucketVersioningConfiguration{..} =
+    object $
+    catMaybes
+    [ Just ("Status" .= _s3BucketVersioningConfigurationStatus)
+    ]
 
 instance FromJSON S3BucketVersioningConfiguration where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 32, omitNothingFields = True }
+  parseJSON (Object obj) =
+    S3BucketVersioningConfiguration <$>
+      obj .: "Status"
+  parseJSON _ = mempty
 
 -- | Constructor for 'S3BucketVersioningConfiguration' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/S3BucketWebsiteConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/S3BucketWebsiteConfiguration.hs
--- a/library-gen/Stratosphere/ResourceProperties/S3BucketWebsiteConfiguration.hs
+++ b/library-gen/Stratosphere/ResourceProperties/S3BucketWebsiteConfiguration.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-websiteconfiguration.html
 
 module Stratosphere.ResourceProperties.S3BucketWebsiteConfiguration where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.S3BucketRedirectAllRequestsTo
@@ -23,13 +23,26 @@
   , _s3BucketWebsiteConfigurationIndexDocument :: Maybe (Val Text)
   , _s3BucketWebsiteConfigurationRedirectAllRequestsTo :: Maybe S3BucketRedirectAllRequestsTo
   , _s3BucketWebsiteConfigurationRoutingRules :: Maybe [S3BucketRoutingRule]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON S3BucketWebsiteConfiguration where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 29, omitNothingFields = True }
+  toJSON S3BucketWebsiteConfiguration{..} =
+    object $
+    catMaybes
+    [ ("ErrorDocument" .=) <$> _s3BucketWebsiteConfigurationErrorDocument
+    , ("IndexDocument" .=) <$> _s3BucketWebsiteConfigurationIndexDocument
+    , ("RedirectAllRequestsTo" .=) <$> _s3BucketWebsiteConfigurationRedirectAllRequestsTo
+    , ("RoutingRules" .=) <$> _s3BucketWebsiteConfigurationRoutingRules
+    ]
 
 instance FromJSON S3BucketWebsiteConfiguration where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 29, omitNothingFields = True }
+  parseJSON (Object obj) =
+    S3BucketWebsiteConfiguration <$>
+      obj .:? "ErrorDocument" <*>
+      obj .:? "IndexDocument" <*>
+      obj .:? "RedirectAllRequestsTo" <*>
+      obj .:? "RoutingRules"
+  parseJSON _ = mempty
 
 -- | Constructor for 'S3BucketWebsiteConfiguration' containing required fields
 -- | as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/SNSTopicSubscription.hs b/library-gen/Stratosphere/ResourceProperties/SNSTopicSubscription.hs
--- a/library-gen/Stratosphere/ResourceProperties/SNSTopicSubscription.hs
+++ b/library-gen/Stratosphere/ResourceProperties/SNSTopicSubscription.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sns-subscription.html
 
 module Stratosphere.ResourceProperties.SNSTopicSubscription where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.Types
@@ -20,13 +20,22 @@
   SNSTopicSubscription
   { _sNSTopicSubscriptionEndpoint :: Val Text
   , _sNSTopicSubscriptionProtocol :: Val SNSProtocol
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON SNSTopicSubscription where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 21, omitNothingFields = True }
+  toJSON SNSTopicSubscription{..} =
+    object $
+    catMaybes
+    [ Just ("Endpoint" .= _sNSTopicSubscriptionEndpoint)
+    , Just ("Protocol" .= _sNSTopicSubscriptionProtocol)
+    ]
 
 instance FromJSON SNSTopicSubscription where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 21, omitNothingFields = True }
+  parseJSON (Object obj) =
+    SNSTopicSubscription <$>
+      obj .: "Endpoint" <*>
+      obj .: "Protocol"
+  parseJSON _ = mempty
 
 -- | Constructor for 'SNSTopicSubscription' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/SSMAssociationParameterValues.hs b/library-gen/Stratosphere/ResourceProperties/SSMAssociationParameterValues.hs
--- a/library-gen/Stratosphere/ResourceProperties/SSMAssociationParameterValues.hs
+++ b/library-gen/Stratosphere/ResourceProperties/SSMAssociationParameterValues.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ssm-association-parametervalues.html
 
 module Stratosphere.ResourceProperties.SSMAssociationParameterValues where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -19,13 +19,20 @@
 data SSMAssociationParameterValues =
   SSMAssociationParameterValues
   { _sSMAssociationParameterValuesParameterValues :: [Val Text]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON SSMAssociationParameterValues where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
+  toJSON SSMAssociationParameterValues{..} =
+    object $
+    catMaybes
+    [ Just ("ParameterValues" .= _sSMAssociationParameterValuesParameterValues)
+    ]
 
 instance FromJSON SSMAssociationParameterValues where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
+  parseJSON (Object obj) =
+    SSMAssociationParameterValues <$>
+      obj .: "ParameterValues"
+  parseJSON _ = mempty
 
 -- | Constructor for 'SSMAssociationParameterValues' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/SSMAssociationTarget.hs b/library-gen/Stratosphere/ResourceProperties/SSMAssociationTarget.hs
--- a/library-gen/Stratosphere/ResourceProperties/SSMAssociationTarget.hs
+++ b/library-gen/Stratosphere/ResourceProperties/SSMAssociationTarget.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ssm-association-target.html
 
 module Stratosphere.ResourceProperties.SSMAssociationTarget where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   SSMAssociationTarget
   { _sSMAssociationTargetKey :: Val Text
   , _sSMAssociationTargetValues :: [Val Text]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON SSMAssociationTarget where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 21, omitNothingFields = True }
+  toJSON SSMAssociationTarget{..} =
+    object $
+    catMaybes
+    [ Just ("Key" .= _sSMAssociationTargetKey)
+    , Just ("Values" .= _sSMAssociationTargetValues)
+    ]
 
 instance FromJSON SSMAssociationTarget where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 21, omitNothingFields = True }
+  parseJSON (Object obj) =
+    SSMAssociationTarget <$>
+      obj .: "Key" <*>
+      obj .: "Values"
+  parseJSON _ = mempty
 
 -- | Constructor for 'SSMAssociationTarget' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/Tag.hs b/library-gen/Stratosphere/ResourceProperties/Tag.hs
--- a/library-gen/Stratosphere/ResourceProperties/Tag.hs
+++ b/library-gen/Stratosphere/ResourceProperties/Tag.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html
 
 module Stratosphere.ResourceProperties.Tag where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   Tag
   { _tagKey :: Val Text
   , _tagValue :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON Tag where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 4, omitNothingFields = True }
+  toJSON Tag{..} =
+    object $
+    catMaybes
+    [ Just ("Key" .= _tagKey)
+    , Just ("Value" .= _tagValue)
+    ]
 
 instance FromJSON Tag where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 4, omitNothingFields = True }
+  parseJSON (Object obj) =
+    Tag <$>
+      obj .: "Key" <*>
+      obj .: "Value"
+  parseJSON _ = mempty
 
 -- | Constructor for 'Tag' containing required fields as arguments.
 tag
diff --git a/library-gen/Stratosphere/ResourceProperties/WAFByteMatchSetByteMatchTuple.hs b/library-gen/Stratosphere/ResourceProperties/WAFByteMatchSetByteMatchTuple.hs
--- a/library-gen/Stratosphere/ResourceProperties/WAFByteMatchSetByteMatchTuple.hs
+++ b/library-gen/Stratosphere/ResourceProperties/WAFByteMatchSetByteMatchTuple.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waf-bytematchset-bytematchtuples.html
 
 module Stratosphere.ResourceProperties.WAFByteMatchSetByteMatchTuple where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.WAFByteMatchSetFieldToMatch
@@ -23,13 +23,28 @@
   , _wAFByteMatchSetByteMatchTupleTargetString :: Maybe (Val Text)
   , _wAFByteMatchSetByteMatchTupleTargetStringBase64 :: Maybe (Val Text)
   , _wAFByteMatchSetByteMatchTupleTextTransformation :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON WAFByteMatchSetByteMatchTuple where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
+  toJSON WAFByteMatchSetByteMatchTuple{..} =
+    object $
+    catMaybes
+    [ Just ("FieldToMatch" .= _wAFByteMatchSetByteMatchTupleFieldToMatch)
+    , Just ("PositionalConstraint" .= _wAFByteMatchSetByteMatchTuplePositionalConstraint)
+    , ("TargetString" .=) <$> _wAFByteMatchSetByteMatchTupleTargetString
+    , ("TargetStringBase64" .=) <$> _wAFByteMatchSetByteMatchTupleTargetStringBase64
+    , Just ("TextTransformation" .= _wAFByteMatchSetByteMatchTupleTextTransformation)
+    ]
 
 instance FromJSON WAFByteMatchSetByteMatchTuple where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
+  parseJSON (Object obj) =
+    WAFByteMatchSetByteMatchTuple <$>
+      obj .: "FieldToMatch" <*>
+      obj .: "PositionalConstraint" <*>
+      obj .:? "TargetString" <*>
+      obj .:? "TargetStringBase64" <*>
+      obj .: "TextTransformation"
+  parseJSON _ = mempty
 
 -- | Constructor for 'WAFByteMatchSetByteMatchTuple' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/WAFByteMatchSetFieldToMatch.hs b/library-gen/Stratosphere/ResourceProperties/WAFByteMatchSetFieldToMatch.hs
--- a/library-gen/Stratosphere/ResourceProperties/WAFByteMatchSetFieldToMatch.hs
+++ b/library-gen/Stratosphere/ResourceProperties/WAFByteMatchSetFieldToMatch.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waf-bytematchset-bytematchtuples-fieldtomatch.html
 
 module Stratosphere.ResourceProperties.WAFByteMatchSetFieldToMatch where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   WAFByteMatchSetFieldToMatch
   { _wAFByteMatchSetFieldToMatchData :: Maybe (Val Text)
   , _wAFByteMatchSetFieldToMatchType :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON WAFByteMatchSetFieldToMatch where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+  toJSON WAFByteMatchSetFieldToMatch{..} =
+    object $
+    catMaybes
+    [ ("Data" .=) <$> _wAFByteMatchSetFieldToMatchData
+    , Just ("Type" .= _wAFByteMatchSetFieldToMatchType)
+    ]
 
 instance FromJSON WAFByteMatchSetFieldToMatch where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+  parseJSON (Object obj) =
+    WAFByteMatchSetFieldToMatch <$>
+      obj .:? "Data" <*>
+      obj .: "Type"
+  parseJSON _ = mempty
 
 -- | Constructor for 'WAFByteMatchSetFieldToMatch' containing required fields
 -- | as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/WAFIPSetIPSetDescriptor.hs b/library-gen/Stratosphere/ResourceProperties/WAFIPSetIPSetDescriptor.hs
--- a/library-gen/Stratosphere/ResourceProperties/WAFIPSetIPSetDescriptor.hs
+++ b/library-gen/Stratosphere/ResourceProperties/WAFIPSetIPSetDescriptor.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waf-ipset-ipsetdescriptors.html
 
 module Stratosphere.ResourceProperties.WAFIPSetIPSetDescriptor where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   WAFIPSetIPSetDescriptor
   { _wAFIPSetIPSetDescriptorType :: Val Text
   , _wAFIPSetIPSetDescriptorValue :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON WAFIPSetIPSetDescriptor where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 24, omitNothingFields = True }
+  toJSON WAFIPSetIPSetDescriptor{..} =
+    object $
+    catMaybes
+    [ Just ("Type" .= _wAFIPSetIPSetDescriptorType)
+    , Just ("Value" .= _wAFIPSetIPSetDescriptorValue)
+    ]
 
 instance FromJSON WAFIPSetIPSetDescriptor where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 24, omitNothingFields = True }
+  parseJSON (Object obj) =
+    WAFIPSetIPSetDescriptor <$>
+      obj .: "Type" <*>
+      obj .: "Value"
+  parseJSON _ = mempty
 
 -- | Constructor for 'WAFIPSetIPSetDescriptor' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/WAFRulePredicate.hs b/library-gen/Stratosphere/ResourceProperties/WAFRulePredicate.hs
--- a/library-gen/Stratosphere/ResourceProperties/WAFRulePredicate.hs
+++ b/library-gen/Stratosphere/ResourceProperties/WAFRulePredicate.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waf-rule-predicates.html
 
 module Stratosphere.ResourceProperties.WAFRulePredicate where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -21,13 +21,24 @@
   { _wAFRulePredicateDataId :: Val Text
   , _wAFRulePredicateNegated :: Val Bool'
   , _wAFRulePredicateType :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON WAFRulePredicate where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
+  toJSON WAFRulePredicate{..} =
+    object $
+    catMaybes
+    [ Just ("DataId" .= _wAFRulePredicateDataId)
+    , Just ("Negated" .= _wAFRulePredicateNegated)
+    , Just ("Type" .= _wAFRulePredicateType)
+    ]
 
 instance FromJSON WAFRulePredicate where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
+  parseJSON (Object obj) =
+    WAFRulePredicate <$>
+      obj .: "DataId" <*>
+      obj .: "Negated" <*>
+      obj .: "Type"
+  parseJSON _ = mempty
 
 -- | Constructor for 'WAFRulePredicate' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/WAFSizeConstraintSetFieldToMatch.hs b/library-gen/Stratosphere/ResourceProperties/WAFSizeConstraintSetFieldToMatch.hs
--- a/library-gen/Stratosphere/ResourceProperties/WAFSizeConstraintSetFieldToMatch.hs
+++ b/library-gen/Stratosphere/ResourceProperties/WAFSizeConstraintSetFieldToMatch.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waf-sizeconstraintset-sizeconstraint-fieldtomatch.html
 
 module Stratosphere.ResourceProperties.WAFSizeConstraintSetFieldToMatch where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   WAFSizeConstraintSetFieldToMatch
   { _wAFSizeConstraintSetFieldToMatchData :: Maybe (Val Text)
   , _wAFSizeConstraintSetFieldToMatchType :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON WAFSizeConstraintSetFieldToMatch where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 33, omitNothingFields = True }
+  toJSON WAFSizeConstraintSetFieldToMatch{..} =
+    object $
+    catMaybes
+    [ ("Data" .=) <$> _wAFSizeConstraintSetFieldToMatchData
+    , Just ("Type" .= _wAFSizeConstraintSetFieldToMatchType)
+    ]
 
 instance FromJSON WAFSizeConstraintSetFieldToMatch where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 33, omitNothingFields = True }
+  parseJSON (Object obj) =
+    WAFSizeConstraintSetFieldToMatch <$>
+      obj .:? "Data" <*>
+      obj .: "Type"
+  parseJSON _ = mempty
 
 -- | Constructor for 'WAFSizeConstraintSetFieldToMatch' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/WAFSizeConstraintSetSizeConstraint.hs b/library-gen/Stratosphere/ResourceProperties/WAFSizeConstraintSetSizeConstraint.hs
--- a/library-gen/Stratosphere/ResourceProperties/WAFSizeConstraintSetSizeConstraint.hs
+++ b/library-gen/Stratosphere/ResourceProperties/WAFSizeConstraintSetSizeConstraint.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waf-sizeconstraintset-sizeconstraint.html
 
 module Stratosphere.ResourceProperties.WAFSizeConstraintSetSizeConstraint where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.WAFSizeConstraintSetFieldToMatch
@@ -22,13 +22,26 @@
   , _wAFSizeConstraintSetSizeConstraintFieldToMatch :: WAFSizeConstraintSetFieldToMatch
   , _wAFSizeConstraintSetSizeConstraintSize :: Val Integer'
   , _wAFSizeConstraintSetSizeConstraintTextTransformation :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON WAFSizeConstraintSetSizeConstraint where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 35, omitNothingFields = True }
+  toJSON WAFSizeConstraintSetSizeConstraint{..} =
+    object $
+    catMaybes
+    [ Just ("ComparisonOperator" .= _wAFSizeConstraintSetSizeConstraintComparisonOperator)
+    , Just ("FieldToMatch" .= _wAFSizeConstraintSetSizeConstraintFieldToMatch)
+    , Just ("Size" .= _wAFSizeConstraintSetSizeConstraintSize)
+    , Just ("TextTransformation" .= _wAFSizeConstraintSetSizeConstraintTextTransformation)
+    ]
 
 instance FromJSON WAFSizeConstraintSetSizeConstraint where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 35, omitNothingFields = True }
+  parseJSON (Object obj) =
+    WAFSizeConstraintSetSizeConstraint <$>
+      obj .: "ComparisonOperator" <*>
+      obj .: "FieldToMatch" <*>
+      obj .: "Size" <*>
+      obj .: "TextTransformation"
+  parseJSON _ = mempty
 
 -- | Constructor for 'WAFSizeConstraintSetSizeConstraint' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/WAFSqlInjectionMatchSetFieldToMatch.hs b/library-gen/Stratosphere/ResourceProperties/WAFSqlInjectionMatchSetFieldToMatch.hs
--- a/library-gen/Stratosphere/ResourceProperties/WAFSqlInjectionMatchSetFieldToMatch.hs
+++ b/library-gen/Stratosphere/ResourceProperties/WAFSqlInjectionMatchSetFieldToMatch.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waf-bytematchset-bytematchtuples-fieldtomatch.html
 
 module Stratosphere.ResourceProperties.WAFSqlInjectionMatchSetFieldToMatch where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   WAFSqlInjectionMatchSetFieldToMatch
   { _wAFSqlInjectionMatchSetFieldToMatchData :: Maybe (Val Text)
   , _wAFSqlInjectionMatchSetFieldToMatchType :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON WAFSqlInjectionMatchSetFieldToMatch where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 36, omitNothingFields = True }
+  toJSON WAFSqlInjectionMatchSetFieldToMatch{..} =
+    object $
+    catMaybes
+    [ ("Data" .=) <$> _wAFSqlInjectionMatchSetFieldToMatchData
+    , Just ("Type" .= _wAFSqlInjectionMatchSetFieldToMatchType)
+    ]
 
 instance FromJSON WAFSqlInjectionMatchSetFieldToMatch where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 36, omitNothingFields = True }
+  parseJSON (Object obj) =
+    WAFSqlInjectionMatchSetFieldToMatch <$>
+      obj .:? "Data" <*>
+      obj .: "Type"
+  parseJSON _ = mempty
 
 -- | Constructor for 'WAFSqlInjectionMatchSetFieldToMatch' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/WAFSqlInjectionMatchSetSqlInjectionMatchTuple.hs b/library-gen/Stratosphere/ResourceProperties/WAFSqlInjectionMatchSetSqlInjectionMatchTuple.hs
--- a/library-gen/Stratosphere/ResourceProperties/WAFSqlInjectionMatchSetSqlInjectionMatchTuple.hs
+++ b/library-gen/Stratosphere/ResourceProperties/WAFSqlInjectionMatchSetSqlInjectionMatchTuple.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waf-sqlinjectionmatchset-sqlinjectionmatchtuples.html
 
 module Stratosphere.ResourceProperties.WAFSqlInjectionMatchSetSqlInjectionMatchTuple where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.WAFSqlInjectionMatchSetFieldToMatch
@@ -22,13 +22,22 @@
   WAFSqlInjectionMatchSetSqlInjectionMatchTuple
   { _wAFSqlInjectionMatchSetSqlInjectionMatchTupleFieldToMatch :: WAFSqlInjectionMatchSetFieldToMatch
   , _wAFSqlInjectionMatchSetSqlInjectionMatchTupleTextTransformation :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON WAFSqlInjectionMatchSetSqlInjectionMatchTuple where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 46, omitNothingFields = True }
+  toJSON WAFSqlInjectionMatchSetSqlInjectionMatchTuple{..} =
+    object $
+    catMaybes
+    [ Just ("FieldToMatch" .= _wAFSqlInjectionMatchSetSqlInjectionMatchTupleFieldToMatch)
+    , Just ("TextTransformation" .= _wAFSqlInjectionMatchSetSqlInjectionMatchTupleTextTransformation)
+    ]
 
 instance FromJSON WAFSqlInjectionMatchSetSqlInjectionMatchTuple where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 46, omitNothingFields = True }
+  parseJSON (Object obj) =
+    WAFSqlInjectionMatchSetSqlInjectionMatchTuple <$>
+      obj .: "FieldToMatch" <*>
+      obj .: "TextTransformation"
+  parseJSON _ = mempty
 
 -- | Constructor for 'WAFSqlInjectionMatchSetSqlInjectionMatchTuple'
 -- | containing required fields as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/WAFWebACLActivatedRule.hs b/library-gen/Stratosphere/ResourceProperties/WAFWebACLActivatedRule.hs
--- a/library-gen/Stratosphere/ResourceProperties/WAFWebACLActivatedRule.hs
+++ b/library-gen/Stratosphere/ResourceProperties/WAFWebACLActivatedRule.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waf-webacl-rules.html
 
 module Stratosphere.ResourceProperties.WAFWebACLActivatedRule where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.WAFWebACLWafAction
@@ -21,13 +21,24 @@
   { _wAFWebACLActivatedRuleAction :: WAFWebACLWafAction
   , _wAFWebACLActivatedRulePriority :: Val Integer'
   , _wAFWebACLActivatedRuleRuleId :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON WAFWebACLActivatedRule where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 23, omitNothingFields = True }
+  toJSON WAFWebACLActivatedRule{..} =
+    object $
+    catMaybes
+    [ Just ("Action" .= _wAFWebACLActivatedRuleAction)
+    , Just ("Priority" .= _wAFWebACLActivatedRulePriority)
+    , Just ("RuleId" .= _wAFWebACLActivatedRuleRuleId)
+    ]
 
 instance FromJSON WAFWebACLActivatedRule where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 23, omitNothingFields = True }
+  parseJSON (Object obj) =
+    WAFWebACLActivatedRule <$>
+      obj .: "Action" <*>
+      obj .: "Priority" <*>
+      obj .: "RuleId"
+  parseJSON _ = mempty
 
 -- | Constructor for 'WAFWebACLActivatedRule' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/WAFWebACLWafAction.hs b/library-gen/Stratosphere/ResourceProperties/WAFWebACLWafAction.hs
--- a/library-gen/Stratosphere/ResourceProperties/WAFWebACLWafAction.hs
+++ b/library-gen/Stratosphere/ResourceProperties/WAFWebACLWafAction.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waf-webacl-action.html
 
 module Stratosphere.ResourceProperties.WAFWebACLWafAction where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -19,13 +19,20 @@
 data WAFWebACLWafAction =
   WAFWebACLWafAction
   { _wAFWebACLWafActionType :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON WAFWebACLWafAction where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 19, omitNothingFields = True }
+  toJSON WAFWebACLWafAction{..} =
+    object $
+    catMaybes
+    [ Just ("Type" .= _wAFWebACLWafActionType)
+    ]
 
 instance FromJSON WAFWebACLWafAction where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 19, omitNothingFields = True }
+  parseJSON (Object obj) =
+    WAFWebACLWafAction <$>
+      obj .: "Type"
+  parseJSON _ = mempty
 
 -- | Constructor for 'WAFWebACLWafAction' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/WAFXssMatchSetFieldToMatch.hs b/library-gen/Stratosphere/ResourceProperties/WAFXssMatchSetFieldToMatch.hs
--- a/library-gen/Stratosphere/ResourceProperties/WAFXssMatchSetFieldToMatch.hs
+++ b/library-gen/Stratosphere/ResourceProperties/WAFXssMatchSetFieldToMatch.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waf-xssmatchset-xssmatchtuple-fieldtomatch.html
 
 module Stratosphere.ResourceProperties.WAFXssMatchSetFieldToMatch where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   WAFXssMatchSetFieldToMatch
   { _wAFXssMatchSetFieldToMatchData :: Maybe (Val Text)
   , _wAFXssMatchSetFieldToMatchType :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON WAFXssMatchSetFieldToMatch where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
+  toJSON WAFXssMatchSetFieldToMatch{..} =
+    object $
+    catMaybes
+    [ ("Data" .=) <$> _wAFXssMatchSetFieldToMatchData
+    , Just ("Type" .= _wAFXssMatchSetFieldToMatchType)
+    ]
 
 instance FromJSON WAFXssMatchSetFieldToMatch where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
+  parseJSON (Object obj) =
+    WAFXssMatchSetFieldToMatch <$>
+      obj .:? "Data" <*>
+      obj .: "Type"
+  parseJSON _ = mempty
 
 -- | Constructor for 'WAFXssMatchSetFieldToMatch' containing required fields
 -- | as arguments.
diff --git a/library-gen/Stratosphere/ResourceProperties/WAFXssMatchSetXssMatchTuple.hs b/library-gen/Stratosphere/ResourceProperties/WAFXssMatchSetXssMatchTuple.hs
--- a/library-gen/Stratosphere/ResourceProperties/WAFXssMatchSetXssMatchTuple.hs
+++ b/library-gen/Stratosphere/ResourceProperties/WAFXssMatchSetXssMatchTuple.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waf-xssmatchset-xssmatchtuple.html
 
 module Stratosphere.ResourceProperties.WAFXssMatchSetXssMatchTuple where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.WAFXssMatchSetFieldToMatch
@@ -20,13 +20,22 @@
   WAFXssMatchSetXssMatchTuple
   { _wAFXssMatchSetXssMatchTupleFieldToMatch :: WAFXssMatchSetFieldToMatch
   , _wAFXssMatchSetXssMatchTupleTextTransformation :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON WAFXssMatchSetXssMatchTuple where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+  toJSON WAFXssMatchSetXssMatchTuple{..} =
+    object $
+    catMaybes
+    [ Just ("FieldToMatch" .= _wAFXssMatchSetXssMatchTupleFieldToMatch)
+    , Just ("TextTransformation" .= _wAFXssMatchSetXssMatchTupleTextTransformation)
+    ]
 
 instance FromJSON WAFXssMatchSetXssMatchTuple where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+  parseJSON (Object obj) =
+    WAFXssMatchSetXssMatchTuple <$>
+      obj .: "FieldToMatch" <*>
+      obj .: "TextTransformation"
+  parseJSON _ = mempty
 
 -- | Constructor for 'WAFXssMatchSetXssMatchTuple' containing required fields
 -- | as arguments.
diff --git a/library-gen/Stratosphere/Resources/ApiGatewayAccount.hs b/library-gen/Stratosphere/Resources/ApiGatewayAccount.hs
--- a/library-gen/Stratosphere/Resources/ApiGatewayAccount.hs
+++ b/library-gen/Stratosphere/Resources/ApiGatewayAccount.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-account.html
 
 module Stratosphere.Resources.ApiGatewayAccount where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -19,13 +19,20 @@
 data ApiGatewayAccount =
   ApiGatewayAccount
   { _apiGatewayAccountCloudWatchRoleArn :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ApiGatewayAccount where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 18, omitNothingFields = True }
+  toJSON ApiGatewayAccount{..} =
+    object $
+    catMaybes
+    [ ("CloudWatchRoleArn" .=) <$> _apiGatewayAccountCloudWatchRoleArn
+    ]
 
 instance FromJSON ApiGatewayAccount where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 18, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ApiGatewayAccount <$>
+      obj .:? "CloudWatchRoleArn"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ApiGatewayAccount' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/ApiGatewayApiKey.hs b/library-gen/Stratosphere/Resources/ApiGatewayApiKey.hs
--- a/library-gen/Stratosphere/Resources/ApiGatewayApiKey.hs
+++ b/library-gen/Stratosphere/Resources/ApiGatewayApiKey.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-apikey.html
 
 module Stratosphere.Resources.ApiGatewayApiKey where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.ApiGatewayApiKeyStageKey
@@ -22,13 +22,26 @@
   , _apiGatewayApiKeyEnabled :: Maybe (Val Bool')
   , _apiGatewayApiKeyName :: Maybe (Val Text)
   , _apiGatewayApiKeyStageKeys :: Maybe [ApiGatewayApiKeyStageKey]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ApiGatewayApiKey where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
+  toJSON ApiGatewayApiKey{..} =
+    object $
+    catMaybes
+    [ ("Description" .=) <$> _apiGatewayApiKeyDescription
+    , ("Enabled" .=) <$> _apiGatewayApiKeyEnabled
+    , ("Name" .=) <$> _apiGatewayApiKeyName
+    , ("StageKeys" .=) <$> _apiGatewayApiKeyStageKeys
+    ]
 
 instance FromJSON ApiGatewayApiKey where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ApiGatewayApiKey <$>
+      obj .:? "Description" <*>
+      obj .:? "Enabled" <*>
+      obj .:? "Name" <*>
+      obj .:? "StageKeys"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ApiGatewayApiKey' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/ApiGatewayAuthorizer.hs b/library-gen/Stratosphere/Resources/ApiGatewayAuthorizer.hs
--- a/library-gen/Stratosphere/Resources/ApiGatewayAuthorizer.hs
+++ b/library-gen/Stratosphere/Resources/ApiGatewayAuthorizer.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-authorizer.html
 
 module Stratosphere.Resources.ApiGatewayAuthorizer where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.Types
@@ -27,13 +27,36 @@
   , _apiGatewayAuthorizerProviderARNs :: Maybe [Val Text]
   , _apiGatewayAuthorizerRestApiId :: Maybe (Val Text)
   , _apiGatewayAuthorizerType :: Maybe (Val AuthorizerType)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ApiGatewayAuthorizer where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 21, omitNothingFields = True }
+  toJSON ApiGatewayAuthorizer{..} =
+    object $
+    catMaybes
+    [ ("AuthorizerCredentials" .=) <$> _apiGatewayAuthorizerAuthorizerCredentials
+    , ("AuthorizerResultTtlInSeconds" .=) <$> _apiGatewayAuthorizerAuthorizerResultTtlInSeconds
+    , ("AuthorizerUri" .=) <$> _apiGatewayAuthorizerAuthorizerUri
+    , ("IdentitySource" .=) <$> _apiGatewayAuthorizerIdentitySource
+    , ("IdentityValidationExpression" .=) <$> _apiGatewayAuthorizerIdentityValidationExpression
+    , ("Name" .=) <$> _apiGatewayAuthorizerName
+    , ("ProviderARNs" .=) <$> _apiGatewayAuthorizerProviderARNs
+    , ("RestApiId" .=) <$> _apiGatewayAuthorizerRestApiId
+    , ("Type" .=) <$> _apiGatewayAuthorizerType
+    ]
 
 instance FromJSON ApiGatewayAuthorizer where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 21, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ApiGatewayAuthorizer <$>
+      obj .:? "AuthorizerCredentials" <*>
+      obj .:? "AuthorizerResultTtlInSeconds" <*>
+      obj .:? "AuthorizerUri" <*>
+      obj .:? "IdentitySource" <*>
+      obj .:? "IdentityValidationExpression" <*>
+      obj .:? "Name" <*>
+      obj .:? "ProviderARNs" <*>
+      obj .:? "RestApiId" <*>
+      obj .:? "Type"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ApiGatewayAuthorizer' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/ApiGatewayBasePathMapping.hs b/library-gen/Stratosphere/Resources/ApiGatewayBasePathMapping.hs
--- a/library-gen/Stratosphere/Resources/ApiGatewayBasePathMapping.hs
+++ b/library-gen/Stratosphere/Resources/ApiGatewayBasePathMapping.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-basepathmapping.html
 
 module Stratosphere.Resources.ApiGatewayBasePathMapping where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -22,13 +22,26 @@
   , _apiGatewayBasePathMappingDomainName :: Maybe (Val Text)
   , _apiGatewayBasePathMappingRestApiId :: Maybe (Val Text)
   , _apiGatewayBasePathMappingStage :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ApiGatewayBasePathMapping where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 26, omitNothingFields = True }
+  toJSON ApiGatewayBasePathMapping{..} =
+    object $
+    catMaybes
+    [ ("BasePath" .=) <$> _apiGatewayBasePathMappingBasePath
+    , ("DomainName" .=) <$> _apiGatewayBasePathMappingDomainName
+    , ("RestApiId" .=) <$> _apiGatewayBasePathMappingRestApiId
+    , ("Stage" .=) <$> _apiGatewayBasePathMappingStage
+    ]
 
 instance FromJSON ApiGatewayBasePathMapping where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 26, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ApiGatewayBasePathMapping <$>
+      obj .:? "BasePath" <*>
+      obj .:? "DomainName" <*>
+      obj .:? "RestApiId" <*>
+      obj .:? "Stage"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ApiGatewayBasePathMapping' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/ApiGatewayClientCertificate.hs b/library-gen/Stratosphere/Resources/ApiGatewayClientCertificate.hs
--- a/library-gen/Stratosphere/Resources/ApiGatewayClientCertificate.hs
+++ b/library-gen/Stratosphere/Resources/ApiGatewayClientCertificate.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-clientcertificate.html
 
 module Stratosphere.Resources.ApiGatewayClientCertificate where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -19,13 +19,20 @@
 data ApiGatewayClientCertificate =
   ApiGatewayClientCertificate
   { _apiGatewayClientCertificateDescription :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ApiGatewayClientCertificate where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+  toJSON ApiGatewayClientCertificate{..} =
+    object $
+    catMaybes
+    [ ("Description" .=) <$> _apiGatewayClientCertificateDescription
+    ]
 
 instance FromJSON ApiGatewayClientCertificate where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ApiGatewayClientCertificate <$>
+      obj .:? "Description"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ApiGatewayClientCertificate' containing required fields
 -- | as arguments.
diff --git a/library-gen/Stratosphere/Resources/ApiGatewayDeployment.hs b/library-gen/Stratosphere/Resources/ApiGatewayDeployment.hs
--- a/library-gen/Stratosphere/Resources/ApiGatewayDeployment.hs
+++ b/library-gen/Stratosphere/Resources/ApiGatewayDeployment.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-deployment.html
 
 module Stratosphere.Resources.ApiGatewayDeployment where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.ApiGatewayDeploymentStageDescription
@@ -22,13 +22,26 @@
   , _apiGatewayDeploymentRestApiId :: Val Text
   , _apiGatewayDeploymentStageDescription :: Maybe ApiGatewayDeploymentStageDescription
   , _apiGatewayDeploymentStageName :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ApiGatewayDeployment where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 21, omitNothingFields = True }
+  toJSON ApiGatewayDeployment{..} =
+    object $
+    catMaybes
+    [ ("Description" .=) <$> _apiGatewayDeploymentDescription
+    , Just ("RestApiId" .= _apiGatewayDeploymentRestApiId)
+    , ("StageDescription" .=) <$> _apiGatewayDeploymentStageDescription
+    , ("StageName" .=) <$> _apiGatewayDeploymentStageName
+    ]
 
 instance FromJSON ApiGatewayDeployment where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 21, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ApiGatewayDeployment <$>
+      obj .:? "Description" <*>
+      obj .: "RestApiId" <*>
+      obj .:? "StageDescription" <*>
+      obj .:? "StageName"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ApiGatewayDeployment' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/ApiGatewayMethod.hs b/library-gen/Stratosphere/Resources/ApiGatewayMethod.hs
--- a/library-gen/Stratosphere/Resources/ApiGatewayMethod.hs
+++ b/library-gen/Stratosphere/Resources/ApiGatewayMethod.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-method.html
 
 module Stratosphere.Resources.ApiGatewayMethod where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.Types
@@ -30,13 +30,38 @@
   , _apiGatewayMethodRequestParameters :: Maybe Object
   , _apiGatewayMethodResourceId :: Maybe (Val Text)
   , _apiGatewayMethodRestApiId :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ApiGatewayMethod where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
+  toJSON ApiGatewayMethod{..} =
+    object $
+    catMaybes
+    [ ("ApiKeyRequired" .=) <$> _apiGatewayMethodApiKeyRequired
+    , ("AuthorizationType" .=) <$> _apiGatewayMethodAuthorizationType
+    , ("AuthorizerId" .=) <$> _apiGatewayMethodAuthorizerId
+    , Just ("HttpMethod" .= _apiGatewayMethodHttpMethod)
+    , ("Integration" .=) <$> _apiGatewayMethodIntegration
+    , ("MethodResponses" .=) <$> _apiGatewayMethodMethodResponses
+    , ("RequestModels" .=) <$> _apiGatewayMethodRequestModels
+    , ("RequestParameters" .=) <$> _apiGatewayMethodRequestParameters
+    , ("ResourceId" .=) <$> _apiGatewayMethodResourceId
+    , ("RestApiId" .=) <$> _apiGatewayMethodRestApiId
+    ]
 
 instance FromJSON ApiGatewayMethod where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ApiGatewayMethod <$>
+      obj .:? "ApiKeyRequired" <*>
+      obj .:? "AuthorizationType" <*>
+      obj .:? "AuthorizerId" <*>
+      obj .: "HttpMethod" <*>
+      obj .:? "Integration" <*>
+      obj .:? "MethodResponses" <*>
+      obj .:? "RequestModels" <*>
+      obj .:? "RequestParameters" <*>
+      obj .:? "ResourceId" <*>
+      obj .:? "RestApiId"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ApiGatewayMethod' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/ApiGatewayModel.hs b/library-gen/Stratosphere/Resources/ApiGatewayModel.hs
--- a/library-gen/Stratosphere/Resources/ApiGatewayModel.hs
+++ b/library-gen/Stratosphere/Resources/ApiGatewayModel.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-model.html
 
 module Stratosphere.Resources.ApiGatewayModel where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -23,13 +23,28 @@
   , _apiGatewayModelName :: Maybe (Val Text)
   , _apiGatewayModelRestApiId :: Val Text
   , _apiGatewayModelSchema :: Maybe Object
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ApiGatewayModel where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 16, omitNothingFields = True }
+  toJSON ApiGatewayModel{..} =
+    object $
+    catMaybes
+    [ ("ContentType" .=) <$> _apiGatewayModelContentType
+    , ("Description" .=) <$> _apiGatewayModelDescription
+    , ("Name" .=) <$> _apiGatewayModelName
+    , Just ("RestApiId" .= _apiGatewayModelRestApiId)
+    , ("Schema" .=) <$> _apiGatewayModelSchema
+    ]
 
 instance FromJSON ApiGatewayModel where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 16, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ApiGatewayModel <$>
+      obj .:? "ContentType" <*>
+      obj .:? "Description" <*>
+      obj .:? "Name" <*>
+      obj .: "RestApiId" <*>
+      obj .:? "Schema"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ApiGatewayModel' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/ApiGatewayResource.hs b/library-gen/Stratosphere/Resources/ApiGatewayResource.hs
--- a/library-gen/Stratosphere/Resources/ApiGatewayResource.hs
+++ b/library-gen/Stratosphere/Resources/ApiGatewayResource.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-resource.html
 
 module Stratosphere.Resources.ApiGatewayResource where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -21,13 +21,24 @@
   { _apiGatewayResourceParentId :: Val Text
   , _apiGatewayResourcePathPart :: Val Text
   , _apiGatewayResourceRestApiId :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ApiGatewayResource where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 19, omitNothingFields = True }
+  toJSON ApiGatewayResource{..} =
+    object $
+    catMaybes
+    [ Just ("ParentId" .= _apiGatewayResourceParentId)
+    , Just ("PathPart" .= _apiGatewayResourcePathPart)
+    , Just ("RestApiId" .= _apiGatewayResourceRestApiId)
+    ]
 
 instance FromJSON ApiGatewayResource where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 19, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ApiGatewayResource <$>
+      obj .: "ParentId" <*>
+      obj .: "PathPart" <*>
+      obj .: "RestApiId"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ApiGatewayResource' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/ApiGatewayRestApi.hs b/library-gen/Stratosphere/Resources/ApiGatewayRestApi.hs
--- a/library-gen/Stratosphere/Resources/ApiGatewayRestApi.hs
+++ b/library-gen/Stratosphere/Resources/ApiGatewayRestApi.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-restapi.html
 
 module Stratosphere.Resources.ApiGatewayRestApi where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.ApiGatewayRestApiS3Location
@@ -26,13 +26,34 @@
   , _apiGatewayRestApiMode :: Maybe (Val Text)
   , _apiGatewayRestApiName :: Maybe (Val Text)
   , _apiGatewayRestApiParameters :: Maybe Object
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ApiGatewayRestApi where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 18, omitNothingFields = True }
+  toJSON ApiGatewayRestApi{..} =
+    object $
+    catMaybes
+    [ ("Body" .=) <$> _apiGatewayRestApiBody
+    , ("BodyS3Location" .=) <$> _apiGatewayRestApiBodyS3Location
+    , ("CloneFrom" .=) <$> _apiGatewayRestApiCloneFrom
+    , ("Description" .=) <$> _apiGatewayRestApiDescription
+    , ("FailOnWarnings" .=) <$> _apiGatewayRestApiFailOnWarnings
+    , ("Mode" .=) <$> _apiGatewayRestApiMode
+    , ("Name" .=) <$> _apiGatewayRestApiName
+    , ("Parameters" .=) <$> _apiGatewayRestApiParameters
+    ]
 
 instance FromJSON ApiGatewayRestApi where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 18, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ApiGatewayRestApi <$>
+      obj .:? "Body" <*>
+      obj .:? "BodyS3Location" <*>
+      obj .:? "CloneFrom" <*>
+      obj .:? "Description" <*>
+      obj .:? "FailOnWarnings" <*>
+      obj .:? "Mode" <*>
+      obj .:? "Name" <*>
+      obj .:? "Parameters"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ApiGatewayRestApi' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/ApiGatewayStage.hs b/library-gen/Stratosphere/Resources/ApiGatewayStage.hs
--- a/library-gen/Stratosphere/Resources/ApiGatewayStage.hs
+++ b/library-gen/Stratosphere/Resources/ApiGatewayStage.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-stage.html
 
 module Stratosphere.Resources.ApiGatewayStage where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.ApiGatewayStageMethodSetting
@@ -27,13 +27,36 @@
   , _apiGatewayStageRestApiId :: Maybe (Val Text)
   , _apiGatewayStageStageName :: Maybe (Val Text)
   , _apiGatewayStageVariables :: Maybe Object
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ApiGatewayStage where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 16, omitNothingFields = True }
+  toJSON ApiGatewayStage{..} =
+    object $
+    catMaybes
+    [ ("CacheClusterEnabled" .=) <$> _apiGatewayStageCacheClusterEnabled
+    , ("CacheClusterSize" .=) <$> _apiGatewayStageCacheClusterSize
+    , ("ClientCertificateId" .=) <$> _apiGatewayStageClientCertificateId
+    , ("DeploymentId" .=) <$> _apiGatewayStageDeploymentId
+    , ("Description" .=) <$> _apiGatewayStageDescription
+    , ("MethodSettings" .=) <$> _apiGatewayStageMethodSettings
+    , ("RestApiId" .=) <$> _apiGatewayStageRestApiId
+    , ("StageName" .=) <$> _apiGatewayStageStageName
+    , ("Variables" .=) <$> _apiGatewayStageVariables
+    ]
 
 instance FromJSON ApiGatewayStage where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 16, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ApiGatewayStage <$>
+      obj .:? "CacheClusterEnabled" <*>
+      obj .:? "CacheClusterSize" <*>
+      obj .:? "ClientCertificateId" <*>
+      obj .:? "DeploymentId" <*>
+      obj .:? "Description" <*>
+      obj .:? "MethodSettings" <*>
+      obj .:? "RestApiId" <*>
+      obj .:? "StageName" <*>
+      obj .:? "Variables"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ApiGatewayStage' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/ApiGatewayUsagePlan.hs b/library-gen/Stratosphere/Resources/ApiGatewayUsagePlan.hs
--- a/library-gen/Stratosphere/Resources/ApiGatewayUsagePlan.hs
+++ b/library-gen/Stratosphere/Resources/ApiGatewayUsagePlan.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-usageplan.html
 
 module Stratosphere.Resources.ApiGatewayUsagePlan where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.ApiGatewayUsagePlanApiStage
@@ -25,13 +25,28 @@
   , _apiGatewayUsagePlanQuota :: Maybe ApiGatewayUsagePlanQuotaSettings
   , _apiGatewayUsagePlanThrottle :: Maybe ApiGatewayUsagePlanThrottleSettings
   , _apiGatewayUsagePlanUsagePlanName :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ApiGatewayUsagePlan where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 20, omitNothingFields = True }
+  toJSON ApiGatewayUsagePlan{..} =
+    object $
+    catMaybes
+    [ ("ApiStages" .=) <$> _apiGatewayUsagePlanApiStages
+    , ("Description" .=) <$> _apiGatewayUsagePlanDescription
+    , ("Quota" .=) <$> _apiGatewayUsagePlanQuota
+    , ("Throttle" .=) <$> _apiGatewayUsagePlanThrottle
+    , ("UsagePlanName" .=) <$> _apiGatewayUsagePlanUsagePlanName
+    ]
 
 instance FromJSON ApiGatewayUsagePlan where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 20, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ApiGatewayUsagePlan <$>
+      obj .:? "ApiStages" <*>
+      obj .:? "Description" <*>
+      obj .:? "Quota" <*>
+      obj .:? "Throttle" <*>
+      obj .:? "UsagePlanName"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ApiGatewayUsagePlan' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/ApplicationAutoScalingScalableTarget.hs b/library-gen/Stratosphere/Resources/ApplicationAutoScalingScalableTarget.hs
--- a/library-gen/Stratosphere/Resources/ApplicationAutoScalingScalableTarget.hs
+++ b/library-gen/Stratosphere/Resources/ApplicationAutoScalingScalableTarget.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationautoscaling-scalabletarget.html
 
 module Stratosphere.Resources.ApplicationAutoScalingScalableTarget where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -24,13 +24,30 @@
   , _applicationAutoScalingScalableTargetRoleARN :: Val Text
   , _applicationAutoScalingScalableTargetScalableDimension :: Val Text
   , _applicationAutoScalingScalableTargetServiceNamespace :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ApplicationAutoScalingScalableTarget where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 37, omitNothingFields = True }
+  toJSON ApplicationAutoScalingScalableTarget{..} =
+    object $
+    catMaybes
+    [ Just ("MaxCapacity" .= _applicationAutoScalingScalableTargetMaxCapacity)
+    , Just ("MinCapacity" .= _applicationAutoScalingScalableTargetMinCapacity)
+    , Just ("ResourceId" .= _applicationAutoScalingScalableTargetResourceId)
+    , Just ("RoleARN" .= _applicationAutoScalingScalableTargetRoleARN)
+    , Just ("ScalableDimension" .= _applicationAutoScalingScalableTargetScalableDimension)
+    , Just ("ServiceNamespace" .= _applicationAutoScalingScalableTargetServiceNamespace)
+    ]
 
 instance FromJSON ApplicationAutoScalingScalableTarget where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 37, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ApplicationAutoScalingScalableTarget <$>
+      obj .: "MaxCapacity" <*>
+      obj .: "MinCapacity" <*>
+      obj .: "ResourceId" <*>
+      obj .: "RoleARN" <*>
+      obj .: "ScalableDimension" <*>
+      obj .: "ServiceNamespace"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ApplicationAutoScalingScalableTarget' containing
 -- | required fields as arguments.
diff --git a/library-gen/Stratosphere/Resources/ApplicationAutoScalingScalingPolicy.hs b/library-gen/Stratosphere/Resources/ApplicationAutoScalingScalingPolicy.hs
--- a/library-gen/Stratosphere/Resources/ApplicationAutoScalingScalingPolicy.hs
+++ b/library-gen/Stratosphere/Resources/ApplicationAutoScalingScalingPolicy.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationautoscaling-scalingpolicy.html
 
 module Stratosphere.Resources.ApplicationAutoScalingScalingPolicy where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.ApplicationAutoScalingScalingPolicyStepScalingPolicyConfiguration
@@ -25,13 +25,32 @@
   , _applicationAutoScalingScalingPolicyScalingTargetId :: Maybe (Val Text)
   , _applicationAutoScalingScalingPolicyServiceNamespace :: Maybe (Val Text)
   , _applicationAutoScalingScalingPolicyStepScalingPolicyConfiguration :: Maybe ApplicationAutoScalingScalingPolicyStepScalingPolicyConfiguration
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ApplicationAutoScalingScalingPolicy where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 36, omitNothingFields = True }
+  toJSON ApplicationAutoScalingScalingPolicy{..} =
+    object $
+    catMaybes
+    [ Just ("PolicyName" .= _applicationAutoScalingScalingPolicyPolicyName)
+    , Just ("PolicyType" .= _applicationAutoScalingScalingPolicyPolicyType)
+    , ("ResourceId" .=) <$> _applicationAutoScalingScalingPolicyResourceId
+    , ("ScalableDimension" .=) <$> _applicationAutoScalingScalingPolicyScalableDimension
+    , ("ScalingTargetId" .=) <$> _applicationAutoScalingScalingPolicyScalingTargetId
+    , ("ServiceNamespace" .=) <$> _applicationAutoScalingScalingPolicyServiceNamespace
+    , ("StepScalingPolicyConfiguration" .=) <$> _applicationAutoScalingScalingPolicyStepScalingPolicyConfiguration
+    ]
 
 instance FromJSON ApplicationAutoScalingScalingPolicy where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 36, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ApplicationAutoScalingScalingPolicy <$>
+      obj .: "PolicyName" <*>
+      obj .: "PolicyType" <*>
+      obj .:? "ResourceId" <*>
+      obj .:? "ScalableDimension" <*>
+      obj .:? "ScalingTargetId" <*>
+      obj .:? "ServiceNamespace" <*>
+      obj .:? "StepScalingPolicyConfiguration"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ApplicationAutoScalingScalingPolicy' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/Resources/AutoScalingAutoScalingGroup.hs b/library-gen/Stratosphere/Resources/AutoScalingAutoScalingGroup.hs
--- a/library-gen/Stratosphere/Resources/AutoScalingAutoScalingGroup.hs
+++ b/library-gen/Stratosphere/Resources/AutoScalingAutoScalingGroup.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html
 
 module Stratosphere.Resources.AutoScalingAutoScalingGroup where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.AutoScalingAutoScalingGroupMetricsCollection
@@ -37,13 +37,52 @@
   , _autoScalingAutoScalingGroupTargetGroupARNs :: Maybe [Val Text]
   , _autoScalingAutoScalingGroupTerminationPolicies :: Maybe [Val Text]
   , _autoScalingAutoScalingGroupVPCZoneIdentifier :: Maybe [Val Text]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON AutoScalingAutoScalingGroup where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+  toJSON AutoScalingAutoScalingGroup{..} =
+    object $
+    catMaybes
+    [ ("AvailabilityZones" .=) <$> _autoScalingAutoScalingGroupAvailabilityZones
+    , ("Cooldown" .=) <$> _autoScalingAutoScalingGroupCooldown
+    , ("DesiredCapacity" .=) <$> _autoScalingAutoScalingGroupDesiredCapacity
+    , ("HealthCheckGracePeriod" .=) <$> _autoScalingAutoScalingGroupHealthCheckGracePeriod
+    , ("HealthCheckType" .=) <$> _autoScalingAutoScalingGroupHealthCheckType
+    , ("InstanceId" .=) <$> _autoScalingAutoScalingGroupInstanceId
+    , ("LaunchConfigurationName" .=) <$> _autoScalingAutoScalingGroupLaunchConfigurationName
+    , ("LoadBalancerNames" .=) <$> _autoScalingAutoScalingGroupLoadBalancerNames
+    , Just ("MaxSize" .= _autoScalingAutoScalingGroupMaxSize)
+    , ("MetricsCollection" .=) <$> _autoScalingAutoScalingGroupMetricsCollection
+    , Just ("MinSize" .= _autoScalingAutoScalingGroupMinSize)
+    , ("NotificationConfigurations" .=) <$> _autoScalingAutoScalingGroupNotificationConfigurations
+    , ("PlacementGroup" .=) <$> _autoScalingAutoScalingGroupPlacementGroup
+    , ("Tags" .=) <$> _autoScalingAutoScalingGroupTags
+    , ("TargetGroupARNs" .=) <$> _autoScalingAutoScalingGroupTargetGroupARNs
+    , ("TerminationPolicies" .=) <$> _autoScalingAutoScalingGroupTerminationPolicies
+    , ("VPCZoneIdentifier" .=) <$> _autoScalingAutoScalingGroupVPCZoneIdentifier
+    ]
 
 instance FromJSON AutoScalingAutoScalingGroup where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+  parseJSON (Object obj) =
+    AutoScalingAutoScalingGroup <$>
+      obj .:? "AvailabilityZones" <*>
+      obj .:? "Cooldown" <*>
+      obj .:? "DesiredCapacity" <*>
+      obj .:? "HealthCheckGracePeriod" <*>
+      obj .:? "HealthCheckType" <*>
+      obj .:? "InstanceId" <*>
+      obj .:? "LaunchConfigurationName" <*>
+      obj .:? "LoadBalancerNames" <*>
+      obj .: "MaxSize" <*>
+      obj .:? "MetricsCollection" <*>
+      obj .: "MinSize" <*>
+      obj .:? "NotificationConfigurations" <*>
+      obj .:? "PlacementGroup" <*>
+      obj .:? "Tags" <*>
+      obj .:? "TargetGroupARNs" <*>
+      obj .:? "TerminationPolicies" <*>
+      obj .:? "VPCZoneIdentifier"
+  parseJSON _ = mempty
 
 -- | Constructor for 'AutoScalingAutoScalingGroup' containing required fields
 -- | as arguments.
diff --git a/library-gen/Stratosphere/Resources/AutoScalingLaunchConfiguration.hs b/library-gen/Stratosphere/Resources/AutoScalingLaunchConfiguration.hs
--- a/library-gen/Stratosphere/Resources/AutoScalingLaunchConfiguration.hs
+++ b/library-gen/Stratosphere/Resources/AutoScalingLaunchConfiguration.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-launchconfig.html
 
 module Stratosphere.Resources.AutoScalingLaunchConfiguration where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.AutoScalingLaunchConfigurationBlockDeviceMapping
@@ -35,13 +35,52 @@
   , _autoScalingLaunchConfigurationSecurityGroups :: Maybe [Val Text]
   , _autoScalingLaunchConfigurationSpotPrice :: Maybe (Val Text)
   , _autoScalingLaunchConfigurationUserData :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON AutoScalingLaunchConfiguration where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 31, omitNothingFields = True }
+  toJSON AutoScalingLaunchConfiguration{..} =
+    object $
+    catMaybes
+    [ ("AssociatePublicIpAddress" .=) <$> _autoScalingLaunchConfigurationAssociatePublicIpAddress
+    , ("BlockDeviceMappings" .=) <$> _autoScalingLaunchConfigurationBlockDeviceMappings
+    , ("ClassicLinkVPCId" .=) <$> _autoScalingLaunchConfigurationClassicLinkVPCId
+    , ("ClassicLinkVPCSecurityGroups" .=) <$> _autoScalingLaunchConfigurationClassicLinkVPCSecurityGroups
+    , ("EbsOptimized" .=) <$> _autoScalingLaunchConfigurationEbsOptimized
+    , ("IamInstanceProfile" .=) <$> _autoScalingLaunchConfigurationIamInstanceProfile
+    , Just ("ImageId" .= _autoScalingLaunchConfigurationImageId)
+    , ("InstanceId" .=) <$> _autoScalingLaunchConfigurationInstanceId
+    , ("InstanceMonitoring" .=) <$> _autoScalingLaunchConfigurationInstanceMonitoring
+    , Just ("InstanceType" .= _autoScalingLaunchConfigurationInstanceType)
+    , ("KernelId" .=) <$> _autoScalingLaunchConfigurationKernelId
+    , ("KeyName" .=) <$> _autoScalingLaunchConfigurationKeyName
+    , ("PlacementTenancy" .=) <$> _autoScalingLaunchConfigurationPlacementTenancy
+    , ("RamDiskId" .=) <$> _autoScalingLaunchConfigurationRamDiskId
+    , ("SecurityGroups" .=) <$> _autoScalingLaunchConfigurationSecurityGroups
+    , ("SpotPrice" .=) <$> _autoScalingLaunchConfigurationSpotPrice
+    , ("UserData" .=) <$> _autoScalingLaunchConfigurationUserData
+    ]
 
 instance FromJSON AutoScalingLaunchConfiguration where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 31, omitNothingFields = True }
+  parseJSON (Object obj) =
+    AutoScalingLaunchConfiguration <$>
+      obj .:? "AssociatePublicIpAddress" <*>
+      obj .:? "BlockDeviceMappings" <*>
+      obj .:? "ClassicLinkVPCId" <*>
+      obj .:? "ClassicLinkVPCSecurityGroups" <*>
+      obj .:? "EbsOptimized" <*>
+      obj .:? "IamInstanceProfile" <*>
+      obj .: "ImageId" <*>
+      obj .:? "InstanceId" <*>
+      obj .:? "InstanceMonitoring" <*>
+      obj .: "InstanceType" <*>
+      obj .:? "KernelId" <*>
+      obj .:? "KeyName" <*>
+      obj .:? "PlacementTenancy" <*>
+      obj .:? "RamDiskId" <*>
+      obj .:? "SecurityGroups" <*>
+      obj .:? "SpotPrice" <*>
+      obj .:? "UserData"
+  parseJSON _ = mempty
 
 -- | Constructor for 'AutoScalingLaunchConfiguration' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/Resources/AutoScalingLifecycleHook.hs b/library-gen/Stratosphere/Resources/AutoScalingLifecycleHook.hs
--- a/library-gen/Stratosphere/Resources/AutoScalingLifecycleHook.hs
+++ b/library-gen/Stratosphere/Resources/AutoScalingLifecycleHook.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-as-lifecyclehook.html
 
 module Stratosphere.Resources.AutoScalingLifecycleHook where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -25,13 +25,32 @@
   , _autoScalingLifecycleHookNotificationMetadata :: Maybe (Val Text)
   , _autoScalingLifecycleHookNotificationTargetARN :: Val Text
   , _autoScalingLifecycleHookRoleARN :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON AutoScalingLifecycleHook where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 25, omitNothingFields = True }
+  toJSON AutoScalingLifecycleHook{..} =
+    object $
+    catMaybes
+    [ Just ("AutoScalingGroupName" .= _autoScalingLifecycleHookAutoScalingGroupName)
+    , ("DefaultResult" .=) <$> _autoScalingLifecycleHookDefaultResult
+    , ("HeartbeatTimeout" .=) <$> _autoScalingLifecycleHookHeartbeatTimeout
+    , Just ("LifecycleTransition" .= _autoScalingLifecycleHookLifecycleTransition)
+    , ("NotificationMetadata" .=) <$> _autoScalingLifecycleHookNotificationMetadata
+    , Just ("NotificationTargetARN" .= _autoScalingLifecycleHookNotificationTargetARN)
+    , Just ("RoleARN" .= _autoScalingLifecycleHookRoleARN)
+    ]
 
 instance FromJSON AutoScalingLifecycleHook where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 25, omitNothingFields = True }
+  parseJSON (Object obj) =
+    AutoScalingLifecycleHook <$>
+      obj .: "AutoScalingGroupName" <*>
+      obj .:? "DefaultResult" <*>
+      obj .:? "HeartbeatTimeout" <*>
+      obj .: "LifecycleTransition" <*>
+      obj .:? "NotificationMetadata" <*>
+      obj .: "NotificationTargetARN" <*>
+      obj .: "RoleARN"
+  parseJSON _ = mempty
 
 -- | Constructor for 'AutoScalingLifecycleHook' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/AutoScalingScalingPolicy.hs b/library-gen/Stratosphere/Resources/AutoScalingScalingPolicy.hs
--- a/library-gen/Stratosphere/Resources/AutoScalingScalingPolicy.hs
+++ b/library-gen/Stratosphere/Resources/AutoScalingScalingPolicy.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-policy.html
 
 module Stratosphere.Resources.AutoScalingScalingPolicy where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.AutoScalingScalingPolicyStepAdjustment
@@ -27,13 +27,36 @@
   , _autoScalingScalingPolicyPolicyType :: Maybe (Val Text)
   , _autoScalingScalingPolicyScalingAdjustment :: Maybe (Val Integer')
   , _autoScalingScalingPolicyStepAdjustments :: Maybe [AutoScalingScalingPolicyStepAdjustment]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON AutoScalingScalingPolicy where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 25, omitNothingFields = True }
+  toJSON AutoScalingScalingPolicy{..} =
+    object $
+    catMaybes
+    [ Just ("AdjustmentType" .= _autoScalingScalingPolicyAdjustmentType)
+    , Just ("AutoScalingGroupName" .= _autoScalingScalingPolicyAutoScalingGroupName)
+    , ("Cooldown" .=) <$> _autoScalingScalingPolicyCooldown
+    , ("EstimatedInstanceWarmup" .=) <$> _autoScalingScalingPolicyEstimatedInstanceWarmup
+    , ("MetricAggregationType" .=) <$> _autoScalingScalingPolicyMetricAggregationType
+    , ("MinAdjustmentMagnitude" .=) <$> _autoScalingScalingPolicyMinAdjustmentMagnitude
+    , ("PolicyType" .=) <$> _autoScalingScalingPolicyPolicyType
+    , ("ScalingAdjustment" .=) <$> _autoScalingScalingPolicyScalingAdjustment
+    , ("StepAdjustments" .=) <$> _autoScalingScalingPolicyStepAdjustments
+    ]
 
 instance FromJSON AutoScalingScalingPolicy where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 25, omitNothingFields = True }
+  parseJSON (Object obj) =
+    AutoScalingScalingPolicy <$>
+      obj .: "AdjustmentType" <*>
+      obj .: "AutoScalingGroupName" <*>
+      obj .:? "Cooldown" <*>
+      obj .:? "EstimatedInstanceWarmup" <*>
+      obj .:? "MetricAggregationType" <*>
+      obj .:? "MinAdjustmentMagnitude" <*>
+      obj .:? "PolicyType" <*>
+      obj .:? "ScalingAdjustment" <*>
+      obj .:? "StepAdjustments"
+  parseJSON _ = mempty
 
 -- | Constructor for 'AutoScalingScalingPolicy' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/AutoScalingScheduledAction.hs b/library-gen/Stratosphere/Resources/AutoScalingScheduledAction.hs
--- a/library-gen/Stratosphere/Resources/AutoScalingScheduledAction.hs
+++ b/library-gen/Stratosphere/Resources/AutoScalingScheduledAction.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-as-scheduledaction.html
 
 module Stratosphere.Resources.AutoScalingScheduledAction where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -25,13 +25,32 @@
   , _autoScalingScheduledActionMinSize :: Maybe (Val Integer')
   , _autoScalingScheduledActionRecurrence :: Maybe (Val Text)
   , _autoScalingScheduledActionStartTime :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON AutoScalingScheduledAction where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
+  toJSON AutoScalingScheduledAction{..} =
+    object $
+    catMaybes
+    [ Just ("AutoScalingGroupName" .= _autoScalingScheduledActionAutoScalingGroupName)
+    , ("DesiredCapacity" .=) <$> _autoScalingScheduledActionDesiredCapacity
+    , ("EndTime" .=) <$> _autoScalingScheduledActionEndTime
+    , ("MaxSize" .=) <$> _autoScalingScheduledActionMaxSize
+    , ("MinSize" .=) <$> _autoScalingScheduledActionMinSize
+    , ("Recurrence" .=) <$> _autoScalingScheduledActionRecurrence
+    , ("StartTime" .=) <$> _autoScalingScheduledActionStartTime
+    ]
 
 instance FromJSON AutoScalingScheduledAction where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
+  parseJSON (Object obj) =
+    AutoScalingScheduledAction <$>
+      obj .: "AutoScalingGroupName" <*>
+      obj .:? "DesiredCapacity" <*>
+      obj .:? "EndTime" <*>
+      obj .:? "MaxSize" <*>
+      obj .:? "MinSize" <*>
+      obj .:? "Recurrence" <*>
+      obj .:? "StartTime"
+  parseJSON _ = mempty
 
 -- | Constructor for 'AutoScalingScheduledAction' containing required fields
 -- | as arguments.
diff --git a/library-gen/Stratosphere/Resources/CertificateManagerCertificate.hs b/library-gen/Stratosphere/Resources/CertificateManagerCertificate.hs
--- a/library-gen/Stratosphere/Resources/CertificateManagerCertificate.hs
+++ b/library-gen/Stratosphere/Resources/CertificateManagerCertificate.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-certificatemanager-certificate.html
 
 module Stratosphere.Resources.CertificateManagerCertificate where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.CertificateManagerCertificateDomainValidationOption
@@ -23,13 +23,26 @@
   , _certificateManagerCertificateDomainValidationOptions :: Maybe [CertificateManagerCertificateDomainValidationOption]
   , _certificateManagerCertificateSubjectAlternativeNames :: Maybe [Val Text]
   , _certificateManagerCertificateTags :: Maybe [Tag]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON CertificateManagerCertificate where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
+  toJSON CertificateManagerCertificate{..} =
+    object $
+    catMaybes
+    [ Just ("DomainName" .= _certificateManagerCertificateDomainName)
+    , ("DomainValidationOptions" .=) <$> _certificateManagerCertificateDomainValidationOptions
+    , ("SubjectAlternativeNames" .=) <$> _certificateManagerCertificateSubjectAlternativeNames
+    , ("Tags" .=) <$> _certificateManagerCertificateTags
+    ]
 
 instance FromJSON CertificateManagerCertificate where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
+  parseJSON (Object obj) =
+    CertificateManagerCertificate <$>
+      obj .: "DomainName" <*>
+      obj .:? "DomainValidationOptions" <*>
+      obj .:? "SubjectAlternativeNames" <*>
+      obj .:? "Tags"
+  parseJSON _ = mempty
 
 -- | Constructor for 'CertificateManagerCertificate' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/Resources/CloudFormationCustomResource.hs b/library-gen/Stratosphere/Resources/CloudFormationCustomResource.hs
--- a/library-gen/Stratosphere/Resources/CloudFormationCustomResource.hs
+++ b/library-gen/Stratosphere/Resources/CloudFormationCustomResource.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cfn-customresource.html
 
 module Stratosphere.Resources.CloudFormationCustomResource where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -19,13 +19,20 @@
 data CloudFormationCustomResource =
   CloudFormationCustomResource
   { _cloudFormationCustomResourceServiceToken :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON CloudFormationCustomResource where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 29, omitNothingFields = True }
+  toJSON CloudFormationCustomResource{..} =
+    object $
+    catMaybes
+    [ Just ("ServiceToken" .= _cloudFormationCustomResourceServiceToken)
+    ]
 
 instance FromJSON CloudFormationCustomResource where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 29, omitNothingFields = True }
+  parseJSON (Object obj) =
+    CloudFormationCustomResource <$>
+      obj .: "ServiceToken"
+  parseJSON _ = mempty
 
 -- | Constructor for 'CloudFormationCustomResource' containing required fields
 -- | as arguments.
diff --git a/library-gen/Stratosphere/Resources/CloudFormationStack.hs b/library-gen/Stratosphere/Resources/CloudFormationStack.hs
--- a/library-gen/Stratosphere/Resources/CloudFormationStack.hs
+++ b/library-gen/Stratosphere/Resources/CloudFormationStack.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-stack.html
 
 module Stratosphere.Resources.CloudFormationStack where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.Tag
@@ -23,13 +23,28 @@
   , _cloudFormationStackTags :: Maybe [Tag]
   , _cloudFormationStackTemplateURL :: Val Text
   , _cloudFormationStackTimeoutInMinutes :: Maybe (Val Integer')
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON CloudFormationStack where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 20, omitNothingFields = True }
+  toJSON CloudFormationStack{..} =
+    object $
+    catMaybes
+    [ ("NotificationARNs" .=) <$> _cloudFormationStackNotificationARNs
+    , ("Parameters" .=) <$> _cloudFormationStackParameters
+    , ("Tags" .=) <$> _cloudFormationStackTags
+    , Just ("TemplateURL" .= _cloudFormationStackTemplateURL)
+    , ("TimeoutInMinutes" .=) <$> _cloudFormationStackTimeoutInMinutes
+    ]
 
 instance FromJSON CloudFormationStack where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 20, omitNothingFields = True }
+  parseJSON (Object obj) =
+    CloudFormationStack <$>
+      obj .:? "NotificationARNs" <*>
+      obj .:? "Parameters" <*>
+      obj .:? "Tags" <*>
+      obj .: "TemplateURL" <*>
+      obj .:? "TimeoutInMinutes"
+  parseJSON _ = mempty
 
 -- | Constructor for 'CloudFormationStack' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/CloudFormationWaitCondition.hs b/library-gen/Stratosphere/Resources/CloudFormationWaitCondition.hs
--- a/library-gen/Stratosphere/Resources/CloudFormationWaitCondition.hs
+++ b/library-gen/Stratosphere/Resources/CloudFormationWaitCondition.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waitcondition.html
 
 module Stratosphere.Resources.CloudFormationWaitCondition where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -21,13 +21,24 @@
   { _cloudFormationWaitConditionCount :: Maybe (Val Integer')
   , _cloudFormationWaitConditionHandle :: Val Text
   , _cloudFormationWaitConditionTimeout :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON CloudFormationWaitCondition where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+  toJSON CloudFormationWaitCondition{..} =
+    object $
+    catMaybes
+    [ ("Count" .=) <$> _cloudFormationWaitConditionCount
+    , Just ("Handle" .= _cloudFormationWaitConditionHandle)
+    , Just ("Timeout" .= _cloudFormationWaitConditionTimeout)
+    ]
 
 instance FromJSON CloudFormationWaitCondition where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+  parseJSON (Object obj) =
+    CloudFormationWaitCondition <$>
+      obj .:? "Count" <*>
+      obj .: "Handle" <*>
+      obj .: "Timeout"
+  parseJSON _ = mempty
 
 -- | Constructor for 'CloudFormationWaitCondition' containing required fields
 -- | as arguments.
diff --git a/library-gen/Stratosphere/Resources/CloudFormationWaitConditionHandle.hs b/library-gen/Stratosphere/Resources/CloudFormationWaitConditionHandle.hs
--- a/library-gen/Stratosphere/Resources/CloudFormationWaitConditionHandle.hs
+++ b/library-gen/Stratosphere/Resources/CloudFormationWaitConditionHandle.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waitconditionhandle.html
 
 module Stratosphere.Resources.CloudFormationWaitConditionHandle where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -19,13 +19,14 @@
 data CloudFormationWaitConditionHandle =
   CloudFormationWaitConditionHandle
   { 
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON CloudFormationWaitConditionHandle where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 34, omitNothingFields = True }
+  toJSON _ = toJSON ([] :: [String])
 
 instance FromJSON CloudFormationWaitConditionHandle where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 34, omitNothingFields = True }
+  parseJSON (Array _) = return CloudFormationWaitConditionHandle
+  parseJSON _ = mempty
 
 -- | Constructor for 'CloudFormationWaitConditionHandle' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/Resources/CloudFrontDistribution.hs b/library-gen/Stratosphere/Resources/CloudFrontDistribution.hs
--- a/library-gen/Stratosphere/Resources/CloudFrontDistribution.hs
+++ b/library-gen/Stratosphere/Resources/CloudFrontDistribution.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution.html
 
 module Stratosphere.Resources.CloudFrontDistribution where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.CloudFrontDistributionDistributionConfig
@@ -19,13 +19,20 @@
 data CloudFrontDistribution =
   CloudFrontDistribution
   { _cloudFrontDistributionDistributionConfig :: CloudFrontDistributionDistributionConfig
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON CloudFrontDistribution where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 23, omitNothingFields = True }
+  toJSON CloudFrontDistribution{..} =
+    object $
+    catMaybes
+    [ Just ("DistributionConfig" .= _cloudFrontDistributionDistributionConfig)
+    ]
 
 instance FromJSON CloudFrontDistribution where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 23, omitNothingFields = True }
+  parseJSON (Object obj) =
+    CloudFrontDistribution <$>
+      obj .: "DistributionConfig"
+  parseJSON _ = mempty
 
 -- | Constructor for 'CloudFrontDistribution' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/CloudTrailTrail.hs b/library-gen/Stratosphere/Resources/CloudTrailTrail.hs
--- a/library-gen/Stratosphere/Resources/CloudTrailTrail.hs
+++ b/library-gen/Stratosphere/Resources/CloudTrailTrail.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudtrail-trail.html
 
 module Stratosphere.Resources.CloudTrailTrail where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -28,13 +28,38 @@
   , _cloudTrailTrailS3BucketName :: Val Text
   , _cloudTrailTrailS3KeyPrefix :: Maybe (Val Text)
   , _cloudTrailTrailSnsTopicName :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON CloudTrailTrail where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 16, omitNothingFields = True }
+  toJSON CloudTrailTrail{..} =
+    object $
+    catMaybes
+    [ ("CloudWatchLogsLogGroupArn" .=) <$> _cloudTrailTrailCloudWatchLogsLogGroupArn
+    , ("CloudWatchLogsRoleArn" .=) <$> _cloudTrailTrailCloudWatchLogsRoleArn
+    , ("EnableLogFileValidation" .=) <$> _cloudTrailTrailEnableLogFileValidation
+    , ("IncludeGlobalServiceEvents" .=) <$> _cloudTrailTrailIncludeGlobalServiceEvents
+    , Just ("IsLogging" .= _cloudTrailTrailIsLogging)
+    , ("IsMultiRegionTrail" .=) <$> _cloudTrailTrailIsMultiRegionTrail
+    , ("KMSKeyId" .=) <$> _cloudTrailTrailKMSKeyId
+    , Just ("S3BucketName" .= _cloudTrailTrailS3BucketName)
+    , ("S3KeyPrefix" .=) <$> _cloudTrailTrailS3KeyPrefix
+    , ("SnsTopicName" .=) <$> _cloudTrailTrailSnsTopicName
+    ]
 
 instance FromJSON CloudTrailTrail where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 16, omitNothingFields = True }
+  parseJSON (Object obj) =
+    CloudTrailTrail <$>
+      obj .:? "CloudWatchLogsLogGroupArn" <*>
+      obj .:? "CloudWatchLogsRoleArn" <*>
+      obj .:? "EnableLogFileValidation" <*>
+      obj .:? "IncludeGlobalServiceEvents" <*>
+      obj .: "IsLogging" <*>
+      obj .:? "IsMultiRegionTrail" <*>
+      obj .:? "KMSKeyId" <*>
+      obj .: "S3BucketName" <*>
+      obj .:? "S3KeyPrefix" <*>
+      obj .:? "SnsTopicName"
+  parseJSON _ = mempty
 
 -- | Constructor for 'CloudTrailTrail' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/CloudWatchAlarm.hs b/library-gen/Stratosphere/Resources/CloudWatchAlarm.hs
--- a/library-gen/Stratosphere/Resources/CloudWatchAlarm.hs
+++ b/library-gen/Stratosphere/Resources/CloudWatchAlarm.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cw-alarm.html
 
 module Stratosphere.Resources.CloudWatchAlarm where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.CloudWatchAlarmDimension
@@ -24,7 +24,7 @@
   , _cloudWatchAlarmAlarmName :: Maybe (Val Text)
   , _cloudWatchAlarmComparisonOperator :: Val Text
   , _cloudWatchAlarmDimensions :: Maybe [CloudWatchAlarmDimension]
-  , _cloudWatchAlarmEvaluationPeriods :: Val Double'
+  , _cloudWatchAlarmEvaluationPeriods :: Val Integer'
   , _cloudWatchAlarmInsufficientDataActions :: Maybe [Val Text]
   , _cloudWatchAlarmMetricName :: Val Text
   , _cloudWatchAlarmNamespace :: Val Text
@@ -33,19 +33,54 @@
   , _cloudWatchAlarmStatistic :: Val Text
   , _cloudWatchAlarmThreshold :: Val Double'
   , _cloudWatchAlarmUnit :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON CloudWatchAlarm where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 16, omitNothingFields = True }
+  toJSON CloudWatchAlarm{..} =
+    object $
+    catMaybes
+    [ ("ActionsEnabled" .=) <$> _cloudWatchAlarmActionsEnabled
+    , ("AlarmActions" .=) <$> _cloudWatchAlarmAlarmActions
+    , ("AlarmDescription" .=) <$> _cloudWatchAlarmAlarmDescription
+    , ("AlarmName" .=) <$> _cloudWatchAlarmAlarmName
+    , Just ("ComparisonOperator" .= _cloudWatchAlarmComparisonOperator)
+    , ("Dimensions" .=) <$> _cloudWatchAlarmDimensions
+    , Just ("EvaluationPeriods" .= _cloudWatchAlarmEvaluationPeriods)
+    , ("InsufficientDataActions" .=) <$> _cloudWatchAlarmInsufficientDataActions
+    , Just ("MetricName" .= _cloudWatchAlarmMetricName)
+    , Just ("Namespace" .= _cloudWatchAlarmNamespace)
+    , ("OKActions" .=) <$> _cloudWatchAlarmOKActions
+    , Just ("Period" .= _cloudWatchAlarmPeriod)
+    , Just ("Statistic" .= _cloudWatchAlarmStatistic)
+    , Just ("Threshold" .= _cloudWatchAlarmThreshold)
+    , ("Unit" .=) <$> _cloudWatchAlarmUnit
+    ]
 
 instance FromJSON CloudWatchAlarm where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 16, omitNothingFields = True }
+  parseJSON (Object obj) =
+    CloudWatchAlarm <$>
+      obj .:? "ActionsEnabled" <*>
+      obj .:? "AlarmActions" <*>
+      obj .:? "AlarmDescription" <*>
+      obj .:? "AlarmName" <*>
+      obj .: "ComparisonOperator" <*>
+      obj .:? "Dimensions" <*>
+      obj .: "EvaluationPeriods" <*>
+      obj .:? "InsufficientDataActions" <*>
+      obj .: "MetricName" <*>
+      obj .: "Namespace" <*>
+      obj .:? "OKActions" <*>
+      obj .: "Period" <*>
+      obj .: "Statistic" <*>
+      obj .: "Threshold" <*>
+      obj .:? "Unit"
+  parseJSON _ = mempty
 
 -- | Constructor for 'CloudWatchAlarm' containing required fields as
 -- | arguments.
 cloudWatchAlarm
   :: Val Text -- ^ 'cwaComparisonOperator'
-  -> Val Double' -- ^ 'cwaEvaluationPeriods'
+  -> Val Integer' -- ^ 'cwaEvaluationPeriods'
   -> Val Text -- ^ 'cwaMetricName'
   -> Val Text -- ^ 'cwaNamespace'
   -> Val Integer' -- ^ 'cwaPeriod'
@@ -96,7 +131,7 @@
 cwaDimensions = lens _cloudWatchAlarmDimensions (\s a -> s { _cloudWatchAlarmDimensions = a })
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cw-alarm.html#cfn-cloudwatch-alarms-evaluationperiods
-cwaEvaluationPeriods :: Lens' CloudWatchAlarm (Val Double')
+cwaEvaluationPeriods :: Lens' CloudWatchAlarm (Val Integer')
 cwaEvaluationPeriods = lens _cloudWatchAlarmEvaluationPeriods (\s a -> s { _cloudWatchAlarmEvaluationPeriods = a })
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cw-alarm.html#cfn-cloudwatch-alarms-insufficientdataactions
diff --git a/library-gen/Stratosphere/Resources/CodeBuildProject.hs b/library-gen/Stratosphere/Resources/CodeBuildProject.hs
--- a/library-gen/Stratosphere/Resources/CodeBuildProject.hs
+++ b/library-gen/Stratosphere/Resources/CodeBuildProject.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codebuild-project.html
 
 module Stratosphere.Resources.CodeBuildProject where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.CodeBuildProjectArtifacts
@@ -30,13 +30,36 @@
   , _codeBuildProjectSource :: Maybe CodeBuildProjectSource
   , _codeBuildProjectTags :: Maybe [Tag]
   , _codeBuildProjectTimeoutInMinutes :: Maybe (Val Integer')
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON CodeBuildProject where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
+  toJSON CodeBuildProject{..} =
+    object $
+    catMaybes
+    [ ("Artifacts" .=) <$> _codeBuildProjectArtifacts
+    , ("Description" .=) <$> _codeBuildProjectDescription
+    , ("EncryptionKey" .=) <$> _codeBuildProjectEncryptionKey
+    , ("Environment" .=) <$> _codeBuildProjectEnvironment
+    , ("Name" .=) <$> _codeBuildProjectName
+    , ("ServiceRole" .=) <$> _codeBuildProjectServiceRole
+    , ("Source" .=) <$> _codeBuildProjectSource
+    , ("Tags" .=) <$> _codeBuildProjectTags
+    , ("TimeoutInMinutes" .=) <$> _codeBuildProjectTimeoutInMinutes
+    ]
 
 instance FromJSON CodeBuildProject where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
+  parseJSON (Object obj) =
+    CodeBuildProject <$>
+      obj .:? "Artifacts" <*>
+      obj .:? "Description" <*>
+      obj .:? "EncryptionKey" <*>
+      obj .:? "Environment" <*>
+      obj .:? "Name" <*>
+      obj .:? "ServiceRole" <*>
+      obj .:? "Source" <*>
+      obj .:? "Tags" <*>
+      obj .:? "TimeoutInMinutes"
+  parseJSON _ = mempty
 
 -- | Constructor for 'CodeBuildProject' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/CodeCommitRepository.hs b/library-gen/Stratosphere/Resources/CodeCommitRepository.hs
--- a/library-gen/Stratosphere/Resources/CodeCommitRepository.hs
+++ b/library-gen/Stratosphere/Resources/CodeCommitRepository.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codecommit-repository.html
 
 module Stratosphere.Resources.CodeCommitRepository where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.CodeCommitRepositoryRepositoryTrigger
@@ -21,13 +21,24 @@
   { _codeCommitRepositoryRepositoryDescription :: Maybe (Val Text)
   , _codeCommitRepositoryRepositoryName :: Val Text
   , _codeCommitRepositoryTriggers :: Maybe [CodeCommitRepositoryRepositoryTrigger]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON CodeCommitRepository where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 21, omitNothingFields = True }
+  toJSON CodeCommitRepository{..} =
+    object $
+    catMaybes
+    [ ("RepositoryDescription" .=) <$> _codeCommitRepositoryRepositoryDescription
+    , Just ("RepositoryName" .= _codeCommitRepositoryRepositoryName)
+    , ("Triggers" .=) <$> _codeCommitRepositoryTriggers
+    ]
 
 instance FromJSON CodeCommitRepository where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 21, omitNothingFields = True }
+  parseJSON (Object obj) =
+    CodeCommitRepository <$>
+      obj .:? "RepositoryDescription" <*>
+      obj .: "RepositoryName" <*>
+      obj .:? "Triggers"
+  parseJSON _ = mempty
 
 -- | Constructor for 'CodeCommitRepository' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/CodeDeployApplication.hs b/library-gen/Stratosphere/Resources/CodeDeployApplication.hs
--- a/library-gen/Stratosphere/Resources/CodeDeployApplication.hs
+++ b/library-gen/Stratosphere/Resources/CodeDeployApplication.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codedeploy-application.html
 
 module Stratosphere.Resources.CodeDeployApplication where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -19,13 +19,20 @@
 data CodeDeployApplication =
   CodeDeployApplication
   { _codeDeployApplicationApplicationName :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON CodeDeployApplication where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 22, omitNothingFields = True }
+  toJSON CodeDeployApplication{..} =
+    object $
+    catMaybes
+    [ ("ApplicationName" .=) <$> _codeDeployApplicationApplicationName
+    ]
 
 instance FromJSON CodeDeployApplication where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 22, omitNothingFields = True }
+  parseJSON (Object obj) =
+    CodeDeployApplication <$>
+      obj .:? "ApplicationName"
+  parseJSON _ = mempty
 
 -- | Constructor for 'CodeDeployApplication' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/CodeDeployDeploymentConfig.hs b/library-gen/Stratosphere/Resources/CodeDeployDeploymentConfig.hs
--- a/library-gen/Stratosphere/Resources/CodeDeployDeploymentConfig.hs
+++ b/library-gen/Stratosphere/Resources/CodeDeployDeploymentConfig.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codedeploy-deploymentconfig.html
 
 module Stratosphere.Resources.CodeDeployDeploymentConfig where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   CodeDeployDeploymentConfig
   { _codeDeployDeploymentConfigDeploymentConfigName :: Maybe (Val Text)
   , _codeDeployDeploymentConfigMinimumHealthyHosts :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON CodeDeployDeploymentConfig where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
+  toJSON CodeDeployDeploymentConfig{..} =
+    object $
+    catMaybes
+    [ ("DeploymentConfigName" .=) <$> _codeDeployDeploymentConfigDeploymentConfigName
+    , ("MinimumHealthyHosts" .=) <$> _codeDeployDeploymentConfigMinimumHealthyHosts
+    ]
 
 instance FromJSON CodeDeployDeploymentConfig where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
+  parseJSON (Object obj) =
+    CodeDeployDeploymentConfig <$>
+      obj .:? "DeploymentConfigName" <*>
+      obj .:? "MinimumHealthyHosts"
+  parseJSON _ = mempty
 
 -- | Constructor for 'CodeDeployDeploymentConfig' containing required fields
 -- | as arguments.
diff --git a/library-gen/Stratosphere/Resources/CodeDeployDeploymentGroup.hs b/library-gen/Stratosphere/Resources/CodeDeployDeploymentGroup.hs
--- a/library-gen/Stratosphere/Resources/CodeDeployDeploymentGroup.hs
+++ b/library-gen/Stratosphere/Resources/CodeDeployDeploymentGroup.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codedeploy-deploymentgroup.html
 
 module Stratosphere.Resources.CodeDeployDeploymentGroup where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.CodeDeployDeploymentGroupDeployment
@@ -28,13 +28,34 @@
   , _codeDeployDeploymentGroupEc2TagFilters :: Maybe [CodeDeployDeploymentGroupEc2TagFilter]
   , _codeDeployDeploymentGroupOnPremisesInstanceTagFilters :: Maybe [CodeDeployDeploymentGroupOnPremisesInstanceTagFilter]
   , _codeDeployDeploymentGroupServiceRoleArn :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON CodeDeployDeploymentGroup where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 26, omitNothingFields = True }
+  toJSON CodeDeployDeploymentGroup{..} =
+    object $
+    catMaybes
+    [ Just ("ApplicationName" .= _codeDeployDeploymentGroupApplicationName)
+    , ("AutoScalingGroups" .=) <$> _codeDeployDeploymentGroupAutoScalingGroups
+    , ("Deployment" .=) <$> _codeDeployDeploymentGroupDeployment
+    , ("DeploymentConfigName" .=) <$> _codeDeployDeploymentGroupDeploymentConfigName
+    , ("DeploymentGroupName" .=) <$> _codeDeployDeploymentGroupDeploymentGroupName
+    , ("Ec2TagFilters" .=) <$> _codeDeployDeploymentGroupEc2TagFilters
+    , ("OnPremisesInstanceTagFilters" .=) <$> _codeDeployDeploymentGroupOnPremisesInstanceTagFilters
+    , Just ("ServiceRoleArn" .= _codeDeployDeploymentGroupServiceRoleArn)
+    ]
 
 instance FromJSON CodeDeployDeploymentGroup where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 26, omitNothingFields = True }
+  parseJSON (Object obj) =
+    CodeDeployDeploymentGroup <$>
+      obj .: "ApplicationName" <*>
+      obj .:? "AutoScalingGroups" <*>
+      obj .:? "Deployment" <*>
+      obj .:? "DeploymentConfigName" <*>
+      obj .:? "DeploymentGroupName" <*>
+      obj .:? "Ec2TagFilters" <*>
+      obj .:? "OnPremisesInstanceTagFilters" <*>
+      obj .: "ServiceRoleArn"
+  parseJSON _ = mempty
 
 -- | Constructor for 'CodeDeployDeploymentGroup' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/CodePipelineCustomActionType.hs b/library-gen/Stratosphere/Resources/CodePipelineCustomActionType.hs
--- a/library-gen/Stratosphere/Resources/CodePipelineCustomActionType.hs
+++ b/library-gen/Stratosphere/Resources/CodePipelineCustomActionType.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codepipeline-customactiontype.html
 
 module Stratosphere.Resources.CodePipelineCustomActionType where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.CodePipelineCustomActionTypeConfigurationProperties
@@ -27,13 +27,32 @@
   , _codePipelineCustomActionTypeProvider :: Val Text
   , _codePipelineCustomActionTypeSettings :: Maybe CodePipelineCustomActionTypeSettings
   , _codePipelineCustomActionTypeVersion :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON CodePipelineCustomActionType where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 29, omitNothingFields = True }
+  toJSON CodePipelineCustomActionType{..} =
+    object $
+    catMaybes
+    [ Just ("Category" .= _codePipelineCustomActionTypeCategory)
+    , ("ConfigurationProperties" .=) <$> _codePipelineCustomActionTypeConfigurationProperties
+    , Just ("InputArtifactDetails" .= _codePipelineCustomActionTypeInputArtifactDetails)
+    , Just ("OutputArtifactDetails" .= _codePipelineCustomActionTypeOutputArtifactDetails)
+    , Just ("Provider" .= _codePipelineCustomActionTypeProvider)
+    , ("Settings" .=) <$> _codePipelineCustomActionTypeSettings
+    , ("Version" .=) <$> _codePipelineCustomActionTypeVersion
+    ]
 
 instance FromJSON CodePipelineCustomActionType where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 29, omitNothingFields = True }
+  parseJSON (Object obj) =
+    CodePipelineCustomActionType <$>
+      obj .: "Category" <*>
+      obj .:? "ConfigurationProperties" <*>
+      obj .: "InputArtifactDetails" <*>
+      obj .: "OutputArtifactDetails" <*>
+      obj .: "Provider" <*>
+      obj .:? "Settings" <*>
+      obj .:? "Version"
+  parseJSON _ = mempty
 
 -- | Constructor for 'CodePipelineCustomActionType' containing required fields
 -- | as arguments.
diff --git a/library-gen/Stratosphere/Resources/CodePipelinePipeline.hs b/library-gen/Stratosphere/Resources/CodePipelinePipeline.hs
--- a/library-gen/Stratosphere/Resources/CodePipelinePipeline.hs
+++ b/library-gen/Stratosphere/Resources/CodePipelinePipeline.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codepipeline-pipeline.html
 
 module Stratosphere.Resources.CodePipelinePipeline where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.CodePipelinePipelineArtifactStore
@@ -26,13 +26,30 @@
   , _codePipelinePipelineRestartExecutionOnUpdate :: Maybe (Val Bool')
   , _codePipelinePipelineRoleArn :: Val Text
   , _codePipelinePipelineStages :: [CodePipelinePipelineStageDeclaration]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON CodePipelinePipeline where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 21, omitNothingFields = True }
+  toJSON CodePipelinePipeline{..} =
+    object $
+    catMaybes
+    [ Just ("ArtifactStore" .= _codePipelinePipelineArtifactStore)
+    , ("DisableInboundStageTransitions" .=) <$> _codePipelinePipelineDisableInboundStageTransitions
+    , ("Name" .=) <$> _codePipelinePipelineName
+    , ("RestartExecutionOnUpdate" .=) <$> _codePipelinePipelineRestartExecutionOnUpdate
+    , Just ("RoleArn" .= _codePipelinePipelineRoleArn)
+    , Just ("Stages" .= _codePipelinePipelineStages)
+    ]
 
 instance FromJSON CodePipelinePipeline where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 21, omitNothingFields = True }
+  parseJSON (Object obj) =
+    CodePipelinePipeline <$>
+      obj .: "ArtifactStore" <*>
+      obj .:? "DisableInboundStageTransitions" <*>
+      obj .:? "Name" <*>
+      obj .:? "RestartExecutionOnUpdate" <*>
+      obj .: "RoleArn" <*>
+      obj .: "Stages"
+  parseJSON _ = mempty
 
 -- | Constructor for 'CodePipelinePipeline' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/ConfigConfigRule.hs b/library-gen/Stratosphere/Resources/ConfigConfigRule.hs
--- a/library-gen/Stratosphere/Resources/ConfigConfigRule.hs
+++ b/library-gen/Stratosphere/Resources/ConfigConfigRule.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-config-configrule.html
 
 module Stratosphere.Resources.ConfigConfigRule where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.ConfigConfigRuleScope
@@ -25,13 +25,30 @@
   , _configConfigRuleMaximumExecutionFrequency :: Maybe (Val Text)
   , _configConfigRuleScope :: Maybe ConfigConfigRuleScope
   , _configConfigRuleSource :: ConfigConfigRuleSource
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ConfigConfigRule where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
+  toJSON ConfigConfigRule{..} =
+    object $
+    catMaybes
+    [ ("ConfigRuleName" .=) <$> _configConfigRuleConfigRuleName
+    , ("Description" .=) <$> _configConfigRuleDescription
+    , ("InputParameters" .=) <$> _configConfigRuleInputParameters
+    , ("MaximumExecutionFrequency" .=) <$> _configConfigRuleMaximumExecutionFrequency
+    , ("Scope" .=) <$> _configConfigRuleScope
+    , Just ("Source" .= _configConfigRuleSource)
+    ]
 
 instance FromJSON ConfigConfigRule where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ConfigConfigRule <$>
+      obj .:? "ConfigRuleName" <*>
+      obj .:? "Description" <*>
+      obj .:? "InputParameters" <*>
+      obj .:? "MaximumExecutionFrequency" <*>
+      obj .:? "Scope" <*>
+      obj .: "Source"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ConfigConfigRule' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/ConfigConfigurationRecorder.hs b/library-gen/Stratosphere/Resources/ConfigConfigurationRecorder.hs
--- a/library-gen/Stratosphere/Resources/ConfigConfigurationRecorder.hs
+++ b/library-gen/Stratosphere/Resources/ConfigConfigurationRecorder.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-config-configurationrecorder.html
 
 module Stratosphere.Resources.ConfigConfigurationRecorder where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.ConfigConfigurationRecorderRecordingGroup
@@ -21,13 +21,24 @@
   { _configConfigurationRecorderName :: Maybe (Val Text)
   , _configConfigurationRecorderRecordingGroup :: Maybe ConfigConfigurationRecorderRecordingGroup
   , _configConfigurationRecorderRoleArn :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ConfigConfigurationRecorder where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+  toJSON ConfigConfigurationRecorder{..} =
+    object $
+    catMaybes
+    [ ("Name" .=) <$> _configConfigurationRecorderName
+    , ("RecordingGroup" .=) <$> _configConfigurationRecorderRecordingGroup
+    , Just ("RoleArn" .= _configConfigurationRecorderRoleArn)
+    ]
 
 instance FromJSON ConfigConfigurationRecorder where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ConfigConfigurationRecorder <$>
+      obj .:? "Name" <*>
+      obj .:? "RecordingGroup" <*>
+      obj .: "RoleArn"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ConfigConfigurationRecorder' containing required fields
 -- | as arguments.
diff --git a/library-gen/Stratosphere/Resources/ConfigDeliveryChannel.hs b/library-gen/Stratosphere/Resources/ConfigDeliveryChannel.hs
--- a/library-gen/Stratosphere/Resources/ConfigDeliveryChannel.hs
+++ b/library-gen/Stratosphere/Resources/ConfigDeliveryChannel.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-config-deliverychannel.html
 
 module Stratosphere.Resources.ConfigDeliveryChannel where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.ConfigDeliveryChannelConfigSnapshotDeliveryProperties
@@ -23,13 +23,28 @@
   , _configDeliveryChannelS3BucketName :: Val Text
   , _configDeliveryChannelS3KeyPrefix :: Maybe (Val Text)
   , _configDeliveryChannelSnsTopicARN :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ConfigDeliveryChannel where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 22, omitNothingFields = True }
+  toJSON ConfigDeliveryChannel{..} =
+    object $
+    catMaybes
+    [ ("ConfigSnapshotDeliveryProperties" .=) <$> _configDeliveryChannelConfigSnapshotDeliveryProperties
+    , ("Name" .=) <$> _configDeliveryChannelName
+    , Just ("S3BucketName" .= _configDeliveryChannelS3BucketName)
+    , ("S3KeyPrefix" .=) <$> _configDeliveryChannelS3KeyPrefix
+    , ("SnsTopicARN" .=) <$> _configDeliveryChannelSnsTopicARN
+    ]
 
 instance FromJSON ConfigDeliveryChannel where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 22, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ConfigDeliveryChannel <$>
+      obj .:? "ConfigSnapshotDeliveryProperties" <*>
+      obj .:? "Name" <*>
+      obj .: "S3BucketName" <*>
+      obj .:? "S3KeyPrefix" <*>
+      obj .:? "SnsTopicARN"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ConfigDeliveryChannel' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/DataPipelinePipeline.hs b/library-gen/Stratosphere/Resources/DataPipelinePipeline.hs
--- a/library-gen/Stratosphere/Resources/DataPipelinePipeline.hs
+++ b/library-gen/Stratosphere/Resources/DataPipelinePipeline.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datapipeline-pipeline.html
 
 module Stratosphere.Resources.DataPipelinePipeline where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.DataPipelinePipelineParameterObject
@@ -28,13 +28,32 @@
   , _dataPipelinePipelineParameterValues :: Maybe [DataPipelinePipelineParameterValue]
   , _dataPipelinePipelinePipelineObjects :: Maybe [DataPipelinePipelinePipelineObject]
   , _dataPipelinePipelinePipelineTags :: Maybe [DataPipelinePipelinePipelineTag]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON DataPipelinePipeline where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 21, omitNothingFields = True }
+  toJSON DataPipelinePipeline{..} =
+    object $
+    catMaybes
+    [ ("Activate" .=) <$> _dataPipelinePipelineActivate
+    , ("Description" .=) <$> _dataPipelinePipelineDescription
+    , Just ("Name" .= _dataPipelinePipelineName)
+    , Just ("ParameterObjects" .= _dataPipelinePipelineParameterObjects)
+    , ("ParameterValues" .=) <$> _dataPipelinePipelineParameterValues
+    , ("PipelineObjects" .=) <$> _dataPipelinePipelinePipelineObjects
+    , ("PipelineTags" .=) <$> _dataPipelinePipelinePipelineTags
+    ]
 
 instance FromJSON DataPipelinePipeline where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 21, omitNothingFields = True }
+  parseJSON (Object obj) =
+    DataPipelinePipeline <$>
+      obj .:? "Activate" <*>
+      obj .:? "Description" <*>
+      obj .: "Name" <*>
+      obj .: "ParameterObjects" <*>
+      obj .:? "ParameterValues" <*>
+      obj .:? "PipelineObjects" <*>
+      obj .:? "PipelineTags"
+  parseJSON _ = mempty
 
 -- | Constructor for 'DataPipelinePipeline' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/DirectoryServiceMicrosoftAD.hs b/library-gen/Stratosphere/Resources/DirectoryServiceMicrosoftAD.hs
--- a/library-gen/Stratosphere/Resources/DirectoryServiceMicrosoftAD.hs
+++ b/library-gen/Stratosphere/Resources/DirectoryServiceMicrosoftAD.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-directoryservice-microsoftad.html
 
 module Stratosphere.Resources.DirectoryServiceMicrosoftAD where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.DirectoryServiceMicrosoftADVpcSettings
@@ -24,13 +24,30 @@
   , _directoryServiceMicrosoftADPassword :: Val Text
   , _directoryServiceMicrosoftADShortName :: Maybe (Val Text)
   , _directoryServiceMicrosoftADVpcSettings :: DirectoryServiceMicrosoftADVpcSettings
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON DirectoryServiceMicrosoftAD where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+  toJSON DirectoryServiceMicrosoftAD{..} =
+    object $
+    catMaybes
+    [ ("CreateAlias" .=) <$> _directoryServiceMicrosoftADCreateAlias
+    , ("EnableSso" .=) <$> _directoryServiceMicrosoftADEnableSso
+    , Just ("Name" .= _directoryServiceMicrosoftADName)
+    , Just ("Password" .= _directoryServiceMicrosoftADPassword)
+    , ("ShortName" .=) <$> _directoryServiceMicrosoftADShortName
+    , Just ("VpcSettings" .= _directoryServiceMicrosoftADVpcSettings)
+    ]
 
 instance FromJSON DirectoryServiceMicrosoftAD where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+  parseJSON (Object obj) =
+    DirectoryServiceMicrosoftAD <$>
+      obj .:? "CreateAlias" <*>
+      obj .:? "EnableSso" <*>
+      obj .: "Name" <*>
+      obj .: "Password" <*>
+      obj .:? "ShortName" <*>
+      obj .: "VpcSettings"
+  parseJSON _ = mempty
 
 -- | Constructor for 'DirectoryServiceMicrosoftAD' containing required fields
 -- | as arguments.
diff --git a/library-gen/Stratosphere/Resources/DirectoryServiceSimpleAD.hs b/library-gen/Stratosphere/Resources/DirectoryServiceSimpleAD.hs
--- a/library-gen/Stratosphere/Resources/DirectoryServiceSimpleAD.hs
+++ b/library-gen/Stratosphere/Resources/DirectoryServiceSimpleAD.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-directoryservice-simplead.html
 
 module Stratosphere.Resources.DirectoryServiceSimpleAD where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.DirectoryServiceSimpleADVpcSettings
@@ -26,13 +26,34 @@
   , _directoryServiceSimpleADShortName :: Maybe (Val Text)
   , _directoryServiceSimpleADSize :: Val Text
   , _directoryServiceSimpleADVpcSettings :: DirectoryServiceSimpleADVpcSettings
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON DirectoryServiceSimpleAD where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 25, omitNothingFields = True }
+  toJSON DirectoryServiceSimpleAD{..} =
+    object $
+    catMaybes
+    [ ("CreateAlias" .=) <$> _directoryServiceSimpleADCreateAlias
+    , ("Description" .=) <$> _directoryServiceSimpleADDescription
+    , ("EnableSso" .=) <$> _directoryServiceSimpleADEnableSso
+    , Just ("Name" .= _directoryServiceSimpleADName)
+    , Just ("Password" .= _directoryServiceSimpleADPassword)
+    , ("ShortName" .=) <$> _directoryServiceSimpleADShortName
+    , Just ("Size" .= _directoryServiceSimpleADSize)
+    , Just ("VpcSettings" .= _directoryServiceSimpleADVpcSettings)
+    ]
 
 instance FromJSON DirectoryServiceSimpleAD where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 25, omitNothingFields = True }
+  parseJSON (Object obj) =
+    DirectoryServiceSimpleAD <$>
+      obj .:? "CreateAlias" <*>
+      obj .:? "Description" <*>
+      obj .:? "EnableSso" <*>
+      obj .: "Name" <*>
+      obj .: "Password" <*>
+      obj .:? "ShortName" <*>
+      obj .: "Size" <*>
+      obj .: "VpcSettings"
+  parseJSON _ = mempty
 
 -- | Constructor for 'DirectoryServiceSimpleAD' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/DynamoDBTable.hs b/library-gen/Stratosphere/Resources/DynamoDBTable.hs
--- a/library-gen/Stratosphere/Resources/DynamoDBTable.hs
+++ b/library-gen/Stratosphere/Resources/DynamoDBTable.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html
 
 module Stratosphere.Resources.DynamoDBTable where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.DynamoDBTableAttributeDefinition
@@ -30,13 +30,32 @@
   , _dynamoDBTableProvisionedThroughput :: DynamoDBTableProvisionedThroughput
   , _dynamoDBTableStreamSpecification :: Maybe DynamoDBTableStreamSpecification
   , _dynamoDBTableTableName :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON DynamoDBTable where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
+  toJSON DynamoDBTable{..} =
+    object $
+    catMaybes
+    [ Just ("AttributeDefinitions" .= _dynamoDBTableAttributeDefinitions)
+    , ("GlobalSecondaryIndexes" .=) <$> _dynamoDBTableGlobalSecondaryIndexes
+    , Just ("KeySchema" .= _dynamoDBTableKeySchema)
+    , ("LocalSecondaryIndexes" .=) <$> _dynamoDBTableLocalSecondaryIndexes
+    , Just ("ProvisionedThroughput" .= _dynamoDBTableProvisionedThroughput)
+    , ("StreamSpecification" .=) <$> _dynamoDBTableStreamSpecification
+    , ("TableName" .=) <$> _dynamoDBTableTableName
+    ]
 
 instance FromJSON DynamoDBTable where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
+  parseJSON (Object obj) =
+    DynamoDBTable <$>
+      obj .: "AttributeDefinitions" <*>
+      obj .:? "GlobalSecondaryIndexes" <*>
+      obj .: "KeySchema" <*>
+      obj .:? "LocalSecondaryIndexes" <*>
+      obj .: "ProvisionedThroughput" <*>
+      obj .:? "StreamSpecification" <*>
+      obj .:? "TableName"
+  parseJSON _ = mempty
 
 -- | Constructor for 'DynamoDBTable' containing required fields as arguments.
 dynamoDBTable
diff --git a/library-gen/Stratosphere/Resources/EC2CustomerGateway.hs b/library-gen/Stratosphere/Resources/EC2CustomerGateway.hs
--- a/library-gen/Stratosphere/Resources/EC2CustomerGateway.hs
+++ b/library-gen/Stratosphere/Resources/EC2CustomerGateway.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-customer-gateway.html
 
 module Stratosphere.Resources.EC2CustomerGateway where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.Tag
@@ -22,13 +22,26 @@
   , _eC2CustomerGatewayIpAddress :: Val Text
   , _eC2CustomerGatewayTags :: Maybe [Tag]
   , _eC2CustomerGatewayType :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EC2CustomerGateway where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 19, omitNothingFields = True }
+  toJSON EC2CustomerGateway{..} =
+    object $
+    catMaybes
+    [ Just ("BgpAsn" .= _eC2CustomerGatewayBgpAsn)
+    , Just ("IpAddress" .= _eC2CustomerGatewayIpAddress)
+    , ("Tags" .=) <$> _eC2CustomerGatewayTags
+    , Just ("Type" .= _eC2CustomerGatewayType)
+    ]
 
 instance FromJSON EC2CustomerGateway where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 19, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EC2CustomerGateway <$>
+      obj .: "BgpAsn" <*>
+      obj .: "IpAddress" <*>
+      obj .:? "Tags" <*>
+      obj .: "Type"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EC2CustomerGateway' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/EC2DHCPOptions.hs b/library-gen/Stratosphere/Resources/EC2DHCPOptions.hs
--- a/library-gen/Stratosphere/Resources/EC2DHCPOptions.hs
+++ b/library-gen/Stratosphere/Resources/EC2DHCPOptions.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-dhcp-options.html
 
 module Stratosphere.Resources.EC2DHCPOptions where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.Tag
@@ -24,13 +24,30 @@
   , _eC2DHCPOptionsNetbiosNodeType :: Maybe (Val Integer')
   , _eC2DHCPOptionsNtpServers :: Maybe (Val Text)
   , _eC2DHCPOptionsTags :: Maybe [Tag]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EC2DHCPOptions where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 15, omitNothingFields = True }
+  toJSON EC2DHCPOptions{..} =
+    object $
+    catMaybes
+    [ ("DomainName" .=) <$> _eC2DHCPOptionsDomainName
+    , ("DomainNameServers" .=) <$> _eC2DHCPOptionsDomainNameServers
+    , ("NetbiosNameServers" .=) <$> _eC2DHCPOptionsNetbiosNameServers
+    , ("NetbiosNodeType" .=) <$> _eC2DHCPOptionsNetbiosNodeType
+    , ("NtpServers" .=) <$> _eC2DHCPOptionsNtpServers
+    , ("Tags" .=) <$> _eC2DHCPOptionsTags
+    ]
 
 instance FromJSON EC2DHCPOptions where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 15, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EC2DHCPOptions <$>
+      obj .:? "DomainName" <*>
+      obj .:? "DomainNameServers" <*>
+      obj .:? "NetbiosNameServers" <*>
+      obj .:? "NetbiosNodeType" <*>
+      obj .:? "NtpServers" <*>
+      obj .:? "Tags"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EC2DHCPOptions' containing required fields as arguments.
 ec2DHCPOptions
diff --git a/library-gen/Stratosphere/Resources/EC2EIP.hs b/library-gen/Stratosphere/Resources/EC2EIP.hs
--- a/library-gen/Stratosphere/Resources/EC2EIP.hs
+++ b/library-gen/Stratosphere/Resources/EC2EIP.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-eip.html
 
 module Stratosphere.Resources.EC2EIP where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   EC2EIP
   { _eC2EIPDomain :: Maybe (Val Text)
   , _eC2EIPInstanceId :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EC2EIP where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 7, omitNothingFields = True }
+  toJSON EC2EIP{..} =
+    object $
+    catMaybes
+    [ ("Domain" .=) <$> _eC2EIPDomain
+    , ("InstanceId" .=) <$> _eC2EIPInstanceId
+    ]
 
 instance FromJSON EC2EIP where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 7, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EC2EIP <$>
+      obj .:? "Domain" <*>
+      obj .:? "InstanceId"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EC2EIP' containing required fields as arguments.
 ec2EIP
diff --git a/library-gen/Stratosphere/Resources/EC2EIPAssociation.hs b/library-gen/Stratosphere/Resources/EC2EIPAssociation.hs
--- a/library-gen/Stratosphere/Resources/EC2EIPAssociation.hs
+++ b/library-gen/Stratosphere/Resources/EC2EIPAssociation.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-eip-association.html
 
 module Stratosphere.Resources.EC2EIPAssociation where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -23,13 +23,28 @@
   , _eC2EIPAssociationInstanceId :: Maybe (Val Text)
   , _eC2EIPAssociationNetworkInterfaceId :: Maybe (Val Text)
   , _eC2EIPAssociationPrivateIpAddress :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EC2EIPAssociation where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 18, omitNothingFields = True }
+  toJSON EC2EIPAssociation{..} =
+    object $
+    catMaybes
+    [ ("AllocationId" .=) <$> _eC2EIPAssociationAllocationId
+    , ("Eip" .=) <$> _eC2EIPAssociationEip
+    , ("InstanceId" .=) <$> _eC2EIPAssociationInstanceId
+    , ("NetworkInterfaceId" .=) <$> _eC2EIPAssociationNetworkInterfaceId
+    , ("PrivateIpAddress" .=) <$> _eC2EIPAssociationPrivateIpAddress
+    ]
 
 instance FromJSON EC2EIPAssociation where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 18, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EC2EIPAssociation <$>
+      obj .:? "AllocationId" <*>
+      obj .:? "Eip" <*>
+      obj .:? "InstanceId" <*>
+      obj .:? "NetworkInterfaceId" <*>
+      obj .:? "PrivateIpAddress"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EC2EIPAssociation' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/EC2FlowLog.hs b/library-gen/Stratosphere/Resources/EC2FlowLog.hs
--- a/library-gen/Stratosphere/Resources/EC2FlowLog.hs
+++ b/library-gen/Stratosphere/Resources/EC2FlowLog.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-flowlog.html
 
 module Stratosphere.Resources.EC2FlowLog where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -23,13 +23,28 @@
   , _eC2FlowLogResourceId :: Val Text
   , _eC2FlowLogResourceType :: Val Text
   , _eC2FlowLogTrafficType :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EC2FlowLog where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 11, omitNothingFields = True }
+  toJSON EC2FlowLog{..} =
+    object $
+    catMaybes
+    [ Just ("DeliverLogsPermissionArn" .= _eC2FlowLogDeliverLogsPermissionArn)
+    , Just ("LogGroupName" .= _eC2FlowLogLogGroupName)
+    , Just ("ResourceId" .= _eC2FlowLogResourceId)
+    , Just ("ResourceType" .= _eC2FlowLogResourceType)
+    , Just ("TrafficType" .= _eC2FlowLogTrafficType)
+    ]
 
 instance FromJSON EC2FlowLog where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 11, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EC2FlowLog <$>
+      obj .: "DeliverLogsPermissionArn" <*>
+      obj .: "LogGroupName" <*>
+      obj .: "ResourceId" <*>
+      obj .: "ResourceType" <*>
+      obj .: "TrafficType"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EC2FlowLog' containing required fields as arguments.
 ec2FlowLog
diff --git a/library-gen/Stratosphere/Resources/EC2Host.hs b/library-gen/Stratosphere/Resources/EC2Host.hs
--- a/library-gen/Stratosphere/Resources/EC2Host.hs
+++ b/library-gen/Stratosphere/Resources/EC2Host.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-host.html
 
 module Stratosphere.Resources.EC2Host where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -21,13 +21,24 @@
   { _eC2HostAutoPlacement :: Maybe (Val Text)
   , _eC2HostAvailabilityZone :: Val Text
   , _eC2HostInstanceType :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EC2Host where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 8, omitNothingFields = True }
+  toJSON EC2Host{..} =
+    object $
+    catMaybes
+    [ ("AutoPlacement" .=) <$> _eC2HostAutoPlacement
+    , Just ("AvailabilityZone" .= _eC2HostAvailabilityZone)
+    , Just ("InstanceType" .= _eC2HostInstanceType)
+    ]
 
 instance FromJSON EC2Host where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 8, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EC2Host <$>
+      obj .:? "AutoPlacement" <*>
+      obj .: "AvailabilityZone" <*>
+      obj .: "InstanceType"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EC2Host' containing required fields as arguments.
 ec2Host
diff --git a/library-gen/Stratosphere/Resources/EC2Instance.hs b/library-gen/Stratosphere/Resources/EC2Instance.hs
--- a/library-gen/Stratosphere/Resources/EC2Instance.hs
+++ b/library-gen/Stratosphere/Resources/EC2Instance.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance.html
 
 module Stratosphere.Resources.EC2Instance where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.EC2InstanceBlockDeviceMapping
@@ -52,13 +52,76 @@
   , _eC2InstanceTenancy :: Maybe (Val Text)
   , _eC2InstanceUserData :: Maybe (Val Text)
   , _eC2InstanceVolumes :: Maybe [EC2InstanceVolume]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EC2Instance where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 12, omitNothingFields = True }
+  toJSON EC2Instance{..} =
+    object $
+    catMaybes
+    [ ("AdditionalInfo" .=) <$> _eC2InstanceAdditionalInfo
+    , ("Affinity" .=) <$> _eC2InstanceAffinity
+    , ("AvailabilityZone" .=) <$> _eC2InstanceAvailabilityZone
+    , ("BlockDeviceMappings" .=) <$> _eC2InstanceBlockDeviceMappings
+    , ("DisableApiTermination" .=) <$> _eC2InstanceDisableApiTermination
+    , ("EbsOptimized" .=) <$> _eC2InstanceEbsOptimized
+    , ("HostId" .=) <$> _eC2InstanceHostId
+    , ("IamInstanceProfile" .=) <$> _eC2InstanceIamInstanceProfile
+    , Just ("ImageId" .= _eC2InstanceImageId)
+    , ("InstanceInitiatedShutdownBehavior" .=) <$> _eC2InstanceInstanceInitiatedShutdownBehavior
+    , ("InstanceType" .=) <$> _eC2InstanceInstanceType
+    , ("Ipv6AddressCount" .=) <$> _eC2InstanceIpv6AddressCount
+    , ("Ipv6Addresses" .=) <$> _eC2InstanceIpv6Addresses
+    , ("KernelId" .=) <$> _eC2InstanceKernelId
+    , ("KeyName" .=) <$> _eC2InstanceKeyName
+    , ("Monitoring" .=) <$> _eC2InstanceMonitoring
+    , ("NetworkInterfaces" .=) <$> _eC2InstanceNetworkInterfaces
+    , ("PlacementGroupName" .=) <$> _eC2InstancePlacementGroupName
+    , ("PrivateIpAddress" .=) <$> _eC2InstancePrivateIpAddress
+    , ("RamdiskId" .=) <$> _eC2InstanceRamdiskId
+    , ("SecurityGroupIds" .=) <$> _eC2InstanceSecurityGroupIds
+    , ("SecurityGroups" .=) <$> _eC2InstanceSecurityGroups
+    , ("SourceDestCheck" .=) <$> _eC2InstanceSourceDestCheck
+    , ("SsmAssociations" .=) <$> _eC2InstanceSsmAssociations
+    , ("SubnetId" .=) <$> _eC2InstanceSubnetId
+    , ("Tags" .=) <$> _eC2InstanceTags
+    , ("Tenancy" .=) <$> _eC2InstanceTenancy
+    , ("UserData" .=) <$> _eC2InstanceUserData
+    , ("Volumes" .=) <$> _eC2InstanceVolumes
+    ]
 
 instance FromJSON EC2Instance where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 12, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EC2Instance <$>
+      obj .:? "AdditionalInfo" <*>
+      obj .:? "Affinity" <*>
+      obj .:? "AvailabilityZone" <*>
+      obj .:? "BlockDeviceMappings" <*>
+      obj .:? "DisableApiTermination" <*>
+      obj .:? "EbsOptimized" <*>
+      obj .:? "HostId" <*>
+      obj .:? "IamInstanceProfile" <*>
+      obj .: "ImageId" <*>
+      obj .:? "InstanceInitiatedShutdownBehavior" <*>
+      obj .:? "InstanceType" <*>
+      obj .:? "Ipv6AddressCount" <*>
+      obj .:? "Ipv6Addresses" <*>
+      obj .:? "KernelId" <*>
+      obj .:? "KeyName" <*>
+      obj .:? "Monitoring" <*>
+      obj .:? "NetworkInterfaces" <*>
+      obj .:? "PlacementGroupName" <*>
+      obj .:? "PrivateIpAddress" <*>
+      obj .:? "RamdiskId" <*>
+      obj .:? "SecurityGroupIds" <*>
+      obj .:? "SecurityGroups" <*>
+      obj .:? "SourceDestCheck" <*>
+      obj .:? "SsmAssociations" <*>
+      obj .:? "SubnetId" <*>
+      obj .:? "Tags" <*>
+      obj .:? "Tenancy" <*>
+      obj .:? "UserData" <*>
+      obj .:? "Volumes"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EC2Instance' containing required fields as arguments.
 ec2Instance
diff --git a/library-gen/Stratosphere/Resources/EC2InternetGateway.hs b/library-gen/Stratosphere/Resources/EC2InternetGateway.hs
--- a/library-gen/Stratosphere/Resources/EC2InternetGateway.hs
+++ b/library-gen/Stratosphere/Resources/EC2InternetGateway.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-internet-gateway.html
 
 module Stratosphere.Resources.EC2InternetGateway where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.Tag
@@ -19,13 +19,20 @@
 data EC2InternetGateway =
   EC2InternetGateway
   { _eC2InternetGatewayTags :: Maybe [Tag]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EC2InternetGateway where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 19, omitNothingFields = True }
+  toJSON EC2InternetGateway{..} =
+    object $
+    catMaybes
+    [ ("Tags" .=) <$> _eC2InternetGatewayTags
+    ]
 
 instance FromJSON EC2InternetGateway where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 19, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EC2InternetGateway <$>
+      obj .:? "Tags"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EC2InternetGateway' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/EC2NatGateway.hs b/library-gen/Stratosphere/Resources/EC2NatGateway.hs
--- a/library-gen/Stratosphere/Resources/EC2NatGateway.hs
+++ b/library-gen/Stratosphere/Resources/EC2NatGateway.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-natgateway.html
 
 module Stratosphere.Resources.EC2NatGateway where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   EC2NatGateway
   { _eC2NatGatewayAllocationId :: Val Text
   , _eC2NatGatewaySubnetId :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EC2NatGateway where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
+  toJSON EC2NatGateway{..} =
+    object $
+    catMaybes
+    [ Just ("AllocationId" .= _eC2NatGatewayAllocationId)
+    , Just ("SubnetId" .= _eC2NatGatewaySubnetId)
+    ]
 
 instance FromJSON EC2NatGateway where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EC2NatGateway <$>
+      obj .: "AllocationId" <*>
+      obj .: "SubnetId"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EC2NatGateway' containing required fields as arguments.
 ec2NatGateway
diff --git a/library-gen/Stratosphere/Resources/EC2NetworkAcl.hs b/library-gen/Stratosphere/Resources/EC2NetworkAcl.hs
--- a/library-gen/Stratosphere/Resources/EC2NetworkAcl.hs
+++ b/library-gen/Stratosphere/Resources/EC2NetworkAcl.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-network-acl.html
 
 module Stratosphere.Resources.EC2NetworkAcl where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.Tag
@@ -20,13 +20,22 @@
   EC2NetworkAcl
   { _eC2NetworkAclTags :: Maybe [Tag]
   , _eC2NetworkAclVpcId :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EC2NetworkAcl where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
+  toJSON EC2NetworkAcl{..} =
+    object $
+    catMaybes
+    [ ("Tags" .=) <$> _eC2NetworkAclTags
+    , Just ("VpcId" .= _eC2NetworkAclVpcId)
+    ]
 
 instance FromJSON EC2NetworkAcl where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EC2NetworkAcl <$>
+      obj .:? "Tags" <*>
+      obj .: "VpcId"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EC2NetworkAcl' containing required fields as arguments.
 ec2NetworkAcl
diff --git a/library-gen/Stratosphere/Resources/EC2NetworkAclEntry.hs b/library-gen/Stratosphere/Resources/EC2NetworkAclEntry.hs
--- a/library-gen/Stratosphere/Resources/EC2NetworkAclEntry.hs
+++ b/library-gen/Stratosphere/Resources/EC2NetworkAclEntry.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-network-acl-entry.html
 
 module Stratosphere.Resources.EC2NetworkAclEntry where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.EC2NetworkAclEntryIcmp
@@ -28,13 +28,36 @@
   , _eC2NetworkAclEntryProtocol :: Val Integer'
   , _eC2NetworkAclEntryRuleAction :: Val Text
   , _eC2NetworkAclEntryRuleNumber :: Val Integer'
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EC2NetworkAclEntry where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 19, omitNothingFields = True }
+  toJSON EC2NetworkAclEntry{..} =
+    object $
+    catMaybes
+    [ Just ("CidrBlock" .= _eC2NetworkAclEntryCidrBlock)
+    , ("Egress" .=) <$> _eC2NetworkAclEntryEgress
+    , ("Icmp" .=) <$> _eC2NetworkAclEntryIcmp
+    , ("Ipv6CidrBlock" .=) <$> _eC2NetworkAclEntryIpv6CidrBlock
+    , Just ("NetworkAclId" .= _eC2NetworkAclEntryNetworkAclId)
+    , ("PortRange" .=) <$> _eC2NetworkAclEntryPortRange
+    , Just ("Protocol" .= _eC2NetworkAclEntryProtocol)
+    , Just ("RuleAction" .= _eC2NetworkAclEntryRuleAction)
+    , Just ("RuleNumber" .= _eC2NetworkAclEntryRuleNumber)
+    ]
 
 instance FromJSON EC2NetworkAclEntry where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 19, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EC2NetworkAclEntry <$>
+      obj .: "CidrBlock" <*>
+      obj .:? "Egress" <*>
+      obj .:? "Icmp" <*>
+      obj .:? "Ipv6CidrBlock" <*>
+      obj .: "NetworkAclId" <*>
+      obj .:? "PortRange" <*>
+      obj .: "Protocol" <*>
+      obj .: "RuleAction" <*>
+      obj .: "RuleNumber"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EC2NetworkAclEntry' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/EC2NetworkInterface.hs b/library-gen/Stratosphere/Resources/EC2NetworkInterface.hs
--- a/library-gen/Stratosphere/Resources/EC2NetworkInterface.hs
+++ b/library-gen/Stratosphere/Resources/EC2NetworkInterface.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-network-interface.html
 
 module Stratosphere.Resources.EC2NetworkInterface where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.EC2NetworkInterfaceInstanceIpv6Address
@@ -30,13 +30,38 @@
   , _eC2NetworkInterfaceSourceDestCheck :: Maybe (Val Bool')
   , _eC2NetworkInterfaceSubnetId :: Val Text
   , _eC2NetworkInterfaceTags :: Maybe [Tag]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EC2NetworkInterface where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 20, omitNothingFields = True }
+  toJSON EC2NetworkInterface{..} =
+    object $
+    catMaybes
+    [ ("Description" .=) <$> _eC2NetworkInterfaceDescription
+    , ("GroupSet" .=) <$> _eC2NetworkInterfaceGroupSet
+    , ("Ipv6AddressCount" .=) <$> _eC2NetworkInterfaceIpv6AddressCount
+    , ("Ipv6Addresses" .=) <$> _eC2NetworkInterfaceIpv6Addresses
+    , ("PrivateIpAddress" .=) <$> _eC2NetworkInterfacePrivateIpAddress
+    , ("PrivateIpAddresses" .=) <$> _eC2NetworkInterfacePrivateIpAddresses
+    , ("SecondaryPrivateIpAddressCount" .=) <$> _eC2NetworkInterfaceSecondaryPrivateIpAddressCount
+    , ("SourceDestCheck" .=) <$> _eC2NetworkInterfaceSourceDestCheck
+    , Just ("SubnetId" .= _eC2NetworkInterfaceSubnetId)
+    , ("Tags" .=) <$> _eC2NetworkInterfaceTags
+    ]
 
 instance FromJSON EC2NetworkInterface where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 20, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EC2NetworkInterface <$>
+      obj .:? "Description" <*>
+      obj .:? "GroupSet" <*>
+      obj .:? "Ipv6AddressCount" <*>
+      obj .:? "Ipv6Addresses" <*>
+      obj .:? "PrivateIpAddress" <*>
+      obj .:? "PrivateIpAddresses" <*>
+      obj .:? "SecondaryPrivateIpAddressCount" <*>
+      obj .:? "SourceDestCheck" <*>
+      obj .: "SubnetId" <*>
+      obj .:? "Tags"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EC2NetworkInterface' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/EC2NetworkInterfaceAttachment.hs b/library-gen/Stratosphere/Resources/EC2NetworkInterfaceAttachment.hs
--- a/library-gen/Stratosphere/Resources/EC2NetworkInterfaceAttachment.hs
+++ b/library-gen/Stratosphere/Resources/EC2NetworkInterfaceAttachment.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-network-interface-attachment.html
 
 module Stratosphere.Resources.EC2NetworkInterfaceAttachment where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -22,13 +22,26 @@
   , _eC2NetworkInterfaceAttachmentDeviceIndex :: Val Text
   , _eC2NetworkInterfaceAttachmentInstanceId :: Val Text
   , _eC2NetworkInterfaceAttachmentNetworkInterfaceId :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EC2NetworkInterfaceAttachment where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
+  toJSON EC2NetworkInterfaceAttachment{..} =
+    object $
+    catMaybes
+    [ ("DeleteOnTermination" .=) <$> _eC2NetworkInterfaceAttachmentDeleteOnTermination
+    , Just ("DeviceIndex" .= _eC2NetworkInterfaceAttachmentDeviceIndex)
+    , Just ("InstanceId" .= _eC2NetworkInterfaceAttachmentInstanceId)
+    , Just ("NetworkInterfaceId" .= _eC2NetworkInterfaceAttachmentNetworkInterfaceId)
+    ]
 
 instance FromJSON EC2NetworkInterfaceAttachment where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EC2NetworkInterfaceAttachment <$>
+      obj .:? "DeleteOnTermination" <*>
+      obj .: "DeviceIndex" <*>
+      obj .: "InstanceId" <*>
+      obj .: "NetworkInterfaceId"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EC2NetworkInterfaceAttachment' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/Resources/EC2PlacementGroup.hs b/library-gen/Stratosphere/Resources/EC2PlacementGroup.hs
--- a/library-gen/Stratosphere/Resources/EC2PlacementGroup.hs
+++ b/library-gen/Stratosphere/Resources/EC2PlacementGroup.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-placementgroup.html
 
 module Stratosphere.Resources.EC2PlacementGroup where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -19,13 +19,20 @@
 data EC2PlacementGroup =
   EC2PlacementGroup
   { _eC2PlacementGroupStrategy :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EC2PlacementGroup where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 18, omitNothingFields = True }
+  toJSON EC2PlacementGroup{..} =
+    object $
+    catMaybes
+    [ ("Strategy" .=) <$> _eC2PlacementGroupStrategy
+    ]
 
 instance FromJSON EC2PlacementGroup where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 18, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EC2PlacementGroup <$>
+      obj .:? "Strategy"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EC2PlacementGroup' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/EC2Route.hs b/library-gen/Stratosphere/Resources/EC2Route.hs
--- a/library-gen/Stratosphere/Resources/EC2Route.hs
+++ b/library-gen/Stratosphere/Resources/EC2Route.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-route.html
 
 module Stratosphere.Resources.EC2Route where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -26,13 +26,34 @@
   , _eC2RouteNetworkInterfaceId :: Maybe (Val Text)
   , _eC2RouteRouteTableId :: Val Text
   , _eC2RouteVpcPeeringConnectionId :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EC2Route where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 9, omitNothingFields = True }
+  toJSON EC2Route{..} =
+    object $
+    catMaybes
+    [ Just ("DestinationCidrBlock" .= _eC2RouteDestinationCidrBlock)
+    , ("DestinationIpv6CidrBlock" .=) <$> _eC2RouteDestinationIpv6CidrBlock
+    , ("GatewayId" .=) <$> _eC2RouteGatewayId
+    , ("InstanceId" .=) <$> _eC2RouteInstanceId
+    , ("NatGatewayId" .=) <$> _eC2RouteNatGatewayId
+    , ("NetworkInterfaceId" .=) <$> _eC2RouteNetworkInterfaceId
+    , Just ("RouteTableId" .= _eC2RouteRouteTableId)
+    , ("VpcPeeringConnectionId" .=) <$> _eC2RouteVpcPeeringConnectionId
+    ]
 
 instance FromJSON EC2Route where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 9, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EC2Route <$>
+      obj .: "DestinationCidrBlock" <*>
+      obj .:? "DestinationIpv6CidrBlock" <*>
+      obj .:? "GatewayId" <*>
+      obj .:? "InstanceId" <*>
+      obj .:? "NatGatewayId" <*>
+      obj .:? "NetworkInterfaceId" <*>
+      obj .: "RouteTableId" <*>
+      obj .:? "VpcPeeringConnectionId"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EC2Route' containing required fields as arguments.
 ec2Route
diff --git a/library-gen/Stratosphere/Resources/EC2RouteTable.hs b/library-gen/Stratosphere/Resources/EC2RouteTable.hs
--- a/library-gen/Stratosphere/Resources/EC2RouteTable.hs
+++ b/library-gen/Stratosphere/Resources/EC2RouteTable.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-route-table.html
 
 module Stratosphere.Resources.EC2RouteTable where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.Tag
@@ -20,13 +20,22 @@
   EC2RouteTable
   { _eC2RouteTableTags :: Maybe [Tag]
   , _eC2RouteTableVpcId :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EC2RouteTable where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
+  toJSON EC2RouteTable{..} =
+    object $
+    catMaybes
+    [ ("Tags" .=) <$> _eC2RouteTableTags
+    , Just ("VpcId" .= _eC2RouteTableVpcId)
+    ]
 
 instance FromJSON EC2RouteTable where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EC2RouteTable <$>
+      obj .:? "Tags" <*>
+      obj .: "VpcId"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EC2RouteTable' containing required fields as arguments.
 ec2RouteTable
diff --git a/library-gen/Stratosphere/Resources/EC2SecurityGroup.hs b/library-gen/Stratosphere/Resources/EC2SecurityGroup.hs
--- a/library-gen/Stratosphere/Resources/EC2SecurityGroup.hs
+++ b/library-gen/Stratosphere/Resources/EC2SecurityGroup.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group.html
 
 module Stratosphere.Resources.EC2SecurityGroup where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.EC2SecurityGroupRule
@@ -24,13 +24,28 @@
   , _eC2SecurityGroupSecurityGroupIngress :: Maybe [EC2SecurityGroupRule]
   , _eC2SecurityGroupTags :: Maybe [Tag]
   , _eC2SecurityGroupVpcId :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EC2SecurityGroup where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
+  toJSON EC2SecurityGroup{..} =
+    object $
+    catMaybes
+    [ Just ("GroupDescription" .= _eC2SecurityGroupGroupDescription)
+    , ("SecurityGroupEgress" .=) <$> _eC2SecurityGroupSecurityGroupEgress
+    , ("SecurityGroupIngress" .=) <$> _eC2SecurityGroupSecurityGroupIngress
+    , ("Tags" .=) <$> _eC2SecurityGroupTags
+    , ("VpcId" .=) <$> _eC2SecurityGroupVpcId
+    ]
 
 instance FromJSON EC2SecurityGroup where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EC2SecurityGroup <$>
+      obj .: "GroupDescription" <*>
+      obj .:? "SecurityGroupEgress" <*>
+      obj .:? "SecurityGroupIngress" <*>
+      obj .:? "Tags" <*>
+      obj .:? "VpcId"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EC2SecurityGroup' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/EC2SecurityGroupEgress.hs b/library-gen/Stratosphere/Resources/EC2SecurityGroupEgress.hs
--- a/library-gen/Stratosphere/Resources/EC2SecurityGroupEgress.hs
+++ b/library-gen/Stratosphere/Resources/EC2SecurityGroupEgress.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-security-group-egress.html
 
 module Stratosphere.Resources.EC2SecurityGroupEgress where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -26,13 +26,34 @@
   , _eC2SecurityGroupEgressGroupId :: Val Text
   , _eC2SecurityGroupEgressIpProtocol :: Val Text
   , _eC2SecurityGroupEgressToPort :: Maybe (Val Integer')
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EC2SecurityGroupEgress where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 23, omitNothingFields = True }
+  toJSON EC2SecurityGroupEgress{..} =
+    object $
+    catMaybes
+    [ ("CidrIp" .=) <$> _eC2SecurityGroupEgressCidrIp
+    , ("CidrIpv6" .=) <$> _eC2SecurityGroupEgressCidrIpv6
+    , ("DestinationPrefixListId" .=) <$> _eC2SecurityGroupEgressDestinationPrefixListId
+    , ("DestinationSecurityGroupId" .=) <$> _eC2SecurityGroupEgressDestinationSecurityGroupId
+    , ("FromPort" .=) <$> _eC2SecurityGroupEgressFromPort
+    , Just ("GroupId" .= _eC2SecurityGroupEgressGroupId)
+    , Just ("IpProtocol" .= _eC2SecurityGroupEgressIpProtocol)
+    , ("ToPort" .=) <$> _eC2SecurityGroupEgressToPort
+    ]
 
 instance FromJSON EC2SecurityGroupEgress where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 23, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EC2SecurityGroupEgress <$>
+      obj .:? "CidrIp" <*>
+      obj .:? "CidrIpv6" <*>
+      obj .:? "DestinationPrefixListId" <*>
+      obj .:? "DestinationSecurityGroupId" <*>
+      obj .:? "FromPort" <*>
+      obj .: "GroupId" <*>
+      obj .: "IpProtocol" <*>
+      obj .:? "ToPort"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EC2SecurityGroupEgress' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/EC2SecurityGroupIngress.hs b/library-gen/Stratosphere/Resources/EC2SecurityGroupIngress.hs
--- a/library-gen/Stratosphere/Resources/EC2SecurityGroupIngress.hs
+++ b/library-gen/Stratosphere/Resources/EC2SecurityGroupIngress.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group-ingress.html
 
 module Stratosphere.Resources.EC2SecurityGroupIngress where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -28,13 +28,38 @@
   , _eC2SecurityGroupIngressSourceSecurityGroupName :: Maybe (Val Text)
   , _eC2SecurityGroupIngressSourceSecurityGroupOwnerId :: Maybe (Val Text)
   , _eC2SecurityGroupIngressToPort :: Maybe (Val Integer')
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EC2SecurityGroupIngress where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 24, omitNothingFields = True }
+  toJSON EC2SecurityGroupIngress{..} =
+    object $
+    catMaybes
+    [ ("CidrIp" .=) <$> _eC2SecurityGroupIngressCidrIp
+    , ("CidrIpv6" .=) <$> _eC2SecurityGroupIngressCidrIpv6
+    , ("FromPort" .=) <$> _eC2SecurityGroupIngressFromPort
+    , ("GroupId" .=) <$> _eC2SecurityGroupIngressGroupId
+    , ("GroupName" .=) <$> _eC2SecurityGroupIngressGroupName
+    , Just ("IpProtocol" .= _eC2SecurityGroupIngressIpProtocol)
+    , ("SourceSecurityGroupId" .=) <$> _eC2SecurityGroupIngressSourceSecurityGroupId
+    , ("SourceSecurityGroupName" .=) <$> _eC2SecurityGroupIngressSourceSecurityGroupName
+    , ("SourceSecurityGroupOwnerId" .=) <$> _eC2SecurityGroupIngressSourceSecurityGroupOwnerId
+    , ("ToPort" .=) <$> _eC2SecurityGroupIngressToPort
+    ]
 
 instance FromJSON EC2SecurityGroupIngress where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 24, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EC2SecurityGroupIngress <$>
+      obj .:? "CidrIp" <*>
+      obj .:? "CidrIpv6" <*>
+      obj .:? "FromPort" <*>
+      obj .:? "GroupId" <*>
+      obj .:? "GroupName" <*>
+      obj .: "IpProtocol" <*>
+      obj .:? "SourceSecurityGroupId" <*>
+      obj .:? "SourceSecurityGroupName" <*>
+      obj .:? "SourceSecurityGroupOwnerId" <*>
+      obj .:? "ToPort"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EC2SecurityGroupIngress' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/EC2SpotFleet.hs b/library-gen/Stratosphere/Resources/EC2SpotFleet.hs
--- a/library-gen/Stratosphere/Resources/EC2SpotFleet.hs
+++ b/library-gen/Stratosphere/Resources/EC2SpotFleet.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-spotfleet.html
 
 module Stratosphere.Resources.EC2SpotFleet where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.EC2SpotFleetSpotFleetRequestConfigData
@@ -19,13 +19,20 @@
 data EC2SpotFleet =
   EC2SpotFleet
   { _eC2SpotFleetSpotFleetRequestConfigData :: EC2SpotFleetSpotFleetRequestConfigData
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EC2SpotFleet where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 13, omitNothingFields = True }
+  toJSON EC2SpotFleet{..} =
+    object $
+    catMaybes
+    [ Just ("SpotFleetRequestConfigData" .= _eC2SpotFleetSpotFleetRequestConfigData)
+    ]
 
 instance FromJSON EC2SpotFleet where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 13, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EC2SpotFleet <$>
+      obj .: "SpotFleetRequestConfigData"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EC2SpotFleet' containing required fields as arguments.
 ec2SpotFleet
diff --git a/library-gen/Stratosphere/Resources/EC2Subnet.hs b/library-gen/Stratosphere/Resources/EC2Subnet.hs
--- a/library-gen/Stratosphere/Resources/EC2Subnet.hs
+++ b/library-gen/Stratosphere/Resources/EC2Subnet.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-subnet.html
 
 module Stratosphere.Resources.EC2Subnet where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.Tag
@@ -23,13 +23,28 @@
   , _eC2SubnetMapPublicIpOnLaunch :: Maybe (Val Bool')
   , _eC2SubnetTags :: Maybe [Tag]
   , _eC2SubnetVpcId :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EC2Subnet where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 10, omitNothingFields = True }
+  toJSON EC2Subnet{..} =
+    object $
+    catMaybes
+    [ ("AvailabilityZone" .=) <$> _eC2SubnetAvailabilityZone
+    , Just ("CidrBlock" .= _eC2SubnetCidrBlock)
+    , ("MapPublicIpOnLaunch" .=) <$> _eC2SubnetMapPublicIpOnLaunch
+    , ("Tags" .=) <$> _eC2SubnetTags
+    , Just ("VpcId" .= _eC2SubnetVpcId)
+    ]
 
 instance FromJSON EC2Subnet where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 10, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EC2Subnet <$>
+      obj .:? "AvailabilityZone" <*>
+      obj .: "CidrBlock" <*>
+      obj .:? "MapPublicIpOnLaunch" <*>
+      obj .:? "Tags" <*>
+      obj .: "VpcId"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EC2Subnet' containing required fields as arguments.
 ec2Subnet
diff --git a/library-gen/Stratosphere/Resources/EC2SubnetCidrBlock.hs b/library-gen/Stratosphere/Resources/EC2SubnetCidrBlock.hs
--- a/library-gen/Stratosphere/Resources/EC2SubnetCidrBlock.hs
+++ b/library-gen/Stratosphere/Resources/EC2SubnetCidrBlock.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-subnetcidrblock.html
 
 module Stratosphere.Resources.EC2SubnetCidrBlock where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   EC2SubnetCidrBlock
   { _eC2SubnetCidrBlockIpv6CidrBlock :: Val Text
   , _eC2SubnetCidrBlockSubnetId :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EC2SubnetCidrBlock where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 19, omitNothingFields = True }
+  toJSON EC2SubnetCidrBlock{..} =
+    object $
+    catMaybes
+    [ Just ("Ipv6CidrBlock" .= _eC2SubnetCidrBlockIpv6CidrBlock)
+    , Just ("SubnetId" .= _eC2SubnetCidrBlockSubnetId)
+    ]
 
 instance FromJSON EC2SubnetCidrBlock where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 19, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EC2SubnetCidrBlock <$>
+      obj .: "Ipv6CidrBlock" <*>
+      obj .: "SubnetId"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EC2SubnetCidrBlock' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/EC2SubnetNetworkAclAssociation.hs b/library-gen/Stratosphere/Resources/EC2SubnetNetworkAclAssociation.hs
--- a/library-gen/Stratosphere/Resources/EC2SubnetNetworkAclAssociation.hs
+++ b/library-gen/Stratosphere/Resources/EC2SubnetNetworkAclAssociation.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-subnet-network-acl-assoc.html
 
 module Stratosphere.Resources.EC2SubnetNetworkAclAssociation where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   EC2SubnetNetworkAclAssociation
   { _eC2SubnetNetworkAclAssociationNetworkAclId :: Val Text
   , _eC2SubnetNetworkAclAssociationSubnetId :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EC2SubnetNetworkAclAssociation where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 31, omitNothingFields = True }
+  toJSON EC2SubnetNetworkAclAssociation{..} =
+    object $
+    catMaybes
+    [ Just ("NetworkAclId" .= _eC2SubnetNetworkAclAssociationNetworkAclId)
+    , Just ("SubnetId" .= _eC2SubnetNetworkAclAssociationSubnetId)
+    ]
 
 instance FromJSON EC2SubnetNetworkAclAssociation where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 31, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EC2SubnetNetworkAclAssociation <$>
+      obj .: "NetworkAclId" <*>
+      obj .: "SubnetId"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EC2SubnetNetworkAclAssociation' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/Resources/EC2SubnetRouteTableAssociation.hs b/library-gen/Stratosphere/Resources/EC2SubnetRouteTableAssociation.hs
--- a/library-gen/Stratosphere/Resources/EC2SubnetRouteTableAssociation.hs
+++ b/library-gen/Stratosphere/Resources/EC2SubnetRouteTableAssociation.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-subnet-route-table-assoc.html
 
 module Stratosphere.Resources.EC2SubnetRouteTableAssociation where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   EC2SubnetRouteTableAssociation
   { _eC2SubnetRouteTableAssociationRouteTableId :: Val Text
   , _eC2SubnetRouteTableAssociationSubnetId :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EC2SubnetRouteTableAssociation where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 31, omitNothingFields = True }
+  toJSON EC2SubnetRouteTableAssociation{..} =
+    object $
+    catMaybes
+    [ Just ("RouteTableId" .= _eC2SubnetRouteTableAssociationRouteTableId)
+    , Just ("SubnetId" .= _eC2SubnetRouteTableAssociationSubnetId)
+    ]
 
 instance FromJSON EC2SubnetRouteTableAssociation where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 31, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EC2SubnetRouteTableAssociation <$>
+      obj .: "RouteTableId" <*>
+      obj .: "SubnetId"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EC2SubnetRouteTableAssociation' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/Resources/EC2VPC.hs b/library-gen/Stratosphere/Resources/EC2VPC.hs
--- a/library-gen/Stratosphere/Resources/EC2VPC.hs
+++ b/library-gen/Stratosphere/Resources/EC2VPC.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpc.html
 
 module Stratosphere.Resources.EC2VPC where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.Tag
@@ -23,13 +23,28 @@
   , _eC2VPCEnableDnsSupport :: Maybe (Val Bool')
   , _eC2VPCInstanceTenancy :: Maybe (Val Text)
   , _eC2VPCTags :: Maybe [Tag]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EC2VPC where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 7, omitNothingFields = True }
+  toJSON EC2VPC{..} =
+    object $
+    catMaybes
+    [ Just ("CidrBlock" .= _eC2VPCCidrBlock)
+    , ("EnableDnsHostnames" .=) <$> _eC2VPCEnableDnsHostnames
+    , ("EnableDnsSupport" .=) <$> _eC2VPCEnableDnsSupport
+    , ("InstanceTenancy" .=) <$> _eC2VPCInstanceTenancy
+    , ("Tags" .=) <$> _eC2VPCTags
+    ]
 
 instance FromJSON EC2VPC where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 7, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EC2VPC <$>
+      obj .: "CidrBlock" <*>
+      obj .:? "EnableDnsHostnames" <*>
+      obj .:? "EnableDnsSupport" <*>
+      obj .:? "InstanceTenancy" <*>
+      obj .:? "Tags"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EC2VPC' containing required fields as arguments.
 ec2VPC
diff --git a/library-gen/Stratosphere/Resources/EC2VPCCidrBlock.hs b/library-gen/Stratosphere/Resources/EC2VPCCidrBlock.hs
--- a/library-gen/Stratosphere/Resources/EC2VPCCidrBlock.hs
+++ b/library-gen/Stratosphere/Resources/EC2VPCCidrBlock.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpccidrblock.html
 
 module Stratosphere.Resources.EC2VPCCidrBlock where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   EC2VPCCidrBlock
   { _eC2VPCCidrBlockAmazonProvidedIpv6CidrBlock :: Maybe (Val Bool')
   , _eC2VPCCidrBlockVpcId :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EC2VPCCidrBlock where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 16, omitNothingFields = True }
+  toJSON EC2VPCCidrBlock{..} =
+    object $
+    catMaybes
+    [ ("AmazonProvidedIpv6CidrBlock" .=) <$> _eC2VPCCidrBlockAmazonProvidedIpv6CidrBlock
+    , Just ("VpcId" .= _eC2VPCCidrBlockVpcId)
+    ]
 
 instance FromJSON EC2VPCCidrBlock where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 16, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EC2VPCCidrBlock <$>
+      obj .:? "AmazonProvidedIpv6CidrBlock" <*>
+      obj .: "VpcId"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EC2VPCCidrBlock' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/EC2VPCDHCPOptionsAssociation.hs b/library-gen/Stratosphere/Resources/EC2VPCDHCPOptionsAssociation.hs
--- a/library-gen/Stratosphere/Resources/EC2VPCDHCPOptionsAssociation.hs
+++ b/library-gen/Stratosphere/Resources/EC2VPCDHCPOptionsAssociation.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpc-dhcp-options-assoc.html
 
 module Stratosphere.Resources.EC2VPCDHCPOptionsAssociation where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   EC2VPCDHCPOptionsAssociation
   { _eC2VPCDHCPOptionsAssociationDhcpOptionsId :: Val Text
   , _eC2VPCDHCPOptionsAssociationVpcId :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EC2VPCDHCPOptionsAssociation where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 29, omitNothingFields = True }
+  toJSON EC2VPCDHCPOptionsAssociation{..} =
+    object $
+    catMaybes
+    [ Just ("DhcpOptionsId" .= _eC2VPCDHCPOptionsAssociationDhcpOptionsId)
+    , Just ("VpcId" .= _eC2VPCDHCPOptionsAssociationVpcId)
+    ]
 
 instance FromJSON EC2VPCDHCPOptionsAssociation where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 29, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EC2VPCDHCPOptionsAssociation <$>
+      obj .: "DhcpOptionsId" <*>
+      obj .: "VpcId"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EC2VPCDHCPOptionsAssociation' containing required fields
 -- | as arguments.
diff --git a/library-gen/Stratosphere/Resources/EC2VPCEndpoint.hs b/library-gen/Stratosphere/Resources/EC2VPCEndpoint.hs
--- a/library-gen/Stratosphere/Resources/EC2VPCEndpoint.hs
+++ b/library-gen/Stratosphere/Resources/EC2VPCEndpoint.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcendpoint.html
 
 module Stratosphere.Resources.EC2VPCEndpoint where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -22,13 +22,26 @@
   , _eC2VPCEndpointRouteTableIds :: Maybe [Val Text]
   , _eC2VPCEndpointServiceName :: Val Text
   , _eC2VPCEndpointVpcId :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EC2VPCEndpoint where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 15, omitNothingFields = True }
+  toJSON EC2VPCEndpoint{..} =
+    object $
+    catMaybes
+    [ ("PolicyDocument" .=) <$> _eC2VPCEndpointPolicyDocument
+    , ("RouteTableIds" .=) <$> _eC2VPCEndpointRouteTableIds
+    , Just ("ServiceName" .= _eC2VPCEndpointServiceName)
+    , Just ("VpcId" .= _eC2VPCEndpointVpcId)
+    ]
 
 instance FromJSON EC2VPCEndpoint where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 15, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EC2VPCEndpoint <$>
+      obj .:? "PolicyDocument" <*>
+      obj .:? "RouteTableIds" <*>
+      obj .: "ServiceName" <*>
+      obj .: "VpcId"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EC2VPCEndpoint' containing required fields as arguments.
 ec2VPCEndpoint
diff --git a/library-gen/Stratosphere/Resources/EC2VPCGatewayAttachment.hs b/library-gen/Stratosphere/Resources/EC2VPCGatewayAttachment.hs
--- a/library-gen/Stratosphere/Resources/EC2VPCGatewayAttachment.hs
+++ b/library-gen/Stratosphere/Resources/EC2VPCGatewayAttachment.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpc-gateway-attachment.html
 
 module Stratosphere.Resources.EC2VPCGatewayAttachment where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -21,13 +21,24 @@
   { _eC2VPCGatewayAttachmentInternetGatewayId :: Maybe (Val Text)
   , _eC2VPCGatewayAttachmentVpcId :: Val Text
   , _eC2VPCGatewayAttachmentVpnGatewayId :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EC2VPCGatewayAttachment where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 24, omitNothingFields = True }
+  toJSON EC2VPCGatewayAttachment{..} =
+    object $
+    catMaybes
+    [ ("InternetGatewayId" .=) <$> _eC2VPCGatewayAttachmentInternetGatewayId
+    , Just ("VpcId" .= _eC2VPCGatewayAttachmentVpcId)
+    , ("VpnGatewayId" .=) <$> _eC2VPCGatewayAttachmentVpnGatewayId
+    ]
 
 instance FromJSON EC2VPCGatewayAttachment where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 24, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EC2VPCGatewayAttachment <$>
+      obj .:? "InternetGatewayId" <*>
+      obj .: "VpcId" <*>
+      obj .:? "VpnGatewayId"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EC2VPCGatewayAttachment' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/EC2VPCPeeringConnection.hs b/library-gen/Stratosphere/Resources/EC2VPCPeeringConnection.hs
--- a/library-gen/Stratosphere/Resources/EC2VPCPeeringConnection.hs
+++ b/library-gen/Stratosphere/Resources/EC2VPCPeeringConnection.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcpeeringconnection.html
 
 module Stratosphere.Resources.EC2VPCPeeringConnection where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.Tag
@@ -21,13 +21,24 @@
   { _eC2VPCPeeringConnectionPeerVpcId :: Val Text
   , _eC2VPCPeeringConnectionTags :: Maybe [Tag]
   , _eC2VPCPeeringConnectionVpcId :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EC2VPCPeeringConnection where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 24, omitNothingFields = True }
+  toJSON EC2VPCPeeringConnection{..} =
+    object $
+    catMaybes
+    [ Just ("PeerVpcId" .= _eC2VPCPeeringConnectionPeerVpcId)
+    , ("Tags" .=) <$> _eC2VPCPeeringConnectionTags
+    , Just ("VpcId" .= _eC2VPCPeeringConnectionVpcId)
+    ]
 
 instance FromJSON EC2VPCPeeringConnection where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 24, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EC2VPCPeeringConnection <$>
+      obj .: "PeerVpcId" <*>
+      obj .:? "Tags" <*>
+      obj .: "VpcId"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EC2VPCPeeringConnection' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/EC2VPNConnection.hs b/library-gen/Stratosphere/Resources/EC2VPNConnection.hs
--- a/library-gen/Stratosphere/Resources/EC2VPNConnection.hs
+++ b/library-gen/Stratosphere/Resources/EC2VPNConnection.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpn-connection.html
 
 module Stratosphere.Resources.EC2VPNConnection where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.Tag
@@ -23,13 +23,28 @@
   , _eC2VPNConnectionTags :: Maybe [Tag]
   , _eC2VPNConnectionType :: Val Text
   , _eC2VPNConnectionVpnGatewayId :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EC2VPNConnection where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
+  toJSON EC2VPNConnection{..} =
+    object $
+    catMaybes
+    [ Just ("CustomerGatewayId" .= _eC2VPNConnectionCustomerGatewayId)
+    , ("StaticRoutesOnly" .=) <$> _eC2VPNConnectionStaticRoutesOnly
+    , ("Tags" .=) <$> _eC2VPNConnectionTags
+    , Just ("Type" .= _eC2VPNConnectionType)
+    , Just ("VpnGatewayId" .= _eC2VPNConnectionVpnGatewayId)
+    ]
 
 instance FromJSON EC2VPNConnection where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EC2VPNConnection <$>
+      obj .: "CustomerGatewayId" <*>
+      obj .:? "StaticRoutesOnly" <*>
+      obj .:? "Tags" <*>
+      obj .: "Type" <*>
+      obj .: "VpnGatewayId"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EC2VPNConnection' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/EC2VPNConnectionRoute.hs b/library-gen/Stratosphere/Resources/EC2VPNConnectionRoute.hs
--- a/library-gen/Stratosphere/Resources/EC2VPNConnectionRoute.hs
+++ b/library-gen/Stratosphere/Resources/EC2VPNConnectionRoute.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpn-connection-route.html
 
 module Stratosphere.Resources.EC2VPNConnectionRoute where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   EC2VPNConnectionRoute
   { _eC2VPNConnectionRouteDestinationCidrBlock :: Val Text
   , _eC2VPNConnectionRouteVpnConnectionId :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EC2VPNConnectionRoute where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 22, omitNothingFields = True }
+  toJSON EC2VPNConnectionRoute{..} =
+    object $
+    catMaybes
+    [ Just ("DestinationCidrBlock" .= _eC2VPNConnectionRouteDestinationCidrBlock)
+    , Just ("VpnConnectionId" .= _eC2VPNConnectionRouteVpnConnectionId)
+    ]
 
 instance FromJSON EC2VPNConnectionRoute where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 22, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EC2VPNConnectionRoute <$>
+      obj .: "DestinationCidrBlock" <*>
+      obj .: "VpnConnectionId"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EC2VPNConnectionRoute' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/EC2VPNGateway.hs b/library-gen/Stratosphere/Resources/EC2VPNGateway.hs
--- a/library-gen/Stratosphere/Resources/EC2VPNGateway.hs
+++ b/library-gen/Stratosphere/Resources/EC2VPNGateway.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpn-gateway.html
 
 module Stratosphere.Resources.EC2VPNGateway where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.Tag
@@ -20,13 +20,22 @@
   EC2VPNGateway
   { _eC2VPNGatewayTags :: Maybe [Tag]
   , _eC2VPNGatewayType :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EC2VPNGateway where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
+  toJSON EC2VPNGateway{..} =
+    object $
+    catMaybes
+    [ ("Tags" .=) <$> _eC2VPNGatewayTags
+    , Just ("Type" .= _eC2VPNGatewayType)
+    ]
 
 instance FromJSON EC2VPNGateway where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EC2VPNGateway <$>
+      obj .:? "Tags" <*>
+      obj .: "Type"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EC2VPNGateway' containing required fields as arguments.
 ec2VPNGateway
diff --git a/library-gen/Stratosphere/Resources/EC2VPNGatewayRoutePropagation.hs b/library-gen/Stratosphere/Resources/EC2VPNGatewayRoutePropagation.hs
--- a/library-gen/Stratosphere/Resources/EC2VPNGatewayRoutePropagation.hs
+++ b/library-gen/Stratosphere/Resources/EC2VPNGatewayRoutePropagation.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpn-gatewayrouteprop.html
 
 module Stratosphere.Resources.EC2VPNGatewayRoutePropagation where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   EC2VPNGatewayRoutePropagation
   { _eC2VPNGatewayRoutePropagationRouteTableIds :: [Val Text]
   , _eC2VPNGatewayRoutePropagationVpnGatewayId :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EC2VPNGatewayRoutePropagation where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
+  toJSON EC2VPNGatewayRoutePropagation{..} =
+    object $
+    catMaybes
+    [ Just ("RouteTableIds" .= _eC2VPNGatewayRoutePropagationRouteTableIds)
+    , Just ("VpnGatewayId" .= _eC2VPNGatewayRoutePropagationVpnGatewayId)
+    ]
 
 instance FromJSON EC2VPNGatewayRoutePropagation where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EC2VPNGatewayRoutePropagation <$>
+      obj .: "RouteTableIds" <*>
+      obj .: "VpnGatewayId"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EC2VPNGatewayRoutePropagation' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/Resources/EC2Volume.hs b/library-gen/Stratosphere/Resources/EC2Volume.hs
--- a/library-gen/Stratosphere/Resources/EC2Volume.hs
+++ b/library-gen/Stratosphere/Resources/EC2Volume.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ebs-volume.html
 
 module Stratosphere.Resources.EC2Volume where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.Tag
@@ -27,13 +27,36 @@
   , _eC2VolumeSnapshotId :: Maybe (Val Text)
   , _eC2VolumeTags :: Maybe [Tag]
   , _eC2VolumeVolumeType :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EC2Volume where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 10, omitNothingFields = True }
+  toJSON EC2Volume{..} =
+    object $
+    catMaybes
+    [ ("AutoEnableIO" .=) <$> _eC2VolumeAutoEnableIO
+    , Just ("AvailabilityZone" .= _eC2VolumeAvailabilityZone)
+    , ("Encrypted" .=) <$> _eC2VolumeEncrypted
+    , ("Iops" .=) <$> _eC2VolumeIops
+    , ("KmsKeyId" .=) <$> _eC2VolumeKmsKeyId
+    , ("Size" .=) <$> _eC2VolumeSize
+    , ("SnapshotId" .=) <$> _eC2VolumeSnapshotId
+    , ("Tags" .=) <$> _eC2VolumeTags
+    , ("VolumeType" .=) <$> _eC2VolumeVolumeType
+    ]
 
 instance FromJSON EC2Volume where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 10, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EC2Volume <$>
+      obj .:? "AutoEnableIO" <*>
+      obj .: "AvailabilityZone" <*>
+      obj .:? "Encrypted" <*>
+      obj .:? "Iops" <*>
+      obj .:? "KmsKeyId" <*>
+      obj .:? "Size" <*>
+      obj .:? "SnapshotId" <*>
+      obj .:? "Tags" <*>
+      obj .:? "VolumeType"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EC2Volume' containing required fields as arguments.
 ec2Volume
diff --git a/library-gen/Stratosphere/Resources/EC2VolumeAttachment.hs b/library-gen/Stratosphere/Resources/EC2VolumeAttachment.hs
--- a/library-gen/Stratosphere/Resources/EC2VolumeAttachment.hs
+++ b/library-gen/Stratosphere/Resources/EC2VolumeAttachment.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ebs-volumeattachment.html
 
 module Stratosphere.Resources.EC2VolumeAttachment where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -21,13 +21,24 @@
   { _eC2VolumeAttachmentDevice :: Val Text
   , _eC2VolumeAttachmentInstanceId :: Val Text
   , _eC2VolumeAttachmentVolumeId :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EC2VolumeAttachment where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 20, omitNothingFields = True }
+  toJSON EC2VolumeAttachment{..} =
+    object $
+    catMaybes
+    [ Just ("Device" .= _eC2VolumeAttachmentDevice)
+    , Just ("InstanceId" .= _eC2VolumeAttachmentInstanceId)
+    , Just ("VolumeId" .= _eC2VolumeAttachmentVolumeId)
+    ]
 
 instance FromJSON EC2VolumeAttachment where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 20, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EC2VolumeAttachment <$>
+      obj .: "Device" <*>
+      obj .: "InstanceId" <*>
+      obj .: "VolumeId"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EC2VolumeAttachment' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/ECRRepository.hs b/library-gen/Stratosphere/Resources/ECRRepository.hs
--- a/library-gen/Stratosphere/Resources/ECRRepository.hs
+++ b/library-gen/Stratosphere/Resources/ECRRepository.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecr-repository.html
 
 module Stratosphere.Resources.ECRRepository where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   ECRRepository
   { _eCRRepositoryRepositoryName :: Maybe (Val Text)
   , _eCRRepositoryRepositoryPolicyText :: Maybe Object
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ECRRepository where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
+  toJSON ECRRepository{..} =
+    object $
+    catMaybes
+    [ ("RepositoryName" .=) <$> _eCRRepositoryRepositoryName
+    , ("RepositoryPolicyText" .=) <$> _eCRRepositoryRepositoryPolicyText
+    ]
 
 instance FromJSON ECRRepository where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ECRRepository <$>
+      obj .:? "RepositoryName" <*>
+      obj .:? "RepositoryPolicyText"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ECRRepository' containing required fields as arguments.
 ecrRepository
diff --git a/library-gen/Stratosphere/Resources/ECSCluster.hs b/library-gen/Stratosphere/Resources/ECSCluster.hs
--- a/library-gen/Stratosphere/Resources/ECSCluster.hs
+++ b/library-gen/Stratosphere/Resources/ECSCluster.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-cluster.html
 
 module Stratosphere.Resources.ECSCluster where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -19,13 +19,20 @@
 data ECSCluster =
   ECSCluster
   { _eCSClusterClusterName :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ECSCluster where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 11, omitNothingFields = True }
+  toJSON ECSCluster{..} =
+    object $
+    catMaybes
+    [ ("ClusterName" .=) <$> _eCSClusterClusterName
+    ]
 
 instance FromJSON ECSCluster where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 11, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ECSCluster <$>
+      obj .:? "ClusterName"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ECSCluster' containing required fields as arguments.
 ecsCluster
diff --git a/library-gen/Stratosphere/Resources/ECSService.hs b/library-gen/Stratosphere/Resources/ECSService.hs
--- a/library-gen/Stratosphere/Resources/ECSService.hs
+++ b/library-gen/Stratosphere/Resources/ECSService.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-service.html
 
 module Stratosphere.Resources.ECSService where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.ECSServiceDeploymentConfiguration
@@ -25,13 +25,30 @@
   , _eCSServiceLoadBalancers :: Maybe [ECSServiceLoadBalancer]
   , _eCSServiceRole :: Maybe (Val Text)
   , _eCSServiceTaskDefinition :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ECSService where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 11, omitNothingFields = True }
+  toJSON ECSService{..} =
+    object $
+    catMaybes
+    [ ("Cluster" .=) <$> _eCSServiceCluster
+    , ("DeploymentConfiguration" .=) <$> _eCSServiceDeploymentConfiguration
+    , Just ("DesiredCount" .= _eCSServiceDesiredCount)
+    , ("LoadBalancers" .=) <$> _eCSServiceLoadBalancers
+    , ("Role" .=) <$> _eCSServiceRole
+    , Just ("TaskDefinition" .= _eCSServiceTaskDefinition)
+    ]
 
 instance FromJSON ECSService where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 11, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ECSService <$>
+      obj .:? "Cluster" <*>
+      obj .:? "DeploymentConfiguration" <*>
+      obj .: "DesiredCount" <*>
+      obj .:? "LoadBalancers" <*>
+      obj .:? "Role" <*>
+      obj .: "TaskDefinition"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ECSService' containing required fields as arguments.
 ecsService
diff --git a/library-gen/Stratosphere/Resources/ECSTaskDefinition.hs b/library-gen/Stratosphere/Resources/ECSTaskDefinition.hs
--- a/library-gen/Stratosphere/Resources/ECSTaskDefinition.hs
+++ b/library-gen/Stratosphere/Resources/ECSTaskDefinition.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-taskdefinition.html
 
 module Stratosphere.Resources.ECSTaskDefinition where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.ECSTaskDefinitionContainerDefinition
@@ -24,13 +24,28 @@
   , _eCSTaskDefinitionNetworkMode :: Maybe (Val Text)
   , _eCSTaskDefinitionTaskRoleArn :: Maybe (Val Text)
   , _eCSTaskDefinitionVolumes :: Maybe [ECSTaskDefinitionVolume]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ECSTaskDefinition where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 18, omitNothingFields = True }
+  toJSON ECSTaskDefinition{..} =
+    object $
+    catMaybes
+    [ ("ContainerDefinitions" .=) <$> _eCSTaskDefinitionContainerDefinitions
+    , ("Family" .=) <$> _eCSTaskDefinitionFamily
+    , ("NetworkMode" .=) <$> _eCSTaskDefinitionNetworkMode
+    , ("TaskRoleArn" .=) <$> _eCSTaskDefinitionTaskRoleArn
+    , ("Volumes" .=) <$> _eCSTaskDefinitionVolumes
+    ]
 
 instance FromJSON ECSTaskDefinition where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 18, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ECSTaskDefinition <$>
+      obj .:? "ContainerDefinitions" <*>
+      obj .:? "Family" <*>
+      obj .:? "NetworkMode" <*>
+      obj .:? "TaskRoleArn" <*>
+      obj .:? "Volumes"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ECSTaskDefinition' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/EFSFileSystem.hs b/library-gen/Stratosphere/Resources/EFSFileSystem.hs
--- a/library-gen/Stratosphere/Resources/EFSFileSystem.hs
+++ b/library-gen/Stratosphere/Resources/EFSFileSystem.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-efs-filesystem.html
 
 module Stratosphere.Resources.EFSFileSystem where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.EFSFileSystemElasticFileSystemTag
@@ -20,13 +20,22 @@
   EFSFileSystem
   { _eFSFileSystemFileSystemTags :: Maybe [EFSFileSystemElasticFileSystemTag]
   , _eFSFileSystemPerformanceMode :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EFSFileSystem where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
+  toJSON EFSFileSystem{..} =
+    object $
+    catMaybes
+    [ ("FileSystemTags" .=) <$> _eFSFileSystemFileSystemTags
+    , ("PerformanceMode" .=) <$> _eFSFileSystemPerformanceMode
+    ]
 
 instance FromJSON EFSFileSystem where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EFSFileSystem <$>
+      obj .:? "FileSystemTags" <*>
+      obj .:? "PerformanceMode"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EFSFileSystem' containing required fields as arguments.
 efsFileSystem
diff --git a/library-gen/Stratosphere/Resources/EFSMountTarget.hs b/library-gen/Stratosphere/Resources/EFSMountTarget.hs
--- a/library-gen/Stratosphere/Resources/EFSMountTarget.hs
+++ b/library-gen/Stratosphere/Resources/EFSMountTarget.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-efs-mounttarget.html
 
 module Stratosphere.Resources.EFSMountTarget where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -22,13 +22,26 @@
   , _eFSMountTargetIpAddress :: Maybe (Val Text)
   , _eFSMountTargetSecurityGroups :: [Val Text]
   , _eFSMountTargetSubnetId :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EFSMountTarget where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 15, omitNothingFields = True }
+  toJSON EFSMountTarget{..} =
+    object $
+    catMaybes
+    [ Just ("FileSystemId" .= _eFSMountTargetFileSystemId)
+    , ("IpAddress" .=) <$> _eFSMountTargetIpAddress
+    , Just ("SecurityGroups" .= _eFSMountTargetSecurityGroups)
+    , Just ("SubnetId" .= _eFSMountTargetSubnetId)
+    ]
 
 instance FromJSON EFSMountTarget where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 15, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EFSMountTarget <$>
+      obj .: "FileSystemId" <*>
+      obj .:? "IpAddress" <*>
+      obj .: "SecurityGroups" <*>
+      obj .: "SubnetId"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EFSMountTarget' containing required fields as arguments.
 efsMountTarget
diff --git a/library-gen/Stratosphere/Resources/EMRCluster.hs b/library-gen/Stratosphere/Resources/EMRCluster.hs
--- a/library-gen/Stratosphere/Resources/EMRCluster.hs
+++ b/library-gen/Stratosphere/Resources/EMRCluster.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-cluster.html
 
 module Stratosphere.Resources.EMRCluster where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.EMRClusterApplication
@@ -34,13 +34,42 @@
   , _eMRClusterServiceRole :: Val Text
   , _eMRClusterTags :: Maybe [Tag]
   , _eMRClusterVisibleToAllUsers :: Maybe (Val Bool')
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EMRCluster where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 11, omitNothingFields = True }
+  toJSON EMRCluster{..} =
+    object $
+    catMaybes
+    [ ("AdditionalInfo" .=) <$> _eMRClusterAdditionalInfo
+    , ("Applications" .=) <$> _eMRClusterApplications
+    , ("BootstrapActions" .=) <$> _eMRClusterBootstrapActions
+    , ("Configurations" .=) <$> _eMRClusterConfigurations
+    , Just ("Instances" .= _eMRClusterInstances)
+    , Just ("JobFlowRole" .= _eMRClusterJobFlowRole)
+    , ("LogUri" .=) <$> _eMRClusterLogUri
+    , Just ("Name" .= _eMRClusterName)
+    , ("ReleaseLabel" .=) <$> _eMRClusterReleaseLabel
+    , Just ("ServiceRole" .= _eMRClusterServiceRole)
+    , ("Tags" .=) <$> _eMRClusterTags
+    , ("VisibleToAllUsers" .=) <$> _eMRClusterVisibleToAllUsers
+    ]
 
 instance FromJSON EMRCluster where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 11, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EMRCluster <$>
+      obj .:? "AdditionalInfo" <*>
+      obj .:? "Applications" <*>
+      obj .:? "BootstrapActions" <*>
+      obj .:? "Configurations" <*>
+      obj .: "Instances" <*>
+      obj .: "JobFlowRole" <*>
+      obj .:? "LogUri" <*>
+      obj .: "Name" <*>
+      obj .:? "ReleaseLabel" <*>
+      obj .: "ServiceRole" <*>
+      obj .:? "Tags" <*>
+      obj .:? "VisibleToAllUsers"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EMRCluster' containing required fields as arguments.
 emrCluster
diff --git a/library-gen/Stratosphere/Resources/EMRInstanceGroupConfig.hs b/library-gen/Stratosphere/Resources/EMRInstanceGroupConfig.hs
--- a/library-gen/Stratosphere/Resources/EMRInstanceGroupConfig.hs
+++ b/library-gen/Stratosphere/Resources/EMRInstanceGroupConfig.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-instancegroupconfig.html
 
 module Stratosphere.Resources.EMRInstanceGroupConfig where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.EMRInstanceGroupConfigConfiguration
@@ -28,13 +28,36 @@
   , _eMRInstanceGroupConfigJobFlowId :: Val Text
   , _eMRInstanceGroupConfigMarket :: Maybe (Val Text)
   , _eMRInstanceGroupConfigName :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EMRInstanceGroupConfig where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 23, omitNothingFields = True }
+  toJSON EMRInstanceGroupConfig{..} =
+    object $
+    catMaybes
+    [ ("BidPrice" .=) <$> _eMRInstanceGroupConfigBidPrice
+    , ("Configurations" .=) <$> _eMRInstanceGroupConfigConfigurations
+    , ("EbsConfiguration" .=) <$> _eMRInstanceGroupConfigEbsConfiguration
+    , Just ("InstanceCount" .= _eMRInstanceGroupConfigInstanceCount)
+    , Just ("InstanceRole" .= _eMRInstanceGroupConfigInstanceRole)
+    , Just ("InstanceType" .= _eMRInstanceGroupConfigInstanceType)
+    , Just ("JobFlowId" .= _eMRInstanceGroupConfigJobFlowId)
+    , ("Market" .=) <$> _eMRInstanceGroupConfigMarket
+    , ("Name" .=) <$> _eMRInstanceGroupConfigName
+    ]
 
 instance FromJSON EMRInstanceGroupConfig where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 23, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EMRInstanceGroupConfig <$>
+      obj .:? "BidPrice" <*>
+      obj .:? "Configurations" <*>
+      obj .:? "EbsConfiguration" <*>
+      obj .: "InstanceCount" <*>
+      obj .: "InstanceRole" <*>
+      obj .: "InstanceType" <*>
+      obj .: "JobFlowId" <*>
+      obj .:? "Market" <*>
+      obj .:? "Name"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EMRInstanceGroupConfig' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/EMRStep.hs b/library-gen/Stratosphere/Resources/EMRStep.hs
--- a/library-gen/Stratosphere/Resources/EMRStep.hs
+++ b/library-gen/Stratosphere/Resources/EMRStep.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-step.html
 
 module Stratosphere.Resources.EMRStep where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.EMRStepHadoopJarStepConfig
@@ -22,13 +22,26 @@
   , _eMRStepHadoopJarStep :: EMRStepHadoopJarStepConfig
   , _eMRStepJobFlowId :: Val Text
   , _eMRStepName :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EMRStep where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 8, omitNothingFields = True }
+  toJSON EMRStep{..} =
+    object $
+    catMaybes
+    [ Just ("ActionOnFailure" .= _eMRStepActionOnFailure)
+    , Just ("HadoopJarStep" .= _eMRStepHadoopJarStep)
+    , Just ("JobFlowId" .= _eMRStepJobFlowId)
+    , Just ("Name" .= _eMRStepName)
+    ]
 
 instance FromJSON EMRStep where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 8, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EMRStep <$>
+      obj .: "ActionOnFailure" <*>
+      obj .: "HadoopJarStep" <*>
+      obj .: "JobFlowId" <*>
+      obj .: "Name"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EMRStep' containing required fields as arguments.
 emrStep
diff --git a/library-gen/Stratosphere/Resources/ElastiCacheCacheCluster.hs b/library-gen/Stratosphere/Resources/ElastiCacheCacheCluster.hs
--- a/library-gen/Stratosphere/Resources/ElastiCacheCacheCluster.hs
+++ b/library-gen/Stratosphere/Resources/ElastiCacheCacheCluster.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-cache-cluster.html
 
 module Stratosphere.Resources.ElastiCacheCacheCluster where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.Tag
@@ -39,13 +39,60 @@
   , _elastiCacheCacheClusterSnapshotWindow :: Maybe (Val Text)
   , _elastiCacheCacheClusterTags :: Maybe [Tag]
   , _elastiCacheCacheClusterVpcSecurityGroupIds :: Maybe [Val Text]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ElastiCacheCacheCluster where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 24, omitNothingFields = True }
+  toJSON ElastiCacheCacheCluster{..} =
+    object $
+    catMaybes
+    [ ("AZMode" .=) <$> _elastiCacheCacheClusterAZMode
+    , ("AutoMinorVersionUpgrade" .=) <$> _elastiCacheCacheClusterAutoMinorVersionUpgrade
+    , Just ("CacheNodeType" .= _elastiCacheCacheClusterCacheNodeType)
+    , ("CacheParameterGroupName" .=) <$> _elastiCacheCacheClusterCacheParameterGroupName
+    , ("CacheSecurityGroupNames" .=) <$> _elastiCacheCacheClusterCacheSecurityGroupNames
+    , ("CacheSubnetGroupName" .=) <$> _elastiCacheCacheClusterCacheSubnetGroupName
+    , ("ClusterName" .=) <$> _elastiCacheCacheClusterClusterName
+    , Just ("Engine" .= _elastiCacheCacheClusterEngine)
+    , ("EngineVersion" .=) <$> _elastiCacheCacheClusterEngineVersion
+    , ("NotificationTopicArn" .=) <$> _elastiCacheCacheClusterNotificationTopicArn
+    , Just ("NumCacheNodes" .= _elastiCacheCacheClusterNumCacheNodes)
+    , ("Port" .=) <$> _elastiCacheCacheClusterPort
+    , ("PreferredAvailabilityZone" .=) <$> _elastiCacheCacheClusterPreferredAvailabilityZone
+    , ("PreferredAvailabilityZones" .=) <$> _elastiCacheCacheClusterPreferredAvailabilityZones
+    , ("PreferredMaintenanceWindow" .=) <$> _elastiCacheCacheClusterPreferredMaintenanceWindow
+    , ("SnapshotArns" .=) <$> _elastiCacheCacheClusterSnapshotArns
+    , ("SnapshotName" .=) <$> _elastiCacheCacheClusterSnapshotName
+    , ("SnapshotRetentionLimit" .=) <$> _elastiCacheCacheClusterSnapshotRetentionLimit
+    , ("SnapshotWindow" .=) <$> _elastiCacheCacheClusterSnapshotWindow
+    , ("Tags" .=) <$> _elastiCacheCacheClusterTags
+    , ("VpcSecurityGroupIds" .=) <$> _elastiCacheCacheClusterVpcSecurityGroupIds
+    ]
 
 instance FromJSON ElastiCacheCacheCluster where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 24, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ElastiCacheCacheCluster <$>
+      obj .:? "AZMode" <*>
+      obj .:? "AutoMinorVersionUpgrade" <*>
+      obj .: "CacheNodeType" <*>
+      obj .:? "CacheParameterGroupName" <*>
+      obj .:? "CacheSecurityGroupNames" <*>
+      obj .:? "CacheSubnetGroupName" <*>
+      obj .:? "ClusterName" <*>
+      obj .: "Engine" <*>
+      obj .:? "EngineVersion" <*>
+      obj .:? "NotificationTopicArn" <*>
+      obj .: "NumCacheNodes" <*>
+      obj .:? "Port" <*>
+      obj .:? "PreferredAvailabilityZone" <*>
+      obj .:? "PreferredAvailabilityZones" <*>
+      obj .:? "PreferredMaintenanceWindow" <*>
+      obj .:? "SnapshotArns" <*>
+      obj .:? "SnapshotName" <*>
+      obj .:? "SnapshotRetentionLimit" <*>
+      obj .:? "SnapshotWindow" <*>
+      obj .:? "Tags" <*>
+      obj .:? "VpcSecurityGroupIds"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ElastiCacheCacheCluster' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/ElastiCacheParameterGroup.hs b/library-gen/Stratosphere/Resources/ElastiCacheParameterGroup.hs
--- a/library-gen/Stratosphere/Resources/ElastiCacheParameterGroup.hs
+++ b/library-gen/Stratosphere/Resources/ElastiCacheParameterGroup.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-parameter-group.html
 
 module Stratosphere.Resources.ElastiCacheParameterGroup where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -21,13 +21,24 @@
   { _elastiCacheParameterGroupCacheParameterGroupFamily :: Val Text
   , _elastiCacheParameterGroupDescription :: Val Text
   , _elastiCacheParameterGroupProperties :: Maybe Object
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ElastiCacheParameterGroup where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 26, omitNothingFields = True }
+  toJSON ElastiCacheParameterGroup{..} =
+    object $
+    catMaybes
+    [ Just ("CacheParameterGroupFamily" .= _elastiCacheParameterGroupCacheParameterGroupFamily)
+    , Just ("Description" .= _elastiCacheParameterGroupDescription)
+    , ("Properties" .=) <$> _elastiCacheParameterGroupProperties
+    ]
 
 instance FromJSON ElastiCacheParameterGroup where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 26, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ElastiCacheParameterGroup <$>
+      obj .: "CacheParameterGroupFamily" <*>
+      obj .: "Description" <*>
+      obj .:? "Properties"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ElastiCacheParameterGroup' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/ElastiCacheReplicationGroup.hs b/library-gen/Stratosphere/Resources/ElastiCacheReplicationGroup.hs
--- a/library-gen/Stratosphere/Resources/ElastiCacheReplicationGroup.hs
+++ b/library-gen/Stratosphere/Resources/ElastiCacheReplicationGroup.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html
 
 module Stratosphere.Resources.ElastiCacheReplicationGroup where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.ElastiCacheReplicationGroupNodeGroupConfiguration
@@ -45,13 +45,70 @@
   , _elastiCacheReplicationGroupSnapshotWindow :: Maybe (Val Text)
   , _elastiCacheReplicationGroupSnapshottingClusterId :: Maybe (Val Text)
   , _elastiCacheReplicationGroupTags :: Maybe [Tag]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ElastiCacheReplicationGroup where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+  toJSON ElastiCacheReplicationGroup{..} =
+    object $
+    catMaybes
+    [ ("AutoMinorVersionUpgrade" .=) <$> _elastiCacheReplicationGroupAutoMinorVersionUpgrade
+    , ("AutomaticFailoverEnabled" .=) <$> _elastiCacheReplicationGroupAutomaticFailoverEnabled
+    , ("CacheNodeType" .=) <$> _elastiCacheReplicationGroupCacheNodeType
+    , ("CacheParameterGroupName" .=) <$> _elastiCacheReplicationGroupCacheParameterGroupName
+    , ("CacheSecurityGroupNames" .=) <$> _elastiCacheReplicationGroupCacheSecurityGroupNames
+    , ("CacheSubnetGroupName" .=) <$> _elastiCacheReplicationGroupCacheSubnetGroupName
+    , ("Engine" .=) <$> _elastiCacheReplicationGroupEngine
+    , ("EngineVersion" .=) <$> _elastiCacheReplicationGroupEngineVersion
+    , ("NodeGroupConfiguration" .=) <$> _elastiCacheReplicationGroupNodeGroupConfiguration
+    , ("NotificationTopicArn" .=) <$> _elastiCacheReplicationGroupNotificationTopicArn
+    , ("NumCacheClusters" .=) <$> _elastiCacheReplicationGroupNumCacheClusters
+    , ("NumNodeGroups" .=) <$> _elastiCacheReplicationGroupNumNodeGroups
+    , ("Port" .=) <$> _elastiCacheReplicationGroupPort
+    , ("PreferredCacheClusterAZs" .=) <$> _elastiCacheReplicationGroupPreferredCacheClusterAZs
+    , ("PreferredMaintenanceWindow" .=) <$> _elastiCacheReplicationGroupPreferredMaintenanceWindow
+    , ("PrimaryClusterId" .=) <$> _elastiCacheReplicationGroupPrimaryClusterId
+    , ("ReplicasPerNodeGroup" .=) <$> _elastiCacheReplicationGroupReplicasPerNodeGroup
+    , Just ("ReplicationGroupDescription" .= _elastiCacheReplicationGroupReplicationGroupDescription)
+    , ("ReplicationGroupId" .=) <$> _elastiCacheReplicationGroupReplicationGroupId
+    , ("SecurityGroupIds" .=) <$> _elastiCacheReplicationGroupSecurityGroupIds
+    , ("SnapshotArns" .=) <$> _elastiCacheReplicationGroupSnapshotArns
+    , ("SnapshotName" .=) <$> _elastiCacheReplicationGroupSnapshotName
+    , ("SnapshotRetentionLimit" .=) <$> _elastiCacheReplicationGroupSnapshotRetentionLimit
+    , ("SnapshotWindow" .=) <$> _elastiCacheReplicationGroupSnapshotWindow
+    , ("SnapshottingClusterId" .=) <$> _elastiCacheReplicationGroupSnapshottingClusterId
+    , ("Tags" .=) <$> _elastiCacheReplicationGroupTags
+    ]
 
 instance FromJSON ElastiCacheReplicationGroup where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ElastiCacheReplicationGroup <$>
+      obj .:? "AutoMinorVersionUpgrade" <*>
+      obj .:? "AutomaticFailoverEnabled" <*>
+      obj .:? "CacheNodeType" <*>
+      obj .:? "CacheParameterGroupName" <*>
+      obj .:? "CacheSecurityGroupNames" <*>
+      obj .:? "CacheSubnetGroupName" <*>
+      obj .:? "Engine" <*>
+      obj .:? "EngineVersion" <*>
+      obj .:? "NodeGroupConfiguration" <*>
+      obj .:? "NotificationTopicArn" <*>
+      obj .:? "NumCacheClusters" <*>
+      obj .:? "NumNodeGroups" <*>
+      obj .:? "Port" <*>
+      obj .:? "PreferredCacheClusterAZs" <*>
+      obj .:? "PreferredMaintenanceWindow" <*>
+      obj .:? "PrimaryClusterId" <*>
+      obj .:? "ReplicasPerNodeGroup" <*>
+      obj .: "ReplicationGroupDescription" <*>
+      obj .:? "ReplicationGroupId" <*>
+      obj .:? "SecurityGroupIds" <*>
+      obj .:? "SnapshotArns" <*>
+      obj .:? "SnapshotName" <*>
+      obj .:? "SnapshotRetentionLimit" <*>
+      obj .:? "SnapshotWindow" <*>
+      obj .:? "SnapshottingClusterId" <*>
+      obj .:? "Tags"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ElastiCacheReplicationGroup' containing required fields
 -- | as arguments.
diff --git a/library-gen/Stratosphere/Resources/ElastiCacheSecurityGroup.hs b/library-gen/Stratosphere/Resources/ElastiCacheSecurityGroup.hs
--- a/library-gen/Stratosphere/Resources/ElastiCacheSecurityGroup.hs
+++ b/library-gen/Stratosphere/Resources/ElastiCacheSecurityGroup.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-security-group.html
 
 module Stratosphere.Resources.ElastiCacheSecurityGroup where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -19,13 +19,20 @@
 data ElastiCacheSecurityGroup =
   ElastiCacheSecurityGroup
   { _elastiCacheSecurityGroupDescription :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ElastiCacheSecurityGroup where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 25, omitNothingFields = True }
+  toJSON ElastiCacheSecurityGroup{..} =
+    object $
+    catMaybes
+    [ Just ("Description" .= _elastiCacheSecurityGroupDescription)
+    ]
 
 instance FromJSON ElastiCacheSecurityGroup where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 25, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ElastiCacheSecurityGroup <$>
+      obj .: "Description"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ElastiCacheSecurityGroup' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/ElastiCacheSecurityGroupIngress.hs b/library-gen/Stratosphere/Resources/ElastiCacheSecurityGroupIngress.hs
--- a/library-gen/Stratosphere/Resources/ElastiCacheSecurityGroupIngress.hs
+++ b/library-gen/Stratosphere/Resources/ElastiCacheSecurityGroupIngress.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-security-group-ingress.html
 
 module Stratosphere.Resources.ElastiCacheSecurityGroupIngress where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -21,13 +21,24 @@
   { _elastiCacheSecurityGroupIngressCacheSecurityGroupName :: Val Text
   , _elastiCacheSecurityGroupIngressEC2SecurityGroupName :: Val Text
   , _elastiCacheSecurityGroupIngressEC2SecurityGroupOwnerId :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ElastiCacheSecurityGroupIngress where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 32, omitNothingFields = True }
+  toJSON ElastiCacheSecurityGroupIngress{..} =
+    object $
+    catMaybes
+    [ Just ("CacheSecurityGroupName" .= _elastiCacheSecurityGroupIngressCacheSecurityGroupName)
+    , Just ("EC2SecurityGroupName" .= _elastiCacheSecurityGroupIngressEC2SecurityGroupName)
+    , ("EC2SecurityGroupOwnerId" .=) <$> _elastiCacheSecurityGroupIngressEC2SecurityGroupOwnerId
+    ]
 
 instance FromJSON ElastiCacheSecurityGroupIngress where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 32, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ElastiCacheSecurityGroupIngress <$>
+      obj .: "CacheSecurityGroupName" <*>
+      obj .: "EC2SecurityGroupName" <*>
+      obj .:? "EC2SecurityGroupOwnerId"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ElastiCacheSecurityGroupIngress' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/Resources/ElastiCacheSubnetGroup.hs b/library-gen/Stratosphere/Resources/ElastiCacheSubnetGroup.hs
--- a/library-gen/Stratosphere/Resources/ElastiCacheSubnetGroup.hs
+++ b/library-gen/Stratosphere/Resources/ElastiCacheSubnetGroup.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-subnetgroup.html
 
 module Stratosphere.Resources.ElastiCacheSubnetGroup where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -21,13 +21,24 @@
   { _elastiCacheSubnetGroupCacheSubnetGroupName :: Maybe (Val Text)
   , _elastiCacheSubnetGroupDescription :: Val Text
   , _elastiCacheSubnetGroupSubnetIds :: [Val Text]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ElastiCacheSubnetGroup where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 23, omitNothingFields = True }
+  toJSON ElastiCacheSubnetGroup{..} =
+    object $
+    catMaybes
+    [ ("CacheSubnetGroupName" .=) <$> _elastiCacheSubnetGroupCacheSubnetGroupName
+    , Just ("Description" .= _elastiCacheSubnetGroupDescription)
+    , Just ("SubnetIds" .= _elastiCacheSubnetGroupSubnetIds)
+    ]
 
 instance FromJSON ElastiCacheSubnetGroup where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 23, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ElastiCacheSubnetGroup <$>
+      obj .:? "CacheSubnetGroupName" <*>
+      obj .: "Description" <*>
+      obj .: "SubnetIds"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ElastiCacheSubnetGroup' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/ElasticBeanstalkApplication.hs b/library-gen/Stratosphere/Resources/ElasticBeanstalkApplication.hs
--- a/library-gen/Stratosphere/Resources/ElasticBeanstalkApplication.hs
+++ b/library-gen/Stratosphere/Resources/ElasticBeanstalkApplication.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-beanstalk.html
 
 module Stratosphere.Resources.ElasticBeanstalkApplication where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   ElasticBeanstalkApplication
   { _elasticBeanstalkApplicationApplicationName :: Maybe (Val Text)
   , _elasticBeanstalkApplicationDescription :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ElasticBeanstalkApplication where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+  toJSON ElasticBeanstalkApplication{..} =
+    object $
+    catMaybes
+    [ ("ApplicationName" .=) <$> _elasticBeanstalkApplicationApplicationName
+    , ("Description" .=) <$> _elasticBeanstalkApplicationDescription
+    ]
 
 instance FromJSON ElasticBeanstalkApplication where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ElasticBeanstalkApplication <$>
+      obj .:? "ApplicationName" <*>
+      obj .:? "Description"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ElasticBeanstalkApplication' containing required fields
 -- | as arguments.
diff --git a/library-gen/Stratosphere/Resources/ElasticBeanstalkApplicationVersion.hs b/library-gen/Stratosphere/Resources/ElasticBeanstalkApplicationVersion.hs
--- a/library-gen/Stratosphere/Resources/ElasticBeanstalkApplicationVersion.hs
+++ b/library-gen/Stratosphere/Resources/ElasticBeanstalkApplicationVersion.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-beanstalk-version.html
 
 module Stratosphere.Resources.ElasticBeanstalkApplicationVersion where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.ElasticBeanstalkApplicationVersionSourceBundle
@@ -21,13 +21,24 @@
   { _elasticBeanstalkApplicationVersionApplicationName :: Val Text
   , _elasticBeanstalkApplicationVersionDescription :: Maybe (Val Text)
   , _elasticBeanstalkApplicationVersionSourceBundle :: ElasticBeanstalkApplicationVersionSourceBundle
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ElasticBeanstalkApplicationVersion where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 35, omitNothingFields = True }
+  toJSON ElasticBeanstalkApplicationVersion{..} =
+    object $
+    catMaybes
+    [ Just ("ApplicationName" .= _elasticBeanstalkApplicationVersionApplicationName)
+    , ("Description" .=) <$> _elasticBeanstalkApplicationVersionDescription
+    , Just ("SourceBundle" .= _elasticBeanstalkApplicationVersionSourceBundle)
+    ]
 
 instance FromJSON ElasticBeanstalkApplicationVersion where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 35, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ElasticBeanstalkApplicationVersion <$>
+      obj .: "ApplicationName" <*>
+      obj .:? "Description" <*>
+      obj .: "SourceBundle"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ElasticBeanstalkApplicationVersion' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/Resources/ElasticBeanstalkConfigurationTemplate.hs b/library-gen/Stratosphere/Resources/ElasticBeanstalkConfigurationTemplate.hs
--- a/library-gen/Stratosphere/Resources/ElasticBeanstalkConfigurationTemplate.hs
+++ b/library-gen/Stratosphere/Resources/ElasticBeanstalkConfigurationTemplate.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-beanstalk-configurationtemplate.html
 
 module Stratosphere.Resources.ElasticBeanstalkConfigurationTemplate where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.ElasticBeanstalkConfigurationTemplateConfigurationOptionSetting
@@ -26,13 +26,30 @@
   , _elasticBeanstalkConfigurationTemplateOptionSettings :: Maybe [ElasticBeanstalkConfigurationTemplateConfigurationOptionSetting]
   , _elasticBeanstalkConfigurationTemplateSolutionStackName :: Maybe (Val Text)
   , _elasticBeanstalkConfigurationTemplateSourceConfiguration :: Maybe ElasticBeanstalkConfigurationTemplateSourceConfiguration
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ElasticBeanstalkConfigurationTemplate where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 38, omitNothingFields = True }
+  toJSON ElasticBeanstalkConfigurationTemplate{..} =
+    object $
+    catMaybes
+    [ Just ("ApplicationName" .= _elasticBeanstalkConfigurationTemplateApplicationName)
+    , ("Description" .=) <$> _elasticBeanstalkConfigurationTemplateDescription
+    , ("EnvironmentId" .=) <$> _elasticBeanstalkConfigurationTemplateEnvironmentId
+    , ("OptionSettings" .=) <$> _elasticBeanstalkConfigurationTemplateOptionSettings
+    , ("SolutionStackName" .=) <$> _elasticBeanstalkConfigurationTemplateSolutionStackName
+    , ("SourceConfiguration" .=) <$> _elasticBeanstalkConfigurationTemplateSourceConfiguration
+    ]
 
 instance FromJSON ElasticBeanstalkConfigurationTemplate where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 38, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ElasticBeanstalkConfigurationTemplate <$>
+      obj .: "ApplicationName" <*>
+      obj .:? "Description" <*>
+      obj .:? "EnvironmentId" <*>
+      obj .:? "OptionSettings" <*>
+      obj .:? "SolutionStackName" <*>
+      obj .:? "SourceConfiguration"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ElasticBeanstalkConfigurationTemplate' containing
 -- | required fields as arguments.
diff --git a/library-gen/Stratosphere/Resources/ElasticBeanstalkEnvironment.hs b/library-gen/Stratosphere/Resources/ElasticBeanstalkEnvironment.hs
--- a/library-gen/Stratosphere/Resources/ElasticBeanstalkEnvironment.hs
+++ b/library-gen/Stratosphere/Resources/ElasticBeanstalkEnvironment.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-beanstalk-environment.html
 
 module Stratosphere.Resources.ElasticBeanstalkEnvironment where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.ElasticBeanstalkEnvironmentOptionSettings
@@ -28,13 +28,36 @@
   , _elasticBeanstalkEnvironmentTemplateName :: Maybe (Val Text)
   , _elasticBeanstalkEnvironmentTier :: Maybe ElasticBeanstalkEnvironmentTier
   , _elasticBeanstalkEnvironmentVersionLabel :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ElasticBeanstalkEnvironment where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+  toJSON ElasticBeanstalkEnvironment{..} =
+    object $
+    catMaybes
+    [ Just ("ApplicationName" .= _elasticBeanstalkEnvironmentApplicationName)
+    , ("CNAMEPrefix" .=) <$> _elasticBeanstalkEnvironmentCNAMEPrefix
+    , ("Description" .=) <$> _elasticBeanstalkEnvironmentDescription
+    , ("EnvironmentName" .=) <$> _elasticBeanstalkEnvironmentEnvironmentName
+    , ("OptionSettings" .=) <$> _elasticBeanstalkEnvironmentOptionSettings
+    , ("SolutionStackName" .=) <$> _elasticBeanstalkEnvironmentSolutionStackName
+    , ("TemplateName" .=) <$> _elasticBeanstalkEnvironmentTemplateName
+    , ("Tier" .=) <$> _elasticBeanstalkEnvironmentTier
+    , ("VersionLabel" .=) <$> _elasticBeanstalkEnvironmentVersionLabel
+    ]
 
 instance FromJSON ElasticBeanstalkEnvironment where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ElasticBeanstalkEnvironment <$>
+      obj .: "ApplicationName" <*>
+      obj .:? "CNAMEPrefix" <*>
+      obj .:? "Description" <*>
+      obj .:? "EnvironmentName" <*>
+      obj .:? "OptionSettings" <*>
+      obj .:? "SolutionStackName" <*>
+      obj .:? "TemplateName" <*>
+      obj .:? "Tier" <*>
+      obj .:? "VersionLabel"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ElasticBeanstalkEnvironment' containing required fields
 -- | as arguments.
diff --git a/library-gen/Stratosphere/Resources/ElasticLoadBalancingLoadBalancer.hs b/library-gen/Stratosphere/Resources/ElasticLoadBalancingLoadBalancer.hs
--- a/library-gen/Stratosphere/Resources/ElasticLoadBalancingLoadBalancer.hs
+++ b/library-gen/Stratosphere/Resources/ElasticLoadBalancingLoadBalancer.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html
 
 module Stratosphere.Resources.ElasticLoadBalancingLoadBalancer where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.ElasticLoadBalancingLoadBalancerAccessLoggingPolicy
@@ -42,13 +42,50 @@
   , _elasticLoadBalancingLoadBalancerSecurityGroups :: Maybe [Val Text]
   , _elasticLoadBalancingLoadBalancerSubnets :: Maybe [Val Text]
   , _elasticLoadBalancingLoadBalancerTags :: Maybe [Tag]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ElasticLoadBalancingLoadBalancer where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 33, omitNothingFields = True }
+  toJSON ElasticLoadBalancingLoadBalancer{..} =
+    object $
+    catMaybes
+    [ ("AccessLoggingPolicy" .=) <$> _elasticLoadBalancingLoadBalancerAccessLoggingPolicy
+    , ("AppCookieStickinessPolicy" .=) <$> _elasticLoadBalancingLoadBalancerAppCookieStickinessPolicy
+    , ("AvailabilityZones" .=) <$> _elasticLoadBalancingLoadBalancerAvailabilityZones
+    , ("ConnectionDrainingPolicy" .=) <$> _elasticLoadBalancingLoadBalancerConnectionDrainingPolicy
+    , ("ConnectionSettings" .=) <$> _elasticLoadBalancingLoadBalancerConnectionSettings
+    , ("CrossZone" .=) <$> _elasticLoadBalancingLoadBalancerCrossZone
+    , ("HealthCheck" .=) <$> _elasticLoadBalancingLoadBalancerHealthCheck
+    , ("Instances" .=) <$> _elasticLoadBalancingLoadBalancerInstances
+    , ("LBCookieStickinessPolicy" .=) <$> _elasticLoadBalancingLoadBalancerLBCookieStickinessPolicy
+    , Just ("Listeners" .= _elasticLoadBalancingLoadBalancerListeners)
+    , ("LoadBalancerName" .=) <$> _elasticLoadBalancingLoadBalancerLoadBalancerName
+    , ("Policies" .=) <$> _elasticLoadBalancingLoadBalancerPolicies
+    , ("Scheme" .=) <$> _elasticLoadBalancingLoadBalancerScheme
+    , ("SecurityGroups" .=) <$> _elasticLoadBalancingLoadBalancerSecurityGroups
+    , ("Subnets" .=) <$> _elasticLoadBalancingLoadBalancerSubnets
+    , ("Tags" .=) <$> _elasticLoadBalancingLoadBalancerTags
+    ]
 
 instance FromJSON ElasticLoadBalancingLoadBalancer where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 33, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ElasticLoadBalancingLoadBalancer <$>
+      obj .:? "AccessLoggingPolicy" <*>
+      obj .:? "AppCookieStickinessPolicy" <*>
+      obj .:? "AvailabilityZones" <*>
+      obj .:? "ConnectionDrainingPolicy" <*>
+      obj .:? "ConnectionSettings" <*>
+      obj .:? "CrossZone" <*>
+      obj .:? "HealthCheck" <*>
+      obj .:? "Instances" <*>
+      obj .:? "LBCookieStickinessPolicy" <*>
+      obj .: "Listeners" <*>
+      obj .:? "LoadBalancerName" <*>
+      obj .:? "Policies" <*>
+      obj .:? "Scheme" <*>
+      obj .:? "SecurityGroups" <*>
+      obj .:? "Subnets" <*>
+      obj .:? "Tags"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ElasticLoadBalancingLoadBalancer' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/Resources/ElasticLoadBalancingV2Listener.hs b/library-gen/Stratosphere/Resources/ElasticLoadBalancingV2Listener.hs
--- a/library-gen/Stratosphere/Resources/ElasticLoadBalancingV2Listener.hs
+++ b/library-gen/Stratosphere/Resources/ElasticLoadBalancingV2Listener.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-listener.html
 
 module Stratosphere.Resources.ElasticLoadBalancingV2Listener where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.ElasticLoadBalancingV2ListenerCertificate
@@ -25,13 +25,30 @@
   , _elasticLoadBalancingV2ListenerPort :: Val Integer'
   , _elasticLoadBalancingV2ListenerProtocol :: Val Text
   , _elasticLoadBalancingV2ListenerSslPolicy :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ElasticLoadBalancingV2Listener where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 31, omitNothingFields = True }
+  toJSON ElasticLoadBalancingV2Listener{..} =
+    object $
+    catMaybes
+    [ ("Certificates" .=) <$> _elasticLoadBalancingV2ListenerCertificates
+    , Just ("DefaultActions" .= _elasticLoadBalancingV2ListenerDefaultActions)
+    , Just ("LoadBalancerArn" .= _elasticLoadBalancingV2ListenerLoadBalancerArn)
+    , Just ("Port" .= _elasticLoadBalancingV2ListenerPort)
+    , Just ("Protocol" .= _elasticLoadBalancingV2ListenerProtocol)
+    , ("SslPolicy" .=) <$> _elasticLoadBalancingV2ListenerSslPolicy
+    ]
 
 instance FromJSON ElasticLoadBalancingV2Listener where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 31, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ElasticLoadBalancingV2Listener <$>
+      obj .:? "Certificates" <*>
+      obj .: "DefaultActions" <*>
+      obj .: "LoadBalancerArn" <*>
+      obj .: "Port" <*>
+      obj .: "Protocol" <*>
+      obj .:? "SslPolicy"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ElasticLoadBalancingV2Listener' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/Resources/ElasticLoadBalancingV2ListenerRule.hs b/library-gen/Stratosphere/Resources/ElasticLoadBalancingV2ListenerRule.hs
--- a/library-gen/Stratosphere/Resources/ElasticLoadBalancingV2ListenerRule.hs
+++ b/library-gen/Stratosphere/Resources/ElasticLoadBalancingV2ListenerRule.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-listenerrule.html
 
 module Stratosphere.Resources.ElasticLoadBalancingV2ListenerRule where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.ElasticLoadBalancingV2ListenerRuleAction
@@ -23,13 +23,26 @@
   , _elasticLoadBalancingV2ListenerRuleConditions :: [ElasticLoadBalancingV2ListenerRuleRuleCondition]
   , _elasticLoadBalancingV2ListenerRuleListenerArn :: Val Text
   , _elasticLoadBalancingV2ListenerRulePriority :: Val Integer'
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ElasticLoadBalancingV2ListenerRule where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 35, omitNothingFields = True }
+  toJSON ElasticLoadBalancingV2ListenerRule{..} =
+    object $
+    catMaybes
+    [ Just ("Actions" .= _elasticLoadBalancingV2ListenerRuleActions)
+    , Just ("Conditions" .= _elasticLoadBalancingV2ListenerRuleConditions)
+    , Just ("ListenerArn" .= _elasticLoadBalancingV2ListenerRuleListenerArn)
+    , Just ("Priority" .= _elasticLoadBalancingV2ListenerRulePriority)
+    ]
 
 instance FromJSON ElasticLoadBalancingV2ListenerRule where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 35, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ElasticLoadBalancingV2ListenerRule <$>
+      obj .: "Actions" <*>
+      obj .: "Conditions" <*>
+      obj .: "ListenerArn" <*>
+      obj .: "Priority"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ElasticLoadBalancingV2ListenerRule' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/Resources/ElasticLoadBalancingV2LoadBalancer.hs b/library-gen/Stratosphere/Resources/ElasticLoadBalancingV2LoadBalancer.hs
--- a/library-gen/Stratosphere/Resources/ElasticLoadBalancingV2LoadBalancer.hs
+++ b/library-gen/Stratosphere/Resources/ElasticLoadBalancingV2LoadBalancer.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html
 
 module Stratosphere.Resources.ElasticLoadBalancingV2LoadBalancer where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.ElasticLoadBalancingV2LoadBalancerLoadBalancerAttribute
@@ -26,13 +26,32 @@
   , _elasticLoadBalancingV2LoadBalancerSecurityGroups :: Maybe [Val Text]
   , _elasticLoadBalancingV2LoadBalancerSubnets :: Maybe [Val Text]
   , _elasticLoadBalancingV2LoadBalancerTags :: Maybe [Tag]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ElasticLoadBalancingV2LoadBalancer where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 35, omitNothingFields = True }
+  toJSON ElasticLoadBalancingV2LoadBalancer{..} =
+    object $
+    catMaybes
+    [ ("IpAddressType" .=) <$> _elasticLoadBalancingV2LoadBalancerIpAddressType
+    , ("LoadBalancerAttributes" .=) <$> _elasticLoadBalancingV2LoadBalancerLoadBalancerAttributes
+    , ("Name" .=) <$> _elasticLoadBalancingV2LoadBalancerName
+    , ("Scheme" .=) <$> _elasticLoadBalancingV2LoadBalancerScheme
+    , ("SecurityGroups" .=) <$> _elasticLoadBalancingV2LoadBalancerSecurityGroups
+    , ("Subnets" .=) <$> _elasticLoadBalancingV2LoadBalancerSubnets
+    , ("Tags" .=) <$> _elasticLoadBalancingV2LoadBalancerTags
+    ]
 
 instance FromJSON ElasticLoadBalancingV2LoadBalancer where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 35, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ElasticLoadBalancingV2LoadBalancer <$>
+      obj .:? "IpAddressType" <*>
+      obj .:? "LoadBalancerAttributes" <*>
+      obj .:? "Name" <*>
+      obj .:? "Scheme" <*>
+      obj .:? "SecurityGroups" <*>
+      obj .:? "Subnets" <*>
+      obj .:? "Tags"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ElasticLoadBalancingV2LoadBalancer' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/Resources/ElasticLoadBalancingV2TargetGroup.hs b/library-gen/Stratosphere/Resources/ElasticLoadBalancingV2TargetGroup.hs
--- a/library-gen/Stratosphere/Resources/ElasticLoadBalancingV2TargetGroup.hs
+++ b/library-gen/Stratosphere/Resources/ElasticLoadBalancingV2TargetGroup.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-targetgroup.html
 
 module Stratosphere.Resources.ElasticLoadBalancingV2TargetGroup where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.ElasticLoadBalancingV2TargetGroupMatcher
@@ -36,13 +36,48 @@
   , _elasticLoadBalancingV2TargetGroupTargets :: Maybe [ElasticLoadBalancingV2TargetGroupTargetDescription]
   , _elasticLoadBalancingV2TargetGroupUnhealthyThresholdCount :: Maybe (Val Integer')
   , _elasticLoadBalancingV2TargetGroupVpcId :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ElasticLoadBalancingV2TargetGroup where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 34, omitNothingFields = True }
+  toJSON ElasticLoadBalancingV2TargetGroup{..} =
+    object $
+    catMaybes
+    [ ("HealthCheckIntervalSeconds" .=) <$> _elasticLoadBalancingV2TargetGroupHealthCheckIntervalSeconds
+    , ("HealthCheckPath" .=) <$> _elasticLoadBalancingV2TargetGroupHealthCheckPath
+    , ("HealthCheckPort" .=) <$> _elasticLoadBalancingV2TargetGroupHealthCheckPort
+    , ("HealthCheckProtocol" .=) <$> _elasticLoadBalancingV2TargetGroupHealthCheckProtocol
+    , ("HealthCheckTimeoutSeconds" .=) <$> _elasticLoadBalancingV2TargetGroupHealthCheckTimeoutSeconds
+    , ("HealthyThresholdCount" .=) <$> _elasticLoadBalancingV2TargetGroupHealthyThresholdCount
+    , ("Matcher" .=) <$> _elasticLoadBalancingV2TargetGroupMatcher
+    , ("Name" .=) <$> _elasticLoadBalancingV2TargetGroupName
+    , Just ("Port" .= _elasticLoadBalancingV2TargetGroupPort)
+    , Just ("Protocol" .= _elasticLoadBalancingV2TargetGroupProtocol)
+    , ("Tags" .=) <$> _elasticLoadBalancingV2TargetGroupTags
+    , ("TargetGroupAttributes" .=) <$> _elasticLoadBalancingV2TargetGroupTargetGroupAttributes
+    , ("Targets" .=) <$> _elasticLoadBalancingV2TargetGroupTargets
+    , ("UnhealthyThresholdCount" .=) <$> _elasticLoadBalancingV2TargetGroupUnhealthyThresholdCount
+    , Just ("VpcId" .= _elasticLoadBalancingV2TargetGroupVpcId)
+    ]
 
 instance FromJSON ElasticLoadBalancingV2TargetGroup where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 34, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ElasticLoadBalancingV2TargetGroup <$>
+      obj .:? "HealthCheckIntervalSeconds" <*>
+      obj .:? "HealthCheckPath" <*>
+      obj .:? "HealthCheckPort" <*>
+      obj .:? "HealthCheckProtocol" <*>
+      obj .:? "HealthCheckTimeoutSeconds" <*>
+      obj .:? "HealthyThresholdCount" <*>
+      obj .:? "Matcher" <*>
+      obj .:? "Name" <*>
+      obj .: "Port" <*>
+      obj .: "Protocol" <*>
+      obj .:? "Tags" <*>
+      obj .:? "TargetGroupAttributes" <*>
+      obj .:? "Targets" <*>
+      obj .:? "UnhealthyThresholdCount" <*>
+      obj .: "VpcId"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ElasticLoadBalancingV2TargetGroup' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/Resources/ElasticsearchDomain.hs b/library-gen/Stratosphere/Resources/ElasticsearchDomain.hs
--- a/library-gen/Stratosphere/Resources/ElasticsearchDomain.hs
+++ b/library-gen/Stratosphere/Resources/ElasticsearchDomain.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticsearch-domain.html
 
 module Stratosphere.Resources.ElasticsearchDomain where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.ElasticsearchDomainEBSOptions
@@ -29,13 +29,34 @@
   , _elasticsearchDomainElasticsearchVersion :: Maybe (Val Text)
   , _elasticsearchDomainSnapshotOptions :: Maybe ElasticsearchDomainSnapshotOptions
   , _elasticsearchDomainTags :: Maybe [Tag]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON ElasticsearchDomain where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 20, omitNothingFields = True }
+  toJSON ElasticsearchDomain{..} =
+    object $
+    catMaybes
+    [ ("AccessPolicies" .=) <$> _elasticsearchDomainAccessPolicies
+    , ("AdvancedOptions" .=) <$> _elasticsearchDomainAdvancedOptions
+    , ("DomainName" .=) <$> _elasticsearchDomainDomainName
+    , ("EBSOptions" .=) <$> _elasticsearchDomainEBSOptions
+    , ("ElasticsearchClusterConfig" .=) <$> _elasticsearchDomainElasticsearchClusterConfig
+    , ("ElasticsearchVersion" .=) <$> _elasticsearchDomainElasticsearchVersion
+    , ("SnapshotOptions" .=) <$> _elasticsearchDomainSnapshotOptions
+    , ("Tags" .=) <$> _elasticsearchDomainTags
+    ]
 
 instance FromJSON ElasticsearchDomain where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 20, omitNothingFields = True }
+  parseJSON (Object obj) =
+    ElasticsearchDomain <$>
+      obj .:? "AccessPolicies" <*>
+      obj .:? "AdvancedOptions" <*>
+      obj .:? "DomainName" <*>
+      obj .:? "EBSOptions" <*>
+      obj .:? "ElasticsearchClusterConfig" <*>
+      obj .:? "ElasticsearchVersion" <*>
+      obj .:? "SnapshotOptions" <*>
+      obj .:? "Tags"
+  parseJSON _ = mempty
 
 -- | Constructor for 'ElasticsearchDomain' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/EventsRule.hs b/library-gen/Stratosphere/Resources/EventsRule.hs
--- a/library-gen/Stratosphere/Resources/EventsRule.hs
+++ b/library-gen/Stratosphere/Resources/EventsRule.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-events-rule.html
 
 module Stratosphere.Resources.EventsRule where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.Types
@@ -26,13 +26,32 @@
   , _eventsRuleScheduleExpression :: Maybe (Val Text)
   , _eventsRuleState :: Maybe (Val EnabledState)
   , _eventsRuleTargets :: Maybe [EventsRuleTarget]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON EventsRule where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 11, omitNothingFields = True }
+  toJSON EventsRule{..} =
+    object $
+    catMaybes
+    [ ("Description" .=) <$> _eventsRuleDescription
+    , ("EventPattern" .=) <$> _eventsRuleEventPattern
+    , ("Name" .=) <$> _eventsRuleName
+    , ("RoleArn" .=) <$> _eventsRuleRoleArn
+    , ("ScheduleExpression" .=) <$> _eventsRuleScheduleExpression
+    , ("State" .=) <$> _eventsRuleState
+    , ("Targets" .=) <$> _eventsRuleTargets
+    ]
 
 instance FromJSON EventsRule where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 11, omitNothingFields = True }
+  parseJSON (Object obj) =
+    EventsRule <$>
+      obj .:? "Description" <*>
+      obj .:? "EventPattern" <*>
+      obj .:? "Name" <*>
+      obj .:? "RoleArn" <*>
+      obj .:? "ScheduleExpression" <*>
+      obj .:? "State" <*>
+      obj .:? "Targets"
+  parseJSON _ = mempty
 
 -- | Constructor for 'EventsRule' containing required fields as arguments.
 eventsRule
diff --git a/library-gen/Stratosphere/Resources/GameLiftAlias.hs b/library-gen/Stratosphere/Resources/GameLiftAlias.hs
--- a/library-gen/Stratosphere/Resources/GameLiftAlias.hs
+++ b/library-gen/Stratosphere/Resources/GameLiftAlias.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-alias.html
 
 module Stratosphere.Resources.GameLiftAlias where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.GameLiftAliasRoutingStrategy
@@ -21,13 +21,24 @@
   { _gameLiftAliasDescription :: Maybe (Val Text)
   , _gameLiftAliasName :: Val Text
   , _gameLiftAliasRoutingStrategy :: GameLiftAliasRoutingStrategy
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON GameLiftAlias where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
+  toJSON GameLiftAlias{..} =
+    object $
+    catMaybes
+    [ ("Description" .=) <$> _gameLiftAliasDescription
+    , Just ("Name" .= _gameLiftAliasName)
+    , Just ("RoutingStrategy" .= _gameLiftAliasRoutingStrategy)
+    ]
 
 instance FromJSON GameLiftAlias where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
+  parseJSON (Object obj) =
+    GameLiftAlias <$>
+      obj .:? "Description" <*>
+      obj .: "Name" <*>
+      obj .: "RoutingStrategy"
+  parseJSON _ = mempty
 
 -- | Constructor for 'GameLiftAlias' containing required fields as arguments.
 gameLiftAlias
diff --git a/library-gen/Stratosphere/Resources/GameLiftBuild.hs b/library-gen/Stratosphere/Resources/GameLiftBuild.hs
--- a/library-gen/Stratosphere/Resources/GameLiftBuild.hs
+++ b/library-gen/Stratosphere/Resources/GameLiftBuild.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-build.html
 
 module Stratosphere.Resources.GameLiftBuild where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.GameLiftBuildS3Location
@@ -21,13 +21,24 @@
   { _gameLiftBuildName :: Maybe (Val Text)
   , _gameLiftBuildStorageLocation :: Maybe GameLiftBuildS3Location
   , _gameLiftBuildVersion :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON GameLiftBuild where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
+  toJSON GameLiftBuild{..} =
+    object $
+    catMaybes
+    [ ("Name" .=) <$> _gameLiftBuildName
+    , ("StorageLocation" .=) <$> _gameLiftBuildStorageLocation
+    , ("Version" .=) <$> _gameLiftBuildVersion
+    ]
 
 instance FromJSON GameLiftBuild where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
+  parseJSON (Object obj) =
+    GameLiftBuild <$>
+      obj .:? "Name" <*>
+      obj .:? "StorageLocation" <*>
+      obj .:? "Version"
+  parseJSON _ = mempty
 
 -- | Constructor for 'GameLiftBuild' containing required fields as arguments.
 gameLiftBuild
diff --git a/library-gen/Stratosphere/Resources/GameLiftFleet.hs b/library-gen/Stratosphere/Resources/GameLiftFleet.hs
--- a/library-gen/Stratosphere/Resources/GameLiftFleet.hs
+++ b/library-gen/Stratosphere/Resources/GameLiftFleet.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-fleet.html
 
 module Stratosphere.Resources.GameLiftFleet where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.GameLiftFleetIpPermission
@@ -29,13 +29,40 @@
   , _gameLiftFleetName :: Val Text
   , _gameLiftFleetServerLaunchParameters :: Maybe (Val Text)
   , _gameLiftFleetServerLaunchPath :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON GameLiftFleet where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
+  toJSON GameLiftFleet{..} =
+    object $
+    catMaybes
+    [ Just ("BuildId" .= _gameLiftFleetBuildId)
+    , ("Description" .=) <$> _gameLiftFleetDescription
+    , Just ("DesiredEC2Instances" .= _gameLiftFleetDesiredEC2Instances)
+    , ("EC2InboundPermissions" .=) <$> _gameLiftFleetEC2InboundPermissions
+    , Just ("EC2InstanceType" .= _gameLiftFleetEC2InstanceType)
+    , ("LogPaths" .=) <$> _gameLiftFleetLogPaths
+    , ("MaxSize" .=) <$> _gameLiftFleetMaxSize
+    , ("MinSize" .=) <$> _gameLiftFleetMinSize
+    , Just ("Name" .= _gameLiftFleetName)
+    , ("ServerLaunchParameters" .=) <$> _gameLiftFleetServerLaunchParameters
+    , Just ("ServerLaunchPath" .= _gameLiftFleetServerLaunchPath)
+    ]
 
 instance FromJSON GameLiftFleet where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
+  parseJSON (Object obj) =
+    GameLiftFleet <$>
+      obj .: "BuildId" <*>
+      obj .:? "Description" <*>
+      obj .: "DesiredEC2Instances" <*>
+      obj .:? "EC2InboundPermissions" <*>
+      obj .: "EC2InstanceType" <*>
+      obj .:? "LogPaths" <*>
+      obj .:? "MaxSize" <*>
+      obj .:? "MinSize" <*>
+      obj .: "Name" <*>
+      obj .:? "ServerLaunchParameters" <*>
+      obj .: "ServerLaunchPath"
+  parseJSON _ = mempty
 
 -- | Constructor for 'GameLiftFleet' containing required fields as arguments.
 gameLiftFleet
diff --git a/library-gen/Stratosphere/Resources/IAMAccessKey.hs b/library-gen/Stratosphere/Resources/IAMAccessKey.hs
--- a/library-gen/Stratosphere/Resources/IAMAccessKey.hs
+++ b/library-gen/Stratosphere/Resources/IAMAccessKey.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-accesskey.html
 
 module Stratosphere.Resources.IAMAccessKey where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -21,13 +21,24 @@
   { _iAMAccessKeySerial :: Maybe (Val Integer')
   , _iAMAccessKeyStatus :: Maybe (Val Text)
   , _iAMAccessKeyUserName :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON IAMAccessKey where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 13, omitNothingFields = True }
+  toJSON IAMAccessKey{..} =
+    object $
+    catMaybes
+    [ ("Serial" .=) <$> _iAMAccessKeySerial
+    , ("Status" .=) <$> _iAMAccessKeyStatus
+    , Just ("UserName" .= _iAMAccessKeyUserName)
+    ]
 
 instance FromJSON IAMAccessKey where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 13, omitNothingFields = True }
+  parseJSON (Object obj) =
+    IAMAccessKey <$>
+      obj .:? "Serial" <*>
+      obj .:? "Status" <*>
+      obj .: "UserName"
+  parseJSON _ = mempty
 
 -- | Constructor for 'IAMAccessKey' containing required fields as arguments.
 iamAccessKey
diff --git a/library-gen/Stratosphere/Resources/IAMGroup.hs b/library-gen/Stratosphere/Resources/IAMGroup.hs
--- a/library-gen/Stratosphere/Resources/IAMGroup.hs
+++ b/library-gen/Stratosphere/Resources/IAMGroup.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-group.html
 
 module Stratosphere.Resources.IAMGroup where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.IAMGroupPolicy
@@ -22,13 +22,26 @@
   , _iAMGroupManagedPolicyArns :: Maybe [Val Text]
   , _iAMGroupPath :: Maybe (Val Text)
   , _iAMGroupPolicies :: Maybe [IAMGroupPolicy]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON IAMGroup where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 9, omitNothingFields = True }
+  toJSON IAMGroup{..} =
+    object $
+    catMaybes
+    [ ("GroupName" .=) <$> _iAMGroupGroupName
+    , ("ManagedPolicyArns" .=) <$> _iAMGroupManagedPolicyArns
+    , ("Path" .=) <$> _iAMGroupPath
+    , ("Policies" .=) <$> _iAMGroupPolicies
+    ]
 
 instance FromJSON IAMGroup where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 9, omitNothingFields = True }
+  parseJSON (Object obj) =
+    IAMGroup <$>
+      obj .:? "GroupName" <*>
+      obj .:? "ManagedPolicyArns" <*>
+      obj .:? "Path" <*>
+      obj .:? "Policies"
+  parseJSON _ = mempty
 
 -- | Constructor for 'IAMGroup' containing required fields as arguments.
 iamGroup
diff --git a/library-gen/Stratosphere/Resources/IAMInstanceProfile.hs b/library-gen/Stratosphere/Resources/IAMInstanceProfile.hs
--- a/library-gen/Stratosphere/Resources/IAMInstanceProfile.hs
+++ b/library-gen/Stratosphere/Resources/IAMInstanceProfile.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-instanceprofile.html
 
 module Stratosphere.Resources.IAMInstanceProfile where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   IAMInstanceProfile
   { _iAMInstanceProfilePath :: Val Text
   , _iAMInstanceProfileRoles :: [Val Text]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON IAMInstanceProfile where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 19, omitNothingFields = True }
+  toJSON IAMInstanceProfile{..} =
+    object $
+    catMaybes
+    [ Just ("Path" .= _iAMInstanceProfilePath)
+    , Just ("Roles" .= _iAMInstanceProfileRoles)
+    ]
 
 instance FromJSON IAMInstanceProfile where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 19, omitNothingFields = True }
+  parseJSON (Object obj) =
+    IAMInstanceProfile <$>
+      obj .: "Path" <*>
+      obj .: "Roles"
+  parseJSON _ = mempty
 
 -- | Constructor for 'IAMInstanceProfile' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/IAMManagedPolicy.hs b/library-gen/Stratosphere/Resources/IAMManagedPolicy.hs
--- a/library-gen/Stratosphere/Resources/IAMManagedPolicy.hs
+++ b/library-gen/Stratosphere/Resources/IAMManagedPolicy.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-managedpolicy.html
 
 module Stratosphere.Resources.IAMManagedPolicy where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -24,13 +24,30 @@
   , _iAMManagedPolicyPolicyDocument :: Maybe Object
   , _iAMManagedPolicyRoles :: Maybe [Val Text]
   , _iAMManagedPolicyUsers :: Maybe [Val Text]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON IAMManagedPolicy where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
+  toJSON IAMManagedPolicy{..} =
+    object $
+    catMaybes
+    [ ("Description" .=) <$> _iAMManagedPolicyDescription
+    , ("Groups" .=) <$> _iAMManagedPolicyGroups
+    , ("Path" .=) <$> _iAMManagedPolicyPath
+    , ("PolicyDocument" .=) <$> _iAMManagedPolicyPolicyDocument
+    , ("Roles" .=) <$> _iAMManagedPolicyRoles
+    , ("Users" .=) <$> _iAMManagedPolicyUsers
+    ]
 
 instance FromJSON IAMManagedPolicy where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
+  parseJSON (Object obj) =
+    IAMManagedPolicy <$>
+      obj .:? "Description" <*>
+      obj .:? "Groups" <*>
+      obj .:? "Path" <*>
+      obj .:? "PolicyDocument" <*>
+      obj .:? "Roles" <*>
+      obj .:? "Users"
+  parseJSON _ = mempty
 
 -- | Constructor for 'IAMManagedPolicy' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/IAMPolicy.hs b/library-gen/Stratosphere/Resources/IAMPolicy.hs
--- a/library-gen/Stratosphere/Resources/IAMPolicy.hs
+++ b/library-gen/Stratosphere/Resources/IAMPolicy.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-policy.html
 
 module Stratosphere.Resources.IAMPolicy where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -23,13 +23,28 @@
   , _iAMPolicyPolicyName :: Val Text
   , _iAMPolicyRoles :: Maybe [Val Text]
   , _iAMPolicyUsers :: Maybe [Val Text]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON IAMPolicy where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 10, omitNothingFields = True }
+  toJSON IAMPolicy{..} =
+    object $
+    catMaybes
+    [ ("Groups" .=) <$> _iAMPolicyGroups
+    , Just ("PolicyDocument" .= _iAMPolicyPolicyDocument)
+    , Just ("PolicyName" .= _iAMPolicyPolicyName)
+    , ("Roles" .=) <$> _iAMPolicyRoles
+    , ("Users" .=) <$> _iAMPolicyUsers
+    ]
 
 instance FromJSON IAMPolicy where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 10, omitNothingFields = True }
+  parseJSON (Object obj) =
+    IAMPolicy <$>
+      obj .:? "Groups" <*>
+      obj .: "PolicyDocument" <*>
+      obj .: "PolicyName" <*>
+      obj .:? "Roles" <*>
+      obj .:? "Users"
+  parseJSON _ = mempty
 
 -- | Constructor for 'IAMPolicy' containing required fields as arguments.
 iamPolicy
diff --git a/library-gen/Stratosphere/Resources/IAMRole.hs b/library-gen/Stratosphere/Resources/IAMRole.hs
--- a/library-gen/Stratosphere/Resources/IAMRole.hs
+++ b/library-gen/Stratosphere/Resources/IAMRole.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html
 
 module Stratosphere.Resources.IAMRole where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.IAMRolePolicy
@@ -23,13 +23,28 @@
   , _iAMRolePath :: Maybe (Val Text)
   , _iAMRolePolicies :: Maybe [IAMRolePolicy]
   , _iAMRoleRoleName :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON IAMRole where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 8, omitNothingFields = True }
+  toJSON IAMRole{..} =
+    object $
+    catMaybes
+    [ Just ("AssumeRolePolicyDocument" .= _iAMRoleAssumeRolePolicyDocument)
+    , ("ManagedPolicyArns" .=) <$> _iAMRoleManagedPolicyArns
+    , ("Path" .=) <$> _iAMRolePath
+    , ("Policies" .=) <$> _iAMRolePolicies
+    , ("RoleName" .=) <$> _iAMRoleRoleName
+    ]
 
 instance FromJSON IAMRole where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 8, omitNothingFields = True }
+  parseJSON (Object obj) =
+    IAMRole <$>
+      obj .: "AssumeRolePolicyDocument" <*>
+      obj .:? "ManagedPolicyArns" <*>
+      obj .:? "Path" <*>
+      obj .:? "Policies" <*>
+      obj .:? "RoleName"
+  parseJSON _ = mempty
 
 -- | Constructor for 'IAMRole' containing required fields as arguments.
 iamRole
diff --git a/library-gen/Stratosphere/Resources/IAMUser.hs b/library-gen/Stratosphere/Resources/IAMUser.hs
--- a/library-gen/Stratosphere/Resources/IAMUser.hs
+++ b/library-gen/Stratosphere/Resources/IAMUser.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-user.html
 
 module Stratosphere.Resources.IAMUser where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.IAMUserLoginProfile
@@ -25,13 +25,30 @@
   , _iAMUserPath :: Maybe (Val Text)
   , _iAMUserPolicies :: Maybe [IAMUserPolicy]
   , _iAMUserUserName :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON IAMUser where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 8, omitNothingFields = True }
+  toJSON IAMUser{..} =
+    object $
+    catMaybes
+    [ ("Groups" .=) <$> _iAMUserGroups
+    , ("LoginProfile" .=) <$> _iAMUserLoginProfile
+    , ("ManagedPolicyArns" .=) <$> _iAMUserManagedPolicyArns
+    , ("Path" .=) <$> _iAMUserPath
+    , ("Policies" .=) <$> _iAMUserPolicies
+    , ("UserName" .=) <$> _iAMUserUserName
+    ]
 
 instance FromJSON IAMUser where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 8, omitNothingFields = True }
+  parseJSON (Object obj) =
+    IAMUser <$>
+      obj .:? "Groups" <*>
+      obj .:? "LoginProfile" <*>
+      obj .:? "ManagedPolicyArns" <*>
+      obj .:? "Path" <*>
+      obj .:? "Policies" <*>
+      obj .:? "UserName"
+  parseJSON _ = mempty
 
 -- | Constructor for 'IAMUser' containing required fields as arguments.
 iamUser
diff --git a/library-gen/Stratosphere/Resources/IAMUserToGroupAddition.hs b/library-gen/Stratosphere/Resources/IAMUserToGroupAddition.hs
--- a/library-gen/Stratosphere/Resources/IAMUserToGroupAddition.hs
+++ b/library-gen/Stratosphere/Resources/IAMUserToGroupAddition.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-addusertogroup.html
 
 module Stratosphere.Resources.IAMUserToGroupAddition where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   IAMUserToGroupAddition
   { _iAMUserToGroupAdditionGroupName :: Val Text
   , _iAMUserToGroupAdditionUsers :: [Val Text]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON IAMUserToGroupAddition where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 23, omitNothingFields = True }
+  toJSON IAMUserToGroupAddition{..} =
+    object $
+    catMaybes
+    [ Just ("GroupName" .= _iAMUserToGroupAdditionGroupName)
+    , Just ("Users" .= _iAMUserToGroupAdditionUsers)
+    ]
 
 instance FromJSON IAMUserToGroupAddition where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 23, omitNothingFields = True }
+  parseJSON (Object obj) =
+    IAMUserToGroupAddition <$>
+      obj .: "GroupName" <*>
+      obj .: "Users"
+  parseJSON _ = mempty
 
 -- | Constructor for 'IAMUserToGroupAddition' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/IoTCertificate.hs b/library-gen/Stratosphere/Resources/IoTCertificate.hs
--- a/library-gen/Stratosphere/Resources/IoTCertificate.hs
+++ b/library-gen/Stratosphere/Resources/IoTCertificate.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-certificate.html
 
 module Stratosphere.Resources.IoTCertificate where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   IoTCertificate
   { _ioTCertificateCertificateSigningRequest :: Val Text
   , _ioTCertificateStatus :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON IoTCertificate where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 15, omitNothingFields = True }
+  toJSON IoTCertificate{..} =
+    object $
+    catMaybes
+    [ Just ("CertificateSigningRequest" .= _ioTCertificateCertificateSigningRequest)
+    , Just ("Status" .= _ioTCertificateStatus)
+    ]
 
 instance FromJSON IoTCertificate where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 15, omitNothingFields = True }
+  parseJSON (Object obj) =
+    IoTCertificate <$>
+      obj .: "CertificateSigningRequest" <*>
+      obj .: "Status"
+  parseJSON _ = mempty
 
 -- | Constructor for 'IoTCertificate' containing required fields as arguments.
 ioTCertificate
diff --git a/library-gen/Stratosphere/Resources/IoTPolicy.hs b/library-gen/Stratosphere/Resources/IoTPolicy.hs
--- a/library-gen/Stratosphere/Resources/IoTPolicy.hs
+++ b/library-gen/Stratosphere/Resources/IoTPolicy.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-policy.html
 
 module Stratosphere.Resources.IoTPolicy where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   IoTPolicy
   { _ioTPolicyPolicyDocument :: Object
   , _ioTPolicyPolicyName :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON IoTPolicy where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 10, omitNothingFields = True }
+  toJSON IoTPolicy{..} =
+    object $
+    catMaybes
+    [ Just ("PolicyDocument" .= _ioTPolicyPolicyDocument)
+    , ("PolicyName" .=) <$> _ioTPolicyPolicyName
+    ]
 
 instance FromJSON IoTPolicy where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 10, omitNothingFields = True }
+  parseJSON (Object obj) =
+    IoTPolicy <$>
+      obj .: "PolicyDocument" <*>
+      obj .:? "PolicyName"
+  parseJSON _ = mempty
 
 -- | Constructor for 'IoTPolicy' containing required fields as arguments.
 ioTPolicy
diff --git a/library-gen/Stratosphere/Resources/IoTPolicyPrincipalAttachment.hs b/library-gen/Stratosphere/Resources/IoTPolicyPrincipalAttachment.hs
--- a/library-gen/Stratosphere/Resources/IoTPolicyPrincipalAttachment.hs
+++ b/library-gen/Stratosphere/Resources/IoTPolicyPrincipalAttachment.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-policyprincipalattachment.html
 
 module Stratosphere.Resources.IoTPolicyPrincipalAttachment where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   IoTPolicyPrincipalAttachment
   { _ioTPolicyPrincipalAttachmentPolicyName :: Val Text
   , _ioTPolicyPrincipalAttachmentPrincipal :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON IoTPolicyPrincipalAttachment where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 29, omitNothingFields = True }
+  toJSON IoTPolicyPrincipalAttachment{..} =
+    object $
+    catMaybes
+    [ Just ("PolicyName" .= _ioTPolicyPrincipalAttachmentPolicyName)
+    , Just ("Principal" .= _ioTPolicyPrincipalAttachmentPrincipal)
+    ]
 
 instance FromJSON IoTPolicyPrincipalAttachment where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 29, omitNothingFields = True }
+  parseJSON (Object obj) =
+    IoTPolicyPrincipalAttachment <$>
+      obj .: "PolicyName" <*>
+      obj .: "Principal"
+  parseJSON _ = mempty
 
 -- | Constructor for 'IoTPolicyPrincipalAttachment' containing required fields
 -- | as arguments.
diff --git a/library-gen/Stratosphere/Resources/IoTThing.hs b/library-gen/Stratosphere/Resources/IoTThing.hs
--- a/library-gen/Stratosphere/Resources/IoTThing.hs
+++ b/library-gen/Stratosphere/Resources/IoTThing.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-thing.html
 
 module Stratosphere.Resources.IoTThing where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.IoTThingAttributePayload
@@ -20,13 +20,22 @@
   IoTThing
   { _ioTThingAttributePayload :: Maybe IoTThingAttributePayload
   , _ioTThingThingName :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON IoTThing where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 9, omitNothingFields = True }
+  toJSON IoTThing{..} =
+    object $
+    catMaybes
+    [ ("AttributePayload" .=) <$> _ioTThingAttributePayload
+    , ("ThingName" .=) <$> _ioTThingThingName
+    ]
 
 instance FromJSON IoTThing where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 9, omitNothingFields = True }
+  parseJSON (Object obj) =
+    IoTThing <$>
+      obj .:? "AttributePayload" <*>
+      obj .:? "ThingName"
+  parseJSON _ = mempty
 
 -- | Constructor for 'IoTThing' containing required fields as arguments.
 ioTThing
diff --git a/library-gen/Stratosphere/Resources/IoTThingPrincipalAttachment.hs b/library-gen/Stratosphere/Resources/IoTThingPrincipalAttachment.hs
--- a/library-gen/Stratosphere/Resources/IoTThingPrincipalAttachment.hs
+++ b/library-gen/Stratosphere/Resources/IoTThingPrincipalAttachment.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-thingprincipalattachment.html
 
 module Stratosphere.Resources.IoTThingPrincipalAttachment where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   IoTThingPrincipalAttachment
   { _ioTThingPrincipalAttachmentPrincipal :: Val Text
   , _ioTThingPrincipalAttachmentThingName :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON IoTThingPrincipalAttachment where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+  toJSON IoTThingPrincipalAttachment{..} =
+    object $
+    catMaybes
+    [ Just ("Principal" .= _ioTThingPrincipalAttachmentPrincipal)
+    , Just ("ThingName" .= _ioTThingPrincipalAttachmentThingName)
+    ]
 
 instance FromJSON IoTThingPrincipalAttachment where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+  parseJSON (Object obj) =
+    IoTThingPrincipalAttachment <$>
+      obj .: "Principal" <*>
+      obj .: "ThingName"
+  parseJSON _ = mempty
 
 -- | Constructor for 'IoTThingPrincipalAttachment' containing required fields
 -- | as arguments.
diff --git a/library-gen/Stratosphere/Resources/IoTTopicRule.hs b/library-gen/Stratosphere/Resources/IoTTopicRule.hs
--- a/library-gen/Stratosphere/Resources/IoTTopicRule.hs
+++ b/library-gen/Stratosphere/Resources/IoTTopicRule.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-topicrule.html
 
 module Stratosphere.Resources.IoTTopicRule where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.IoTTopicRuleTopicRulePayload
@@ -20,13 +20,22 @@
   IoTTopicRule
   { _ioTTopicRuleRuleName :: Maybe (Val Text)
   , _ioTTopicRuleTopicRulePayload :: IoTTopicRuleTopicRulePayload
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON IoTTopicRule where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 13, omitNothingFields = True }
+  toJSON IoTTopicRule{..} =
+    object $
+    catMaybes
+    [ ("RuleName" .=) <$> _ioTTopicRuleRuleName
+    , Just ("TopicRulePayload" .= _ioTTopicRuleTopicRulePayload)
+    ]
 
 instance FromJSON IoTTopicRule where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 13, omitNothingFields = True }
+  parseJSON (Object obj) =
+    IoTTopicRule <$>
+      obj .:? "RuleName" <*>
+      obj .: "TopicRulePayload"
+  parseJSON _ = mempty
 
 -- | Constructor for 'IoTTopicRule' containing required fields as arguments.
 ioTTopicRule
diff --git a/library-gen/Stratosphere/Resources/KMSAlias.hs b/library-gen/Stratosphere/Resources/KMSAlias.hs
--- a/library-gen/Stratosphere/Resources/KMSAlias.hs
+++ b/library-gen/Stratosphere/Resources/KMSAlias.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kms-alias.html
 
 module Stratosphere.Resources.KMSAlias where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   KMSAlias
   { _kMSAliasAliasName :: Val Text
   , _kMSAliasTargetKeyId :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON KMSAlias where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 9, omitNothingFields = True }
+  toJSON KMSAlias{..} =
+    object $
+    catMaybes
+    [ Just ("AliasName" .= _kMSAliasAliasName)
+    , Just ("TargetKeyId" .= _kMSAliasTargetKeyId)
+    ]
 
 instance FromJSON KMSAlias where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 9, omitNothingFields = True }
+  parseJSON (Object obj) =
+    KMSAlias <$>
+      obj .: "AliasName" <*>
+      obj .: "TargetKeyId"
+  parseJSON _ = mempty
 
 -- | Constructor for 'KMSAlias' containing required fields as arguments.
 kmsAlias
diff --git a/library-gen/Stratosphere/Resources/KMSKey.hs b/library-gen/Stratosphere/Resources/KMSKey.hs
--- a/library-gen/Stratosphere/Resources/KMSKey.hs
+++ b/library-gen/Stratosphere/Resources/KMSKey.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kms-key.html
 
 module Stratosphere.Resources.KMSKey where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -23,13 +23,28 @@
   , _kMSKeyEnabled :: Maybe (Val Bool')
   , _kMSKeyKeyPolicy :: Object
   , _kMSKeyKeyUsage :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON KMSKey where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 7, omitNothingFields = True }
+  toJSON KMSKey{..} =
+    object $
+    catMaybes
+    [ ("Description" .=) <$> _kMSKeyDescription
+    , ("EnableKeyRotation" .=) <$> _kMSKeyEnableKeyRotation
+    , ("Enabled" .=) <$> _kMSKeyEnabled
+    , Just ("KeyPolicy" .= _kMSKeyKeyPolicy)
+    , ("KeyUsage" .=) <$> _kMSKeyKeyUsage
+    ]
 
 instance FromJSON KMSKey where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 7, omitNothingFields = True }
+  parseJSON (Object obj) =
+    KMSKey <$>
+      obj .:? "Description" <*>
+      obj .:? "EnableKeyRotation" <*>
+      obj .:? "Enabled" <*>
+      obj .: "KeyPolicy" <*>
+      obj .:? "KeyUsage"
+  parseJSON _ = mempty
 
 -- | Constructor for 'KMSKey' containing required fields as arguments.
 kmsKey
diff --git a/library-gen/Stratosphere/Resources/KinesisFirehoseDeliveryStream.hs b/library-gen/Stratosphere/Resources/KinesisFirehoseDeliveryStream.hs
--- a/library-gen/Stratosphere/Resources/KinesisFirehoseDeliveryStream.hs
+++ b/library-gen/Stratosphere/Resources/KinesisFirehoseDeliveryStream.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kinesisfirehose-deliverystream.html
 
 module Stratosphere.Resources.KinesisFirehoseDeliveryStream where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamElasticsearchDestinationConfiguration
@@ -24,13 +24,26 @@
   , _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfiguration :: Maybe KinesisFirehoseDeliveryStreamElasticsearchDestinationConfiguration
   , _kinesisFirehoseDeliveryStreamRedshiftDestinationConfiguration :: Maybe KinesisFirehoseDeliveryStreamRedshiftDestinationConfiguration
   , _kinesisFirehoseDeliveryStreamS3DestinationConfiguration :: Maybe KinesisFirehoseDeliveryStreamS3DestinationConfiguration
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON KinesisFirehoseDeliveryStream where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
+  toJSON KinesisFirehoseDeliveryStream{..} =
+    object $
+    catMaybes
+    [ ("DeliveryStreamName" .=) <$> _kinesisFirehoseDeliveryStreamDeliveryStreamName
+    , ("ElasticsearchDestinationConfiguration" .=) <$> _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfiguration
+    , ("RedshiftDestinationConfiguration" .=) <$> _kinesisFirehoseDeliveryStreamRedshiftDestinationConfiguration
+    , ("S3DestinationConfiguration" .=) <$> _kinesisFirehoseDeliveryStreamS3DestinationConfiguration
+    ]
 
 instance FromJSON KinesisFirehoseDeliveryStream where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
+  parseJSON (Object obj) =
+    KinesisFirehoseDeliveryStream <$>
+      obj .:? "DeliveryStreamName" <*>
+      obj .:? "ElasticsearchDestinationConfiguration" <*>
+      obj .:? "RedshiftDestinationConfiguration" <*>
+      obj .:? "S3DestinationConfiguration"
+  parseJSON _ = mempty
 
 -- | Constructor for 'KinesisFirehoseDeliveryStream' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/Resources/KinesisStream.hs b/library-gen/Stratosphere/Resources/KinesisStream.hs
--- a/library-gen/Stratosphere/Resources/KinesisStream.hs
+++ b/library-gen/Stratosphere/Resources/KinesisStream.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kinesis-stream.html
 
 module Stratosphere.Resources.KinesisStream where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.Tag
@@ -21,13 +21,24 @@
   { _kinesisStreamName :: Maybe (Val Text)
   , _kinesisStreamShardCount :: Val Integer'
   , _kinesisStreamTags :: Maybe [Tag]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON KinesisStream where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
+  toJSON KinesisStream{..} =
+    object $
+    catMaybes
+    [ ("Name" .=) <$> _kinesisStreamName
+    , Just ("ShardCount" .= _kinesisStreamShardCount)
+    , ("Tags" .=) <$> _kinesisStreamTags
+    ]
 
 instance FromJSON KinesisStream where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
+  parseJSON (Object obj) =
+    KinesisStream <$>
+      obj .:? "Name" <*>
+      obj .: "ShardCount" <*>
+      obj .:? "Tags"
+  parseJSON _ = mempty
 
 -- | Constructor for 'KinesisStream' containing required fields as arguments.
 kinesisStream
diff --git a/library-gen/Stratosphere/Resources/LambdaAlias.hs b/library-gen/Stratosphere/Resources/LambdaAlias.hs
--- a/library-gen/Stratosphere/Resources/LambdaAlias.hs
+++ b/library-gen/Stratosphere/Resources/LambdaAlias.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-alias.html
 
 module Stratosphere.Resources.LambdaAlias where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -22,13 +22,26 @@
   , _lambdaAliasFunctionName :: Val Text
   , _lambdaAliasFunctionVersion :: Val Text
   , _lambdaAliasName :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON LambdaAlias where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 12, omitNothingFields = True }
+  toJSON LambdaAlias{..} =
+    object $
+    catMaybes
+    [ ("Description" .=) <$> _lambdaAliasDescription
+    , Just ("FunctionName" .= _lambdaAliasFunctionName)
+    , Just ("FunctionVersion" .= _lambdaAliasFunctionVersion)
+    , Just ("Name" .= _lambdaAliasName)
+    ]
 
 instance FromJSON LambdaAlias where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 12, omitNothingFields = True }
+  parseJSON (Object obj) =
+    LambdaAlias <$>
+      obj .:? "Description" <*>
+      obj .: "FunctionName" <*>
+      obj .: "FunctionVersion" <*>
+      obj .: "Name"
+  parseJSON _ = mempty
 
 -- | Constructor for 'LambdaAlias' containing required fields as arguments.
 lambdaAlias
diff --git a/library-gen/Stratosphere/Resources/LambdaEventSourceMapping.hs b/library-gen/Stratosphere/Resources/LambdaEventSourceMapping.hs
--- a/library-gen/Stratosphere/Resources/LambdaEventSourceMapping.hs
+++ b/library-gen/Stratosphere/Resources/LambdaEventSourceMapping.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-eventsourcemapping.html
 
 module Stratosphere.Resources.LambdaEventSourceMapping where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -23,13 +23,28 @@
   , _lambdaEventSourceMappingEventSourceArn :: Val Text
   , _lambdaEventSourceMappingFunctionName :: Val Text
   , _lambdaEventSourceMappingStartingPosition :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON LambdaEventSourceMapping where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 25, omitNothingFields = True }
+  toJSON LambdaEventSourceMapping{..} =
+    object $
+    catMaybes
+    [ ("BatchSize" .=) <$> _lambdaEventSourceMappingBatchSize
+    , ("Enabled" .=) <$> _lambdaEventSourceMappingEnabled
+    , Just ("EventSourceArn" .= _lambdaEventSourceMappingEventSourceArn)
+    , Just ("FunctionName" .= _lambdaEventSourceMappingFunctionName)
+    , Just ("StartingPosition" .= _lambdaEventSourceMappingStartingPosition)
+    ]
 
 instance FromJSON LambdaEventSourceMapping where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 25, omitNothingFields = True }
+  parseJSON (Object obj) =
+    LambdaEventSourceMapping <$>
+      obj .:? "BatchSize" <*>
+      obj .:? "Enabled" <*>
+      obj .: "EventSourceArn" <*>
+      obj .: "FunctionName" <*>
+      obj .: "StartingPosition"
+  parseJSON _ = mempty
 
 -- | Constructor for 'LambdaEventSourceMapping' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/LambdaFunction.hs b/library-gen/Stratosphere/Resources/LambdaFunction.hs
--- a/library-gen/Stratosphere/Resources/LambdaFunction.hs
+++ b/library-gen/Stratosphere/Resources/LambdaFunction.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-function.html
 
 module Stratosphere.Resources.LambdaFunction where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.Types
@@ -32,13 +32,40 @@
   , _lambdaFunctionRuntime :: Val Runtime
   , _lambdaFunctionTimeout :: Maybe (Val Integer')
   , _lambdaFunctionVpcConfig :: Maybe LambdaFunctionVpcConfig
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON LambdaFunction where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 15, omitNothingFields = True }
+  toJSON LambdaFunction{..} =
+    object $
+    catMaybes
+    [ Just ("Code" .= _lambdaFunctionCode)
+    , ("Description" .=) <$> _lambdaFunctionDescription
+    , ("Environment" .=) <$> _lambdaFunctionEnvironment
+    , ("FunctionName" .=) <$> _lambdaFunctionFunctionName
+    , Just ("Handler" .= _lambdaFunctionHandler)
+    , ("KmsKeyArn" .=) <$> _lambdaFunctionKmsKeyArn
+    , ("MemorySize" .=) <$> _lambdaFunctionMemorySize
+    , Just ("Role" .= _lambdaFunctionRole)
+    , Just ("Runtime" .= _lambdaFunctionRuntime)
+    , ("Timeout" .=) <$> _lambdaFunctionTimeout
+    , ("VpcConfig" .=) <$> _lambdaFunctionVpcConfig
+    ]
 
 instance FromJSON LambdaFunction where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 15, omitNothingFields = True }
+  parseJSON (Object obj) =
+    LambdaFunction <$>
+      obj .: "Code" <*>
+      obj .:? "Description" <*>
+      obj .:? "Environment" <*>
+      obj .:? "FunctionName" <*>
+      obj .: "Handler" <*>
+      obj .:? "KmsKeyArn" <*>
+      obj .:? "MemorySize" <*>
+      obj .: "Role" <*>
+      obj .: "Runtime" <*>
+      obj .:? "Timeout" <*>
+      obj .:? "VpcConfig"
+  parseJSON _ = mempty
 
 -- | Constructor for 'LambdaFunction' containing required fields as arguments.
 lambdaFunction
diff --git a/library-gen/Stratosphere/Resources/LambdaPermission.hs b/library-gen/Stratosphere/Resources/LambdaPermission.hs
--- a/library-gen/Stratosphere/Resources/LambdaPermission.hs
+++ b/library-gen/Stratosphere/Resources/LambdaPermission.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-permission.html
 
 module Stratosphere.Resources.LambdaPermission where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -23,13 +23,28 @@
   , _lambdaPermissionPrincipal :: Val Text
   , _lambdaPermissionSourceAccount :: Maybe (Val Text)
   , _lambdaPermissionSourceArn :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON LambdaPermission where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
+  toJSON LambdaPermission{..} =
+    object $
+    catMaybes
+    [ Just ("Action" .= _lambdaPermissionAction)
+    , Just ("FunctionName" .= _lambdaPermissionFunctionName)
+    , Just ("Principal" .= _lambdaPermissionPrincipal)
+    , ("SourceAccount" .=) <$> _lambdaPermissionSourceAccount
+    , ("SourceArn" .=) <$> _lambdaPermissionSourceArn
+    ]
 
 instance FromJSON LambdaPermission where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
+  parseJSON (Object obj) =
+    LambdaPermission <$>
+      obj .: "Action" <*>
+      obj .: "FunctionName" <*>
+      obj .: "Principal" <*>
+      obj .:? "SourceAccount" <*>
+      obj .:? "SourceArn"
+  parseJSON _ = mempty
 
 -- | Constructor for 'LambdaPermission' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/LambdaVersion.hs b/library-gen/Stratosphere/Resources/LambdaVersion.hs
--- a/library-gen/Stratosphere/Resources/LambdaVersion.hs
+++ b/library-gen/Stratosphere/Resources/LambdaVersion.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-version.html
 
 module Stratosphere.Resources.LambdaVersion where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -21,13 +21,24 @@
   { _lambdaVersionCodeSha256 :: Maybe (Val Text)
   , _lambdaVersionDescription :: Maybe (Val Text)
   , _lambdaVersionFunctionName :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON LambdaVersion where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
+  toJSON LambdaVersion{..} =
+    object $
+    catMaybes
+    [ ("CodeSha256" .=) <$> _lambdaVersionCodeSha256
+    , ("Description" .=) <$> _lambdaVersionDescription
+    , Just ("FunctionName" .= _lambdaVersionFunctionName)
+    ]
 
 instance FromJSON LambdaVersion where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
+  parseJSON (Object obj) =
+    LambdaVersion <$>
+      obj .:? "CodeSha256" <*>
+      obj .:? "Description" <*>
+      obj .: "FunctionName"
+  parseJSON _ = mempty
 
 -- | Constructor for 'LambdaVersion' containing required fields as arguments.
 lambdaVersion
diff --git a/library-gen/Stratosphere/Resources/LogsDestination.hs b/library-gen/Stratosphere/Resources/LogsDestination.hs
--- a/library-gen/Stratosphere/Resources/LogsDestination.hs
+++ b/library-gen/Stratosphere/Resources/LogsDestination.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-logs-destination.html
 
 module Stratosphere.Resources.LogsDestination where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -22,13 +22,26 @@
   , _logsDestinationDestinationPolicy :: Val Text
   , _logsDestinationRoleArn :: Val Text
   , _logsDestinationTargetArn :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON LogsDestination where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 16, omitNothingFields = True }
+  toJSON LogsDestination{..} =
+    object $
+    catMaybes
+    [ Just ("DestinationName" .= _logsDestinationDestinationName)
+    , Just ("DestinationPolicy" .= _logsDestinationDestinationPolicy)
+    , Just ("RoleArn" .= _logsDestinationRoleArn)
+    , Just ("TargetArn" .= _logsDestinationTargetArn)
+    ]
 
 instance FromJSON LogsDestination where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 16, omitNothingFields = True }
+  parseJSON (Object obj) =
+    LogsDestination <$>
+      obj .: "DestinationName" <*>
+      obj .: "DestinationPolicy" <*>
+      obj .: "RoleArn" <*>
+      obj .: "TargetArn"
+  parseJSON _ = mempty
 
 -- | Constructor for 'LogsDestination' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/LogsLogGroup.hs b/library-gen/Stratosphere/Resources/LogsLogGroup.hs
--- a/library-gen/Stratosphere/Resources/LogsLogGroup.hs
+++ b/library-gen/Stratosphere/Resources/LogsLogGroup.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-logs-loggroup.html
 
 module Stratosphere.Resources.LogsLogGroup where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   LogsLogGroup
   { _logsLogGroupLogGroupName :: Maybe (Val Text)
   , _logsLogGroupRetentionInDays :: Maybe (Val Integer')
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON LogsLogGroup where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 13, omitNothingFields = True }
+  toJSON LogsLogGroup{..} =
+    object $
+    catMaybes
+    [ ("LogGroupName" .=) <$> _logsLogGroupLogGroupName
+    , ("RetentionInDays" .=) <$> _logsLogGroupRetentionInDays
+    ]
 
 instance FromJSON LogsLogGroup where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 13, omitNothingFields = True }
+  parseJSON (Object obj) =
+    LogsLogGroup <$>
+      obj .:? "LogGroupName" <*>
+      obj .:? "RetentionInDays"
+  parseJSON _ = mempty
 
 -- | Constructor for 'LogsLogGroup' containing required fields as arguments.
 logsLogGroup
diff --git a/library-gen/Stratosphere/Resources/LogsLogStream.hs b/library-gen/Stratosphere/Resources/LogsLogStream.hs
--- a/library-gen/Stratosphere/Resources/LogsLogStream.hs
+++ b/library-gen/Stratosphere/Resources/LogsLogStream.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-logs-logstream.html
 
 module Stratosphere.Resources.LogsLogStream where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   LogsLogStream
   { _logsLogStreamLogGroupName :: Val Text
   , _logsLogStreamLogStreamName :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON LogsLogStream where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
+  toJSON LogsLogStream{..} =
+    object $
+    catMaybes
+    [ Just ("LogGroupName" .= _logsLogStreamLogGroupName)
+    , ("LogStreamName" .=) <$> _logsLogStreamLogStreamName
+    ]
 
 instance FromJSON LogsLogStream where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
+  parseJSON (Object obj) =
+    LogsLogStream <$>
+      obj .: "LogGroupName" <*>
+      obj .:? "LogStreamName"
+  parseJSON _ = mempty
 
 -- | Constructor for 'LogsLogStream' containing required fields as arguments.
 logsLogStream
diff --git a/library-gen/Stratosphere/Resources/LogsMetricFilter.hs b/library-gen/Stratosphere/Resources/LogsMetricFilter.hs
--- a/library-gen/Stratosphere/Resources/LogsMetricFilter.hs
+++ b/library-gen/Stratosphere/Resources/LogsMetricFilter.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-logs-metricfilter.html
 
 module Stratosphere.Resources.LogsMetricFilter where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.LogsMetricFilterMetricTransformation
@@ -21,13 +21,24 @@
   { _logsMetricFilterFilterPattern :: Val Text
   , _logsMetricFilterLogGroupName :: Val Text
   , _logsMetricFilterMetricTransformations :: [LogsMetricFilterMetricTransformation]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON LogsMetricFilter where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
+  toJSON LogsMetricFilter{..} =
+    object $
+    catMaybes
+    [ Just ("FilterPattern" .= _logsMetricFilterFilterPattern)
+    , Just ("LogGroupName" .= _logsMetricFilterLogGroupName)
+    , Just ("MetricTransformations" .= _logsMetricFilterMetricTransformations)
+    ]
 
 instance FromJSON LogsMetricFilter where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
+  parseJSON (Object obj) =
+    LogsMetricFilter <$>
+      obj .: "FilterPattern" <*>
+      obj .: "LogGroupName" <*>
+      obj .: "MetricTransformations"
+  parseJSON _ = mempty
 
 -- | Constructor for 'LogsMetricFilter' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/LogsSubscriptionFilter.hs b/library-gen/Stratosphere/Resources/LogsSubscriptionFilter.hs
--- a/library-gen/Stratosphere/Resources/LogsSubscriptionFilter.hs
+++ b/library-gen/Stratosphere/Resources/LogsSubscriptionFilter.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-logs-subscriptionfilter.html
 
 module Stratosphere.Resources.LogsSubscriptionFilter where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -22,13 +22,26 @@
   , _logsSubscriptionFilterFilterPattern :: Val Text
   , _logsSubscriptionFilterLogGroupName :: Val Text
   , _logsSubscriptionFilterRoleArn :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON LogsSubscriptionFilter where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 23, omitNothingFields = True }
+  toJSON LogsSubscriptionFilter{..} =
+    object $
+    catMaybes
+    [ Just ("DestinationArn" .= _logsSubscriptionFilterDestinationArn)
+    , Just ("FilterPattern" .= _logsSubscriptionFilterFilterPattern)
+    , Just ("LogGroupName" .= _logsSubscriptionFilterLogGroupName)
+    , ("RoleArn" .=) <$> _logsSubscriptionFilterRoleArn
+    ]
 
 instance FromJSON LogsSubscriptionFilter where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 23, omitNothingFields = True }
+  parseJSON (Object obj) =
+    LogsSubscriptionFilter <$>
+      obj .: "DestinationArn" <*>
+      obj .: "FilterPattern" <*>
+      obj .: "LogGroupName" <*>
+      obj .:? "RoleArn"
+  parseJSON _ = mempty
 
 -- | Constructor for 'LogsSubscriptionFilter' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/OpsWorksApp.hs b/library-gen/Stratosphere/Resources/OpsWorksApp.hs
--- a/library-gen/Stratosphere/Resources/OpsWorksApp.hs
+++ b/library-gen/Stratosphere/Resources/OpsWorksApp.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-app.html
 
 module Stratosphere.Resources.OpsWorksApp where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.OpsWorksAppSource
@@ -33,13 +33,42 @@
   , _opsWorksAppSslConfiguration :: Maybe OpsWorksAppSslConfiguration
   , _opsWorksAppStackId :: Val Text
   , _opsWorksAppType :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON OpsWorksApp where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 12, omitNothingFields = True }
+  toJSON OpsWorksApp{..} =
+    object $
+    catMaybes
+    [ ("AppSource" .=) <$> _opsWorksAppAppSource
+    , ("Attributes" .=) <$> _opsWorksAppAttributes
+    , ("DataSources" .=) <$> _opsWorksAppDataSources
+    , ("Description" .=) <$> _opsWorksAppDescription
+    , ("Domains" .=) <$> _opsWorksAppDomains
+    , ("EnableSsl" .=) <$> _opsWorksAppEnableSsl
+    , ("Environment" .=) <$> _opsWorksAppEnvironment
+    , Just ("Name" .= _opsWorksAppName)
+    , ("Shortname" .=) <$> _opsWorksAppShortname
+    , ("SslConfiguration" .=) <$> _opsWorksAppSslConfiguration
+    , Just ("StackId" .= _opsWorksAppStackId)
+    , Just ("Type" .= _opsWorksAppType)
+    ]
 
 instance FromJSON OpsWorksApp where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 12, omitNothingFields = True }
+  parseJSON (Object obj) =
+    OpsWorksApp <$>
+      obj .:? "AppSource" <*>
+      obj .:? "Attributes" <*>
+      obj .:? "DataSources" <*>
+      obj .:? "Description" <*>
+      obj .:? "Domains" <*>
+      obj .:? "EnableSsl" <*>
+      obj .:? "Environment" <*>
+      obj .: "Name" <*>
+      obj .:? "Shortname" <*>
+      obj .:? "SslConfiguration" <*>
+      obj .: "StackId" <*>
+      obj .: "Type"
+  parseJSON _ = mempty
 
 -- | Constructor for 'OpsWorksApp' containing required fields as arguments.
 opsWorksApp
diff --git a/library-gen/Stratosphere/Resources/OpsWorksElasticLoadBalancerAttachment.hs b/library-gen/Stratosphere/Resources/OpsWorksElasticLoadBalancerAttachment.hs
--- a/library-gen/Stratosphere/Resources/OpsWorksElasticLoadBalancerAttachment.hs
+++ b/library-gen/Stratosphere/Resources/OpsWorksElasticLoadBalancerAttachment.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-elbattachment.html
 
 module Stratosphere.Resources.OpsWorksElasticLoadBalancerAttachment where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -21,13 +21,22 @@
   OpsWorksElasticLoadBalancerAttachment
   { _opsWorksElasticLoadBalancerAttachmentElasticLoadBalancerName :: Val Text
   , _opsWorksElasticLoadBalancerAttachmentLayerId :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON OpsWorksElasticLoadBalancerAttachment where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 38, omitNothingFields = True }
+  toJSON OpsWorksElasticLoadBalancerAttachment{..} =
+    object $
+    catMaybes
+    [ Just ("ElasticLoadBalancerName" .= _opsWorksElasticLoadBalancerAttachmentElasticLoadBalancerName)
+    , Just ("LayerId" .= _opsWorksElasticLoadBalancerAttachmentLayerId)
+    ]
 
 instance FromJSON OpsWorksElasticLoadBalancerAttachment where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 38, omitNothingFields = True }
+  parseJSON (Object obj) =
+    OpsWorksElasticLoadBalancerAttachment <$>
+      obj .: "ElasticLoadBalancerName" <*>
+      obj .: "LayerId"
+  parseJSON _ = mempty
 
 -- | Constructor for 'OpsWorksElasticLoadBalancerAttachment' containing
 -- | required fields as arguments.
diff --git a/library-gen/Stratosphere/Resources/OpsWorksInstance.hs b/library-gen/Stratosphere/Resources/OpsWorksInstance.hs
--- a/library-gen/Stratosphere/Resources/OpsWorksInstance.hs
+++ b/library-gen/Stratosphere/Resources/OpsWorksInstance.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-instance.html
 
 module Stratosphere.Resources.OpsWorksInstance where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.OpsWorksInstanceBlockDeviceMapping
@@ -40,13 +40,60 @@
   , _opsWorksInstanceTimeBasedAutoScaling :: Maybe OpsWorksInstanceTimeBasedAutoScaling
   , _opsWorksInstanceVirtualizationType :: Maybe (Val Text)
   , _opsWorksInstanceVolumes :: Maybe [Val Text]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON OpsWorksInstance where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
+  toJSON OpsWorksInstance{..} =
+    object $
+    catMaybes
+    [ ("AgentVersion" .=) <$> _opsWorksInstanceAgentVersion
+    , ("AmiId" .=) <$> _opsWorksInstanceAmiId
+    , ("Architecture" .=) <$> _opsWorksInstanceArchitecture
+    , ("AutoScalingType" .=) <$> _opsWorksInstanceAutoScalingType
+    , ("AvailabilityZone" .=) <$> _opsWorksInstanceAvailabilityZone
+    , ("BlockDeviceMappings" .=) <$> _opsWorksInstanceBlockDeviceMappings
+    , ("EbsOptimized" .=) <$> _opsWorksInstanceEbsOptimized
+    , ("ElasticIps" .=) <$> _opsWorksInstanceElasticIps
+    , ("Hostname" .=) <$> _opsWorksInstanceHostname
+    , ("InstallUpdatesOnBoot" .=) <$> _opsWorksInstanceInstallUpdatesOnBoot
+    , Just ("InstanceType" .= _opsWorksInstanceInstanceType)
+    , Just ("LayerIds" .= _opsWorksInstanceLayerIds)
+    , ("Os" .=) <$> _opsWorksInstanceOs
+    , ("RootDeviceType" .=) <$> _opsWorksInstanceRootDeviceType
+    , ("SshKeyName" .=) <$> _opsWorksInstanceSshKeyName
+    , Just ("StackId" .= _opsWorksInstanceStackId)
+    , ("SubnetId" .=) <$> _opsWorksInstanceSubnetId
+    , ("Tenancy" .=) <$> _opsWorksInstanceTenancy
+    , ("TimeBasedAutoScaling" .=) <$> _opsWorksInstanceTimeBasedAutoScaling
+    , ("VirtualizationType" .=) <$> _opsWorksInstanceVirtualizationType
+    , ("Volumes" .=) <$> _opsWorksInstanceVolumes
+    ]
 
 instance FromJSON OpsWorksInstance where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
+  parseJSON (Object obj) =
+    OpsWorksInstance <$>
+      obj .:? "AgentVersion" <*>
+      obj .:? "AmiId" <*>
+      obj .:? "Architecture" <*>
+      obj .:? "AutoScalingType" <*>
+      obj .:? "AvailabilityZone" <*>
+      obj .:? "BlockDeviceMappings" <*>
+      obj .:? "EbsOptimized" <*>
+      obj .:? "ElasticIps" <*>
+      obj .:? "Hostname" <*>
+      obj .:? "InstallUpdatesOnBoot" <*>
+      obj .: "InstanceType" <*>
+      obj .: "LayerIds" <*>
+      obj .:? "Os" <*>
+      obj .:? "RootDeviceType" <*>
+      obj .:? "SshKeyName" <*>
+      obj .: "StackId" <*>
+      obj .:? "SubnetId" <*>
+      obj .:? "Tenancy" <*>
+      obj .:? "TimeBasedAutoScaling" <*>
+      obj .:? "VirtualizationType" <*>
+      obj .:? "Volumes"
+  parseJSON _ = mempty
 
 -- | Constructor for 'OpsWorksInstance' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/OpsWorksLayer.hs b/library-gen/Stratosphere/Resources/OpsWorksLayer.hs
--- a/library-gen/Stratosphere/Resources/OpsWorksLayer.hs
+++ b/library-gen/Stratosphere/Resources/OpsWorksLayer.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-layer.html
 
 module Stratosphere.Resources.OpsWorksLayer where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.OpsWorksLayerRecipes
@@ -39,13 +39,54 @@
   , _opsWorksLayerType :: Val Text
   , _opsWorksLayerUseEbsOptimizedInstances :: Maybe (Val Bool')
   , _opsWorksLayerVolumeConfigurations :: Maybe [OpsWorksLayerVolumeConfiguration]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON OpsWorksLayer where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
+  toJSON OpsWorksLayer{..} =
+    object $
+    catMaybes
+    [ ("Attributes" .=) <$> _opsWorksLayerAttributes
+    , Just ("AutoAssignElasticIps" .= _opsWorksLayerAutoAssignElasticIps)
+    , Just ("AutoAssignPublicIps" .= _opsWorksLayerAutoAssignPublicIps)
+    , ("CustomInstanceProfileArn" .=) <$> _opsWorksLayerCustomInstanceProfileArn
+    , ("CustomJson" .=) <$> _opsWorksLayerCustomJson
+    , ("CustomRecipes" .=) <$> _opsWorksLayerCustomRecipes
+    , ("CustomSecurityGroupIds" .=) <$> _opsWorksLayerCustomSecurityGroupIds
+    , Just ("EnableAutoHealing" .= _opsWorksLayerEnableAutoHealing)
+    , ("InstallUpdatesOnBoot" .=) <$> _opsWorksLayerInstallUpdatesOnBoot
+    , ("LifecycleEventConfiguration" .=) <$> _opsWorksLayerLifecycleEventConfiguration
+    , ("LoadBasedAutoScaling" .=) <$> _opsWorksLayerLoadBasedAutoScaling
+    , Just ("Name" .= _opsWorksLayerName)
+    , ("Packages" .=) <$> _opsWorksLayerPackages
+    , Just ("Shortname" .= _opsWorksLayerShortname)
+    , Just ("StackId" .= _opsWorksLayerStackId)
+    , Just ("Type" .= _opsWorksLayerType)
+    , ("UseEbsOptimizedInstances" .=) <$> _opsWorksLayerUseEbsOptimizedInstances
+    , ("VolumeConfigurations" .=) <$> _opsWorksLayerVolumeConfigurations
+    ]
 
 instance FromJSON OpsWorksLayer where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
+  parseJSON (Object obj) =
+    OpsWorksLayer <$>
+      obj .:? "Attributes" <*>
+      obj .: "AutoAssignElasticIps" <*>
+      obj .: "AutoAssignPublicIps" <*>
+      obj .:? "CustomInstanceProfileArn" <*>
+      obj .:? "CustomJson" <*>
+      obj .:? "CustomRecipes" <*>
+      obj .:? "CustomSecurityGroupIds" <*>
+      obj .: "EnableAutoHealing" <*>
+      obj .:? "InstallUpdatesOnBoot" <*>
+      obj .:? "LifecycleEventConfiguration" <*>
+      obj .:? "LoadBasedAutoScaling" <*>
+      obj .: "Name" <*>
+      obj .:? "Packages" <*>
+      obj .: "Shortname" <*>
+      obj .: "StackId" <*>
+      obj .: "Type" <*>
+      obj .:? "UseEbsOptimizedInstances" <*>
+      obj .:? "VolumeConfigurations"
+  parseJSON _ = mempty
 
 -- | Constructor for 'OpsWorksLayer' containing required fields as arguments.
 opsWorksLayer
diff --git a/library-gen/Stratosphere/Resources/OpsWorksStack.hs b/library-gen/Stratosphere/Resources/OpsWorksStack.hs
--- a/library-gen/Stratosphere/Resources/OpsWorksStack.hs
+++ b/library-gen/Stratosphere/Resources/OpsWorksStack.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-stack.html
 
 module Stratosphere.Resources.OpsWorksStack where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.OpsWorksStackChefConfiguration
@@ -46,13 +46,66 @@
   , _opsWorksStackUseCustomCookbooks :: Maybe (Val Bool')
   , _opsWorksStackUseOpsworksSecurityGroups :: Maybe (Val Bool')
   , _opsWorksStackVpcId :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON OpsWorksStack where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
+  toJSON OpsWorksStack{..} =
+    object $
+    catMaybes
+    [ ("AgentVersion" .=) <$> _opsWorksStackAgentVersion
+    , ("Attributes" .=) <$> _opsWorksStackAttributes
+    , ("ChefConfiguration" .=) <$> _opsWorksStackChefConfiguration
+    , ("CloneAppIds" .=) <$> _opsWorksStackCloneAppIds
+    , ("ClonePermissions" .=) <$> _opsWorksStackClonePermissions
+    , ("ConfigurationManager" .=) <$> _opsWorksStackConfigurationManager
+    , ("CustomCookbooksSource" .=) <$> _opsWorksStackCustomCookbooksSource
+    , ("CustomJson" .=) <$> _opsWorksStackCustomJson
+    , ("DefaultAvailabilityZone" .=) <$> _opsWorksStackDefaultAvailabilityZone
+    , Just ("DefaultInstanceProfileArn" .= _opsWorksStackDefaultInstanceProfileArn)
+    , ("DefaultOs" .=) <$> _opsWorksStackDefaultOs
+    , ("DefaultRootDeviceType" .=) <$> _opsWorksStackDefaultRootDeviceType
+    , ("DefaultSshKeyName" .=) <$> _opsWorksStackDefaultSshKeyName
+    , ("DefaultSubnetId" .=) <$> _opsWorksStackDefaultSubnetId
+    , ("EcsClusterArn" .=) <$> _opsWorksStackEcsClusterArn
+    , ("ElasticIps" .=) <$> _opsWorksStackElasticIps
+    , ("HostnameTheme" .=) <$> _opsWorksStackHostnameTheme
+    , Just ("Name" .= _opsWorksStackName)
+    , ("RdsDbInstances" .=) <$> _opsWorksStackRdsDbInstances
+    , Just ("ServiceRoleArn" .= _opsWorksStackServiceRoleArn)
+    , ("SourceStackId" .=) <$> _opsWorksStackSourceStackId
+    , ("UseCustomCookbooks" .=) <$> _opsWorksStackUseCustomCookbooks
+    , ("UseOpsworksSecurityGroups" .=) <$> _opsWorksStackUseOpsworksSecurityGroups
+    , ("VpcId" .=) <$> _opsWorksStackVpcId
+    ]
 
 instance FromJSON OpsWorksStack where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
+  parseJSON (Object obj) =
+    OpsWorksStack <$>
+      obj .:? "AgentVersion" <*>
+      obj .:? "Attributes" <*>
+      obj .:? "ChefConfiguration" <*>
+      obj .:? "CloneAppIds" <*>
+      obj .:? "ClonePermissions" <*>
+      obj .:? "ConfigurationManager" <*>
+      obj .:? "CustomCookbooksSource" <*>
+      obj .:? "CustomJson" <*>
+      obj .:? "DefaultAvailabilityZone" <*>
+      obj .: "DefaultInstanceProfileArn" <*>
+      obj .:? "DefaultOs" <*>
+      obj .:? "DefaultRootDeviceType" <*>
+      obj .:? "DefaultSshKeyName" <*>
+      obj .:? "DefaultSubnetId" <*>
+      obj .:? "EcsClusterArn" <*>
+      obj .:? "ElasticIps" <*>
+      obj .:? "HostnameTheme" <*>
+      obj .: "Name" <*>
+      obj .:? "RdsDbInstances" <*>
+      obj .: "ServiceRoleArn" <*>
+      obj .:? "SourceStackId" <*>
+      obj .:? "UseCustomCookbooks" <*>
+      obj .:? "UseOpsworksSecurityGroups" <*>
+      obj .:? "VpcId"
+  parseJSON _ = mempty
 
 -- | Constructor for 'OpsWorksStack' containing required fields as arguments.
 opsWorksStack
diff --git a/library-gen/Stratosphere/Resources/OpsWorksUserProfile.hs b/library-gen/Stratosphere/Resources/OpsWorksUserProfile.hs
--- a/library-gen/Stratosphere/Resources/OpsWorksUserProfile.hs
+++ b/library-gen/Stratosphere/Resources/OpsWorksUserProfile.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-userprofile.html
 
 module Stratosphere.Resources.OpsWorksUserProfile where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -21,13 +21,24 @@
   { _opsWorksUserProfileAllowSelfManagement :: Maybe (Val Bool')
   , _opsWorksUserProfileIamUserArn :: Val Text
   , _opsWorksUserProfileSshPublicKey :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON OpsWorksUserProfile where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 20, omitNothingFields = True }
+  toJSON OpsWorksUserProfile{..} =
+    object $
+    catMaybes
+    [ ("AllowSelfManagement" .=) <$> _opsWorksUserProfileAllowSelfManagement
+    , Just ("IamUserArn" .= _opsWorksUserProfileIamUserArn)
+    , ("SshPublicKey" .=) <$> _opsWorksUserProfileSshPublicKey
+    ]
 
 instance FromJSON OpsWorksUserProfile where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 20, omitNothingFields = True }
+  parseJSON (Object obj) =
+    OpsWorksUserProfile <$>
+      obj .:? "AllowSelfManagement" <*>
+      obj .: "IamUserArn" <*>
+      obj .:? "SshPublicKey"
+  parseJSON _ = mempty
 
 -- | Constructor for 'OpsWorksUserProfile' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/OpsWorksVolume.hs b/library-gen/Stratosphere/Resources/OpsWorksVolume.hs
--- a/library-gen/Stratosphere/Resources/OpsWorksVolume.hs
+++ b/library-gen/Stratosphere/Resources/OpsWorksVolume.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-volume.html
 
 module Stratosphere.Resources.OpsWorksVolume where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -22,13 +22,26 @@
   , _opsWorksVolumeMountPoint :: Maybe (Val Text)
   , _opsWorksVolumeName :: Maybe (Val Text)
   , _opsWorksVolumeStackId :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON OpsWorksVolume where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 15, omitNothingFields = True }
+  toJSON OpsWorksVolume{..} =
+    object $
+    catMaybes
+    [ Just ("Ec2VolumeId" .= _opsWorksVolumeEc2VolumeId)
+    , ("MountPoint" .=) <$> _opsWorksVolumeMountPoint
+    , ("Name" .=) <$> _opsWorksVolumeName
+    , Just ("StackId" .= _opsWorksVolumeStackId)
+    ]
 
 instance FromJSON OpsWorksVolume where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 15, omitNothingFields = True }
+  parseJSON (Object obj) =
+    OpsWorksVolume <$>
+      obj .: "Ec2VolumeId" <*>
+      obj .:? "MountPoint" <*>
+      obj .:? "Name" <*>
+      obj .: "StackId"
+  parseJSON _ = mempty
 
 -- | Constructor for 'OpsWorksVolume' containing required fields as arguments.
 opsWorksVolume
diff --git a/library-gen/Stratosphere/Resources/RDSDBCluster.hs b/library-gen/Stratosphere/Resources/RDSDBCluster.hs
--- a/library-gen/Stratosphere/Resources/RDSDBCluster.hs
+++ b/library-gen/Stratosphere/Resources/RDSDBCluster.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbcluster.html
 
 module Stratosphere.Resources.RDSDBCluster where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.Tag
@@ -35,13 +35,52 @@
   , _rDSDBClusterStorageEncrypted :: Maybe (Val Bool')
   , _rDSDBClusterTags :: Maybe [Tag]
   , _rDSDBClusterVpcSecurityGroupIds :: Maybe [Val Text]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON RDSDBCluster where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 13, omitNothingFields = True }
+  toJSON RDSDBCluster{..} =
+    object $
+    catMaybes
+    [ ("AvailabilityZones" .=) <$> _rDSDBClusterAvailabilityZones
+    , ("BackupRetentionPeriod" .=) <$> _rDSDBClusterBackupRetentionPeriod
+    , ("DBClusterParameterGroupName" .=) <$> _rDSDBClusterDBClusterParameterGroupName
+    , ("DBSubnetGroupName" .=) <$> _rDSDBClusterDBSubnetGroupName
+    , ("DatabaseName" .=) <$> _rDSDBClusterDatabaseName
+    , Just ("Engine" .= _rDSDBClusterEngine)
+    , ("EngineVersion" .=) <$> _rDSDBClusterEngineVersion
+    , ("KmsKeyId" .=) <$> _rDSDBClusterKmsKeyId
+    , ("MasterUserPassword" .=) <$> _rDSDBClusterMasterUserPassword
+    , ("MasterUsername" .=) <$> _rDSDBClusterMasterUsername
+    , ("Port" .=) <$> _rDSDBClusterPort
+    , ("PreferredBackupWindow" .=) <$> _rDSDBClusterPreferredBackupWindow
+    , ("PreferredMaintenanceWindow" .=) <$> _rDSDBClusterPreferredMaintenanceWindow
+    , ("SnapshotIdentifier" .=) <$> _rDSDBClusterSnapshotIdentifier
+    , ("StorageEncrypted" .=) <$> _rDSDBClusterStorageEncrypted
+    , ("Tags" .=) <$> _rDSDBClusterTags
+    , ("VpcSecurityGroupIds" .=) <$> _rDSDBClusterVpcSecurityGroupIds
+    ]
 
 instance FromJSON RDSDBCluster where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 13, omitNothingFields = True }
+  parseJSON (Object obj) =
+    RDSDBCluster <$>
+      obj .:? "AvailabilityZones" <*>
+      obj .:? "BackupRetentionPeriod" <*>
+      obj .:? "DBClusterParameterGroupName" <*>
+      obj .:? "DBSubnetGroupName" <*>
+      obj .:? "DatabaseName" <*>
+      obj .: "Engine" <*>
+      obj .:? "EngineVersion" <*>
+      obj .:? "KmsKeyId" <*>
+      obj .:? "MasterUserPassword" <*>
+      obj .:? "MasterUsername" <*>
+      obj .:? "Port" <*>
+      obj .:? "PreferredBackupWindow" <*>
+      obj .:? "PreferredMaintenanceWindow" <*>
+      obj .:? "SnapshotIdentifier" <*>
+      obj .:? "StorageEncrypted" <*>
+      obj .:? "Tags" <*>
+      obj .:? "VpcSecurityGroupIds"
+  parseJSON _ = mempty
 
 -- | Constructor for 'RDSDBCluster' containing required fields as arguments.
 rdsdbCluster
diff --git a/library-gen/Stratosphere/Resources/RDSDBClusterParameterGroup.hs b/library-gen/Stratosphere/Resources/RDSDBClusterParameterGroup.hs
--- a/library-gen/Stratosphere/Resources/RDSDBClusterParameterGroup.hs
+++ b/library-gen/Stratosphere/Resources/RDSDBClusterParameterGroup.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbclusterparametergroup.html
 
 module Stratosphere.Resources.RDSDBClusterParameterGroup where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.Tag
@@ -22,13 +22,26 @@
   , _rDSDBClusterParameterGroupFamily :: Val Text
   , _rDSDBClusterParameterGroupParameters :: Object
   , _rDSDBClusterParameterGroupTags :: Maybe [Tag]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON RDSDBClusterParameterGroup where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
+  toJSON RDSDBClusterParameterGroup{..} =
+    object $
+    catMaybes
+    [ Just ("Description" .= _rDSDBClusterParameterGroupDescription)
+    , Just ("Family" .= _rDSDBClusterParameterGroupFamily)
+    , Just ("Parameters" .= _rDSDBClusterParameterGroupParameters)
+    , ("Tags" .=) <$> _rDSDBClusterParameterGroupTags
+    ]
 
 instance FromJSON RDSDBClusterParameterGroup where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
+  parseJSON (Object obj) =
+    RDSDBClusterParameterGroup <$>
+      obj .: "Description" <*>
+      obj .: "Family" <*>
+      obj .: "Parameters" <*>
+      obj .:? "Tags"
+  parseJSON _ = mempty
 
 -- | Constructor for 'RDSDBClusterParameterGroup' containing required fields
 -- | as arguments.
diff --git a/library-gen/Stratosphere/Resources/RDSDBInstance.hs b/library-gen/Stratosphere/Resources/RDSDBInstance.hs
--- a/library-gen/Stratosphere/Resources/RDSDBInstance.hs
+++ b/library-gen/Stratosphere/Resources/RDSDBInstance.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-database-instance.html
 
 module Stratosphere.Resources.RDSDBInstance where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.Tag
@@ -55,13 +55,92 @@
   , _rDSDBInstanceTags :: Maybe [Tag]
   , _rDSDBInstanceTimezone :: Maybe (Val Text)
   , _rDSDBInstanceVPCSecurityGroups :: Maybe [Val Text]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON RDSDBInstance where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
+  toJSON RDSDBInstance{..} =
+    object $
+    catMaybes
+    [ ("AllocatedStorage" .=) <$> _rDSDBInstanceAllocatedStorage
+    , ("AllowMajorVersionUpgrade" .=) <$> _rDSDBInstanceAllowMajorVersionUpgrade
+    , ("AutoMinorVersionUpgrade" .=) <$> _rDSDBInstanceAutoMinorVersionUpgrade
+    , ("AvailabilityZone" .=) <$> _rDSDBInstanceAvailabilityZone
+    , ("BackupRetentionPeriod" .=) <$> _rDSDBInstanceBackupRetentionPeriod
+    , ("CharacterSetName" .=) <$> _rDSDBInstanceCharacterSetName
+    , ("DBClusterIdentifier" .=) <$> _rDSDBInstanceDBClusterIdentifier
+    , Just ("DBInstanceClass" .= _rDSDBInstanceDBInstanceClass)
+    , ("DBInstanceIdentifier" .=) <$> _rDSDBInstanceDBInstanceIdentifier
+    , ("DBName" .=) <$> _rDSDBInstanceDBName
+    , ("DBParameterGroupName" .=) <$> _rDSDBInstanceDBParameterGroupName
+    , ("DBSecurityGroups" .=) <$> _rDSDBInstanceDBSecurityGroups
+    , ("DBSnapshotIdentifier" .=) <$> _rDSDBInstanceDBSnapshotIdentifier
+    , ("DBSubnetGroupName" .=) <$> _rDSDBInstanceDBSubnetGroupName
+    , ("Domain" .=) <$> _rDSDBInstanceDomain
+    , ("DomainIAMRoleName" .=) <$> _rDSDBInstanceDomainIAMRoleName
+    , ("Engine" .=) <$> _rDSDBInstanceEngine
+    , ("EngineVersion" .=) <$> _rDSDBInstanceEngineVersion
+    , ("Iops" .=) <$> _rDSDBInstanceIops
+    , ("KmsKeyId" .=) <$> _rDSDBInstanceKmsKeyId
+    , ("LicenseModel" .=) <$> _rDSDBInstanceLicenseModel
+    , ("MasterUserPassword" .=) <$> _rDSDBInstanceMasterUserPassword
+    , ("MasterUsername" .=) <$> _rDSDBInstanceMasterUsername
+    , ("MonitoringInterval" .=) <$> _rDSDBInstanceMonitoringInterval
+    , ("MonitoringRoleArn" .=) <$> _rDSDBInstanceMonitoringRoleArn
+    , ("MultiAZ" .=) <$> _rDSDBInstanceMultiAZ
+    , ("OptionGroupName" .=) <$> _rDSDBInstanceOptionGroupName
+    , ("Port" .=) <$> _rDSDBInstancePort
+    , ("PreferredBackupWindow" .=) <$> _rDSDBInstancePreferredBackupWindow
+    , ("PreferredMaintenanceWindow" .=) <$> _rDSDBInstancePreferredMaintenanceWindow
+    , ("PubliclyAccessible" .=) <$> _rDSDBInstancePubliclyAccessible
+    , ("SourceDBInstanceIdentifier" .=) <$> _rDSDBInstanceSourceDBInstanceIdentifier
+    , ("StorageEncrypted" .=) <$> _rDSDBInstanceStorageEncrypted
+    , ("StorageType" .=) <$> _rDSDBInstanceStorageType
+    , ("Tags" .=) <$> _rDSDBInstanceTags
+    , ("Timezone" .=) <$> _rDSDBInstanceTimezone
+    , ("VPCSecurityGroups" .=) <$> _rDSDBInstanceVPCSecurityGroups
+    ]
 
 instance FromJSON RDSDBInstance where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
+  parseJSON (Object obj) =
+    RDSDBInstance <$>
+      obj .:? "AllocatedStorage" <*>
+      obj .:? "AllowMajorVersionUpgrade" <*>
+      obj .:? "AutoMinorVersionUpgrade" <*>
+      obj .:? "AvailabilityZone" <*>
+      obj .:? "BackupRetentionPeriod" <*>
+      obj .:? "CharacterSetName" <*>
+      obj .:? "DBClusterIdentifier" <*>
+      obj .: "DBInstanceClass" <*>
+      obj .:? "DBInstanceIdentifier" <*>
+      obj .:? "DBName" <*>
+      obj .:? "DBParameterGroupName" <*>
+      obj .:? "DBSecurityGroups" <*>
+      obj .:? "DBSnapshotIdentifier" <*>
+      obj .:? "DBSubnetGroupName" <*>
+      obj .:? "Domain" <*>
+      obj .:? "DomainIAMRoleName" <*>
+      obj .:? "Engine" <*>
+      obj .:? "EngineVersion" <*>
+      obj .:? "Iops" <*>
+      obj .:? "KmsKeyId" <*>
+      obj .:? "LicenseModel" <*>
+      obj .:? "MasterUserPassword" <*>
+      obj .:? "MasterUsername" <*>
+      obj .:? "MonitoringInterval" <*>
+      obj .:? "MonitoringRoleArn" <*>
+      obj .:? "MultiAZ" <*>
+      obj .:? "OptionGroupName" <*>
+      obj .:? "Port" <*>
+      obj .:? "PreferredBackupWindow" <*>
+      obj .:? "PreferredMaintenanceWindow" <*>
+      obj .:? "PubliclyAccessible" <*>
+      obj .:? "SourceDBInstanceIdentifier" <*>
+      obj .:? "StorageEncrypted" <*>
+      obj .:? "StorageType" <*>
+      obj .:? "Tags" <*>
+      obj .:? "Timezone" <*>
+      obj .:? "VPCSecurityGroups"
+  parseJSON _ = mempty
 
 -- | Constructor for 'RDSDBInstance' containing required fields as arguments.
 rdsdbInstance
diff --git a/library-gen/Stratosphere/Resources/RDSDBParameterGroup.hs b/library-gen/Stratosphere/Resources/RDSDBParameterGroup.hs
--- a/library-gen/Stratosphere/Resources/RDSDBParameterGroup.hs
+++ b/library-gen/Stratosphere/Resources/RDSDBParameterGroup.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-dbparametergroup.html
 
 module Stratosphere.Resources.RDSDBParameterGroup where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.Tag
@@ -22,13 +22,26 @@
   , _rDSDBParameterGroupFamily :: Val Text
   , _rDSDBParameterGroupParameters :: Maybe Object
   , _rDSDBParameterGroupTags :: Maybe [Tag]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON RDSDBParameterGroup where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 20, omitNothingFields = True }
+  toJSON RDSDBParameterGroup{..} =
+    object $
+    catMaybes
+    [ Just ("Description" .= _rDSDBParameterGroupDescription)
+    , Just ("Family" .= _rDSDBParameterGroupFamily)
+    , ("Parameters" .=) <$> _rDSDBParameterGroupParameters
+    , ("Tags" .=) <$> _rDSDBParameterGroupTags
+    ]
 
 instance FromJSON RDSDBParameterGroup where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 20, omitNothingFields = True }
+  parseJSON (Object obj) =
+    RDSDBParameterGroup <$>
+      obj .: "Description" <*>
+      obj .: "Family" <*>
+      obj .:? "Parameters" <*>
+      obj .:? "Tags"
+  parseJSON _ = mempty
 
 -- | Constructor for 'RDSDBParameterGroup' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/RDSDBSecurityGroup.hs b/library-gen/Stratosphere/Resources/RDSDBSecurityGroup.hs
--- a/library-gen/Stratosphere/Resources/RDSDBSecurityGroup.hs
+++ b/library-gen/Stratosphere/Resources/RDSDBSecurityGroup.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-security-group.html
 
 module Stratosphere.Resources.RDSDBSecurityGroup where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.RDSDBSecurityGroupIngressProperty
@@ -23,13 +23,26 @@
   , _rDSDBSecurityGroupEC2VpcId :: Maybe (Val Text)
   , _rDSDBSecurityGroupGroupDescription :: Val Text
   , _rDSDBSecurityGroupTags :: Maybe [Tag]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON RDSDBSecurityGroup where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 19, omitNothingFields = True }
+  toJSON RDSDBSecurityGroup{..} =
+    object $
+    catMaybes
+    [ Just ("DBSecurityGroupIngress" .= _rDSDBSecurityGroupDBSecurityGroupIngress)
+    , ("EC2VpcId" .=) <$> _rDSDBSecurityGroupEC2VpcId
+    , Just ("GroupDescription" .= _rDSDBSecurityGroupGroupDescription)
+    , ("Tags" .=) <$> _rDSDBSecurityGroupTags
+    ]
 
 instance FromJSON RDSDBSecurityGroup where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 19, omitNothingFields = True }
+  parseJSON (Object obj) =
+    RDSDBSecurityGroup <$>
+      obj .: "DBSecurityGroupIngress" <*>
+      obj .:? "EC2VpcId" <*>
+      obj .: "GroupDescription" <*>
+      obj .:? "Tags"
+  parseJSON _ = mempty
 
 -- | Constructor for 'RDSDBSecurityGroup' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/RDSDBSecurityGroupIngress.hs b/library-gen/Stratosphere/Resources/RDSDBSecurityGroupIngress.hs
--- a/library-gen/Stratosphere/Resources/RDSDBSecurityGroupIngress.hs
+++ b/library-gen/Stratosphere/Resources/RDSDBSecurityGroupIngress.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-security-group-ingress.html
 
 module Stratosphere.Resources.RDSDBSecurityGroupIngress where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -23,13 +23,28 @@
   , _rDSDBSecurityGroupIngressEC2SecurityGroupId :: Maybe (Val Text)
   , _rDSDBSecurityGroupIngressEC2SecurityGroupName :: Maybe (Val Text)
   , _rDSDBSecurityGroupIngressEC2SecurityGroupOwnerId :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON RDSDBSecurityGroupIngress where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 26, omitNothingFields = True }
+  toJSON RDSDBSecurityGroupIngress{..} =
+    object $
+    catMaybes
+    [ ("CIDRIP" .=) <$> _rDSDBSecurityGroupIngressCIDRIP
+    , Just ("DBSecurityGroupName" .= _rDSDBSecurityGroupIngressDBSecurityGroupName)
+    , ("EC2SecurityGroupId" .=) <$> _rDSDBSecurityGroupIngressEC2SecurityGroupId
+    , ("EC2SecurityGroupName" .=) <$> _rDSDBSecurityGroupIngressEC2SecurityGroupName
+    , ("EC2SecurityGroupOwnerId" .=) <$> _rDSDBSecurityGroupIngressEC2SecurityGroupOwnerId
+    ]
 
 instance FromJSON RDSDBSecurityGroupIngress where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 26, omitNothingFields = True }
+  parseJSON (Object obj) =
+    RDSDBSecurityGroupIngress <$>
+      obj .:? "CIDRIP" <*>
+      obj .: "DBSecurityGroupName" <*>
+      obj .:? "EC2SecurityGroupId" <*>
+      obj .:? "EC2SecurityGroupName" <*>
+      obj .:? "EC2SecurityGroupOwnerId"
+  parseJSON _ = mempty
 
 -- | Constructor for 'RDSDBSecurityGroupIngress' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/RDSDBSubnetGroup.hs b/library-gen/Stratosphere/Resources/RDSDBSubnetGroup.hs
--- a/library-gen/Stratosphere/Resources/RDSDBSubnetGroup.hs
+++ b/library-gen/Stratosphere/Resources/RDSDBSubnetGroup.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbsubnet-group.html
 
 module Stratosphere.Resources.RDSDBSubnetGroup where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.Tag
@@ -21,13 +21,24 @@
   { _rDSDBSubnetGroupDBSubnetGroupDescription :: Val Text
   , _rDSDBSubnetGroupSubnetIds :: [Val Text]
   , _rDSDBSubnetGroupTags :: Maybe [Tag]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON RDSDBSubnetGroup where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
+  toJSON RDSDBSubnetGroup{..} =
+    object $
+    catMaybes
+    [ Just ("DBSubnetGroupDescription" .= _rDSDBSubnetGroupDBSubnetGroupDescription)
+    , Just ("SubnetIds" .= _rDSDBSubnetGroupSubnetIds)
+    , ("Tags" .=) <$> _rDSDBSubnetGroupTags
+    ]
 
 instance FromJSON RDSDBSubnetGroup where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
+  parseJSON (Object obj) =
+    RDSDBSubnetGroup <$>
+      obj .: "DBSubnetGroupDescription" <*>
+      obj .: "SubnetIds" <*>
+      obj .:? "Tags"
+  parseJSON _ = mempty
 
 -- | Constructor for 'RDSDBSubnetGroup' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/RDSEventSubscription.hs b/library-gen/Stratosphere/Resources/RDSEventSubscription.hs
--- a/library-gen/Stratosphere/Resources/RDSEventSubscription.hs
+++ b/library-gen/Stratosphere/Resources/RDSEventSubscription.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-eventsubscription.html
 
 module Stratosphere.Resources.RDSEventSubscription where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -23,13 +23,28 @@
   , _rDSEventSubscriptionSnsTopicArn :: Val Text
   , _rDSEventSubscriptionSourceIds :: Maybe [Val Text]
   , _rDSEventSubscriptionSourceType :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON RDSEventSubscription where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 21, omitNothingFields = True }
+  toJSON RDSEventSubscription{..} =
+    object $
+    catMaybes
+    [ ("Enabled" .=) <$> _rDSEventSubscriptionEnabled
+    , ("EventCategories" .=) <$> _rDSEventSubscriptionEventCategories
+    , Just ("SnsTopicArn" .= _rDSEventSubscriptionSnsTopicArn)
+    , ("SourceIds" .=) <$> _rDSEventSubscriptionSourceIds
+    , ("SourceType" .=) <$> _rDSEventSubscriptionSourceType
+    ]
 
 instance FromJSON RDSEventSubscription where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 21, omitNothingFields = True }
+  parseJSON (Object obj) =
+    RDSEventSubscription <$>
+      obj .:? "Enabled" <*>
+      obj .:? "EventCategories" <*>
+      obj .: "SnsTopicArn" <*>
+      obj .:? "SourceIds" <*>
+      obj .:? "SourceType"
+  parseJSON _ = mempty
 
 -- | Constructor for 'RDSEventSubscription' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/RDSOptionGroup.hs b/library-gen/Stratosphere/Resources/RDSOptionGroup.hs
--- a/library-gen/Stratosphere/Resources/RDSOptionGroup.hs
+++ b/library-gen/Stratosphere/Resources/RDSOptionGroup.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-optiongroup.html
 
 module Stratosphere.Resources.RDSOptionGroup where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.RDSOptionGroupOptionConfiguration
@@ -24,13 +24,28 @@
   , _rDSOptionGroupOptionConfigurations :: [RDSOptionGroupOptionConfiguration]
   , _rDSOptionGroupOptionGroupDescription :: Val Text
   , _rDSOptionGroupTags :: Maybe [Tag]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON RDSOptionGroup where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 15, omitNothingFields = True }
+  toJSON RDSOptionGroup{..} =
+    object $
+    catMaybes
+    [ Just ("EngineName" .= _rDSOptionGroupEngineName)
+    , Just ("MajorEngineVersion" .= _rDSOptionGroupMajorEngineVersion)
+    , Just ("OptionConfigurations" .= _rDSOptionGroupOptionConfigurations)
+    , Just ("OptionGroupDescription" .= _rDSOptionGroupOptionGroupDescription)
+    , ("Tags" .=) <$> _rDSOptionGroupTags
+    ]
 
 instance FromJSON RDSOptionGroup where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 15, omitNothingFields = True }
+  parseJSON (Object obj) =
+    RDSOptionGroup <$>
+      obj .: "EngineName" <*>
+      obj .: "MajorEngineVersion" <*>
+      obj .: "OptionConfigurations" <*>
+      obj .: "OptionGroupDescription" <*>
+      obj .:? "Tags"
+  parseJSON _ = mempty
 
 -- | Constructor for 'RDSOptionGroup' containing required fields as arguments.
 rdsOptionGroup
diff --git a/library-gen/Stratosphere/Resources/RedshiftCluster.hs b/library-gen/Stratosphere/Resources/RedshiftCluster.hs
--- a/library-gen/Stratosphere/Resources/RedshiftCluster.hs
+++ b/library-gen/Stratosphere/Resources/RedshiftCluster.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-cluster.html
 
 module Stratosphere.Resources.RedshiftCluster where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -42,13 +42,66 @@
   , _redshiftClusterSnapshotClusterIdentifier :: Maybe (Val Text)
   , _redshiftClusterSnapshotIdentifier :: Maybe (Val Text)
   , _redshiftClusterVpcSecurityGroupIds :: Maybe [Val Text]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON RedshiftCluster where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 16, omitNothingFields = True }
+  toJSON RedshiftCluster{..} =
+    object $
+    catMaybes
+    [ ("AllowVersionUpdate" .=) <$> _redshiftClusterAllowVersionUpdate
+    , ("AutomatedSnapshotRetentionPeriod" .=) <$> _redshiftClusterAutomatedSnapshotRetentionPeriod
+    , ("AvailabilityZone" .=) <$> _redshiftClusterAvailabilityZone
+    , ("ClusterParameterGroupName" .=) <$> _redshiftClusterClusterParameterGroupName
+    , ("ClusterSecurityGroups" .=) <$> _redshiftClusterClusterSecurityGroups
+    , ("ClusterSubnetGroupName" .=) <$> _redshiftClusterClusterSubnetGroupName
+    , Just ("ClusterType" .= _redshiftClusterClusterType)
+    , ("ClusterVersion" .=) <$> _redshiftClusterClusterVersion
+    , Just ("DBName" .= _redshiftClusterDBName)
+    , ("ElasticIp" .=) <$> _redshiftClusterElasticIp
+    , ("Encrypted" .=) <$> _redshiftClusterEncrypted
+    , ("HsmClientCertificateIdentifier" .=) <$> _redshiftClusterHsmClientCertificateIdentifier
+    , ("KmsKeyId" .=) <$> _redshiftClusterKmsKeyId
+    , Just ("MasterUserPassword" .= _redshiftClusterMasterUserPassword)
+    , Just ("MasterUsername" .= _redshiftClusterMasterUsername)
+    , Just ("NodeType" .= _redshiftClusterNodeType)
+    , ("NumberOfNodes" .=) <$> _redshiftClusterNumberOfNodes
+    , ("OwnerAccount" .=) <$> _redshiftClusterOwnerAccount
+    , ("Port" .=) <$> _redshiftClusterPort
+    , ("PreferredMaintenanceWindow" .=) <$> _redshiftClusterPreferredMaintenanceWindow
+    , ("PubliclyAccessible" .=) <$> _redshiftClusterPubliclyAccessible
+    , ("SnapshotClusterIdentifier" .=) <$> _redshiftClusterSnapshotClusterIdentifier
+    , ("SnapshotIdentifier" .=) <$> _redshiftClusterSnapshotIdentifier
+    , ("VpcSecurityGroupIds" .=) <$> _redshiftClusterVpcSecurityGroupIds
+    ]
 
 instance FromJSON RedshiftCluster where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 16, omitNothingFields = True }
+  parseJSON (Object obj) =
+    RedshiftCluster <$>
+      obj .:? "AllowVersionUpdate" <*>
+      obj .:? "AutomatedSnapshotRetentionPeriod" <*>
+      obj .:? "AvailabilityZone" <*>
+      obj .:? "ClusterParameterGroupName" <*>
+      obj .:? "ClusterSecurityGroups" <*>
+      obj .:? "ClusterSubnetGroupName" <*>
+      obj .: "ClusterType" <*>
+      obj .:? "ClusterVersion" <*>
+      obj .: "DBName" <*>
+      obj .:? "ElasticIp" <*>
+      obj .:? "Encrypted" <*>
+      obj .:? "HsmClientCertificateIdentifier" <*>
+      obj .:? "KmsKeyId" <*>
+      obj .: "MasterUserPassword" <*>
+      obj .: "MasterUsername" <*>
+      obj .: "NodeType" <*>
+      obj .:? "NumberOfNodes" <*>
+      obj .:? "OwnerAccount" <*>
+      obj .:? "Port" <*>
+      obj .:? "PreferredMaintenanceWindow" <*>
+      obj .:? "PubliclyAccessible" <*>
+      obj .:? "SnapshotClusterIdentifier" <*>
+      obj .:? "SnapshotIdentifier" <*>
+      obj .:? "VpcSecurityGroupIds"
+  parseJSON _ = mempty
 
 -- | Constructor for 'RedshiftCluster' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/RedshiftClusterParameterGroup.hs b/library-gen/Stratosphere/Resources/RedshiftClusterParameterGroup.hs
--- a/library-gen/Stratosphere/Resources/RedshiftClusterParameterGroup.hs
+++ b/library-gen/Stratosphere/Resources/RedshiftClusterParameterGroup.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-clusterparametergroup.html
 
 module Stratosphere.Resources.RedshiftClusterParameterGroup where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.RedshiftClusterParameterGroupParameter
@@ -21,13 +21,24 @@
   { _redshiftClusterParameterGroupDescription :: Val Text
   , _redshiftClusterParameterGroupParameterGroupFamily :: Val Text
   , _redshiftClusterParameterGroupParameters :: Maybe [RedshiftClusterParameterGroupParameter]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON RedshiftClusterParameterGroup where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
+  toJSON RedshiftClusterParameterGroup{..} =
+    object $
+    catMaybes
+    [ Just ("Description" .= _redshiftClusterParameterGroupDescription)
+    , Just ("ParameterGroupFamily" .= _redshiftClusterParameterGroupParameterGroupFamily)
+    , ("Parameters" .=) <$> _redshiftClusterParameterGroupParameters
+    ]
 
 instance FromJSON RedshiftClusterParameterGroup where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
+  parseJSON (Object obj) =
+    RedshiftClusterParameterGroup <$>
+      obj .: "Description" <*>
+      obj .: "ParameterGroupFamily" <*>
+      obj .:? "Parameters"
+  parseJSON _ = mempty
 
 -- | Constructor for 'RedshiftClusterParameterGroup' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/Resources/RedshiftClusterSecurityGroup.hs b/library-gen/Stratosphere/Resources/RedshiftClusterSecurityGroup.hs
--- a/library-gen/Stratosphere/Resources/RedshiftClusterSecurityGroup.hs
+++ b/library-gen/Stratosphere/Resources/RedshiftClusterSecurityGroup.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-clustersecuritygroup.html
 
 module Stratosphere.Resources.RedshiftClusterSecurityGroup where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -19,13 +19,20 @@
 data RedshiftClusterSecurityGroup =
   RedshiftClusterSecurityGroup
   { _redshiftClusterSecurityGroupDescription :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON RedshiftClusterSecurityGroup where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 29, omitNothingFields = True }
+  toJSON RedshiftClusterSecurityGroup{..} =
+    object $
+    catMaybes
+    [ Just ("Description" .= _redshiftClusterSecurityGroupDescription)
+    ]
 
 instance FromJSON RedshiftClusterSecurityGroup where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 29, omitNothingFields = True }
+  parseJSON (Object obj) =
+    RedshiftClusterSecurityGroup <$>
+      obj .: "Description"
+  parseJSON _ = mempty
 
 -- | Constructor for 'RedshiftClusterSecurityGroup' containing required fields
 -- | as arguments.
diff --git a/library-gen/Stratosphere/Resources/RedshiftClusterSecurityGroupIngress.hs b/library-gen/Stratosphere/Resources/RedshiftClusterSecurityGroupIngress.hs
--- a/library-gen/Stratosphere/Resources/RedshiftClusterSecurityGroupIngress.hs
+++ b/library-gen/Stratosphere/Resources/RedshiftClusterSecurityGroupIngress.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-clustersecuritygroupingress.html
 
 module Stratosphere.Resources.RedshiftClusterSecurityGroupIngress where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -22,13 +22,26 @@
   , _redshiftClusterSecurityGroupIngressClusterSecurityGroupName :: Val Text
   , _redshiftClusterSecurityGroupIngressEC2SecurityGroupName :: Maybe (Val Text)
   , _redshiftClusterSecurityGroupIngressEC2SecurityGroupOwnerId :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON RedshiftClusterSecurityGroupIngress where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 36, omitNothingFields = True }
+  toJSON RedshiftClusterSecurityGroupIngress{..} =
+    object $
+    catMaybes
+    [ ("CIDRIP" .=) <$> _redshiftClusterSecurityGroupIngressCIDRIP
+    , Just ("ClusterSecurityGroupName" .= _redshiftClusterSecurityGroupIngressClusterSecurityGroupName)
+    , ("EC2SecurityGroupName" .=) <$> _redshiftClusterSecurityGroupIngressEC2SecurityGroupName
+    , ("EC2SecurityGroupOwnerId" .=) <$> _redshiftClusterSecurityGroupIngressEC2SecurityGroupOwnerId
+    ]
 
 instance FromJSON RedshiftClusterSecurityGroupIngress where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 36, omitNothingFields = True }
+  parseJSON (Object obj) =
+    RedshiftClusterSecurityGroupIngress <$>
+      obj .:? "CIDRIP" <*>
+      obj .: "ClusterSecurityGroupName" <*>
+      obj .:? "EC2SecurityGroupName" <*>
+      obj .:? "EC2SecurityGroupOwnerId"
+  parseJSON _ = mempty
 
 -- | Constructor for 'RedshiftClusterSecurityGroupIngress' containing required
 -- | fields as arguments.
diff --git a/library-gen/Stratosphere/Resources/RedshiftClusterSubnetGroup.hs b/library-gen/Stratosphere/Resources/RedshiftClusterSubnetGroup.hs
--- a/library-gen/Stratosphere/Resources/RedshiftClusterSubnetGroup.hs
+++ b/library-gen/Stratosphere/Resources/RedshiftClusterSubnetGroup.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-clustersubnetgroup.html
 
 module Stratosphere.Resources.RedshiftClusterSubnetGroup where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   RedshiftClusterSubnetGroup
   { _redshiftClusterSubnetGroupDescription :: Val Text
   , _redshiftClusterSubnetGroupSubnetIds :: [Val Text]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON RedshiftClusterSubnetGroup where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
+  toJSON RedshiftClusterSubnetGroup{..} =
+    object $
+    catMaybes
+    [ Just ("Description" .= _redshiftClusterSubnetGroupDescription)
+    , Just ("SubnetIds" .= _redshiftClusterSubnetGroupSubnetIds)
+    ]
 
 instance FromJSON RedshiftClusterSubnetGroup where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
+  parseJSON (Object obj) =
+    RedshiftClusterSubnetGroup <$>
+      obj .: "Description" <*>
+      obj .: "SubnetIds"
+  parseJSON _ = mempty
 
 -- | Constructor for 'RedshiftClusterSubnetGroup' containing required fields
 -- | as arguments.
diff --git a/library-gen/Stratosphere/Resources/Route53HealthCheck.hs b/library-gen/Stratosphere/Resources/Route53HealthCheck.hs
--- a/library-gen/Stratosphere/Resources/Route53HealthCheck.hs
+++ b/library-gen/Stratosphere/Resources/Route53HealthCheck.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53-healthcheck.html
 
 module Stratosphere.Resources.Route53HealthCheck where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.Route53HealthCheckHealthCheckConfig
@@ -21,13 +21,22 @@
   Route53HealthCheck
   { _route53HealthCheckHealthCheckConfig :: Route53HealthCheckHealthCheckConfig
   , _route53HealthCheckHealthCheckTags :: Maybe [Route53HealthCheckHealthCheckTag]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON Route53HealthCheck where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 19, omitNothingFields = True }
+  toJSON Route53HealthCheck{..} =
+    object $
+    catMaybes
+    [ Just ("HealthCheckConfig" .= _route53HealthCheckHealthCheckConfig)
+    , ("HealthCheckTags" .=) <$> _route53HealthCheckHealthCheckTags
+    ]
 
 instance FromJSON Route53HealthCheck where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 19, omitNothingFields = True }
+  parseJSON (Object obj) =
+    Route53HealthCheck <$>
+      obj .: "HealthCheckConfig" <*>
+      obj .:? "HealthCheckTags"
+  parseJSON _ = mempty
 
 -- | Constructor for 'Route53HealthCheck' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/Route53HostedZone.hs b/library-gen/Stratosphere/Resources/Route53HostedZone.hs
--- a/library-gen/Stratosphere/Resources/Route53HostedZone.hs
+++ b/library-gen/Stratosphere/Resources/Route53HostedZone.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53-hostedzone.html
 
 module Stratosphere.Resources.Route53HostedZone where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.Route53HostedZoneHostedZoneConfig
@@ -24,13 +24,26 @@
   , _route53HostedZoneHostedZoneTags :: Maybe [Route53HostedZoneHostedZoneTag]
   , _route53HostedZoneName :: Val Text
   , _route53HostedZoneVPCs :: Maybe [Route53HostedZoneVPC]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON Route53HostedZone where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 18, omitNothingFields = True }
+  toJSON Route53HostedZone{..} =
+    object $
+    catMaybes
+    [ ("HostedZoneConfig" .=) <$> _route53HostedZoneHostedZoneConfig
+    , ("HostedZoneTags" .=) <$> _route53HostedZoneHostedZoneTags
+    , Just ("Name" .= _route53HostedZoneName)
+    , ("VPCs" .=) <$> _route53HostedZoneVPCs
+    ]
 
 instance FromJSON Route53HostedZone where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 18, omitNothingFields = True }
+  parseJSON (Object obj) =
+    Route53HostedZone <$>
+      obj .:? "HostedZoneConfig" <*>
+      obj .:? "HostedZoneTags" <*>
+      obj .: "Name" <*>
+      obj .:? "VPCs"
+  parseJSON _ = mempty
 
 -- | Constructor for 'Route53HostedZone' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/Route53RecordSet.hs b/library-gen/Stratosphere/Resources/Route53RecordSet.hs
--- a/library-gen/Stratosphere/Resources/Route53RecordSet.hs
+++ b/library-gen/Stratosphere/Resources/Route53RecordSet.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-recordset.html
 
 module Stratosphere.Resources.Route53RecordSet where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.Route53RecordSetAliasTarget
@@ -33,13 +33,46 @@
   , _route53RecordSetTTL :: Maybe (Val Text)
   , _route53RecordSetType :: Val Text
   , _route53RecordSetWeight :: Maybe (Val Integer')
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON Route53RecordSet where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
+  toJSON Route53RecordSet{..} =
+    object $
+    catMaybes
+    [ ("AliasTarget" .=) <$> _route53RecordSetAliasTarget
+    , ("Comment" .=) <$> _route53RecordSetComment
+    , ("Failover" .=) <$> _route53RecordSetFailover
+    , ("GeoLocation" .=) <$> _route53RecordSetGeoLocation
+    , ("HealthCheckId" .=) <$> _route53RecordSetHealthCheckId
+    , ("HostedZoneId" .=) <$> _route53RecordSetHostedZoneId
+    , ("HostedZoneName" .=) <$> _route53RecordSetHostedZoneName
+    , Just ("Name" .= _route53RecordSetName)
+    , ("Region" .=) <$> _route53RecordSetRegion
+    , ("ResourceRecords" .=) <$> _route53RecordSetResourceRecords
+    , ("SetIdentifier" .=) <$> _route53RecordSetSetIdentifier
+    , ("TTL" .=) <$> _route53RecordSetTTL
+    , Just ("Type" .= _route53RecordSetType)
+    , ("Weight" .=) <$> _route53RecordSetWeight
+    ]
 
 instance FromJSON Route53RecordSet where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
+  parseJSON (Object obj) =
+    Route53RecordSet <$>
+      obj .:? "AliasTarget" <*>
+      obj .:? "Comment" <*>
+      obj .:? "Failover" <*>
+      obj .:? "GeoLocation" <*>
+      obj .:? "HealthCheckId" <*>
+      obj .:? "HostedZoneId" <*>
+      obj .:? "HostedZoneName" <*>
+      obj .: "Name" <*>
+      obj .:? "Region" <*>
+      obj .:? "ResourceRecords" <*>
+      obj .:? "SetIdentifier" <*>
+      obj .:? "TTL" <*>
+      obj .: "Type" <*>
+      obj .:? "Weight"
+  parseJSON _ = mempty
 
 -- | Constructor for 'Route53RecordSet' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/Route53RecordSetGroup.hs b/library-gen/Stratosphere/Resources/Route53RecordSetGroup.hs
--- a/library-gen/Stratosphere/Resources/Route53RecordSetGroup.hs
+++ b/library-gen/Stratosphere/Resources/Route53RecordSetGroup.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53-recordsetgroup.html
 
 module Stratosphere.Resources.Route53RecordSetGroup where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.Route53RecordSetGroupRecordSet
@@ -22,13 +22,26 @@
   , _route53RecordSetGroupHostedZoneId :: Maybe (Val Text)
   , _route53RecordSetGroupHostedZoneName :: Maybe (Val Text)
   , _route53RecordSetGroupRecordSets :: Maybe [Route53RecordSetGroupRecordSet]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON Route53RecordSetGroup where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 22, omitNothingFields = True }
+  toJSON Route53RecordSetGroup{..} =
+    object $
+    catMaybes
+    [ ("Comment" .=) <$> _route53RecordSetGroupComment
+    , ("HostedZoneId" .=) <$> _route53RecordSetGroupHostedZoneId
+    , ("HostedZoneName" .=) <$> _route53RecordSetGroupHostedZoneName
+    , ("RecordSets" .=) <$> _route53RecordSetGroupRecordSets
+    ]
 
 instance FromJSON Route53RecordSetGroup where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 22, omitNothingFields = True }
+  parseJSON (Object obj) =
+    Route53RecordSetGroup <$>
+      obj .:? "Comment" <*>
+      obj .:? "HostedZoneId" <*>
+      obj .:? "HostedZoneName" <*>
+      obj .:? "RecordSets"
+  parseJSON _ = mempty
 
 -- | Constructor for 'Route53RecordSetGroup' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/S3Bucket.hs b/library-gen/Stratosphere/Resources/S3Bucket.hs
--- a/library-gen/Stratosphere/Resources/S3Bucket.hs
+++ b/library-gen/Stratosphere/Resources/S3Bucket.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket.html
 
 module Stratosphere.Resources.S3Bucket where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.Types
@@ -36,13 +36,38 @@
   , _s3BucketTags :: Maybe [Tag]
   , _s3BucketVersioningConfiguration :: Maybe S3BucketVersioningConfiguration
   , _s3BucketWebsiteConfiguration :: Maybe S3BucketWebsiteConfiguration
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON S3Bucket where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 9, omitNothingFields = True }
+  toJSON S3Bucket{..} =
+    object $
+    catMaybes
+    [ ("AccessControl" .=) <$> _s3BucketAccessControl
+    , ("BucketName" .=) <$> _s3BucketBucketName
+    , ("CorsConfiguration" .=) <$> _s3BucketCorsConfiguration
+    , ("LifecycleConfiguration" .=) <$> _s3BucketLifecycleConfiguration
+    , ("LoggingConfiguration" .=) <$> _s3BucketLoggingConfiguration
+    , ("NotificationConfiguration" .=) <$> _s3BucketNotificationConfiguration
+    , ("ReplicationConfiguration" .=) <$> _s3BucketReplicationConfiguration
+    , ("Tags" .=) <$> _s3BucketTags
+    , ("VersioningConfiguration" .=) <$> _s3BucketVersioningConfiguration
+    , ("WebsiteConfiguration" .=) <$> _s3BucketWebsiteConfiguration
+    ]
 
 instance FromJSON S3Bucket where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 9, omitNothingFields = True }
+  parseJSON (Object obj) =
+    S3Bucket <$>
+      obj .:? "AccessControl" <*>
+      obj .:? "BucketName" <*>
+      obj .:? "CorsConfiguration" <*>
+      obj .:? "LifecycleConfiguration" <*>
+      obj .:? "LoggingConfiguration" <*>
+      obj .:? "NotificationConfiguration" <*>
+      obj .:? "ReplicationConfiguration" <*>
+      obj .:? "Tags" <*>
+      obj .:? "VersioningConfiguration" <*>
+      obj .:? "WebsiteConfiguration"
+  parseJSON _ = mempty
 
 -- | Constructor for 'S3Bucket' containing required fields as arguments.
 s3Bucket
diff --git a/library-gen/Stratosphere/Resources/S3BucketPolicy.hs b/library-gen/Stratosphere/Resources/S3BucketPolicy.hs
--- a/library-gen/Stratosphere/Resources/S3BucketPolicy.hs
+++ b/library-gen/Stratosphere/Resources/S3BucketPolicy.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-policy.html
 
 module Stratosphere.Resources.S3BucketPolicy where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   S3BucketPolicy
   { _s3BucketPolicyBucket :: Val Text
   , _s3BucketPolicyPolicyDocument :: Object
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON S3BucketPolicy where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 15, omitNothingFields = True }
+  toJSON S3BucketPolicy{..} =
+    object $
+    catMaybes
+    [ Just ("Bucket" .= _s3BucketPolicyBucket)
+    , Just ("PolicyDocument" .= _s3BucketPolicyPolicyDocument)
+    ]
 
 instance FromJSON S3BucketPolicy where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 15, omitNothingFields = True }
+  parseJSON (Object obj) =
+    S3BucketPolicy <$>
+      obj .: "Bucket" <*>
+      obj .: "PolicyDocument"
+  parseJSON _ = mempty
 
 -- | Constructor for 'S3BucketPolicy' containing required fields as arguments.
 s3BucketPolicy
diff --git a/library-gen/Stratosphere/Resources/SDBDomain.hs b/library-gen/Stratosphere/Resources/SDBDomain.hs
--- a/library-gen/Stratosphere/Resources/SDBDomain.hs
+++ b/library-gen/Stratosphere/Resources/SDBDomain.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-simpledb.html
 
 module Stratosphere.Resources.SDBDomain where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -19,13 +19,20 @@
 data SDBDomain =
   SDBDomain
   { _sDBDomainDescription :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON SDBDomain where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 10, omitNothingFields = True }
+  toJSON SDBDomain{..} =
+    object $
+    catMaybes
+    [ ("Description" .=) <$> _sDBDomainDescription
+    ]
 
 instance FromJSON SDBDomain where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 10, omitNothingFields = True }
+  parseJSON (Object obj) =
+    SDBDomain <$>
+      obj .:? "Description"
+  parseJSON _ = mempty
 
 -- | Constructor for 'SDBDomain' containing required fields as arguments.
 sdbDomain
diff --git a/library-gen/Stratosphere/Resources/SNSSubscription.hs b/library-gen/Stratosphere/Resources/SNSSubscription.hs
--- a/library-gen/Stratosphere/Resources/SNSSubscription.hs
+++ b/library-gen/Stratosphere/Resources/SNSSubscription.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sns-subscription.html
 
 module Stratosphere.Resources.SNSSubscription where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.Types
@@ -21,13 +21,24 @@
   { _sNSSubscriptionEndpoint :: Maybe (Val Text)
   , _sNSSubscriptionProtocol :: Maybe (Val SNSProtocol)
   , _sNSSubscriptionTopicArn :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON SNSSubscription where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 16, omitNothingFields = True }
+  toJSON SNSSubscription{..} =
+    object $
+    catMaybes
+    [ ("Endpoint" .=) <$> _sNSSubscriptionEndpoint
+    , ("Protocol" .=) <$> _sNSSubscriptionProtocol
+    , ("TopicArn" .=) <$> _sNSSubscriptionTopicArn
+    ]
 
 instance FromJSON SNSSubscription where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 16, omitNothingFields = True }
+  parseJSON (Object obj) =
+    SNSSubscription <$>
+      obj .:? "Endpoint" <*>
+      obj .:? "Protocol" <*>
+      obj .:? "TopicArn"
+  parseJSON _ = mempty
 
 -- | Constructor for 'SNSSubscription' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/SNSTopic.hs b/library-gen/Stratosphere/Resources/SNSTopic.hs
--- a/library-gen/Stratosphere/Resources/SNSTopic.hs
+++ b/library-gen/Stratosphere/Resources/SNSTopic.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sns-topic.html
 
 module Stratosphere.Resources.SNSTopic where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.SNSTopicSubscription
@@ -21,13 +21,24 @@
   { _sNSTopicDisplayName :: Maybe (Val Text)
   , _sNSTopicSubscription :: Maybe [SNSTopicSubscription]
   , _sNSTopicTopicName :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON SNSTopic where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 9, omitNothingFields = True }
+  toJSON SNSTopic{..} =
+    object $
+    catMaybes
+    [ ("DisplayName" .=) <$> _sNSTopicDisplayName
+    , ("Subscription" .=) <$> _sNSTopicSubscription
+    , ("TopicName" .=) <$> _sNSTopicTopicName
+    ]
 
 instance FromJSON SNSTopic where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 9, omitNothingFields = True }
+  parseJSON (Object obj) =
+    SNSTopic <$>
+      obj .:? "DisplayName" <*>
+      obj .:? "Subscription" <*>
+      obj .:? "TopicName"
+  parseJSON _ = mempty
 
 -- | Constructor for 'SNSTopic' containing required fields as arguments.
 snsTopic
diff --git a/library-gen/Stratosphere/Resources/SNSTopicPolicy.hs b/library-gen/Stratosphere/Resources/SNSTopicPolicy.hs
--- a/library-gen/Stratosphere/Resources/SNSTopicPolicy.hs
+++ b/library-gen/Stratosphere/Resources/SNSTopicPolicy.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sns-policy.html
 
 module Stratosphere.Resources.SNSTopicPolicy where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   SNSTopicPolicy
   { _sNSTopicPolicyPolicyDocument :: Object
   , _sNSTopicPolicyTopics :: [Val Text]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON SNSTopicPolicy where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 15, omitNothingFields = True }
+  toJSON SNSTopicPolicy{..} =
+    object $
+    catMaybes
+    [ Just ("PolicyDocument" .= _sNSTopicPolicyPolicyDocument)
+    , Just ("Topics" .= _sNSTopicPolicyTopics)
+    ]
 
 instance FromJSON SNSTopicPolicy where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 15, omitNothingFields = True }
+  parseJSON (Object obj) =
+    SNSTopicPolicy <$>
+      obj .: "PolicyDocument" <*>
+      obj .: "Topics"
+  parseJSON _ = mempty
 
 -- | Constructor for 'SNSTopicPolicy' containing required fields as arguments.
 snsTopicPolicy
diff --git a/library-gen/Stratosphere/Resources/SQSQueue.hs b/library-gen/Stratosphere/Resources/SQSQueue.hs
--- a/library-gen/Stratosphere/Resources/SQSQueue.hs
+++ b/library-gen/Stratosphere/Resources/SQSQueue.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sqs-queues.html
 
 module Stratosphere.Resources.SQSQueue where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -25,13 +25,32 @@
   , _sQSQueueReceiveMessageWaitTimeSeconds :: Maybe (Val Integer')
   , _sQSQueueRedrivePolicy :: Maybe Object
   , _sQSQueueVisibilityTimeout :: Maybe (Val Integer')
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON SQSQueue where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 9, omitNothingFields = True }
+  toJSON SQSQueue{..} =
+    object $
+    catMaybes
+    [ ("DelaySeconds" .=) <$> _sQSQueueDelaySeconds
+    , ("MaximumMessageSize" .=) <$> _sQSQueueMaximumMessageSize
+    , ("MessageRetentionPeriod" .=) <$> _sQSQueueMessageRetentionPeriod
+    , ("QueueName" .=) <$> _sQSQueueQueueName
+    , ("ReceiveMessageWaitTimeSeconds" .=) <$> _sQSQueueReceiveMessageWaitTimeSeconds
+    , ("RedrivePolicy" .=) <$> _sQSQueueRedrivePolicy
+    , ("VisibilityTimeout" .=) <$> _sQSQueueVisibilityTimeout
+    ]
 
 instance FromJSON SQSQueue where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 9, omitNothingFields = True }
+  parseJSON (Object obj) =
+    SQSQueue <$>
+      obj .:? "DelaySeconds" <*>
+      obj .:? "MaximumMessageSize" <*>
+      obj .:? "MessageRetentionPeriod" <*>
+      obj .:? "QueueName" <*>
+      obj .:? "ReceiveMessageWaitTimeSeconds" <*>
+      obj .:? "RedrivePolicy" <*>
+      obj .:? "VisibilityTimeout"
+  parseJSON _ = mempty
 
 -- | Constructor for 'SQSQueue' containing required fields as arguments.
 sqsQueue
diff --git a/library-gen/Stratosphere/Resources/SQSQueuePolicy.hs b/library-gen/Stratosphere/Resources/SQSQueuePolicy.hs
--- a/library-gen/Stratosphere/Resources/SQSQueuePolicy.hs
+++ b/library-gen/Stratosphere/Resources/SQSQueuePolicy.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sqs-policy.html
 
 module Stratosphere.Resources.SQSQueuePolicy where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   SQSQueuePolicy
   { _sQSQueuePolicyPolicyDocument :: Object
   , _sQSQueuePolicyQueues :: [Val Text]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON SQSQueuePolicy where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 15, omitNothingFields = True }
+  toJSON SQSQueuePolicy{..} =
+    object $
+    catMaybes
+    [ Just ("PolicyDocument" .= _sQSQueuePolicyPolicyDocument)
+    , Just ("Queues" .= _sQSQueuePolicyQueues)
+    ]
 
 instance FromJSON SQSQueuePolicy where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 15, omitNothingFields = True }
+  parseJSON (Object obj) =
+    SQSQueuePolicy <$>
+      obj .: "PolicyDocument" <*>
+      obj .: "Queues"
+  parseJSON _ = mempty
 
 -- | Constructor for 'SQSQueuePolicy' containing required fields as arguments.
 sqsQueuePolicy
diff --git a/library-gen/Stratosphere/Resources/SSMAssociation.hs b/library-gen/Stratosphere/Resources/SSMAssociation.hs
--- a/library-gen/Stratosphere/Resources/SSMAssociation.hs
+++ b/library-gen/Stratosphere/Resources/SSMAssociation.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ssm-association.html
 
 module Stratosphere.Resources.SSMAssociation where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.SSMAssociationParameterValues
@@ -25,13 +25,30 @@
   , _sSMAssociationParameters :: Maybe Object
   , _sSMAssociationScheduleExpression :: Maybe (Val Text)
   , _sSMAssociationTargets :: Maybe [SSMAssociationTarget]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON SSMAssociation where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 15, omitNothingFields = True }
+  toJSON SSMAssociation{..} =
+    object $
+    catMaybes
+    [ ("DocumentVersion" .=) <$> _sSMAssociationDocumentVersion
+    , ("InstanceId" .=) <$> _sSMAssociationInstanceId
+    , Just ("Name" .= _sSMAssociationName)
+    , ("Parameters" .=) <$> _sSMAssociationParameters
+    , ("ScheduleExpression" .=) <$> _sSMAssociationScheduleExpression
+    , ("Targets" .=) <$> _sSMAssociationTargets
+    ]
 
 instance FromJSON SSMAssociation where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 15, omitNothingFields = True }
+  parseJSON (Object obj) =
+    SSMAssociation <$>
+      obj .:? "DocumentVersion" <*>
+      obj .:? "InstanceId" <*>
+      obj .: "Name" <*>
+      obj .:? "Parameters" <*>
+      obj .:? "ScheduleExpression" <*>
+      obj .:? "Targets"
+  parseJSON _ = mempty
 
 -- | Constructor for 'SSMAssociation' containing required fields as arguments.
 ssmAssociation
diff --git a/library-gen/Stratosphere/Resources/SSMDocument.hs b/library-gen/Stratosphere/Resources/SSMDocument.hs
--- a/library-gen/Stratosphere/Resources/SSMDocument.hs
+++ b/library-gen/Stratosphere/Resources/SSMDocument.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ssm-document.html
 
 module Stratosphere.Resources.SSMDocument where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -20,13 +20,22 @@
   SSMDocument
   { _sSMDocumentContent :: Object
   , _sSMDocumentDocumentType :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON SSMDocument where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 12, omitNothingFields = True }
+  toJSON SSMDocument{..} =
+    object $
+    catMaybes
+    [ Just ("Content" .= _sSMDocumentContent)
+    , ("DocumentType" .=) <$> _sSMDocumentDocumentType
+    ]
 
 instance FromJSON SSMDocument where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 12, omitNothingFields = True }
+  parseJSON (Object obj) =
+    SSMDocument <$>
+      obj .: "Content" <*>
+      obj .:? "DocumentType"
+  parseJSON _ = mempty
 
 -- | Constructor for 'SSMDocument' containing required fields as arguments.
 ssmDocument
diff --git a/library-gen/Stratosphere/Resources/WAFByteMatchSet.hs b/library-gen/Stratosphere/Resources/WAFByteMatchSet.hs
--- a/library-gen/Stratosphere/Resources/WAFByteMatchSet.hs
+++ b/library-gen/Stratosphere/Resources/WAFByteMatchSet.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-waf-bytematchset.html
 
 module Stratosphere.Resources.WAFByteMatchSet where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.WAFByteMatchSetByteMatchTuple
@@ -20,13 +20,22 @@
   WAFByteMatchSet
   { _wAFByteMatchSetByteMatchTuples :: Maybe [WAFByteMatchSetByteMatchTuple]
   , _wAFByteMatchSetName :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON WAFByteMatchSet where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 16, omitNothingFields = True }
+  toJSON WAFByteMatchSet{..} =
+    object $
+    catMaybes
+    [ ("ByteMatchTuples" .=) <$> _wAFByteMatchSetByteMatchTuples
+    , Just ("Name" .= _wAFByteMatchSetName)
+    ]
 
 instance FromJSON WAFByteMatchSet where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 16, omitNothingFields = True }
+  parseJSON (Object obj) =
+    WAFByteMatchSet <$>
+      obj .:? "ByteMatchTuples" <*>
+      obj .: "Name"
+  parseJSON _ = mempty
 
 -- | Constructor for 'WAFByteMatchSet' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/WAFIPSet.hs b/library-gen/Stratosphere/Resources/WAFIPSet.hs
--- a/library-gen/Stratosphere/Resources/WAFIPSet.hs
+++ b/library-gen/Stratosphere/Resources/WAFIPSet.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-waf-ipset.html
 
 module Stratosphere.Resources.WAFIPSet where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.WAFIPSetIPSetDescriptor
@@ -20,13 +20,22 @@
   WAFIPSet
   { _wAFIPSetIPSetDescriptors :: Maybe [WAFIPSetIPSetDescriptor]
   , _wAFIPSetName :: Val Text
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON WAFIPSet where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 9, omitNothingFields = True }
+  toJSON WAFIPSet{..} =
+    object $
+    catMaybes
+    [ ("IPSetDescriptors" .=) <$> _wAFIPSetIPSetDescriptors
+    , Just ("Name" .= _wAFIPSetName)
+    ]
 
 instance FromJSON WAFIPSet where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 9, omitNothingFields = True }
+  parseJSON (Object obj) =
+    WAFIPSet <$>
+      obj .:? "IPSetDescriptors" <*>
+      obj .: "Name"
+  parseJSON _ = mempty
 
 -- | Constructor for 'WAFIPSet' containing required fields as arguments.
 wafipSet
diff --git a/library-gen/Stratosphere/Resources/WAFRule.hs b/library-gen/Stratosphere/Resources/WAFRule.hs
--- a/library-gen/Stratosphere/Resources/WAFRule.hs
+++ b/library-gen/Stratosphere/Resources/WAFRule.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-waf-rule.html
 
 module Stratosphere.Resources.WAFRule where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.WAFRulePredicate
@@ -21,13 +21,24 @@
   { _wAFRuleMetricName :: Val Text
   , _wAFRuleName :: Val Text
   , _wAFRulePredicates :: Maybe [WAFRulePredicate]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON WAFRule where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 8, omitNothingFields = True }
+  toJSON WAFRule{..} =
+    object $
+    catMaybes
+    [ Just ("MetricName" .= _wAFRuleMetricName)
+    , Just ("Name" .= _wAFRuleName)
+    , ("Predicates" .=) <$> _wAFRulePredicates
+    ]
 
 instance FromJSON WAFRule where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 8, omitNothingFields = True }
+  parseJSON (Object obj) =
+    WAFRule <$>
+      obj .: "MetricName" <*>
+      obj .: "Name" <*>
+      obj .:? "Predicates"
+  parseJSON _ = mempty
 
 -- | Constructor for 'WAFRule' containing required fields as arguments.
 wafRule
diff --git a/library-gen/Stratosphere/Resources/WAFSizeConstraintSet.hs b/library-gen/Stratosphere/Resources/WAFSizeConstraintSet.hs
--- a/library-gen/Stratosphere/Resources/WAFSizeConstraintSet.hs
+++ b/library-gen/Stratosphere/Resources/WAFSizeConstraintSet.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-waf-sizeconstraintset.html
 
 module Stratosphere.Resources.WAFSizeConstraintSet where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.WAFSizeConstraintSetSizeConstraint
@@ -20,13 +20,22 @@
   WAFSizeConstraintSet
   { _wAFSizeConstraintSetName :: Val Text
   , _wAFSizeConstraintSetSizeConstraints :: [WAFSizeConstraintSetSizeConstraint]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON WAFSizeConstraintSet where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 21, omitNothingFields = True }
+  toJSON WAFSizeConstraintSet{..} =
+    object $
+    catMaybes
+    [ Just ("Name" .= _wAFSizeConstraintSetName)
+    , Just ("SizeConstraints" .= _wAFSizeConstraintSetSizeConstraints)
+    ]
 
 instance FromJSON WAFSizeConstraintSet where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 21, omitNothingFields = True }
+  parseJSON (Object obj) =
+    WAFSizeConstraintSet <$>
+      obj .: "Name" <*>
+      obj .: "SizeConstraints"
+  parseJSON _ = mempty
 
 -- | Constructor for 'WAFSizeConstraintSet' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/WAFSqlInjectionMatchSet.hs b/library-gen/Stratosphere/Resources/WAFSqlInjectionMatchSet.hs
--- a/library-gen/Stratosphere/Resources/WAFSqlInjectionMatchSet.hs
+++ b/library-gen/Stratosphere/Resources/WAFSqlInjectionMatchSet.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-waf-sqlinjectionmatchset.html
 
 module Stratosphere.Resources.WAFSqlInjectionMatchSet where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.WAFSqlInjectionMatchSetSqlInjectionMatchTuple
@@ -20,13 +20,22 @@
   WAFSqlInjectionMatchSet
   { _wAFSqlInjectionMatchSetName :: Val Text
   , _wAFSqlInjectionMatchSetSqlInjectionMatchTuples :: Maybe [WAFSqlInjectionMatchSetSqlInjectionMatchTuple]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON WAFSqlInjectionMatchSet where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 24, omitNothingFields = True }
+  toJSON WAFSqlInjectionMatchSet{..} =
+    object $
+    catMaybes
+    [ Just ("Name" .= _wAFSqlInjectionMatchSetName)
+    , ("SqlInjectionMatchTuples" .=) <$> _wAFSqlInjectionMatchSetSqlInjectionMatchTuples
+    ]
 
 instance FromJSON WAFSqlInjectionMatchSet where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 24, omitNothingFields = True }
+  parseJSON (Object obj) =
+    WAFSqlInjectionMatchSet <$>
+      obj .: "Name" <*>
+      obj .:? "SqlInjectionMatchTuples"
+  parseJSON _ = mempty
 
 -- | Constructor for 'WAFSqlInjectionMatchSet' containing required fields as
 -- | arguments.
diff --git a/library-gen/Stratosphere/Resources/WAFWebACL.hs b/library-gen/Stratosphere/Resources/WAFWebACL.hs
--- a/library-gen/Stratosphere/Resources/WAFWebACL.hs
+++ b/library-gen/Stratosphere/Resources/WAFWebACL.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-waf-webacl.html
 
 module Stratosphere.Resources.WAFWebACL where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.WAFWebACLWafAction
@@ -23,13 +23,26 @@
   , _wAFWebACLMetricName :: Val Text
   , _wAFWebACLName :: Val Text
   , _wAFWebACLRules :: Maybe [WAFWebACLActivatedRule]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON WAFWebACL where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 10, omitNothingFields = True }
+  toJSON WAFWebACL{..} =
+    object $
+    catMaybes
+    [ Just ("DefaultAction" .= _wAFWebACLDefaultAction)
+    , Just ("MetricName" .= _wAFWebACLMetricName)
+    , Just ("Name" .= _wAFWebACLName)
+    , ("Rules" .=) <$> _wAFWebACLRules
+    ]
 
 instance FromJSON WAFWebACL where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 10, omitNothingFields = True }
+  parseJSON (Object obj) =
+    WAFWebACL <$>
+      obj .: "DefaultAction" <*>
+      obj .: "MetricName" <*>
+      obj .: "Name" <*>
+      obj .:? "Rules"
+  parseJSON _ = mempty
 
 -- | Constructor for 'WAFWebACL' containing required fields as arguments.
 wafWebACL
diff --git a/library-gen/Stratosphere/Resources/WAFXssMatchSet.hs b/library-gen/Stratosphere/Resources/WAFXssMatchSet.hs
--- a/library-gen/Stratosphere/Resources/WAFXssMatchSet.hs
+++ b/library-gen/Stratosphere/Resources/WAFXssMatchSet.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-waf-xssmatchset.html
 
 module Stratosphere.Resources.WAFXssMatchSet where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.WAFXssMatchSetXssMatchTuple
@@ -20,13 +20,22 @@
   WAFXssMatchSet
   { _wAFXssMatchSetName :: Val Text
   , _wAFXssMatchSetXssMatchTuples :: [WAFXssMatchSetXssMatchTuple]
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON WAFXssMatchSet where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 15, omitNothingFields = True }
+  toJSON WAFXssMatchSet{..} =
+    object $
+    catMaybes
+    [ Just ("Name" .= _wAFXssMatchSetName)
+    , Just ("XssMatchTuples" .= _wAFXssMatchSetXssMatchTuples)
+    ]
 
 instance FromJSON WAFXssMatchSet where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 15, omitNothingFields = True }
+  parseJSON (Object obj) =
+    WAFXssMatchSet <$>
+      obj .: "Name" <*>
+      obj .: "XssMatchTuples"
+  parseJSON _ = mempty
 
 -- | Constructor for 'WAFXssMatchSet' containing required fields as arguments.
 wafXssMatchSet
diff --git a/library-gen/Stratosphere/Resources/WorkSpacesWorkspace.hs b/library-gen/Stratosphere/Resources/WorkSpacesWorkspace.hs
--- a/library-gen/Stratosphere/Resources/WorkSpacesWorkspace.hs
+++ b/library-gen/Stratosphere/Resources/WorkSpacesWorkspace.hs
@@ -1,15 +1,15 @@
-{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-workspaces-workspace.html
 
 module Stratosphere.Resources.WorkSpacesWorkspace where
 
-import Control.Lens
+import Control.Lens hiding ((.=))
 import Data.Aeson
-import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
 import Data.Text
-import GHC.Generics
 
 import Stratosphere.Values
 
@@ -24,13 +24,30 @@
   , _workSpacesWorkspaceUserName :: Val Text
   , _workSpacesWorkspaceUserVolumeEncryptionEnabled :: Maybe (Val Bool')
   , _workSpacesWorkspaceVolumeEncryptionKey :: Maybe (Val Text)
-  } deriving (Show, Eq, Generic)
+  } deriving (Show, Eq)
 
 instance ToJSON WorkSpacesWorkspace where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 20, omitNothingFields = True }
+  toJSON WorkSpacesWorkspace{..} =
+    object $
+    catMaybes
+    [ Just ("BundleId" .= _workSpacesWorkspaceBundleId)
+    , Just ("DirectoryId" .= _workSpacesWorkspaceDirectoryId)
+    , ("RootVolumeEncryptionEnabled" .=) <$> _workSpacesWorkspaceRootVolumeEncryptionEnabled
+    , Just ("UserName" .= _workSpacesWorkspaceUserName)
+    , ("UserVolumeEncryptionEnabled" .=) <$> _workSpacesWorkspaceUserVolumeEncryptionEnabled
+    , ("VolumeEncryptionKey" .=) <$> _workSpacesWorkspaceVolumeEncryptionKey
+    ]
 
 instance FromJSON WorkSpacesWorkspace where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 20, omitNothingFields = True }
+  parseJSON (Object obj) =
+    WorkSpacesWorkspace <$>
+      obj .: "BundleId" <*>
+      obj .: "DirectoryId" <*>
+      obj .:? "RootVolumeEncryptionEnabled" <*>
+      obj .: "UserName" <*>
+      obj .:? "UserVolumeEncryptionEnabled" <*>
+      obj .:? "VolumeEncryptionKey"
+  parseJSON _ = mempty
 
 -- | Constructor for 'WorkSpacesWorkspace' containing required fields as
 -- | arguments.
diff --git a/stack.yaml b/stack.yaml
--- a/stack.yaml
+++ b/stack.yaml
@@ -1,4 +1,4 @@
-resolver: nightly-2016-11-26
+resolver: nightly-2017-03-04
 packages:
   - '.'
 extra-deps: []
diff --git a/stratosphere.cabal b/stratosphere.cabal
--- a/stratosphere.cabal
+++ b/stratosphere.cabal
@@ -3,7 +3,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           stratosphere
-version:        0.4.0
+version:        0.4.1
 synopsis:       EDSL for AWS CloudFormation
 description:    EDSL for AWS CloudFormation
 category:       AWS, Cloud
diff --git a/tests/HLint.hs b/tests/HLint.hs
--- a/tests/HLint.hs
+++ b/tests/HLint.hs
@@ -9,6 +9,7 @@
   , "library-gen"
   , "tests"
   , "-i", "Use newtype instead of data"
+  , "-i", "Unused LANGUAGE pragma"
   ]
 
 main :: IO ()
