diff --git a/LICENSE.md b/LICENSE.md
new file mode 100644
--- /dev/null
+++ b/LICENSE.md
@@ -0,0 +1,20 @@
+Copyright (c) 2016 David Reaver
+Copyright (c) 2022 Markus Schirp
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/gen/Stratosphere/CE/AnomalyMonitor.hs b/gen/Stratosphere/CE/AnomalyMonitor.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CE/AnomalyMonitor.hs
@@ -0,0 +1,74 @@
+module Stratosphere.CE.AnomalyMonitor (
+        module Exports, AnomalyMonitor(..), mkAnomalyMonitor
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CE.AnomalyMonitor.ResourceTagProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AnomalyMonitor
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ce-anomalymonitor.html>
+    AnomalyMonitor {haddock_workaround_ :: (),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ce-anomalymonitor.html#cfn-ce-anomalymonitor-monitordimension>
+                    monitorDimension :: (Prelude.Maybe (Value Prelude.Text)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ce-anomalymonitor.html#cfn-ce-anomalymonitor-monitorname>
+                    monitorName :: (Value Prelude.Text),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ce-anomalymonitor.html#cfn-ce-anomalymonitor-monitorspecification>
+                    monitorSpecification :: (Prelude.Maybe (Value Prelude.Text)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ce-anomalymonitor.html#cfn-ce-anomalymonitor-monitortype>
+                    monitorType :: (Value Prelude.Text),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ce-anomalymonitor.html#cfn-ce-anomalymonitor-resourcetags>
+                    resourceTags :: (Prelude.Maybe [ResourceTagProperty])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAnomalyMonitor ::
+  Value Prelude.Text -> Value Prelude.Text -> AnomalyMonitor
+mkAnomalyMonitor monitorName monitorType
+  = AnomalyMonitor
+      {haddock_workaround_ = (), monitorName = monitorName,
+       monitorType = monitorType, monitorDimension = Prelude.Nothing,
+       monitorSpecification = Prelude.Nothing,
+       resourceTags = Prelude.Nothing}
+instance ToResourceProperties AnomalyMonitor where
+  toResourceProperties AnomalyMonitor {..}
+    = ResourceProperties
+        {awsType = "AWS::CE::AnomalyMonitor", supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["MonitorName" JSON..= monitorName,
+                            "MonitorType" JSON..= monitorType]
+                           (Prelude.catMaybes
+                              [(JSON..=) "MonitorDimension" Prelude.<$> monitorDimension,
+                               (JSON..=) "MonitorSpecification" Prelude.<$> monitorSpecification,
+                               (JSON..=) "ResourceTags" Prelude.<$> resourceTags]))}
+instance JSON.ToJSON AnomalyMonitor where
+  toJSON AnomalyMonitor {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["MonitorName" JSON..= monitorName,
+               "MonitorType" JSON..= monitorType]
+              (Prelude.catMaybes
+                 [(JSON..=) "MonitorDimension" Prelude.<$> monitorDimension,
+                  (JSON..=) "MonitorSpecification" Prelude.<$> monitorSpecification,
+                  (JSON..=) "ResourceTags" Prelude.<$> resourceTags])))
+instance Property "MonitorDimension" AnomalyMonitor where
+  type PropertyType "MonitorDimension" AnomalyMonitor = Value Prelude.Text
+  set newValue AnomalyMonitor {..}
+    = AnomalyMonitor {monitorDimension = Prelude.pure newValue, ..}
+instance Property "MonitorName" AnomalyMonitor where
+  type PropertyType "MonitorName" AnomalyMonitor = Value Prelude.Text
+  set newValue AnomalyMonitor {..}
+    = AnomalyMonitor {monitorName = newValue, ..}
+instance Property "MonitorSpecification" AnomalyMonitor where
+  type PropertyType "MonitorSpecification" AnomalyMonitor = Value Prelude.Text
+  set newValue AnomalyMonitor {..}
+    = AnomalyMonitor {monitorSpecification = Prelude.pure newValue, ..}
+instance Property "MonitorType" AnomalyMonitor where
+  type PropertyType "MonitorType" AnomalyMonitor = Value Prelude.Text
+  set newValue AnomalyMonitor {..}
+    = AnomalyMonitor {monitorType = newValue, ..}
+instance Property "ResourceTags" AnomalyMonitor where
+  type PropertyType "ResourceTags" AnomalyMonitor = [ResourceTagProperty]
+  set newValue AnomalyMonitor {..}
+    = AnomalyMonitor {resourceTags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CE/AnomalyMonitor/ResourceTagProperty.hs b/gen/Stratosphere/CE/AnomalyMonitor/ResourceTagProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CE/AnomalyMonitor/ResourceTagProperty.hs
@@ -0,0 +1,38 @@
+module Stratosphere.CE.AnomalyMonitor.ResourceTagProperty (
+        ResourceTagProperty(..), mkResourceTagProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ResourceTagProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ce-anomalymonitor-resourcetag.html>
+    ResourceTagProperty {haddock_workaround_ :: (),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ce-anomalymonitor-resourcetag.html#cfn-ce-anomalymonitor-resourcetag-key>
+                         key :: (Value Prelude.Text),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ce-anomalymonitor-resourcetag.html#cfn-ce-anomalymonitor-resourcetag-value>
+                         value :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkResourceTagProperty ::
+  Value Prelude.Text -> Value Prelude.Text -> ResourceTagProperty
+mkResourceTagProperty key value
+  = ResourceTagProperty
+      {haddock_workaround_ = (), key = key, value = value}
+instance ToResourceProperties ResourceTagProperty where
+  toResourceProperties ResourceTagProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CE::AnomalyMonitor.ResourceTag",
+         supportsTags = Prelude.False,
+         properties = ["Key" JSON..= key, "Value" JSON..= value]}
+instance JSON.ToJSON ResourceTagProperty where
+  toJSON ResourceTagProperty {..}
+    = JSON.object ["Key" JSON..= key, "Value" JSON..= value]
+instance Property "Key" ResourceTagProperty where
+  type PropertyType "Key" ResourceTagProperty = Value Prelude.Text
+  set newValue ResourceTagProperty {..}
+    = ResourceTagProperty {key = newValue, ..}
+instance Property "Value" ResourceTagProperty where
+  type PropertyType "Value" ResourceTagProperty = Value Prelude.Text
+  set newValue ResourceTagProperty {..}
+    = ResourceTagProperty {value = newValue, ..}
diff --git a/gen/Stratosphere/CE/AnomalyMonitor/ResourceTagProperty.hs-boot b/gen/Stratosphere/CE/AnomalyMonitor/ResourceTagProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CE/AnomalyMonitor/ResourceTagProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CE.AnomalyMonitor.ResourceTagProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ResourceTagProperty :: Prelude.Type
+instance ToResourceProperties ResourceTagProperty
+instance Prelude.Eq ResourceTagProperty
+instance Prelude.Show ResourceTagProperty
+instance JSON.ToJSON ResourceTagProperty
diff --git a/gen/Stratosphere/CE/AnomalySubscription.hs b/gen/Stratosphere/CE/AnomalySubscription.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CE/AnomalySubscription.hs
@@ -0,0 +1,101 @@
+module Stratosphere.CE.AnomalySubscription (
+        module Exports, AnomalySubscription(..), mkAnomalySubscription
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CE.AnomalySubscription.ResourceTagProperty as Exports
+import {-# SOURCE #-} Stratosphere.CE.AnomalySubscription.SubscriberProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AnomalySubscription
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ce-anomalysubscription.html>
+    AnomalySubscription {haddock_workaround_ :: (),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ce-anomalysubscription.html#cfn-ce-anomalysubscription-frequency>
+                         frequency :: (Value Prelude.Text),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ce-anomalysubscription.html#cfn-ce-anomalysubscription-monitorarnlist>
+                         monitorArnList :: (ValueList Prelude.Text),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ce-anomalysubscription.html#cfn-ce-anomalysubscription-resourcetags>
+                         resourceTags :: (Prelude.Maybe [ResourceTagProperty]),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ce-anomalysubscription.html#cfn-ce-anomalysubscription-subscribers>
+                         subscribers :: [SubscriberProperty],
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ce-anomalysubscription.html#cfn-ce-anomalysubscription-subscriptionname>
+                         subscriptionName :: (Value Prelude.Text),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ce-anomalysubscription.html#cfn-ce-anomalysubscription-threshold>
+                         threshold :: (Prelude.Maybe (Value Prelude.Double)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ce-anomalysubscription.html#cfn-ce-anomalysubscription-thresholdexpression>
+                         thresholdExpression :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAnomalySubscription ::
+  Value Prelude.Text
+  -> ValueList Prelude.Text
+     -> [SubscriberProperty]
+        -> Value Prelude.Text -> AnomalySubscription
+mkAnomalySubscription
+  frequency
+  monitorArnList
+  subscribers
+  subscriptionName
+  = AnomalySubscription
+      {haddock_workaround_ = (), frequency = frequency,
+       monitorArnList = monitorArnList, subscribers = subscribers,
+       subscriptionName = subscriptionName,
+       resourceTags = Prelude.Nothing, threshold = Prelude.Nothing,
+       thresholdExpression = Prelude.Nothing}
+instance ToResourceProperties AnomalySubscription where
+  toResourceProperties AnomalySubscription {..}
+    = ResourceProperties
+        {awsType = "AWS::CE::AnomalySubscription",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Frequency" JSON..= frequency,
+                            "MonitorArnList" JSON..= monitorArnList,
+                            "Subscribers" JSON..= subscribers,
+                            "SubscriptionName" JSON..= subscriptionName]
+                           (Prelude.catMaybes
+                              [(JSON..=) "ResourceTags" Prelude.<$> resourceTags,
+                               (JSON..=) "Threshold" Prelude.<$> threshold,
+                               (JSON..=) "ThresholdExpression" Prelude.<$> thresholdExpression]))}
+instance JSON.ToJSON AnomalySubscription where
+  toJSON AnomalySubscription {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Frequency" JSON..= frequency,
+               "MonitorArnList" JSON..= monitorArnList,
+               "Subscribers" JSON..= subscribers,
+               "SubscriptionName" JSON..= subscriptionName]
+              (Prelude.catMaybes
+                 [(JSON..=) "ResourceTags" Prelude.<$> resourceTags,
+                  (JSON..=) "Threshold" Prelude.<$> threshold,
+                  (JSON..=) "ThresholdExpression" Prelude.<$> thresholdExpression])))
+instance Property "Frequency" AnomalySubscription where
+  type PropertyType "Frequency" AnomalySubscription = Value Prelude.Text
+  set newValue AnomalySubscription {..}
+    = AnomalySubscription {frequency = newValue, ..}
+instance Property "MonitorArnList" AnomalySubscription where
+  type PropertyType "MonitorArnList" AnomalySubscription = ValueList Prelude.Text
+  set newValue AnomalySubscription {..}
+    = AnomalySubscription {monitorArnList = newValue, ..}
+instance Property "ResourceTags" AnomalySubscription where
+  type PropertyType "ResourceTags" AnomalySubscription = [ResourceTagProperty]
+  set newValue AnomalySubscription {..}
+    = AnomalySubscription {resourceTags = Prelude.pure newValue, ..}
+instance Property "Subscribers" AnomalySubscription where
+  type PropertyType "Subscribers" AnomalySubscription = [SubscriberProperty]
+  set newValue AnomalySubscription {..}
+    = AnomalySubscription {subscribers = newValue, ..}
+instance Property "SubscriptionName" AnomalySubscription where
+  type PropertyType "SubscriptionName" AnomalySubscription = Value Prelude.Text
+  set newValue AnomalySubscription {..}
+    = AnomalySubscription {subscriptionName = newValue, ..}
+instance Property "Threshold" AnomalySubscription where
+  type PropertyType "Threshold" AnomalySubscription = Value Prelude.Double
+  set newValue AnomalySubscription {..}
+    = AnomalySubscription {threshold = Prelude.pure newValue, ..}
+instance Property "ThresholdExpression" AnomalySubscription where
+  type PropertyType "ThresholdExpression" AnomalySubscription = Value Prelude.Text
+  set newValue AnomalySubscription {..}
+    = AnomalySubscription
+        {thresholdExpression = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CE/AnomalySubscription/ResourceTagProperty.hs b/gen/Stratosphere/CE/AnomalySubscription/ResourceTagProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CE/AnomalySubscription/ResourceTagProperty.hs
@@ -0,0 +1,38 @@
+module Stratosphere.CE.AnomalySubscription.ResourceTagProperty (
+        ResourceTagProperty(..), mkResourceTagProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ResourceTagProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ce-anomalysubscription-resourcetag.html>
+    ResourceTagProperty {haddock_workaround_ :: (),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ce-anomalysubscription-resourcetag.html#cfn-ce-anomalysubscription-resourcetag-key>
+                         key :: (Value Prelude.Text),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ce-anomalysubscription-resourcetag.html#cfn-ce-anomalysubscription-resourcetag-value>
+                         value :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkResourceTagProperty ::
+  Value Prelude.Text -> Value Prelude.Text -> ResourceTagProperty
+mkResourceTagProperty key value
+  = ResourceTagProperty
+      {haddock_workaround_ = (), key = key, value = value}
+instance ToResourceProperties ResourceTagProperty where
+  toResourceProperties ResourceTagProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CE::AnomalySubscription.ResourceTag",
+         supportsTags = Prelude.False,
+         properties = ["Key" JSON..= key, "Value" JSON..= value]}
+instance JSON.ToJSON ResourceTagProperty where
+  toJSON ResourceTagProperty {..}
+    = JSON.object ["Key" JSON..= key, "Value" JSON..= value]
+instance Property "Key" ResourceTagProperty where
+  type PropertyType "Key" ResourceTagProperty = Value Prelude.Text
+  set newValue ResourceTagProperty {..}
+    = ResourceTagProperty {key = newValue, ..}
+instance Property "Value" ResourceTagProperty where
+  type PropertyType "Value" ResourceTagProperty = Value Prelude.Text
+  set newValue ResourceTagProperty {..}
+    = ResourceTagProperty {value = newValue, ..}
diff --git a/gen/Stratosphere/CE/AnomalySubscription/ResourceTagProperty.hs-boot b/gen/Stratosphere/CE/AnomalySubscription/ResourceTagProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CE/AnomalySubscription/ResourceTagProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CE.AnomalySubscription.ResourceTagProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ResourceTagProperty :: Prelude.Type
+instance ToResourceProperties ResourceTagProperty
+instance Prelude.Eq ResourceTagProperty
+instance Prelude.Show ResourceTagProperty
+instance JSON.ToJSON ResourceTagProperty
diff --git a/gen/Stratosphere/CE/AnomalySubscription/SubscriberProperty.hs b/gen/Stratosphere/CE/AnomalySubscription/SubscriberProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CE/AnomalySubscription/SubscriberProperty.hs
@@ -0,0 +1,52 @@
+module Stratosphere.CE.AnomalySubscription.SubscriberProperty (
+        SubscriberProperty(..), mkSubscriberProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data SubscriberProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ce-anomalysubscription-subscriber.html>
+    SubscriberProperty {haddock_workaround_ :: (),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ce-anomalysubscription-subscriber.html#cfn-ce-anomalysubscription-subscriber-address>
+                        address :: (Value Prelude.Text),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ce-anomalysubscription-subscriber.html#cfn-ce-anomalysubscription-subscriber-status>
+                        status :: (Prelude.Maybe (Value Prelude.Text)),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ce-anomalysubscription-subscriber.html#cfn-ce-anomalysubscription-subscriber-type>
+                        type' :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSubscriberProperty ::
+  Value Prelude.Text -> Value Prelude.Text -> SubscriberProperty
+mkSubscriberProperty address type'
+  = SubscriberProperty
+      {haddock_workaround_ = (), address = address, type' = type',
+       status = Prelude.Nothing}
+instance ToResourceProperties SubscriberProperty where
+  toResourceProperties SubscriberProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CE::AnomalySubscription.Subscriber",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Address" JSON..= address, "Type" JSON..= type']
+                           (Prelude.catMaybes [(JSON..=) "Status" Prelude.<$> status]))}
+instance JSON.ToJSON SubscriberProperty where
+  toJSON SubscriberProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Address" JSON..= address, "Type" JSON..= type']
+              (Prelude.catMaybes [(JSON..=) "Status" Prelude.<$> status])))
+instance Property "Address" SubscriberProperty where
+  type PropertyType "Address" SubscriberProperty = Value Prelude.Text
+  set newValue SubscriberProperty {..}
+    = SubscriberProperty {address = newValue, ..}
+instance Property "Status" SubscriberProperty where
+  type PropertyType "Status" SubscriberProperty = Value Prelude.Text
+  set newValue SubscriberProperty {..}
+    = SubscriberProperty {status = Prelude.pure newValue, ..}
+instance Property "Type" SubscriberProperty where
+  type PropertyType "Type" SubscriberProperty = Value Prelude.Text
+  set newValue SubscriberProperty {..}
+    = SubscriberProperty {type' = newValue, ..}
diff --git a/gen/Stratosphere/CE/AnomalySubscription/SubscriberProperty.hs-boot b/gen/Stratosphere/CE/AnomalySubscription/SubscriberProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CE/AnomalySubscription/SubscriberProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CE.AnomalySubscription.SubscriberProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data SubscriberProperty :: Prelude.Type
+instance ToResourceProperties SubscriberProperty
+instance Prelude.Eq SubscriberProperty
+instance Prelude.Show SubscriberProperty
+instance JSON.ToJSON SubscriberProperty
diff --git a/gen/Stratosphere/CE/CostCategory.hs b/gen/Stratosphere/CE/CostCategory.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CE/CostCategory.hs
@@ -0,0 +1,79 @@
+module Stratosphere.CE.CostCategory (
+        module Exports, CostCategory(..), mkCostCategory
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CE.CostCategory.ResourceTagProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CostCategory
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ce-costcategory.html>
+    CostCategory {haddock_workaround_ :: (),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ce-costcategory.html#cfn-ce-costcategory-defaultvalue>
+                  defaultValue :: (Prelude.Maybe (Value Prelude.Text)),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ce-costcategory.html#cfn-ce-costcategory-name>
+                  name :: (Value Prelude.Text),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ce-costcategory.html#cfn-ce-costcategory-ruleversion>
+                  ruleVersion :: (Value Prelude.Text),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ce-costcategory.html#cfn-ce-costcategory-rules>
+                  rules :: (Value Prelude.Text),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ce-costcategory.html#cfn-ce-costcategory-splitchargerules>
+                  splitChargeRules :: (Prelude.Maybe (Value Prelude.Text)),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ce-costcategory.html#cfn-ce-costcategory-tags>
+                  tags :: (Prelude.Maybe [ResourceTagProperty])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCostCategory ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> Value Prelude.Text -> CostCategory
+mkCostCategory name ruleVersion rules
+  = CostCategory
+      {haddock_workaround_ = (), name = name, ruleVersion = ruleVersion,
+       rules = rules, defaultValue = Prelude.Nothing,
+       splitChargeRules = Prelude.Nothing, tags = Prelude.Nothing}
+instance ToResourceProperties CostCategory where
+  toResourceProperties CostCategory {..}
+    = ResourceProperties
+        {awsType = "AWS::CE::CostCategory", supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Name" JSON..= name, "RuleVersion" JSON..= ruleVersion,
+                            "Rules" JSON..= rules]
+                           (Prelude.catMaybes
+                              [(JSON..=) "DefaultValue" Prelude.<$> defaultValue,
+                               (JSON..=) "SplitChargeRules" Prelude.<$> splitChargeRules,
+                               (JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON CostCategory where
+  toJSON CostCategory {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Name" JSON..= name, "RuleVersion" JSON..= ruleVersion,
+               "Rules" JSON..= rules]
+              (Prelude.catMaybes
+                 [(JSON..=) "DefaultValue" Prelude.<$> defaultValue,
+                  (JSON..=) "SplitChargeRules" Prelude.<$> splitChargeRules,
+                  (JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "DefaultValue" CostCategory where
+  type PropertyType "DefaultValue" CostCategory = Value Prelude.Text
+  set newValue CostCategory {..}
+    = CostCategory {defaultValue = Prelude.pure newValue, ..}
+instance Property "Name" CostCategory where
+  type PropertyType "Name" CostCategory = Value Prelude.Text
+  set newValue CostCategory {..} = CostCategory {name = newValue, ..}
+instance Property "RuleVersion" CostCategory where
+  type PropertyType "RuleVersion" CostCategory = Value Prelude.Text
+  set newValue CostCategory {..}
+    = CostCategory {ruleVersion = newValue, ..}
+instance Property "Rules" CostCategory where
+  type PropertyType "Rules" CostCategory = Value Prelude.Text
+  set newValue CostCategory {..}
+    = CostCategory {rules = newValue, ..}
+instance Property "SplitChargeRules" CostCategory where
+  type PropertyType "SplitChargeRules" CostCategory = Value Prelude.Text
+  set newValue CostCategory {..}
+    = CostCategory {splitChargeRules = Prelude.pure newValue, ..}
+instance Property "Tags" CostCategory where
+  type PropertyType "Tags" CostCategory = [ResourceTagProperty]
+  set newValue CostCategory {..}
+    = CostCategory {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CE/CostCategory/ResourceTagProperty.hs b/gen/Stratosphere/CE/CostCategory/ResourceTagProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CE/CostCategory/ResourceTagProperty.hs
@@ -0,0 +1,38 @@
+module Stratosphere.CE.CostCategory.ResourceTagProperty (
+        ResourceTagProperty(..), mkResourceTagProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ResourceTagProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ce-costcategory-resourcetag.html>
+    ResourceTagProperty {haddock_workaround_ :: (),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ce-costcategory-resourcetag.html#cfn-ce-costcategory-resourcetag-key>
+                         key :: (Value Prelude.Text),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ce-costcategory-resourcetag.html#cfn-ce-costcategory-resourcetag-value>
+                         value :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkResourceTagProperty ::
+  Value Prelude.Text -> Value Prelude.Text -> ResourceTagProperty
+mkResourceTagProperty key value
+  = ResourceTagProperty
+      {haddock_workaround_ = (), key = key, value = value}
+instance ToResourceProperties ResourceTagProperty where
+  toResourceProperties ResourceTagProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CE::CostCategory.ResourceTag",
+         supportsTags = Prelude.False,
+         properties = ["Key" JSON..= key, "Value" JSON..= value]}
+instance JSON.ToJSON ResourceTagProperty where
+  toJSON ResourceTagProperty {..}
+    = JSON.object ["Key" JSON..= key, "Value" JSON..= value]
+instance Property "Key" ResourceTagProperty where
+  type PropertyType "Key" ResourceTagProperty = Value Prelude.Text
+  set newValue ResourceTagProperty {..}
+    = ResourceTagProperty {key = newValue, ..}
+instance Property "Value" ResourceTagProperty where
+  type PropertyType "Value" ResourceTagProperty = Value Prelude.Text
+  set newValue ResourceTagProperty {..}
+    = ResourceTagProperty {value = newValue, ..}
diff --git a/gen/Stratosphere/CE/CostCategory/ResourceTagProperty.hs-boot b/gen/Stratosphere/CE/CostCategory/ResourceTagProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CE/CostCategory/ResourceTagProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CE.CostCategory.ResourceTagProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ResourceTagProperty :: Prelude.Type
+instance ToResourceProperties ResourceTagProperty
+instance Prelude.Eq ResourceTagProperty
+instance Prelude.Show ResourceTagProperty
+instance JSON.ToJSON ResourceTagProperty
diff --git a/stratosphere-ce.cabal b/stratosphere-ce.cabal
new file mode 100644
--- /dev/null
+++ b/stratosphere-ce.cabal
@@ -0,0 +1,79 @@
+cabal-version: 1.12
+
+-- This file has been generated from package.yaml by hpack version 0.38.2.
+--
+-- see: https://github.com/sol/hpack
+
+name:           stratosphere-ce
+version:        1.0.0
+synopsis:       Stratosphere integration for AWS CE.
+description:    Integration into stratosphere to generate resources and properties for AWS CE
+category:       AWS, Cloud, CE
+stability:      experimental
+homepage:       https://github.com/mbj/stratosphere#readme
+bug-reports:    https://github.com/mbj/stratosphere/issues
+maintainer:     Markus Schirp
+license:        MIT
+license-file:   LICENSE.md
+build-type:     Simple
+
+source-repository head
+  type: git
+  location: https://github.com/mbj/stratosphere
+
+flag development
+  description: Run GHC with development flags
+  manual: True
+  default: False
+
+library
+  exposed-modules:
+      Stratosphere.CE.AnomalyMonitor
+      Stratosphere.CE.AnomalyMonitor.ResourceTagProperty
+      Stratosphere.CE.AnomalySubscription
+      Stratosphere.CE.AnomalySubscription.ResourceTagProperty
+      Stratosphere.CE.AnomalySubscription.SubscriberProperty
+      Stratosphere.CE.CostCategory
+      Stratosphere.CE.CostCategory.ResourceTagProperty
+  other-modules:
+      Paths_stratosphere_ce
+  hs-source-dirs:
+      gen
+  default-extensions:
+      DataKinds
+      DeriveGeneric
+      DerivingStrategies
+      DerivingVia
+      DuplicateRecordFields
+      FlexibleContexts
+      FlexibleInstances
+      GADTs
+      GeneralizedNewtypeDeriving
+      InstanceSigs
+      LambdaCase
+      MultiParamTypeClasses
+      NoFieldSelectors
+      NoImplicitPrelude
+      NumericUnderscores
+      OverloadedLists
+      OverloadedRecordDot
+      OverloadedStrings
+      PolyKinds
+      RecordWildCards
+      ScopedTypeVariables
+      StandaloneDeriving
+      Strict
+      TemplateHaskell
+      TupleSections
+      TypeApplications
+      TypeFamilies
+  ghc-options: -Wall -Wcompat -Widentities -Wimplicit-prelude -Wincomplete-record-updates -Wincomplete-uni-patterns -Wmissing-local-signatures -Wmissing-signatures -Wmonomorphism-restriction -Wredundant-constraints -fhide-source-paths -funbox-strict-fields -optP-Wno-nonportable-include-path -Wno-unused-imports
+  build-depends:
+      aeson ==2.*
+    , base >=4.8 && <4.22
+    , stratosphere ==1.0.0
+  default-language: Haskell2010
+  if flag(development)
+    ghc-options: -Werror
+  else
+    ghc-options: -Wwarn
