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/Backup/BackupPlan.hs b/gen/Stratosphere/Backup/BackupPlan.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Backup/BackupPlan.hs
@@ -0,0 +1,47 @@
+module Stratosphere.Backup.BackupPlan (
+        module Exports, BackupPlan(..), mkBackupPlan
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.Backup.BackupPlan.BackupPlanResourceTypeProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data BackupPlan
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-backup-backupplan.html>
+    BackupPlan {haddock_workaround_ :: (),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-backup-backupplan.html#cfn-backup-backupplan-backupplan>
+                backupPlan :: BackupPlanResourceTypeProperty,
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-backup-backupplan.html#cfn-backup-backupplan-backupplantags>
+                backupPlanTags :: (Prelude.Maybe (Prelude.Map Prelude.Text (Value Prelude.Text)))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkBackupPlan :: BackupPlanResourceTypeProperty -> BackupPlan
+mkBackupPlan backupPlan
+  = BackupPlan
+      {haddock_workaround_ = (), backupPlan = backupPlan,
+       backupPlanTags = Prelude.Nothing}
+instance ToResourceProperties BackupPlan where
+  toResourceProperties BackupPlan {..}
+    = ResourceProperties
+        {awsType = "AWS::Backup::BackupPlan", supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["BackupPlan" JSON..= backupPlan]
+                           (Prelude.catMaybes
+                              [(JSON..=) "BackupPlanTags" Prelude.<$> backupPlanTags]))}
+instance JSON.ToJSON BackupPlan where
+  toJSON BackupPlan {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["BackupPlan" JSON..= backupPlan]
+              (Prelude.catMaybes
+                 [(JSON..=) "BackupPlanTags" Prelude.<$> backupPlanTags])))
+instance Property "BackupPlan" BackupPlan where
+  type PropertyType "BackupPlan" BackupPlan = BackupPlanResourceTypeProperty
+  set newValue BackupPlan {..}
+    = BackupPlan {backupPlan = newValue, ..}
+instance Property "BackupPlanTags" BackupPlan where
+  type PropertyType "BackupPlanTags" BackupPlan = Prelude.Map Prelude.Text (Value Prelude.Text)
+  set newValue BackupPlan {..}
+    = BackupPlan {backupPlanTags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Backup/BackupPlan/AdvancedBackupSettingResourceTypeProperty.hs b/gen/Stratosphere/Backup/BackupPlan/AdvancedBackupSettingResourceTypeProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Backup/BackupPlan/AdvancedBackupSettingResourceTypeProperty.hs
@@ -0,0 +1,48 @@
+module Stratosphere.Backup.BackupPlan.AdvancedBackupSettingResourceTypeProperty (
+        AdvancedBackupSettingResourceTypeProperty(..),
+        mkAdvancedBackupSettingResourceTypeProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AdvancedBackupSettingResourceTypeProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupplan-advancedbackupsettingresourcetype.html>
+    AdvancedBackupSettingResourceTypeProperty {haddock_workaround_ :: (),
+                                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupplan-advancedbackupsettingresourcetype.html#cfn-backup-backupplan-advancedbackupsettingresourcetype-backupoptions>
+                                               backupOptions :: JSON.Object,
+                                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupplan-advancedbackupsettingresourcetype.html#cfn-backup-backupplan-advancedbackupsettingresourcetype-resourcetype>
+                                               resourceType :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAdvancedBackupSettingResourceTypeProperty ::
+  JSON.Object
+  -> Value Prelude.Text -> AdvancedBackupSettingResourceTypeProperty
+mkAdvancedBackupSettingResourceTypeProperty
+  backupOptions
+  resourceType
+  = AdvancedBackupSettingResourceTypeProperty
+      {haddock_workaround_ = (), backupOptions = backupOptions,
+       resourceType = resourceType}
+instance ToResourceProperties AdvancedBackupSettingResourceTypeProperty where
+  toResourceProperties AdvancedBackupSettingResourceTypeProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Backup::BackupPlan.AdvancedBackupSettingResourceType",
+         supportsTags = Prelude.False,
+         properties = ["BackupOptions" JSON..= backupOptions,
+                       "ResourceType" JSON..= resourceType]}
+instance JSON.ToJSON AdvancedBackupSettingResourceTypeProperty where
+  toJSON AdvancedBackupSettingResourceTypeProperty {..}
+    = JSON.object
+        ["BackupOptions" JSON..= backupOptions,
+         "ResourceType" JSON..= resourceType]
+instance Property "BackupOptions" AdvancedBackupSettingResourceTypeProperty where
+  type PropertyType "BackupOptions" AdvancedBackupSettingResourceTypeProperty = JSON.Object
+  set newValue AdvancedBackupSettingResourceTypeProperty {..}
+    = AdvancedBackupSettingResourceTypeProperty
+        {backupOptions = newValue, ..}
+instance Property "ResourceType" AdvancedBackupSettingResourceTypeProperty where
+  type PropertyType "ResourceType" AdvancedBackupSettingResourceTypeProperty = Value Prelude.Text
+  set newValue AdvancedBackupSettingResourceTypeProperty {..}
+    = AdvancedBackupSettingResourceTypeProperty
+        {resourceType = newValue, ..}
diff --git a/gen/Stratosphere/Backup/BackupPlan/AdvancedBackupSettingResourceTypeProperty.hs-boot b/gen/Stratosphere/Backup/BackupPlan/AdvancedBackupSettingResourceTypeProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Backup/BackupPlan/AdvancedBackupSettingResourceTypeProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Backup.BackupPlan.AdvancedBackupSettingResourceTypeProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AdvancedBackupSettingResourceTypeProperty :: Prelude.Type
+instance ToResourceProperties AdvancedBackupSettingResourceTypeProperty
+instance Prelude.Eq AdvancedBackupSettingResourceTypeProperty
+instance Prelude.Show AdvancedBackupSettingResourceTypeProperty
+instance JSON.ToJSON AdvancedBackupSettingResourceTypeProperty
diff --git a/gen/Stratosphere/Backup/BackupPlan/BackupPlanResourceTypeProperty.hs b/gen/Stratosphere/Backup/BackupPlan/BackupPlanResourceTypeProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Backup/BackupPlan/BackupPlanResourceTypeProperty.hs
@@ -0,0 +1,65 @@
+module Stratosphere.Backup.BackupPlan.BackupPlanResourceTypeProperty (
+        module Exports, BackupPlanResourceTypeProperty(..),
+        mkBackupPlanResourceTypeProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.Backup.BackupPlan.AdvancedBackupSettingResourceTypeProperty as Exports
+import {-# SOURCE #-} Stratosphere.Backup.BackupPlan.BackupRuleResourceTypeProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data BackupPlanResourceTypeProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupplan-backupplanresourcetype.html>
+    BackupPlanResourceTypeProperty {haddock_workaround_ :: (),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupplan-backupplanresourcetype.html#cfn-backup-backupplan-backupplanresourcetype-advancedbackupsettings>
+                                    advancedBackupSettings :: (Prelude.Maybe [AdvancedBackupSettingResourceTypeProperty]),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupplan-backupplanresourcetype.html#cfn-backup-backupplan-backupplanresourcetype-backupplanname>
+                                    backupPlanName :: (Value Prelude.Text),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupplan-backupplanresourcetype.html#cfn-backup-backupplan-backupplanresourcetype-backupplanrule>
+                                    backupPlanRule :: [BackupRuleResourceTypeProperty]}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkBackupPlanResourceTypeProperty ::
+  Value Prelude.Text
+  -> [BackupRuleResourceTypeProperty]
+     -> BackupPlanResourceTypeProperty
+mkBackupPlanResourceTypeProperty backupPlanName backupPlanRule
+  = BackupPlanResourceTypeProperty
+      {haddock_workaround_ = (), backupPlanName = backupPlanName,
+       backupPlanRule = backupPlanRule,
+       advancedBackupSettings = Prelude.Nothing}
+instance ToResourceProperties BackupPlanResourceTypeProperty where
+  toResourceProperties BackupPlanResourceTypeProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Backup::BackupPlan.BackupPlanResourceType",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["BackupPlanName" JSON..= backupPlanName,
+                            "BackupPlanRule" JSON..= backupPlanRule]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AdvancedBackupSettings"
+                                 Prelude.<$> advancedBackupSettings]))}
+instance JSON.ToJSON BackupPlanResourceTypeProperty where
+  toJSON BackupPlanResourceTypeProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["BackupPlanName" JSON..= backupPlanName,
+               "BackupPlanRule" JSON..= backupPlanRule]
+              (Prelude.catMaybes
+                 [(JSON..=) "AdvancedBackupSettings"
+                    Prelude.<$> advancedBackupSettings])))
+instance Property "AdvancedBackupSettings" BackupPlanResourceTypeProperty where
+  type PropertyType "AdvancedBackupSettings" BackupPlanResourceTypeProperty = [AdvancedBackupSettingResourceTypeProperty]
+  set newValue BackupPlanResourceTypeProperty {..}
+    = BackupPlanResourceTypeProperty
+        {advancedBackupSettings = Prelude.pure newValue, ..}
+instance Property "BackupPlanName" BackupPlanResourceTypeProperty where
+  type PropertyType "BackupPlanName" BackupPlanResourceTypeProperty = Value Prelude.Text
+  set newValue BackupPlanResourceTypeProperty {..}
+    = BackupPlanResourceTypeProperty {backupPlanName = newValue, ..}
+instance Property "BackupPlanRule" BackupPlanResourceTypeProperty where
+  type PropertyType "BackupPlanRule" BackupPlanResourceTypeProperty = [BackupRuleResourceTypeProperty]
+  set newValue BackupPlanResourceTypeProperty {..}
+    = BackupPlanResourceTypeProperty {backupPlanRule = newValue, ..}
diff --git a/gen/Stratosphere/Backup/BackupPlan/BackupPlanResourceTypeProperty.hs-boot b/gen/Stratosphere/Backup/BackupPlan/BackupPlanResourceTypeProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Backup/BackupPlan/BackupPlanResourceTypeProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Backup.BackupPlan.BackupPlanResourceTypeProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data BackupPlanResourceTypeProperty :: Prelude.Type
+instance ToResourceProperties BackupPlanResourceTypeProperty
+instance Prelude.Eq BackupPlanResourceTypeProperty
+instance Prelude.Show BackupPlanResourceTypeProperty
+instance JSON.ToJSON BackupPlanResourceTypeProperty
diff --git a/gen/Stratosphere/Backup/BackupPlan/BackupRuleResourceTypeProperty.hs b/gen/Stratosphere/Backup/BackupPlan/BackupRuleResourceTypeProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Backup/BackupPlan/BackupRuleResourceTypeProperty.hs
@@ -0,0 +1,148 @@
+module Stratosphere.Backup.BackupPlan.BackupRuleResourceTypeProperty (
+        module Exports, BackupRuleResourceTypeProperty(..),
+        mkBackupRuleResourceTypeProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.Backup.BackupPlan.CopyActionResourceTypeProperty as Exports
+import {-# SOURCE #-} Stratosphere.Backup.BackupPlan.IndexActionsResourceTypeProperty as Exports
+import {-# SOURCE #-} Stratosphere.Backup.BackupPlan.LifecycleResourceTypeProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data BackupRuleResourceTypeProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupplan-backupruleresourcetype.html>
+    BackupRuleResourceTypeProperty {haddock_workaround_ :: (),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupplan-backupruleresourcetype.html#cfn-backup-backupplan-backupruleresourcetype-completionwindowminutes>
+                                    completionWindowMinutes :: (Prelude.Maybe (Value Prelude.Double)),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupplan-backupruleresourcetype.html#cfn-backup-backupplan-backupruleresourcetype-copyactions>
+                                    copyActions :: (Prelude.Maybe [CopyActionResourceTypeProperty]),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupplan-backupruleresourcetype.html#cfn-backup-backupplan-backupruleresourcetype-enablecontinuousbackup>
+                                    enableContinuousBackup :: (Prelude.Maybe (Value Prelude.Bool)),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupplan-backupruleresourcetype.html#cfn-backup-backupplan-backupruleresourcetype-indexactions>
+                                    indexActions :: (Prelude.Maybe [IndexActionsResourceTypeProperty]),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupplan-backupruleresourcetype.html#cfn-backup-backupplan-backupruleresourcetype-lifecycle>
+                                    lifecycle :: (Prelude.Maybe LifecycleResourceTypeProperty),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupplan-backupruleresourcetype.html#cfn-backup-backupplan-backupruleresourcetype-recoverypointtags>
+                                    recoveryPointTags :: (Prelude.Maybe (Prelude.Map Prelude.Text (Value Prelude.Text))),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupplan-backupruleresourcetype.html#cfn-backup-backupplan-backupruleresourcetype-rulename>
+                                    ruleName :: (Value Prelude.Text),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupplan-backupruleresourcetype.html#cfn-backup-backupplan-backupruleresourcetype-scheduleexpression>
+                                    scheduleExpression :: (Prelude.Maybe (Value Prelude.Text)),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupplan-backupruleresourcetype.html#cfn-backup-backupplan-backupruleresourcetype-scheduleexpressiontimezone>
+                                    scheduleExpressionTimezone :: (Prelude.Maybe (Value Prelude.Text)),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupplan-backupruleresourcetype.html#cfn-backup-backupplan-backupruleresourcetype-startwindowminutes>
+                                    startWindowMinutes :: (Prelude.Maybe (Value Prelude.Double)),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupplan-backupruleresourcetype.html#cfn-backup-backupplan-backupruleresourcetype-targetbackupvault>
+                                    targetBackupVault :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkBackupRuleResourceTypeProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> BackupRuleResourceTypeProperty
+mkBackupRuleResourceTypeProperty ruleName targetBackupVault
+  = BackupRuleResourceTypeProperty
+      {haddock_workaround_ = (), ruleName = ruleName,
+       targetBackupVault = targetBackupVault,
+       completionWindowMinutes = Prelude.Nothing,
+       copyActions = Prelude.Nothing,
+       enableContinuousBackup = Prelude.Nothing,
+       indexActions = Prelude.Nothing, lifecycle = Prelude.Nothing,
+       recoveryPointTags = Prelude.Nothing,
+       scheduleExpression = Prelude.Nothing,
+       scheduleExpressionTimezone = Prelude.Nothing,
+       startWindowMinutes = Prelude.Nothing}
+instance ToResourceProperties BackupRuleResourceTypeProperty where
+  toResourceProperties BackupRuleResourceTypeProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Backup::BackupPlan.BackupRuleResourceType",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["RuleName" JSON..= ruleName,
+                            "TargetBackupVault" JSON..= targetBackupVault]
+                           (Prelude.catMaybes
+                              [(JSON..=) "CompletionWindowMinutes"
+                                 Prelude.<$> completionWindowMinutes,
+                               (JSON..=) "CopyActions" Prelude.<$> copyActions,
+                               (JSON..=) "EnableContinuousBackup"
+                                 Prelude.<$> enableContinuousBackup,
+                               (JSON..=) "IndexActions" Prelude.<$> indexActions,
+                               (JSON..=) "Lifecycle" Prelude.<$> lifecycle,
+                               (JSON..=) "RecoveryPointTags" Prelude.<$> recoveryPointTags,
+                               (JSON..=) "ScheduleExpression" Prelude.<$> scheduleExpression,
+                               (JSON..=) "ScheduleExpressionTimezone"
+                                 Prelude.<$> scheduleExpressionTimezone,
+                               (JSON..=) "StartWindowMinutes" Prelude.<$> startWindowMinutes]))}
+instance JSON.ToJSON BackupRuleResourceTypeProperty where
+  toJSON BackupRuleResourceTypeProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["RuleName" JSON..= ruleName,
+               "TargetBackupVault" JSON..= targetBackupVault]
+              (Prelude.catMaybes
+                 [(JSON..=) "CompletionWindowMinutes"
+                    Prelude.<$> completionWindowMinutes,
+                  (JSON..=) "CopyActions" Prelude.<$> copyActions,
+                  (JSON..=) "EnableContinuousBackup"
+                    Prelude.<$> enableContinuousBackup,
+                  (JSON..=) "IndexActions" Prelude.<$> indexActions,
+                  (JSON..=) "Lifecycle" Prelude.<$> lifecycle,
+                  (JSON..=) "RecoveryPointTags" Prelude.<$> recoveryPointTags,
+                  (JSON..=) "ScheduleExpression" Prelude.<$> scheduleExpression,
+                  (JSON..=) "ScheduleExpressionTimezone"
+                    Prelude.<$> scheduleExpressionTimezone,
+                  (JSON..=) "StartWindowMinutes" Prelude.<$> startWindowMinutes])))
+instance Property "CompletionWindowMinutes" BackupRuleResourceTypeProperty where
+  type PropertyType "CompletionWindowMinutes" BackupRuleResourceTypeProperty = Value Prelude.Double
+  set newValue BackupRuleResourceTypeProperty {..}
+    = BackupRuleResourceTypeProperty
+        {completionWindowMinutes = Prelude.pure newValue, ..}
+instance Property "CopyActions" BackupRuleResourceTypeProperty where
+  type PropertyType "CopyActions" BackupRuleResourceTypeProperty = [CopyActionResourceTypeProperty]
+  set newValue BackupRuleResourceTypeProperty {..}
+    = BackupRuleResourceTypeProperty
+        {copyActions = Prelude.pure newValue, ..}
+instance Property "EnableContinuousBackup" BackupRuleResourceTypeProperty where
+  type PropertyType "EnableContinuousBackup" BackupRuleResourceTypeProperty = Value Prelude.Bool
+  set newValue BackupRuleResourceTypeProperty {..}
+    = BackupRuleResourceTypeProperty
+        {enableContinuousBackup = Prelude.pure newValue, ..}
+instance Property "IndexActions" BackupRuleResourceTypeProperty where
+  type PropertyType "IndexActions" BackupRuleResourceTypeProperty = [IndexActionsResourceTypeProperty]
+  set newValue BackupRuleResourceTypeProperty {..}
+    = BackupRuleResourceTypeProperty
+        {indexActions = Prelude.pure newValue, ..}
+instance Property "Lifecycle" BackupRuleResourceTypeProperty where
+  type PropertyType "Lifecycle" BackupRuleResourceTypeProperty = LifecycleResourceTypeProperty
+  set newValue BackupRuleResourceTypeProperty {..}
+    = BackupRuleResourceTypeProperty
+        {lifecycle = Prelude.pure newValue, ..}
+instance Property "RecoveryPointTags" BackupRuleResourceTypeProperty where
+  type PropertyType "RecoveryPointTags" BackupRuleResourceTypeProperty = Prelude.Map Prelude.Text (Value Prelude.Text)
+  set newValue BackupRuleResourceTypeProperty {..}
+    = BackupRuleResourceTypeProperty
+        {recoveryPointTags = Prelude.pure newValue, ..}
+instance Property "RuleName" BackupRuleResourceTypeProperty where
+  type PropertyType "RuleName" BackupRuleResourceTypeProperty = Value Prelude.Text
+  set newValue BackupRuleResourceTypeProperty {..}
+    = BackupRuleResourceTypeProperty {ruleName = newValue, ..}
+instance Property "ScheduleExpression" BackupRuleResourceTypeProperty where
+  type PropertyType "ScheduleExpression" BackupRuleResourceTypeProperty = Value Prelude.Text
+  set newValue BackupRuleResourceTypeProperty {..}
+    = BackupRuleResourceTypeProperty
+        {scheduleExpression = Prelude.pure newValue, ..}
+instance Property "ScheduleExpressionTimezone" BackupRuleResourceTypeProperty where
+  type PropertyType "ScheduleExpressionTimezone" BackupRuleResourceTypeProperty = Value Prelude.Text
+  set newValue BackupRuleResourceTypeProperty {..}
+    = BackupRuleResourceTypeProperty
+        {scheduleExpressionTimezone = Prelude.pure newValue, ..}
+instance Property "StartWindowMinutes" BackupRuleResourceTypeProperty where
+  type PropertyType "StartWindowMinutes" BackupRuleResourceTypeProperty = Value Prelude.Double
+  set newValue BackupRuleResourceTypeProperty {..}
+    = BackupRuleResourceTypeProperty
+        {startWindowMinutes = Prelude.pure newValue, ..}
+instance Property "TargetBackupVault" BackupRuleResourceTypeProperty where
+  type PropertyType "TargetBackupVault" BackupRuleResourceTypeProperty = Value Prelude.Text
+  set newValue BackupRuleResourceTypeProperty {..}
+    = BackupRuleResourceTypeProperty {targetBackupVault = newValue, ..}
diff --git a/gen/Stratosphere/Backup/BackupPlan/BackupRuleResourceTypeProperty.hs-boot b/gen/Stratosphere/Backup/BackupPlan/BackupRuleResourceTypeProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Backup/BackupPlan/BackupRuleResourceTypeProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Backup.BackupPlan.BackupRuleResourceTypeProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data BackupRuleResourceTypeProperty :: Prelude.Type
+instance ToResourceProperties BackupRuleResourceTypeProperty
+instance Prelude.Eq BackupRuleResourceTypeProperty
+instance Prelude.Show BackupRuleResourceTypeProperty
+instance JSON.ToJSON BackupRuleResourceTypeProperty
diff --git a/gen/Stratosphere/Backup/BackupPlan/CopyActionResourceTypeProperty.hs b/gen/Stratosphere/Backup/BackupPlan/CopyActionResourceTypeProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Backup/BackupPlan/CopyActionResourceTypeProperty.hs
@@ -0,0 +1,51 @@
+module Stratosphere.Backup.BackupPlan.CopyActionResourceTypeProperty (
+        module Exports, CopyActionResourceTypeProperty(..),
+        mkCopyActionResourceTypeProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.Backup.BackupPlan.LifecycleResourceTypeProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CopyActionResourceTypeProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupplan-copyactionresourcetype.html>
+    CopyActionResourceTypeProperty {haddock_workaround_ :: (),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupplan-copyactionresourcetype.html#cfn-backup-backupplan-copyactionresourcetype-destinationbackupvaultarn>
+                                    destinationBackupVaultArn :: (Value Prelude.Text),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupplan-copyactionresourcetype.html#cfn-backup-backupplan-copyactionresourcetype-lifecycle>
+                                    lifecycle :: (Prelude.Maybe LifecycleResourceTypeProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCopyActionResourceTypeProperty ::
+  Value Prelude.Text -> CopyActionResourceTypeProperty
+mkCopyActionResourceTypeProperty destinationBackupVaultArn
+  = CopyActionResourceTypeProperty
+      {haddock_workaround_ = (),
+       destinationBackupVaultArn = destinationBackupVaultArn,
+       lifecycle = Prelude.Nothing}
+instance ToResourceProperties CopyActionResourceTypeProperty where
+  toResourceProperties CopyActionResourceTypeProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Backup::BackupPlan.CopyActionResourceType",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["DestinationBackupVaultArn" JSON..= destinationBackupVaultArn]
+                           (Prelude.catMaybes [(JSON..=) "Lifecycle" Prelude.<$> lifecycle]))}
+instance JSON.ToJSON CopyActionResourceTypeProperty where
+  toJSON CopyActionResourceTypeProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["DestinationBackupVaultArn" JSON..= destinationBackupVaultArn]
+              (Prelude.catMaybes [(JSON..=) "Lifecycle" Prelude.<$> lifecycle])))
+instance Property "DestinationBackupVaultArn" CopyActionResourceTypeProperty where
+  type PropertyType "DestinationBackupVaultArn" CopyActionResourceTypeProperty = Value Prelude.Text
+  set newValue CopyActionResourceTypeProperty {..}
+    = CopyActionResourceTypeProperty
+        {destinationBackupVaultArn = newValue, ..}
+instance Property "Lifecycle" CopyActionResourceTypeProperty where
+  type PropertyType "Lifecycle" CopyActionResourceTypeProperty = LifecycleResourceTypeProperty
+  set newValue CopyActionResourceTypeProperty {..}
+    = CopyActionResourceTypeProperty
+        {lifecycle = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Backup/BackupPlan/CopyActionResourceTypeProperty.hs-boot b/gen/Stratosphere/Backup/BackupPlan/CopyActionResourceTypeProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Backup/BackupPlan/CopyActionResourceTypeProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Backup.BackupPlan.CopyActionResourceTypeProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CopyActionResourceTypeProperty :: Prelude.Type
+instance ToResourceProperties CopyActionResourceTypeProperty
+instance Prelude.Eq CopyActionResourceTypeProperty
+instance Prelude.Show CopyActionResourceTypeProperty
+instance JSON.ToJSON CopyActionResourceTypeProperty
diff --git a/gen/Stratosphere/Backup/BackupPlan/IndexActionsResourceTypeProperty.hs b/gen/Stratosphere/Backup/BackupPlan/IndexActionsResourceTypeProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Backup/BackupPlan/IndexActionsResourceTypeProperty.hs
@@ -0,0 +1,39 @@
+module Stratosphere.Backup.BackupPlan.IndexActionsResourceTypeProperty (
+        IndexActionsResourceTypeProperty(..),
+        mkIndexActionsResourceTypeProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data IndexActionsResourceTypeProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupplan-indexactionsresourcetype.html>
+    IndexActionsResourceTypeProperty {haddock_workaround_ :: (),
+                                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupplan-indexactionsresourcetype.html#cfn-backup-backupplan-indexactionsresourcetype-resourcetypes>
+                                      resourceTypes :: (Prelude.Maybe (ValueList Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkIndexActionsResourceTypeProperty ::
+  IndexActionsResourceTypeProperty
+mkIndexActionsResourceTypeProperty
+  = IndexActionsResourceTypeProperty
+      {haddock_workaround_ = (), resourceTypes = Prelude.Nothing}
+instance ToResourceProperties IndexActionsResourceTypeProperty where
+  toResourceProperties IndexActionsResourceTypeProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Backup::BackupPlan.IndexActionsResourceType",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "ResourceTypes" Prelude.<$> resourceTypes])}
+instance JSON.ToJSON IndexActionsResourceTypeProperty where
+  toJSON IndexActionsResourceTypeProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "ResourceTypes" Prelude.<$> resourceTypes]))
+instance Property "ResourceTypes" IndexActionsResourceTypeProperty where
+  type PropertyType "ResourceTypes" IndexActionsResourceTypeProperty = ValueList Prelude.Text
+  set newValue IndexActionsResourceTypeProperty {..}
+    = IndexActionsResourceTypeProperty
+        {resourceTypes = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Backup/BackupPlan/IndexActionsResourceTypeProperty.hs-boot b/gen/Stratosphere/Backup/BackupPlan/IndexActionsResourceTypeProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Backup/BackupPlan/IndexActionsResourceTypeProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Backup.BackupPlan.IndexActionsResourceTypeProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data IndexActionsResourceTypeProperty :: Prelude.Type
+instance ToResourceProperties IndexActionsResourceTypeProperty
+instance Prelude.Eq IndexActionsResourceTypeProperty
+instance Prelude.Show IndexActionsResourceTypeProperty
+instance JSON.ToJSON IndexActionsResourceTypeProperty
diff --git a/gen/Stratosphere/Backup/BackupPlan/LifecycleResourceTypeProperty.hs b/gen/Stratosphere/Backup/BackupPlan/LifecycleResourceTypeProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Backup/BackupPlan/LifecycleResourceTypeProperty.hs
@@ -0,0 +1,61 @@
+module Stratosphere.Backup.BackupPlan.LifecycleResourceTypeProperty (
+        LifecycleResourceTypeProperty(..), mkLifecycleResourceTypeProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data LifecycleResourceTypeProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupplan-lifecycleresourcetype.html>
+    LifecycleResourceTypeProperty {haddock_workaround_ :: (),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupplan-lifecycleresourcetype.html#cfn-backup-backupplan-lifecycleresourcetype-deleteafterdays>
+                                   deleteAfterDays :: (Prelude.Maybe (Value Prelude.Double)),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupplan-lifecycleresourcetype.html#cfn-backup-backupplan-lifecycleresourcetype-movetocoldstorageafterdays>
+                                   moveToColdStorageAfterDays :: (Prelude.Maybe (Value Prelude.Double)),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupplan-lifecycleresourcetype.html#cfn-backup-backupplan-lifecycleresourcetype-optintoarchiveforsupportedresources>
+                                   optInToArchiveForSupportedResources :: (Prelude.Maybe (Value Prelude.Bool))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkLifecycleResourceTypeProperty :: LifecycleResourceTypeProperty
+mkLifecycleResourceTypeProperty
+  = LifecycleResourceTypeProperty
+      {haddock_workaround_ = (), deleteAfterDays = Prelude.Nothing,
+       moveToColdStorageAfterDays = Prelude.Nothing,
+       optInToArchiveForSupportedResources = Prelude.Nothing}
+instance ToResourceProperties LifecycleResourceTypeProperty where
+  toResourceProperties LifecycleResourceTypeProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Backup::BackupPlan.LifecycleResourceType",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "DeleteAfterDays" Prelude.<$> deleteAfterDays,
+                            (JSON..=) "MoveToColdStorageAfterDays"
+                              Prelude.<$> moveToColdStorageAfterDays,
+                            (JSON..=) "OptInToArchiveForSupportedResources"
+                              Prelude.<$> optInToArchiveForSupportedResources])}
+instance JSON.ToJSON LifecycleResourceTypeProperty where
+  toJSON LifecycleResourceTypeProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "DeleteAfterDays" Prelude.<$> deleteAfterDays,
+               (JSON..=) "MoveToColdStorageAfterDays"
+                 Prelude.<$> moveToColdStorageAfterDays,
+               (JSON..=) "OptInToArchiveForSupportedResources"
+                 Prelude.<$> optInToArchiveForSupportedResources]))
+instance Property "DeleteAfterDays" LifecycleResourceTypeProperty where
+  type PropertyType "DeleteAfterDays" LifecycleResourceTypeProperty = Value Prelude.Double
+  set newValue LifecycleResourceTypeProperty {..}
+    = LifecycleResourceTypeProperty
+        {deleteAfterDays = Prelude.pure newValue, ..}
+instance Property "MoveToColdStorageAfterDays" LifecycleResourceTypeProperty where
+  type PropertyType "MoveToColdStorageAfterDays" LifecycleResourceTypeProperty = Value Prelude.Double
+  set newValue LifecycleResourceTypeProperty {..}
+    = LifecycleResourceTypeProperty
+        {moveToColdStorageAfterDays = Prelude.pure newValue, ..}
+instance Property "OptInToArchiveForSupportedResources" LifecycleResourceTypeProperty where
+  type PropertyType "OptInToArchiveForSupportedResources" LifecycleResourceTypeProperty = Value Prelude.Bool
+  set newValue LifecycleResourceTypeProperty {..}
+    = LifecycleResourceTypeProperty
+        {optInToArchiveForSupportedResources = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Backup/BackupPlan/LifecycleResourceTypeProperty.hs-boot b/gen/Stratosphere/Backup/BackupPlan/LifecycleResourceTypeProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Backup/BackupPlan/LifecycleResourceTypeProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Backup.BackupPlan.LifecycleResourceTypeProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data LifecycleResourceTypeProperty :: Prelude.Type
+instance ToResourceProperties LifecycleResourceTypeProperty
+instance Prelude.Eq LifecycleResourceTypeProperty
+instance Prelude.Show LifecycleResourceTypeProperty
+instance JSON.ToJSON LifecycleResourceTypeProperty
diff --git a/gen/Stratosphere/Backup/BackupSelection.hs b/gen/Stratosphere/Backup/BackupSelection.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Backup/BackupSelection.hs
@@ -0,0 +1,44 @@
+module Stratosphere.Backup.BackupSelection (
+        module Exports, BackupSelection(..), mkBackupSelection
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.Backup.BackupSelection.BackupSelectionResourceTypeProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data BackupSelection
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-backup-backupselection.html>
+    BackupSelection {haddock_workaround_ :: (),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-backup-backupselection.html#cfn-backup-backupselection-backupplanid>
+                     backupPlanId :: (Value Prelude.Text),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-backup-backupselection.html#cfn-backup-backupselection-backupselection>
+                     backupSelection :: BackupSelectionResourceTypeProperty}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkBackupSelection ::
+  Value Prelude.Text
+  -> BackupSelectionResourceTypeProperty -> BackupSelection
+mkBackupSelection backupPlanId backupSelection
+  = BackupSelection
+      {haddock_workaround_ = (), backupPlanId = backupPlanId,
+       backupSelection = backupSelection}
+instance ToResourceProperties BackupSelection where
+  toResourceProperties BackupSelection {..}
+    = ResourceProperties
+        {awsType = "AWS::Backup::BackupSelection",
+         supportsTags = Prelude.False,
+         properties = ["BackupPlanId" JSON..= backupPlanId,
+                       "BackupSelection" JSON..= backupSelection]}
+instance JSON.ToJSON BackupSelection where
+  toJSON BackupSelection {..}
+    = JSON.object
+        ["BackupPlanId" JSON..= backupPlanId,
+         "BackupSelection" JSON..= backupSelection]
+instance Property "BackupPlanId" BackupSelection where
+  type PropertyType "BackupPlanId" BackupSelection = Value Prelude.Text
+  set newValue BackupSelection {..}
+    = BackupSelection {backupPlanId = newValue, ..}
+instance Property "BackupSelection" BackupSelection where
+  type PropertyType "BackupSelection" BackupSelection = BackupSelectionResourceTypeProperty
+  set newValue BackupSelection {..}
+    = BackupSelection {backupSelection = newValue, ..}
diff --git a/gen/Stratosphere/Backup/BackupSelection/BackupSelectionResourceTypeProperty.hs b/gen/Stratosphere/Backup/BackupSelection/BackupSelectionResourceTypeProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Backup/BackupSelection/BackupSelectionResourceTypeProperty.hs
@@ -0,0 +1,91 @@
+module Stratosphere.Backup.BackupSelection.BackupSelectionResourceTypeProperty (
+        module Exports, BackupSelectionResourceTypeProperty(..),
+        mkBackupSelectionResourceTypeProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.Backup.BackupSelection.ConditionResourceTypeProperty as Exports
+import {-# SOURCE #-} Stratosphere.Backup.BackupSelection.ConditionsProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data BackupSelectionResourceTypeProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupselection-backupselectionresourcetype.html>
+    BackupSelectionResourceTypeProperty {haddock_workaround_ :: (),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupselection-backupselectionresourcetype.html#cfn-backup-backupselection-backupselectionresourcetype-conditions>
+                                         conditions :: (Prelude.Maybe ConditionsProperty),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupselection-backupselectionresourcetype.html#cfn-backup-backupselection-backupselectionresourcetype-iamrolearn>
+                                         iamRoleArn :: (Value Prelude.Text),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupselection-backupselectionresourcetype.html#cfn-backup-backupselection-backupselectionresourcetype-listoftags>
+                                         listOfTags :: (Prelude.Maybe [ConditionResourceTypeProperty]),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupselection-backupselectionresourcetype.html#cfn-backup-backupselection-backupselectionresourcetype-notresources>
+                                         notResources :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupselection-backupselectionresourcetype.html#cfn-backup-backupselection-backupselectionresourcetype-resources>
+                                         resources :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupselection-backupselectionresourcetype.html#cfn-backup-backupselection-backupselectionresourcetype-selectionname>
+                                         selectionName :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkBackupSelectionResourceTypeProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> BackupSelectionResourceTypeProperty
+mkBackupSelectionResourceTypeProperty iamRoleArn selectionName
+  = BackupSelectionResourceTypeProperty
+      {haddock_workaround_ = (), iamRoleArn = iamRoleArn,
+       selectionName = selectionName, conditions = Prelude.Nothing,
+       listOfTags = Prelude.Nothing, notResources = Prelude.Nothing,
+       resources = Prelude.Nothing}
+instance ToResourceProperties BackupSelectionResourceTypeProperty where
+  toResourceProperties BackupSelectionResourceTypeProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Backup::BackupSelection.BackupSelectionResourceType",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["IamRoleArn" JSON..= iamRoleArn,
+                            "SelectionName" JSON..= selectionName]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Conditions" Prelude.<$> conditions,
+                               (JSON..=) "ListOfTags" Prelude.<$> listOfTags,
+                               (JSON..=) "NotResources" Prelude.<$> notResources,
+                               (JSON..=) "Resources" Prelude.<$> resources]))}
+instance JSON.ToJSON BackupSelectionResourceTypeProperty where
+  toJSON BackupSelectionResourceTypeProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["IamRoleArn" JSON..= iamRoleArn,
+               "SelectionName" JSON..= selectionName]
+              (Prelude.catMaybes
+                 [(JSON..=) "Conditions" Prelude.<$> conditions,
+                  (JSON..=) "ListOfTags" Prelude.<$> listOfTags,
+                  (JSON..=) "NotResources" Prelude.<$> notResources,
+                  (JSON..=) "Resources" Prelude.<$> resources])))
+instance Property "Conditions" BackupSelectionResourceTypeProperty where
+  type PropertyType "Conditions" BackupSelectionResourceTypeProperty = ConditionsProperty
+  set newValue BackupSelectionResourceTypeProperty {..}
+    = BackupSelectionResourceTypeProperty
+        {conditions = Prelude.pure newValue, ..}
+instance Property "IamRoleArn" BackupSelectionResourceTypeProperty where
+  type PropertyType "IamRoleArn" BackupSelectionResourceTypeProperty = Value Prelude.Text
+  set newValue BackupSelectionResourceTypeProperty {..}
+    = BackupSelectionResourceTypeProperty {iamRoleArn = newValue, ..}
+instance Property "ListOfTags" BackupSelectionResourceTypeProperty where
+  type PropertyType "ListOfTags" BackupSelectionResourceTypeProperty = [ConditionResourceTypeProperty]
+  set newValue BackupSelectionResourceTypeProperty {..}
+    = BackupSelectionResourceTypeProperty
+        {listOfTags = Prelude.pure newValue, ..}
+instance Property "NotResources" BackupSelectionResourceTypeProperty where
+  type PropertyType "NotResources" BackupSelectionResourceTypeProperty = ValueList Prelude.Text
+  set newValue BackupSelectionResourceTypeProperty {..}
+    = BackupSelectionResourceTypeProperty
+        {notResources = Prelude.pure newValue, ..}
+instance Property "Resources" BackupSelectionResourceTypeProperty where
+  type PropertyType "Resources" BackupSelectionResourceTypeProperty = ValueList Prelude.Text
+  set newValue BackupSelectionResourceTypeProperty {..}
+    = BackupSelectionResourceTypeProperty
+        {resources = Prelude.pure newValue, ..}
+instance Property "SelectionName" BackupSelectionResourceTypeProperty where
+  type PropertyType "SelectionName" BackupSelectionResourceTypeProperty = Value Prelude.Text
+  set newValue BackupSelectionResourceTypeProperty {..}
+    = BackupSelectionResourceTypeProperty
+        {selectionName = newValue, ..}
diff --git a/gen/Stratosphere/Backup/BackupSelection/BackupSelectionResourceTypeProperty.hs-boot b/gen/Stratosphere/Backup/BackupSelection/BackupSelectionResourceTypeProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Backup/BackupSelection/BackupSelectionResourceTypeProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Backup.BackupSelection.BackupSelectionResourceTypeProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data BackupSelectionResourceTypeProperty :: Prelude.Type
+instance ToResourceProperties BackupSelectionResourceTypeProperty
+instance Prelude.Eq BackupSelectionResourceTypeProperty
+instance Prelude.Show BackupSelectionResourceTypeProperty
+instance JSON.ToJSON BackupSelectionResourceTypeProperty
diff --git a/gen/Stratosphere/Backup/BackupSelection/ConditionParameterProperty.hs b/gen/Stratosphere/Backup/BackupSelection/ConditionParameterProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Backup/BackupSelection/ConditionParameterProperty.hs
@@ -0,0 +1,47 @@
+module Stratosphere.Backup.BackupSelection.ConditionParameterProperty (
+        ConditionParameterProperty(..), mkConditionParameterProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ConditionParameterProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupselection-conditionparameter.html>
+    ConditionParameterProperty {haddock_workaround_ :: (),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupselection-conditionparameter.html#cfn-backup-backupselection-conditionparameter-conditionkey>
+                                conditionKey :: (Prelude.Maybe (Value Prelude.Text)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupselection-conditionparameter.html#cfn-backup-backupselection-conditionparameter-conditionvalue>
+                                conditionValue :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkConditionParameterProperty :: ConditionParameterProperty
+mkConditionParameterProperty
+  = ConditionParameterProperty
+      {haddock_workaround_ = (), conditionKey = Prelude.Nothing,
+       conditionValue = Prelude.Nothing}
+instance ToResourceProperties ConditionParameterProperty where
+  toResourceProperties ConditionParameterProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Backup::BackupSelection.ConditionParameter",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "ConditionKey" Prelude.<$> conditionKey,
+                            (JSON..=) "ConditionValue" Prelude.<$> conditionValue])}
+instance JSON.ToJSON ConditionParameterProperty where
+  toJSON ConditionParameterProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "ConditionKey" Prelude.<$> conditionKey,
+               (JSON..=) "ConditionValue" Prelude.<$> conditionValue]))
+instance Property "ConditionKey" ConditionParameterProperty where
+  type PropertyType "ConditionKey" ConditionParameterProperty = Value Prelude.Text
+  set newValue ConditionParameterProperty {..}
+    = ConditionParameterProperty
+        {conditionKey = Prelude.pure newValue, ..}
+instance Property "ConditionValue" ConditionParameterProperty where
+  type PropertyType "ConditionValue" ConditionParameterProperty = Value Prelude.Text
+  set newValue ConditionParameterProperty {..}
+    = ConditionParameterProperty
+        {conditionValue = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Backup/BackupSelection/ConditionParameterProperty.hs-boot b/gen/Stratosphere/Backup/BackupSelection/ConditionParameterProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Backup/BackupSelection/ConditionParameterProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Backup.BackupSelection.ConditionParameterProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ConditionParameterProperty :: Prelude.Type
+instance ToResourceProperties ConditionParameterProperty
+instance Prelude.Eq ConditionParameterProperty
+instance Prelude.Show ConditionParameterProperty
+instance JSON.ToJSON ConditionParameterProperty
diff --git a/gen/Stratosphere/Backup/BackupSelection/ConditionResourceTypeProperty.hs b/gen/Stratosphere/Backup/BackupSelection/ConditionResourceTypeProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Backup/BackupSelection/ConditionResourceTypeProperty.hs
@@ -0,0 +1,55 @@
+module Stratosphere.Backup.BackupSelection.ConditionResourceTypeProperty (
+        ConditionResourceTypeProperty(..), mkConditionResourceTypeProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ConditionResourceTypeProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupselection-conditionresourcetype.html>
+    ConditionResourceTypeProperty {haddock_workaround_ :: (),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupselection-conditionresourcetype.html#cfn-backup-backupselection-conditionresourcetype-conditionkey>
+                                   conditionKey :: (Value Prelude.Text),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupselection-conditionresourcetype.html#cfn-backup-backupselection-conditionresourcetype-conditiontype>
+                                   conditionType :: (Value Prelude.Text),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupselection-conditionresourcetype.html#cfn-backup-backupselection-conditionresourcetype-conditionvalue>
+                                   conditionValue :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkConditionResourceTypeProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Text
+     -> Value Prelude.Text -> ConditionResourceTypeProperty
+mkConditionResourceTypeProperty
+  conditionKey
+  conditionType
+  conditionValue
+  = ConditionResourceTypeProperty
+      {haddock_workaround_ = (), conditionKey = conditionKey,
+       conditionType = conditionType, conditionValue = conditionValue}
+instance ToResourceProperties ConditionResourceTypeProperty where
+  toResourceProperties ConditionResourceTypeProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Backup::BackupSelection.ConditionResourceType",
+         supportsTags = Prelude.False,
+         properties = ["ConditionKey" JSON..= conditionKey,
+                       "ConditionType" JSON..= conditionType,
+                       "ConditionValue" JSON..= conditionValue]}
+instance JSON.ToJSON ConditionResourceTypeProperty where
+  toJSON ConditionResourceTypeProperty {..}
+    = JSON.object
+        ["ConditionKey" JSON..= conditionKey,
+         "ConditionType" JSON..= conditionType,
+         "ConditionValue" JSON..= conditionValue]
+instance Property "ConditionKey" ConditionResourceTypeProperty where
+  type PropertyType "ConditionKey" ConditionResourceTypeProperty = Value Prelude.Text
+  set newValue ConditionResourceTypeProperty {..}
+    = ConditionResourceTypeProperty {conditionKey = newValue, ..}
+instance Property "ConditionType" ConditionResourceTypeProperty where
+  type PropertyType "ConditionType" ConditionResourceTypeProperty = Value Prelude.Text
+  set newValue ConditionResourceTypeProperty {..}
+    = ConditionResourceTypeProperty {conditionType = newValue, ..}
+instance Property "ConditionValue" ConditionResourceTypeProperty where
+  type PropertyType "ConditionValue" ConditionResourceTypeProperty = Value Prelude.Text
+  set newValue ConditionResourceTypeProperty {..}
+    = ConditionResourceTypeProperty {conditionValue = newValue, ..}
diff --git a/gen/Stratosphere/Backup/BackupSelection/ConditionResourceTypeProperty.hs-boot b/gen/Stratosphere/Backup/BackupSelection/ConditionResourceTypeProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Backup/BackupSelection/ConditionResourceTypeProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Backup.BackupSelection.ConditionResourceTypeProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ConditionResourceTypeProperty :: Prelude.Type
+instance ToResourceProperties ConditionResourceTypeProperty
+instance Prelude.Eq ConditionResourceTypeProperty
+instance Prelude.Show ConditionResourceTypeProperty
+instance JSON.ToJSON ConditionResourceTypeProperty
diff --git a/gen/Stratosphere/Backup/BackupSelection/ConditionsProperty.hs b/gen/Stratosphere/Backup/BackupSelection/ConditionsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Backup/BackupSelection/ConditionsProperty.hs
@@ -0,0 +1,62 @@
+module Stratosphere.Backup.BackupSelection.ConditionsProperty (
+        module Exports, ConditionsProperty(..), mkConditionsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.Backup.BackupSelection.ConditionParameterProperty as Exports
+import Stratosphere.ResourceProperties
+data ConditionsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupselection-conditions.html>
+    ConditionsProperty {haddock_workaround_ :: (),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupselection-conditions.html#cfn-backup-backupselection-conditions-stringequals>
+                        stringEquals :: (Prelude.Maybe [ConditionParameterProperty]),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupselection-conditions.html#cfn-backup-backupselection-conditions-stringlike>
+                        stringLike :: (Prelude.Maybe [ConditionParameterProperty]),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupselection-conditions.html#cfn-backup-backupselection-conditions-stringnotequals>
+                        stringNotEquals :: (Prelude.Maybe [ConditionParameterProperty]),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupselection-conditions.html#cfn-backup-backupselection-conditions-stringnotlike>
+                        stringNotLike :: (Prelude.Maybe [ConditionParameterProperty])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkConditionsProperty :: ConditionsProperty
+mkConditionsProperty
+  = ConditionsProperty
+      {haddock_workaround_ = (), stringEquals = Prelude.Nothing,
+       stringLike = Prelude.Nothing, stringNotEquals = Prelude.Nothing,
+       stringNotLike = Prelude.Nothing}
+instance ToResourceProperties ConditionsProperty where
+  toResourceProperties ConditionsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Backup::BackupSelection.Conditions",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "StringEquals" Prelude.<$> stringEquals,
+                            (JSON..=) "StringLike" Prelude.<$> stringLike,
+                            (JSON..=) "StringNotEquals" Prelude.<$> stringNotEquals,
+                            (JSON..=) "StringNotLike" Prelude.<$> stringNotLike])}
+instance JSON.ToJSON ConditionsProperty where
+  toJSON ConditionsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "StringEquals" Prelude.<$> stringEquals,
+               (JSON..=) "StringLike" Prelude.<$> stringLike,
+               (JSON..=) "StringNotEquals" Prelude.<$> stringNotEquals,
+               (JSON..=) "StringNotLike" Prelude.<$> stringNotLike]))
+instance Property "StringEquals" ConditionsProperty where
+  type PropertyType "StringEquals" ConditionsProperty = [ConditionParameterProperty]
+  set newValue ConditionsProperty {..}
+    = ConditionsProperty {stringEquals = Prelude.pure newValue, ..}
+instance Property "StringLike" ConditionsProperty where
+  type PropertyType "StringLike" ConditionsProperty = [ConditionParameterProperty]
+  set newValue ConditionsProperty {..}
+    = ConditionsProperty {stringLike = Prelude.pure newValue, ..}
+instance Property "StringNotEquals" ConditionsProperty where
+  type PropertyType "StringNotEquals" ConditionsProperty = [ConditionParameterProperty]
+  set newValue ConditionsProperty {..}
+    = ConditionsProperty {stringNotEquals = Prelude.pure newValue, ..}
+instance Property "StringNotLike" ConditionsProperty where
+  type PropertyType "StringNotLike" ConditionsProperty = [ConditionParameterProperty]
+  set newValue ConditionsProperty {..}
+    = ConditionsProperty {stringNotLike = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Backup/BackupSelection/ConditionsProperty.hs-boot b/gen/Stratosphere/Backup/BackupSelection/ConditionsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Backup/BackupSelection/ConditionsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Backup.BackupSelection.ConditionsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ConditionsProperty :: Prelude.Type
+instance ToResourceProperties ConditionsProperty
+instance Prelude.Eq ConditionsProperty
+instance Prelude.Show ConditionsProperty
+instance JSON.ToJSON ConditionsProperty
diff --git a/gen/Stratosphere/Backup/BackupVault.hs b/gen/Stratosphere/Backup/BackupVault.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Backup/BackupVault.hs
@@ -0,0 +1,84 @@
+module Stratosphere.Backup.BackupVault (
+        module Exports, BackupVault(..), mkBackupVault
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.Backup.BackupVault.LockConfigurationTypeProperty as Exports
+import {-# SOURCE #-} Stratosphere.Backup.BackupVault.NotificationObjectTypeProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data BackupVault
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-backup-backupvault.html>
+    BackupVault {haddock_workaround_ :: (),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-backup-backupvault.html#cfn-backup-backupvault-accesspolicy>
+                 accessPolicy :: (Prelude.Maybe JSON.Object),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-backup-backupvault.html#cfn-backup-backupvault-backupvaultname>
+                 backupVaultName :: (Value Prelude.Text),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-backup-backupvault.html#cfn-backup-backupvault-backupvaulttags>
+                 backupVaultTags :: (Prelude.Maybe (Prelude.Map Prelude.Text (Value Prelude.Text))),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-backup-backupvault.html#cfn-backup-backupvault-encryptionkeyarn>
+                 encryptionKeyArn :: (Prelude.Maybe (Value Prelude.Text)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-backup-backupvault.html#cfn-backup-backupvault-lockconfiguration>
+                 lockConfiguration :: (Prelude.Maybe LockConfigurationTypeProperty),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-backup-backupvault.html#cfn-backup-backupvault-notifications>
+                 notifications :: (Prelude.Maybe NotificationObjectTypeProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkBackupVault :: Value Prelude.Text -> BackupVault
+mkBackupVault backupVaultName
+  = BackupVault
+      {haddock_workaround_ = (), backupVaultName = backupVaultName,
+       accessPolicy = Prelude.Nothing, backupVaultTags = Prelude.Nothing,
+       encryptionKeyArn = Prelude.Nothing,
+       lockConfiguration = Prelude.Nothing,
+       notifications = Prelude.Nothing}
+instance ToResourceProperties BackupVault where
+  toResourceProperties BackupVault {..}
+    = ResourceProperties
+        {awsType = "AWS::Backup::BackupVault",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["BackupVaultName" JSON..= backupVaultName]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AccessPolicy" Prelude.<$> accessPolicy,
+                               (JSON..=) "BackupVaultTags" Prelude.<$> backupVaultTags,
+                               (JSON..=) "EncryptionKeyArn" Prelude.<$> encryptionKeyArn,
+                               (JSON..=) "LockConfiguration" Prelude.<$> lockConfiguration,
+                               (JSON..=) "Notifications" Prelude.<$> notifications]))}
+instance JSON.ToJSON BackupVault where
+  toJSON BackupVault {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["BackupVaultName" JSON..= backupVaultName]
+              (Prelude.catMaybes
+                 [(JSON..=) "AccessPolicy" Prelude.<$> accessPolicy,
+                  (JSON..=) "BackupVaultTags" Prelude.<$> backupVaultTags,
+                  (JSON..=) "EncryptionKeyArn" Prelude.<$> encryptionKeyArn,
+                  (JSON..=) "LockConfiguration" Prelude.<$> lockConfiguration,
+                  (JSON..=) "Notifications" Prelude.<$> notifications])))
+instance Property "AccessPolicy" BackupVault where
+  type PropertyType "AccessPolicy" BackupVault = JSON.Object
+  set newValue BackupVault {..}
+    = BackupVault {accessPolicy = Prelude.pure newValue, ..}
+instance Property "BackupVaultName" BackupVault where
+  type PropertyType "BackupVaultName" BackupVault = Value Prelude.Text
+  set newValue BackupVault {..}
+    = BackupVault {backupVaultName = newValue, ..}
+instance Property "BackupVaultTags" BackupVault where
+  type PropertyType "BackupVaultTags" BackupVault = Prelude.Map Prelude.Text (Value Prelude.Text)
+  set newValue BackupVault {..}
+    = BackupVault {backupVaultTags = Prelude.pure newValue, ..}
+instance Property "EncryptionKeyArn" BackupVault where
+  type PropertyType "EncryptionKeyArn" BackupVault = Value Prelude.Text
+  set newValue BackupVault {..}
+    = BackupVault {encryptionKeyArn = Prelude.pure newValue, ..}
+instance Property "LockConfiguration" BackupVault where
+  type PropertyType "LockConfiguration" BackupVault = LockConfigurationTypeProperty
+  set newValue BackupVault {..}
+    = BackupVault {lockConfiguration = Prelude.pure newValue, ..}
+instance Property "Notifications" BackupVault where
+  type PropertyType "Notifications" BackupVault = NotificationObjectTypeProperty
+  set newValue BackupVault {..}
+    = BackupVault {notifications = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Backup/BackupVault/LockConfigurationTypeProperty.hs b/gen/Stratosphere/Backup/BackupVault/LockConfigurationTypeProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Backup/BackupVault/LockConfigurationTypeProperty.hs
@@ -0,0 +1,59 @@
+module Stratosphere.Backup.BackupVault.LockConfigurationTypeProperty (
+        LockConfigurationTypeProperty(..), mkLockConfigurationTypeProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data LockConfigurationTypeProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupvault-lockconfigurationtype.html>
+    LockConfigurationTypeProperty {haddock_workaround_ :: (),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupvault-lockconfigurationtype.html#cfn-backup-backupvault-lockconfigurationtype-changeablefordays>
+                                   changeableForDays :: (Prelude.Maybe (Value Prelude.Integer)),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupvault-lockconfigurationtype.html#cfn-backup-backupvault-lockconfigurationtype-maxretentiondays>
+                                   maxRetentionDays :: (Prelude.Maybe (Value Prelude.Integer)),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupvault-lockconfigurationtype.html#cfn-backup-backupvault-lockconfigurationtype-minretentiondays>
+                                   minRetentionDays :: (Value Prelude.Integer)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkLockConfigurationTypeProperty ::
+  Value Prelude.Integer -> LockConfigurationTypeProperty
+mkLockConfigurationTypeProperty minRetentionDays
+  = LockConfigurationTypeProperty
+      {haddock_workaround_ = (), minRetentionDays = minRetentionDays,
+       changeableForDays = Prelude.Nothing,
+       maxRetentionDays = Prelude.Nothing}
+instance ToResourceProperties LockConfigurationTypeProperty where
+  toResourceProperties LockConfigurationTypeProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Backup::BackupVault.LockConfigurationType",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["MinRetentionDays" JSON..= minRetentionDays]
+                           (Prelude.catMaybes
+                              [(JSON..=) "ChangeableForDays" Prelude.<$> changeableForDays,
+                               (JSON..=) "MaxRetentionDays" Prelude.<$> maxRetentionDays]))}
+instance JSON.ToJSON LockConfigurationTypeProperty where
+  toJSON LockConfigurationTypeProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["MinRetentionDays" JSON..= minRetentionDays]
+              (Prelude.catMaybes
+                 [(JSON..=) "ChangeableForDays" Prelude.<$> changeableForDays,
+                  (JSON..=) "MaxRetentionDays" Prelude.<$> maxRetentionDays])))
+instance Property "ChangeableForDays" LockConfigurationTypeProperty where
+  type PropertyType "ChangeableForDays" LockConfigurationTypeProperty = Value Prelude.Integer
+  set newValue LockConfigurationTypeProperty {..}
+    = LockConfigurationTypeProperty
+        {changeableForDays = Prelude.pure newValue, ..}
+instance Property "MaxRetentionDays" LockConfigurationTypeProperty where
+  type PropertyType "MaxRetentionDays" LockConfigurationTypeProperty = Value Prelude.Integer
+  set newValue LockConfigurationTypeProperty {..}
+    = LockConfigurationTypeProperty
+        {maxRetentionDays = Prelude.pure newValue, ..}
+instance Property "MinRetentionDays" LockConfigurationTypeProperty where
+  type PropertyType "MinRetentionDays" LockConfigurationTypeProperty = Value Prelude.Integer
+  set newValue LockConfigurationTypeProperty {..}
+    = LockConfigurationTypeProperty {minRetentionDays = newValue, ..}
diff --git a/gen/Stratosphere/Backup/BackupVault/LockConfigurationTypeProperty.hs-boot b/gen/Stratosphere/Backup/BackupVault/LockConfigurationTypeProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Backup/BackupVault/LockConfigurationTypeProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Backup.BackupVault.LockConfigurationTypeProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data LockConfigurationTypeProperty :: Prelude.Type
+instance ToResourceProperties LockConfigurationTypeProperty
+instance Prelude.Eq LockConfigurationTypeProperty
+instance Prelude.Show LockConfigurationTypeProperty
+instance JSON.ToJSON LockConfigurationTypeProperty
diff --git a/gen/Stratosphere/Backup/BackupVault/NotificationObjectTypeProperty.hs b/gen/Stratosphere/Backup/BackupVault/NotificationObjectTypeProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Backup/BackupVault/NotificationObjectTypeProperty.hs
@@ -0,0 +1,44 @@
+module Stratosphere.Backup.BackupVault.NotificationObjectTypeProperty (
+        NotificationObjectTypeProperty(..),
+        mkNotificationObjectTypeProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data NotificationObjectTypeProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupvault-notificationobjecttype.html>
+    NotificationObjectTypeProperty {haddock_workaround_ :: (),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupvault-notificationobjecttype.html#cfn-backup-backupvault-notificationobjecttype-backupvaultevents>
+                                    backupVaultEvents :: (ValueList Prelude.Text),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupvault-notificationobjecttype.html#cfn-backup-backupvault-notificationobjecttype-snstopicarn>
+                                    sNSTopicArn :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkNotificationObjectTypeProperty ::
+  ValueList Prelude.Text
+  -> Value Prelude.Text -> NotificationObjectTypeProperty
+mkNotificationObjectTypeProperty backupVaultEvents sNSTopicArn
+  = NotificationObjectTypeProperty
+      {haddock_workaround_ = (), backupVaultEvents = backupVaultEvents,
+       sNSTopicArn = sNSTopicArn}
+instance ToResourceProperties NotificationObjectTypeProperty where
+  toResourceProperties NotificationObjectTypeProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Backup::BackupVault.NotificationObjectType",
+         supportsTags = Prelude.False,
+         properties = ["BackupVaultEvents" JSON..= backupVaultEvents,
+                       "SNSTopicArn" JSON..= sNSTopicArn]}
+instance JSON.ToJSON NotificationObjectTypeProperty where
+  toJSON NotificationObjectTypeProperty {..}
+    = JSON.object
+        ["BackupVaultEvents" JSON..= backupVaultEvents,
+         "SNSTopicArn" JSON..= sNSTopicArn]
+instance Property "BackupVaultEvents" NotificationObjectTypeProperty where
+  type PropertyType "BackupVaultEvents" NotificationObjectTypeProperty = ValueList Prelude.Text
+  set newValue NotificationObjectTypeProperty {..}
+    = NotificationObjectTypeProperty {backupVaultEvents = newValue, ..}
+instance Property "SNSTopicArn" NotificationObjectTypeProperty where
+  type PropertyType "SNSTopicArn" NotificationObjectTypeProperty = Value Prelude.Text
+  set newValue NotificationObjectTypeProperty {..}
+    = NotificationObjectTypeProperty {sNSTopicArn = newValue, ..}
diff --git a/gen/Stratosphere/Backup/BackupVault/NotificationObjectTypeProperty.hs-boot b/gen/Stratosphere/Backup/BackupVault/NotificationObjectTypeProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Backup/BackupVault/NotificationObjectTypeProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Backup.BackupVault.NotificationObjectTypeProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data NotificationObjectTypeProperty :: Prelude.Type
+instance ToResourceProperties NotificationObjectTypeProperty
+instance Prelude.Eq NotificationObjectTypeProperty
+instance Prelude.Show NotificationObjectTypeProperty
+instance JSON.ToJSON NotificationObjectTypeProperty
diff --git a/gen/Stratosphere/Backup/Framework.hs b/gen/Stratosphere/Backup/Framework.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Backup/Framework.hs
@@ -0,0 +1,65 @@
+module Stratosphere.Backup.Framework (
+        module Exports, Framework(..), mkFramework
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.Backup.Framework.FrameworkControlProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data Framework
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-backup-framework.html>
+    Framework {haddock_workaround_ :: (),
+               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-backup-framework.html#cfn-backup-framework-frameworkcontrols>
+               frameworkControls :: [FrameworkControlProperty],
+               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-backup-framework.html#cfn-backup-framework-frameworkdescription>
+               frameworkDescription :: (Prelude.Maybe (Value Prelude.Text)),
+               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-backup-framework.html#cfn-backup-framework-frameworkname>
+               frameworkName :: (Prelude.Maybe (Value Prelude.Text)),
+               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-backup-framework.html#cfn-backup-framework-frameworktags>
+               frameworkTags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkFramework :: [FrameworkControlProperty] -> Framework
+mkFramework frameworkControls
+  = Framework
+      {haddock_workaround_ = (), frameworkControls = frameworkControls,
+       frameworkDescription = Prelude.Nothing,
+       frameworkName = Prelude.Nothing, frameworkTags = Prelude.Nothing}
+instance ToResourceProperties Framework where
+  toResourceProperties Framework {..}
+    = ResourceProperties
+        {awsType = "AWS::Backup::Framework", supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["FrameworkControls" JSON..= frameworkControls]
+                           (Prelude.catMaybes
+                              [(JSON..=) "FrameworkDescription" Prelude.<$> frameworkDescription,
+                               (JSON..=) "FrameworkName" Prelude.<$> frameworkName,
+                               (JSON..=) "FrameworkTags" Prelude.<$> frameworkTags]))}
+instance JSON.ToJSON Framework where
+  toJSON Framework {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["FrameworkControls" JSON..= frameworkControls]
+              (Prelude.catMaybes
+                 [(JSON..=) "FrameworkDescription" Prelude.<$> frameworkDescription,
+                  (JSON..=) "FrameworkName" Prelude.<$> frameworkName,
+                  (JSON..=) "FrameworkTags" Prelude.<$> frameworkTags])))
+instance Property "FrameworkControls" Framework where
+  type PropertyType "FrameworkControls" Framework = [FrameworkControlProperty]
+  set newValue Framework {..}
+    = Framework {frameworkControls = newValue, ..}
+instance Property "FrameworkDescription" Framework where
+  type PropertyType "FrameworkDescription" Framework = Value Prelude.Text
+  set newValue Framework {..}
+    = Framework {frameworkDescription = Prelude.pure newValue, ..}
+instance Property "FrameworkName" Framework where
+  type PropertyType "FrameworkName" Framework = Value Prelude.Text
+  set newValue Framework {..}
+    = Framework {frameworkName = Prelude.pure newValue, ..}
+instance Property "FrameworkTags" Framework where
+  type PropertyType "FrameworkTags" Framework = [Tag]
+  set newValue Framework {..}
+    = Framework {frameworkTags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Backup/Framework/ControlInputParameterProperty.hs b/gen/Stratosphere/Backup/Framework/ControlInputParameterProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Backup/Framework/ControlInputParameterProperty.hs
@@ -0,0 +1,43 @@
+module Stratosphere.Backup.Framework.ControlInputParameterProperty (
+        ControlInputParameterProperty(..), mkControlInputParameterProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ControlInputParameterProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-framework-controlinputparameter.html>
+    ControlInputParameterProperty {haddock_workaround_ :: (),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-framework-controlinputparameter.html#cfn-backup-framework-controlinputparameter-parametername>
+                                   parameterName :: (Value Prelude.Text),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-framework-controlinputparameter.html#cfn-backup-framework-controlinputparameter-parametervalue>
+                                   parameterValue :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkControlInputParameterProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> ControlInputParameterProperty
+mkControlInputParameterProperty parameterName parameterValue
+  = ControlInputParameterProperty
+      {haddock_workaround_ = (), parameterName = parameterName,
+       parameterValue = parameterValue}
+instance ToResourceProperties ControlInputParameterProperty where
+  toResourceProperties ControlInputParameterProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Backup::Framework.ControlInputParameter",
+         supportsTags = Prelude.False,
+         properties = ["ParameterName" JSON..= parameterName,
+                       "ParameterValue" JSON..= parameterValue]}
+instance JSON.ToJSON ControlInputParameterProperty where
+  toJSON ControlInputParameterProperty {..}
+    = JSON.object
+        ["ParameterName" JSON..= parameterName,
+         "ParameterValue" JSON..= parameterValue]
+instance Property "ParameterName" ControlInputParameterProperty where
+  type PropertyType "ParameterName" ControlInputParameterProperty = Value Prelude.Text
+  set newValue ControlInputParameterProperty {..}
+    = ControlInputParameterProperty {parameterName = newValue, ..}
+instance Property "ParameterValue" ControlInputParameterProperty where
+  type PropertyType "ParameterValue" ControlInputParameterProperty = Value Prelude.Text
+  set newValue ControlInputParameterProperty {..}
+    = ControlInputParameterProperty {parameterValue = newValue, ..}
diff --git a/gen/Stratosphere/Backup/Framework/ControlInputParameterProperty.hs-boot b/gen/Stratosphere/Backup/Framework/ControlInputParameterProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Backup/Framework/ControlInputParameterProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Backup.Framework.ControlInputParameterProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ControlInputParameterProperty :: Prelude.Type
+instance ToResourceProperties ControlInputParameterProperty
+instance Prelude.Eq ControlInputParameterProperty
+instance Prelude.Show ControlInputParameterProperty
+instance JSON.ToJSON ControlInputParameterProperty
diff --git a/gen/Stratosphere/Backup/Framework/ControlScopeProperty.hs b/gen/Stratosphere/Backup/Framework/ControlScopeProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Backup/Framework/ControlScopeProperty.hs
@@ -0,0 +1,60 @@
+module Stratosphere.Backup.Framework.ControlScopeProperty (
+        ControlScopeProperty(..), mkControlScopeProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data ControlScopeProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-framework-controlscope.html>
+    ControlScopeProperty {haddock_workaround_ :: (),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-framework-controlscope.html#cfn-backup-framework-controlscope-complianceresourceids>
+                          complianceResourceIds :: (Prelude.Maybe (ValueList Prelude.Text)),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-framework-controlscope.html#cfn-backup-framework-controlscope-complianceresourcetypes>
+                          complianceResourceTypes :: (Prelude.Maybe (ValueList Prelude.Text)),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-framework-controlscope.html#cfn-backup-framework-controlscope-tags>
+                          tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkControlScopeProperty :: ControlScopeProperty
+mkControlScopeProperty
+  = ControlScopeProperty
+      {haddock_workaround_ = (), complianceResourceIds = Prelude.Nothing,
+       complianceResourceTypes = Prelude.Nothing, tags = Prelude.Nothing}
+instance ToResourceProperties ControlScopeProperty where
+  toResourceProperties ControlScopeProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Backup::Framework.ControlScope",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "ComplianceResourceIds"
+                              Prelude.<$> complianceResourceIds,
+                            (JSON..=) "ComplianceResourceTypes"
+                              Prelude.<$> complianceResourceTypes,
+                            (JSON..=) "Tags" Prelude.<$> tags])}
+instance JSON.ToJSON ControlScopeProperty where
+  toJSON ControlScopeProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "ComplianceResourceIds"
+                 Prelude.<$> complianceResourceIds,
+               (JSON..=) "ComplianceResourceTypes"
+                 Prelude.<$> complianceResourceTypes,
+               (JSON..=) "Tags" Prelude.<$> tags]))
+instance Property "ComplianceResourceIds" ControlScopeProperty where
+  type PropertyType "ComplianceResourceIds" ControlScopeProperty = ValueList Prelude.Text
+  set newValue ControlScopeProperty {..}
+    = ControlScopeProperty
+        {complianceResourceIds = Prelude.pure newValue, ..}
+instance Property "ComplianceResourceTypes" ControlScopeProperty where
+  type PropertyType "ComplianceResourceTypes" ControlScopeProperty = ValueList Prelude.Text
+  set newValue ControlScopeProperty {..}
+    = ControlScopeProperty
+        {complianceResourceTypes = Prelude.pure newValue, ..}
+instance Property "Tags" ControlScopeProperty where
+  type PropertyType "Tags" ControlScopeProperty = [Tag]
+  set newValue ControlScopeProperty {..}
+    = ControlScopeProperty {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Backup/Framework/ControlScopeProperty.hs-boot b/gen/Stratosphere/Backup/Framework/ControlScopeProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Backup/Framework/ControlScopeProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Backup.Framework.ControlScopeProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ControlScopeProperty :: Prelude.Type
+instance ToResourceProperties ControlScopeProperty
+instance Prelude.Eq ControlScopeProperty
+instance Prelude.Show ControlScopeProperty
+instance JSON.ToJSON ControlScopeProperty
diff --git a/gen/Stratosphere/Backup/Framework/FrameworkControlProperty.hs b/gen/Stratosphere/Backup/Framework/FrameworkControlProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Backup/Framework/FrameworkControlProperty.hs
@@ -0,0 +1,64 @@
+module Stratosphere.Backup.Framework.FrameworkControlProperty (
+        module Exports, FrameworkControlProperty(..),
+        mkFrameworkControlProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.Backup.Framework.ControlInputParameterProperty as Exports
+import {-# SOURCE #-} Stratosphere.Backup.Framework.ControlScopeProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data FrameworkControlProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-framework-frameworkcontrol.html>
+    FrameworkControlProperty {haddock_workaround_ :: (),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-framework-frameworkcontrol.html#cfn-backup-framework-frameworkcontrol-controlinputparameters>
+                              controlInputParameters :: (Prelude.Maybe [ControlInputParameterProperty]),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-framework-frameworkcontrol.html#cfn-backup-framework-frameworkcontrol-controlname>
+                              controlName :: (Value Prelude.Text),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-framework-frameworkcontrol.html#cfn-backup-framework-frameworkcontrol-controlscope>
+                              controlScope :: (Prelude.Maybe ControlScopeProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkFrameworkControlProperty ::
+  Value Prelude.Text -> FrameworkControlProperty
+mkFrameworkControlProperty controlName
+  = FrameworkControlProperty
+      {haddock_workaround_ = (), controlName = controlName,
+       controlInputParameters = Prelude.Nothing,
+       controlScope = Prelude.Nothing}
+instance ToResourceProperties FrameworkControlProperty where
+  toResourceProperties FrameworkControlProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Backup::Framework.FrameworkControl",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["ControlName" JSON..= controlName]
+                           (Prelude.catMaybes
+                              [(JSON..=) "ControlInputParameters"
+                                 Prelude.<$> controlInputParameters,
+                               (JSON..=) "ControlScope" Prelude.<$> controlScope]))}
+instance JSON.ToJSON FrameworkControlProperty where
+  toJSON FrameworkControlProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["ControlName" JSON..= controlName]
+              (Prelude.catMaybes
+                 [(JSON..=) "ControlInputParameters"
+                    Prelude.<$> controlInputParameters,
+                  (JSON..=) "ControlScope" Prelude.<$> controlScope])))
+instance Property "ControlInputParameters" FrameworkControlProperty where
+  type PropertyType "ControlInputParameters" FrameworkControlProperty = [ControlInputParameterProperty]
+  set newValue FrameworkControlProperty {..}
+    = FrameworkControlProperty
+        {controlInputParameters = Prelude.pure newValue, ..}
+instance Property "ControlName" FrameworkControlProperty where
+  type PropertyType "ControlName" FrameworkControlProperty = Value Prelude.Text
+  set newValue FrameworkControlProperty {..}
+    = FrameworkControlProperty {controlName = newValue, ..}
+instance Property "ControlScope" FrameworkControlProperty where
+  type PropertyType "ControlScope" FrameworkControlProperty = ControlScopeProperty
+  set newValue FrameworkControlProperty {..}
+    = FrameworkControlProperty
+        {controlScope = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Backup/Framework/FrameworkControlProperty.hs-boot b/gen/Stratosphere/Backup/Framework/FrameworkControlProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Backup/Framework/FrameworkControlProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Backup.Framework.FrameworkControlProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data FrameworkControlProperty :: Prelude.Type
+instance ToResourceProperties FrameworkControlProperty
+instance Prelude.Eq FrameworkControlProperty
+instance Prelude.Show FrameworkControlProperty
+instance JSON.ToJSON FrameworkControlProperty
diff --git a/gen/Stratosphere/Backup/LogicallyAirGappedBackupVault.hs b/gen/Stratosphere/Backup/LogicallyAirGappedBackupVault.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Backup/LogicallyAirGappedBackupVault.hs
@@ -0,0 +1,93 @@
+module Stratosphere.Backup.LogicallyAirGappedBackupVault (
+        module Exports, LogicallyAirGappedBackupVault(..),
+        mkLogicallyAirGappedBackupVault
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.Backup.LogicallyAirGappedBackupVault.NotificationObjectTypeProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data LogicallyAirGappedBackupVault
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-backup-logicallyairgappedbackupvault.html>
+    LogicallyAirGappedBackupVault {haddock_workaround_ :: (),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-backup-logicallyairgappedbackupvault.html#cfn-backup-logicallyairgappedbackupvault-accesspolicy>
+                                   accessPolicy :: (Prelude.Maybe JSON.Object),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-backup-logicallyairgappedbackupvault.html#cfn-backup-logicallyairgappedbackupvault-backupvaultname>
+                                   backupVaultName :: (Value Prelude.Text),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-backup-logicallyairgappedbackupvault.html#cfn-backup-logicallyairgappedbackupvault-backupvaulttags>
+                                   backupVaultTags :: (Prelude.Maybe (Prelude.Map Prelude.Text (Value Prelude.Text))),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-backup-logicallyairgappedbackupvault.html#cfn-backup-logicallyairgappedbackupvault-maxretentiondays>
+                                   maxRetentionDays :: (Value Prelude.Integer),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-backup-logicallyairgappedbackupvault.html#cfn-backup-logicallyairgappedbackupvault-minretentiondays>
+                                   minRetentionDays :: (Value Prelude.Integer),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-backup-logicallyairgappedbackupvault.html#cfn-backup-logicallyairgappedbackupvault-notifications>
+                                   notifications :: (Prelude.Maybe NotificationObjectTypeProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkLogicallyAirGappedBackupVault ::
+  Value Prelude.Text
+  -> Value Prelude.Integer
+     -> Value Prelude.Integer -> LogicallyAirGappedBackupVault
+mkLogicallyAirGappedBackupVault
+  backupVaultName
+  maxRetentionDays
+  minRetentionDays
+  = LogicallyAirGappedBackupVault
+      {haddock_workaround_ = (), backupVaultName = backupVaultName,
+       maxRetentionDays = maxRetentionDays,
+       minRetentionDays = minRetentionDays,
+       accessPolicy = Prelude.Nothing, backupVaultTags = Prelude.Nothing,
+       notifications = Prelude.Nothing}
+instance ToResourceProperties LogicallyAirGappedBackupVault where
+  toResourceProperties LogicallyAirGappedBackupVault {..}
+    = ResourceProperties
+        {awsType = "AWS::Backup::LogicallyAirGappedBackupVault",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["BackupVaultName" JSON..= backupVaultName,
+                            "MaxRetentionDays" JSON..= maxRetentionDays,
+                            "MinRetentionDays" JSON..= minRetentionDays]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AccessPolicy" Prelude.<$> accessPolicy,
+                               (JSON..=) "BackupVaultTags" Prelude.<$> backupVaultTags,
+                               (JSON..=) "Notifications" Prelude.<$> notifications]))}
+instance JSON.ToJSON LogicallyAirGappedBackupVault where
+  toJSON LogicallyAirGappedBackupVault {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["BackupVaultName" JSON..= backupVaultName,
+               "MaxRetentionDays" JSON..= maxRetentionDays,
+               "MinRetentionDays" JSON..= minRetentionDays]
+              (Prelude.catMaybes
+                 [(JSON..=) "AccessPolicy" Prelude.<$> accessPolicy,
+                  (JSON..=) "BackupVaultTags" Prelude.<$> backupVaultTags,
+                  (JSON..=) "Notifications" Prelude.<$> notifications])))
+instance Property "AccessPolicy" LogicallyAirGappedBackupVault where
+  type PropertyType "AccessPolicy" LogicallyAirGappedBackupVault = JSON.Object
+  set newValue LogicallyAirGappedBackupVault {..}
+    = LogicallyAirGappedBackupVault
+        {accessPolicy = Prelude.pure newValue, ..}
+instance Property "BackupVaultName" LogicallyAirGappedBackupVault where
+  type PropertyType "BackupVaultName" LogicallyAirGappedBackupVault = Value Prelude.Text
+  set newValue LogicallyAirGappedBackupVault {..}
+    = LogicallyAirGappedBackupVault {backupVaultName = newValue, ..}
+instance Property "BackupVaultTags" LogicallyAirGappedBackupVault where
+  type PropertyType "BackupVaultTags" LogicallyAirGappedBackupVault = Prelude.Map Prelude.Text (Value Prelude.Text)
+  set newValue LogicallyAirGappedBackupVault {..}
+    = LogicallyAirGappedBackupVault
+        {backupVaultTags = Prelude.pure newValue, ..}
+instance Property "MaxRetentionDays" LogicallyAirGappedBackupVault where
+  type PropertyType "MaxRetentionDays" LogicallyAirGappedBackupVault = Value Prelude.Integer
+  set newValue LogicallyAirGappedBackupVault {..}
+    = LogicallyAirGappedBackupVault {maxRetentionDays = newValue, ..}
+instance Property "MinRetentionDays" LogicallyAirGappedBackupVault where
+  type PropertyType "MinRetentionDays" LogicallyAirGappedBackupVault = Value Prelude.Integer
+  set newValue LogicallyAirGappedBackupVault {..}
+    = LogicallyAirGappedBackupVault {minRetentionDays = newValue, ..}
+instance Property "Notifications" LogicallyAirGappedBackupVault where
+  type PropertyType "Notifications" LogicallyAirGappedBackupVault = NotificationObjectTypeProperty
+  set newValue LogicallyAirGappedBackupVault {..}
+    = LogicallyAirGappedBackupVault
+        {notifications = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Backup/LogicallyAirGappedBackupVault/NotificationObjectTypeProperty.hs b/gen/Stratosphere/Backup/LogicallyAirGappedBackupVault/NotificationObjectTypeProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Backup/LogicallyAirGappedBackupVault/NotificationObjectTypeProperty.hs
@@ -0,0 +1,44 @@
+module Stratosphere.Backup.LogicallyAirGappedBackupVault.NotificationObjectTypeProperty (
+        NotificationObjectTypeProperty(..),
+        mkNotificationObjectTypeProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data NotificationObjectTypeProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-logicallyairgappedbackupvault-notificationobjecttype.html>
+    NotificationObjectTypeProperty {haddock_workaround_ :: (),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-logicallyairgappedbackupvault-notificationobjecttype.html#cfn-backup-logicallyairgappedbackupvault-notificationobjecttype-backupvaultevents>
+                                    backupVaultEvents :: (ValueList Prelude.Text),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-logicallyairgappedbackupvault-notificationobjecttype.html#cfn-backup-logicallyairgappedbackupvault-notificationobjecttype-snstopicarn>
+                                    sNSTopicArn :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkNotificationObjectTypeProperty ::
+  ValueList Prelude.Text
+  -> Value Prelude.Text -> NotificationObjectTypeProperty
+mkNotificationObjectTypeProperty backupVaultEvents sNSTopicArn
+  = NotificationObjectTypeProperty
+      {haddock_workaround_ = (), backupVaultEvents = backupVaultEvents,
+       sNSTopicArn = sNSTopicArn}
+instance ToResourceProperties NotificationObjectTypeProperty where
+  toResourceProperties NotificationObjectTypeProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Backup::LogicallyAirGappedBackupVault.NotificationObjectType",
+         supportsTags = Prelude.False,
+         properties = ["BackupVaultEvents" JSON..= backupVaultEvents,
+                       "SNSTopicArn" JSON..= sNSTopicArn]}
+instance JSON.ToJSON NotificationObjectTypeProperty where
+  toJSON NotificationObjectTypeProperty {..}
+    = JSON.object
+        ["BackupVaultEvents" JSON..= backupVaultEvents,
+         "SNSTopicArn" JSON..= sNSTopicArn]
+instance Property "BackupVaultEvents" NotificationObjectTypeProperty where
+  type PropertyType "BackupVaultEvents" NotificationObjectTypeProperty = ValueList Prelude.Text
+  set newValue NotificationObjectTypeProperty {..}
+    = NotificationObjectTypeProperty {backupVaultEvents = newValue, ..}
+instance Property "SNSTopicArn" NotificationObjectTypeProperty where
+  type PropertyType "SNSTopicArn" NotificationObjectTypeProperty = Value Prelude.Text
+  set newValue NotificationObjectTypeProperty {..}
+    = NotificationObjectTypeProperty {sNSTopicArn = newValue, ..}
diff --git a/gen/Stratosphere/Backup/LogicallyAirGappedBackupVault/NotificationObjectTypeProperty.hs-boot b/gen/Stratosphere/Backup/LogicallyAirGappedBackupVault/NotificationObjectTypeProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Backup/LogicallyAirGappedBackupVault/NotificationObjectTypeProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Backup.LogicallyAirGappedBackupVault.NotificationObjectTypeProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data NotificationObjectTypeProperty :: Prelude.Type
+instance ToResourceProperties NotificationObjectTypeProperty
+instance Prelude.Eq NotificationObjectTypeProperty
+instance Prelude.Show NotificationObjectTypeProperty
+instance JSON.ToJSON NotificationObjectTypeProperty
diff --git a/gen/Stratosphere/Backup/ReportPlan.hs b/gen/Stratosphere/Backup/ReportPlan.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Backup/ReportPlan.hs
@@ -0,0 +1,80 @@
+module Stratosphere.Backup.ReportPlan (
+        module Exports, ReportPlan(..), mkReportPlan
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.Backup.ReportPlan.ReportDeliveryChannelProperty as Exports
+import {-# SOURCE #-} Stratosphere.Backup.ReportPlan.ReportSettingProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data ReportPlan
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-backup-reportplan.html>
+    ReportPlan {haddock_workaround_ :: (),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-backup-reportplan.html#cfn-backup-reportplan-reportdeliverychannel>
+                reportDeliveryChannel :: ReportDeliveryChannelProperty,
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-backup-reportplan.html#cfn-backup-reportplan-reportplandescription>
+                reportPlanDescription :: (Prelude.Maybe (Value Prelude.Text)),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-backup-reportplan.html#cfn-backup-reportplan-reportplanname>
+                reportPlanName :: (Prelude.Maybe (Value Prelude.Text)),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-backup-reportplan.html#cfn-backup-reportplan-reportplantags>
+                reportPlanTags :: (Prelude.Maybe [Tag]),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-backup-reportplan.html#cfn-backup-reportplan-reportsetting>
+                reportSetting :: ReportSettingProperty}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkReportPlan ::
+  ReportDeliveryChannelProperty
+  -> ReportSettingProperty -> ReportPlan
+mkReportPlan reportDeliveryChannel reportSetting
+  = ReportPlan
+      {haddock_workaround_ = (),
+       reportDeliveryChannel = reportDeliveryChannel,
+       reportSetting = reportSetting,
+       reportPlanDescription = Prelude.Nothing,
+       reportPlanName = Prelude.Nothing, reportPlanTags = Prelude.Nothing}
+instance ToResourceProperties ReportPlan where
+  toResourceProperties ReportPlan {..}
+    = ResourceProperties
+        {awsType = "AWS::Backup::ReportPlan", supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["ReportDeliveryChannel" JSON..= reportDeliveryChannel,
+                            "ReportSetting" JSON..= reportSetting]
+                           (Prelude.catMaybes
+                              [(JSON..=) "ReportPlanDescription"
+                                 Prelude.<$> reportPlanDescription,
+                               (JSON..=) "ReportPlanName" Prelude.<$> reportPlanName,
+                               (JSON..=) "ReportPlanTags" Prelude.<$> reportPlanTags]))}
+instance JSON.ToJSON ReportPlan where
+  toJSON ReportPlan {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["ReportDeliveryChannel" JSON..= reportDeliveryChannel,
+               "ReportSetting" JSON..= reportSetting]
+              (Prelude.catMaybes
+                 [(JSON..=) "ReportPlanDescription"
+                    Prelude.<$> reportPlanDescription,
+                  (JSON..=) "ReportPlanName" Prelude.<$> reportPlanName,
+                  (JSON..=) "ReportPlanTags" Prelude.<$> reportPlanTags])))
+instance Property "ReportDeliveryChannel" ReportPlan where
+  type PropertyType "ReportDeliveryChannel" ReportPlan = ReportDeliveryChannelProperty
+  set newValue ReportPlan {..}
+    = ReportPlan {reportDeliveryChannel = newValue, ..}
+instance Property "ReportPlanDescription" ReportPlan where
+  type PropertyType "ReportPlanDescription" ReportPlan = Value Prelude.Text
+  set newValue ReportPlan {..}
+    = ReportPlan {reportPlanDescription = Prelude.pure newValue, ..}
+instance Property "ReportPlanName" ReportPlan where
+  type PropertyType "ReportPlanName" ReportPlan = Value Prelude.Text
+  set newValue ReportPlan {..}
+    = ReportPlan {reportPlanName = Prelude.pure newValue, ..}
+instance Property "ReportPlanTags" ReportPlan where
+  type PropertyType "ReportPlanTags" ReportPlan = [Tag]
+  set newValue ReportPlan {..}
+    = ReportPlan {reportPlanTags = Prelude.pure newValue, ..}
+instance Property "ReportSetting" ReportPlan where
+  type PropertyType "ReportSetting" ReportPlan = ReportSettingProperty
+  set newValue ReportPlan {..}
+    = ReportPlan {reportSetting = newValue, ..}
diff --git a/gen/Stratosphere/Backup/ReportPlan/ReportDeliveryChannelProperty.hs b/gen/Stratosphere/Backup/ReportPlan/ReportDeliveryChannelProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Backup/ReportPlan/ReportDeliveryChannelProperty.hs
@@ -0,0 +1,58 @@
+module Stratosphere.Backup.ReportPlan.ReportDeliveryChannelProperty (
+        ReportDeliveryChannelProperty(..), mkReportDeliveryChannelProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ReportDeliveryChannelProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-reportplan-reportdeliverychannel.html>
+    ReportDeliveryChannelProperty {haddock_workaround_ :: (),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-reportplan-reportdeliverychannel.html#cfn-backup-reportplan-reportdeliverychannel-formats>
+                                   formats :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-reportplan-reportdeliverychannel.html#cfn-backup-reportplan-reportdeliverychannel-s3bucketname>
+                                   s3BucketName :: (Value Prelude.Text),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-reportplan-reportdeliverychannel.html#cfn-backup-reportplan-reportdeliverychannel-s3keyprefix>
+                                   s3KeyPrefix :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkReportDeliveryChannelProperty ::
+  Value Prelude.Text -> ReportDeliveryChannelProperty
+mkReportDeliveryChannelProperty s3BucketName
+  = ReportDeliveryChannelProperty
+      {haddock_workaround_ = (), s3BucketName = s3BucketName,
+       formats = Prelude.Nothing, s3KeyPrefix = Prelude.Nothing}
+instance ToResourceProperties ReportDeliveryChannelProperty where
+  toResourceProperties ReportDeliveryChannelProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Backup::ReportPlan.ReportDeliveryChannel",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["S3BucketName" JSON..= s3BucketName]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Formats" Prelude.<$> formats,
+                               (JSON..=) "S3KeyPrefix" Prelude.<$> s3KeyPrefix]))}
+instance JSON.ToJSON ReportDeliveryChannelProperty where
+  toJSON ReportDeliveryChannelProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["S3BucketName" JSON..= s3BucketName]
+              (Prelude.catMaybes
+                 [(JSON..=) "Formats" Prelude.<$> formats,
+                  (JSON..=) "S3KeyPrefix" Prelude.<$> s3KeyPrefix])))
+instance Property "Formats" ReportDeliveryChannelProperty where
+  type PropertyType "Formats" ReportDeliveryChannelProperty = ValueList Prelude.Text
+  set newValue ReportDeliveryChannelProperty {..}
+    = ReportDeliveryChannelProperty
+        {formats = Prelude.pure newValue, ..}
+instance Property "S3BucketName" ReportDeliveryChannelProperty where
+  type PropertyType "S3BucketName" ReportDeliveryChannelProperty = Value Prelude.Text
+  set newValue ReportDeliveryChannelProperty {..}
+    = ReportDeliveryChannelProperty {s3BucketName = newValue, ..}
+instance Property "S3KeyPrefix" ReportDeliveryChannelProperty where
+  type PropertyType "S3KeyPrefix" ReportDeliveryChannelProperty = Value Prelude.Text
+  set newValue ReportDeliveryChannelProperty {..}
+    = ReportDeliveryChannelProperty
+        {s3KeyPrefix = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Backup/ReportPlan/ReportDeliveryChannelProperty.hs-boot b/gen/Stratosphere/Backup/ReportPlan/ReportDeliveryChannelProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Backup/ReportPlan/ReportDeliveryChannelProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Backup.ReportPlan.ReportDeliveryChannelProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ReportDeliveryChannelProperty :: Prelude.Type
+instance ToResourceProperties ReportDeliveryChannelProperty
+instance Prelude.Eq ReportDeliveryChannelProperty
+instance Prelude.Show ReportDeliveryChannelProperty
+instance JSON.ToJSON ReportDeliveryChannelProperty
diff --git a/gen/Stratosphere/Backup/ReportPlan/ReportSettingProperty.hs b/gen/Stratosphere/Backup/ReportPlan/ReportSettingProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Backup/ReportPlan/ReportSettingProperty.hs
@@ -0,0 +1,74 @@
+module Stratosphere.Backup.ReportPlan.ReportSettingProperty (
+        ReportSettingProperty(..), mkReportSettingProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ReportSettingProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-reportplan-reportsetting.html>
+    ReportSettingProperty {haddock_workaround_ :: (),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-reportplan-reportsetting.html#cfn-backup-reportplan-reportsetting-accounts>
+                           accounts :: (Prelude.Maybe (ValueList Prelude.Text)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-reportplan-reportsetting.html#cfn-backup-reportplan-reportsetting-frameworkarns>
+                           frameworkArns :: (Prelude.Maybe (ValueList Prelude.Text)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-reportplan-reportsetting.html#cfn-backup-reportplan-reportsetting-organizationunits>
+                           organizationUnits :: (Prelude.Maybe (ValueList Prelude.Text)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-reportplan-reportsetting.html#cfn-backup-reportplan-reportsetting-regions>
+                           regions :: (Prelude.Maybe (ValueList Prelude.Text)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-reportplan-reportsetting.html#cfn-backup-reportplan-reportsetting-reporttemplate>
+                           reportTemplate :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkReportSettingProperty ::
+  Value Prelude.Text -> ReportSettingProperty
+mkReportSettingProperty reportTemplate
+  = ReportSettingProperty
+      {haddock_workaround_ = (), reportTemplate = reportTemplate,
+       accounts = Prelude.Nothing, frameworkArns = Prelude.Nothing,
+       organizationUnits = Prelude.Nothing, regions = Prelude.Nothing}
+instance ToResourceProperties ReportSettingProperty where
+  toResourceProperties ReportSettingProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Backup::ReportPlan.ReportSetting",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["ReportTemplate" JSON..= reportTemplate]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Accounts" Prelude.<$> accounts,
+                               (JSON..=) "FrameworkArns" Prelude.<$> frameworkArns,
+                               (JSON..=) "OrganizationUnits" Prelude.<$> organizationUnits,
+                               (JSON..=) "Regions" Prelude.<$> regions]))}
+instance JSON.ToJSON ReportSettingProperty where
+  toJSON ReportSettingProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["ReportTemplate" JSON..= reportTemplate]
+              (Prelude.catMaybes
+                 [(JSON..=) "Accounts" Prelude.<$> accounts,
+                  (JSON..=) "FrameworkArns" Prelude.<$> frameworkArns,
+                  (JSON..=) "OrganizationUnits" Prelude.<$> organizationUnits,
+                  (JSON..=) "Regions" Prelude.<$> regions])))
+instance Property "Accounts" ReportSettingProperty where
+  type PropertyType "Accounts" ReportSettingProperty = ValueList Prelude.Text
+  set newValue ReportSettingProperty {..}
+    = ReportSettingProperty {accounts = Prelude.pure newValue, ..}
+instance Property "FrameworkArns" ReportSettingProperty where
+  type PropertyType "FrameworkArns" ReportSettingProperty = ValueList Prelude.Text
+  set newValue ReportSettingProperty {..}
+    = ReportSettingProperty {frameworkArns = Prelude.pure newValue, ..}
+instance Property "OrganizationUnits" ReportSettingProperty where
+  type PropertyType "OrganizationUnits" ReportSettingProperty = ValueList Prelude.Text
+  set newValue ReportSettingProperty {..}
+    = ReportSettingProperty
+        {organizationUnits = Prelude.pure newValue, ..}
+instance Property "Regions" ReportSettingProperty where
+  type PropertyType "Regions" ReportSettingProperty = ValueList Prelude.Text
+  set newValue ReportSettingProperty {..}
+    = ReportSettingProperty {regions = Prelude.pure newValue, ..}
+instance Property "ReportTemplate" ReportSettingProperty where
+  type PropertyType "ReportTemplate" ReportSettingProperty = Value Prelude.Text
+  set newValue ReportSettingProperty {..}
+    = ReportSettingProperty {reportTemplate = newValue, ..}
diff --git a/gen/Stratosphere/Backup/ReportPlan/ReportSettingProperty.hs-boot b/gen/Stratosphere/Backup/ReportPlan/ReportSettingProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Backup/ReportPlan/ReportSettingProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Backup.ReportPlan.ReportSettingProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ReportSettingProperty :: Prelude.Type
+instance ToResourceProperties ReportSettingProperty
+instance Prelude.Eq ReportSettingProperty
+instance Prelude.Show ReportSettingProperty
+instance JSON.ToJSON ReportSettingProperty
diff --git a/gen/Stratosphere/Backup/RestoreTestingPlan.hs b/gen/Stratosphere/Backup/RestoreTestingPlan.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Backup/RestoreTestingPlan.hs
@@ -0,0 +1,93 @@
+module Stratosphere.Backup.RestoreTestingPlan (
+        module Exports, RestoreTestingPlan(..), mkRestoreTestingPlan
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.Backup.RestoreTestingPlan.RestoreTestingRecoveryPointSelectionProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data RestoreTestingPlan
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-backup-restoretestingplan.html>
+    RestoreTestingPlan {haddock_workaround_ :: (),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-backup-restoretestingplan.html#cfn-backup-restoretestingplan-recoverypointselection>
+                        recoveryPointSelection :: RestoreTestingRecoveryPointSelectionProperty,
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-backup-restoretestingplan.html#cfn-backup-restoretestingplan-restoretestingplanname>
+                        restoreTestingPlanName :: (Value Prelude.Text),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-backup-restoretestingplan.html#cfn-backup-restoretestingplan-scheduleexpression>
+                        scheduleExpression :: (Value Prelude.Text),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-backup-restoretestingplan.html#cfn-backup-restoretestingplan-scheduleexpressiontimezone>
+                        scheduleExpressionTimezone :: (Prelude.Maybe (Value Prelude.Text)),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-backup-restoretestingplan.html#cfn-backup-restoretestingplan-startwindowhours>
+                        startWindowHours :: (Prelude.Maybe (Value Prelude.Integer)),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-backup-restoretestingplan.html#cfn-backup-restoretestingplan-tags>
+                        tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkRestoreTestingPlan ::
+  RestoreTestingRecoveryPointSelectionProperty
+  -> Value Prelude.Text -> Value Prelude.Text -> RestoreTestingPlan
+mkRestoreTestingPlan
+  recoveryPointSelection
+  restoreTestingPlanName
+  scheduleExpression
+  = RestoreTestingPlan
+      {haddock_workaround_ = (),
+       recoveryPointSelection = recoveryPointSelection,
+       restoreTestingPlanName = restoreTestingPlanName,
+       scheduleExpression = scheduleExpression,
+       scheduleExpressionTimezone = Prelude.Nothing,
+       startWindowHours = Prelude.Nothing, tags = Prelude.Nothing}
+instance ToResourceProperties RestoreTestingPlan where
+  toResourceProperties RestoreTestingPlan {..}
+    = ResourceProperties
+        {awsType = "AWS::Backup::RestoreTestingPlan",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["RecoveryPointSelection" JSON..= recoveryPointSelection,
+                            "RestoreTestingPlanName" JSON..= restoreTestingPlanName,
+                            "ScheduleExpression" JSON..= scheduleExpression]
+                           (Prelude.catMaybes
+                              [(JSON..=) "ScheduleExpressionTimezone"
+                                 Prelude.<$> scheduleExpressionTimezone,
+                               (JSON..=) "StartWindowHours" Prelude.<$> startWindowHours,
+                               (JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON RestoreTestingPlan where
+  toJSON RestoreTestingPlan {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["RecoveryPointSelection" JSON..= recoveryPointSelection,
+               "RestoreTestingPlanName" JSON..= restoreTestingPlanName,
+               "ScheduleExpression" JSON..= scheduleExpression]
+              (Prelude.catMaybes
+                 [(JSON..=) "ScheduleExpressionTimezone"
+                    Prelude.<$> scheduleExpressionTimezone,
+                  (JSON..=) "StartWindowHours" Prelude.<$> startWindowHours,
+                  (JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "RecoveryPointSelection" RestoreTestingPlan where
+  type PropertyType "RecoveryPointSelection" RestoreTestingPlan = RestoreTestingRecoveryPointSelectionProperty
+  set newValue RestoreTestingPlan {..}
+    = RestoreTestingPlan {recoveryPointSelection = newValue, ..}
+instance Property "RestoreTestingPlanName" RestoreTestingPlan where
+  type PropertyType "RestoreTestingPlanName" RestoreTestingPlan = Value Prelude.Text
+  set newValue RestoreTestingPlan {..}
+    = RestoreTestingPlan {restoreTestingPlanName = newValue, ..}
+instance Property "ScheduleExpression" RestoreTestingPlan where
+  type PropertyType "ScheduleExpression" RestoreTestingPlan = Value Prelude.Text
+  set newValue RestoreTestingPlan {..}
+    = RestoreTestingPlan {scheduleExpression = newValue, ..}
+instance Property "ScheduleExpressionTimezone" RestoreTestingPlan where
+  type PropertyType "ScheduleExpressionTimezone" RestoreTestingPlan = Value Prelude.Text
+  set newValue RestoreTestingPlan {..}
+    = RestoreTestingPlan
+        {scheduleExpressionTimezone = Prelude.pure newValue, ..}
+instance Property "StartWindowHours" RestoreTestingPlan where
+  type PropertyType "StartWindowHours" RestoreTestingPlan = Value Prelude.Integer
+  set newValue RestoreTestingPlan {..}
+    = RestoreTestingPlan {startWindowHours = Prelude.pure newValue, ..}
+instance Property "Tags" RestoreTestingPlan where
+  type PropertyType "Tags" RestoreTestingPlan = [Tag]
+  set newValue RestoreTestingPlan {..}
+    = RestoreTestingPlan {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Backup/RestoreTestingPlan/RestoreTestingRecoveryPointSelectionProperty.hs b/gen/Stratosphere/Backup/RestoreTestingPlan/RestoreTestingRecoveryPointSelectionProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Backup/RestoreTestingPlan/RestoreTestingRecoveryPointSelectionProperty.hs
@@ -0,0 +1,88 @@
+module Stratosphere.Backup.RestoreTestingPlan.RestoreTestingRecoveryPointSelectionProperty (
+        RestoreTestingRecoveryPointSelectionProperty(..),
+        mkRestoreTestingRecoveryPointSelectionProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data RestoreTestingRecoveryPointSelectionProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-restoretestingplan-restoretestingrecoverypointselection.html>
+    RestoreTestingRecoveryPointSelectionProperty {haddock_workaround_ :: (),
+                                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-restoretestingplan-restoretestingrecoverypointselection.html#cfn-backup-restoretestingplan-restoretestingrecoverypointselection-algorithm>
+                                                  algorithm :: (Value Prelude.Text),
+                                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-restoretestingplan-restoretestingrecoverypointselection.html#cfn-backup-restoretestingplan-restoretestingrecoverypointselection-excludevaults>
+                                                  excludeVaults :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-restoretestingplan-restoretestingrecoverypointselection.html#cfn-backup-restoretestingplan-restoretestingrecoverypointselection-includevaults>
+                                                  includeVaults :: (ValueList Prelude.Text),
+                                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-restoretestingplan-restoretestingrecoverypointselection.html#cfn-backup-restoretestingplan-restoretestingrecoverypointselection-recoverypointtypes>
+                                                  recoveryPointTypes :: (ValueList Prelude.Text),
+                                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-restoretestingplan-restoretestingrecoverypointselection.html#cfn-backup-restoretestingplan-restoretestingrecoverypointselection-selectionwindowdays>
+                                                  selectionWindowDays :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkRestoreTestingRecoveryPointSelectionProperty ::
+  Value Prelude.Text
+  -> ValueList Prelude.Text
+     -> ValueList Prelude.Text
+        -> RestoreTestingRecoveryPointSelectionProperty
+mkRestoreTestingRecoveryPointSelectionProperty
+  algorithm
+  includeVaults
+  recoveryPointTypes
+  = RestoreTestingRecoveryPointSelectionProperty
+      {haddock_workaround_ = (), algorithm = algorithm,
+       includeVaults = includeVaults,
+       recoveryPointTypes = recoveryPointTypes,
+       excludeVaults = Prelude.Nothing,
+       selectionWindowDays = Prelude.Nothing}
+instance ToResourceProperties RestoreTestingRecoveryPointSelectionProperty where
+  toResourceProperties
+    RestoreTestingRecoveryPointSelectionProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Backup::RestoreTestingPlan.RestoreTestingRecoveryPointSelection",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Algorithm" JSON..= algorithm,
+                            "IncludeVaults" JSON..= includeVaults,
+                            "RecoveryPointTypes" JSON..= recoveryPointTypes]
+                           (Prelude.catMaybes
+                              [(JSON..=) "ExcludeVaults" Prelude.<$> excludeVaults,
+                               (JSON..=) "SelectionWindowDays" Prelude.<$> selectionWindowDays]))}
+instance JSON.ToJSON RestoreTestingRecoveryPointSelectionProperty where
+  toJSON RestoreTestingRecoveryPointSelectionProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Algorithm" JSON..= algorithm,
+               "IncludeVaults" JSON..= includeVaults,
+               "RecoveryPointTypes" JSON..= recoveryPointTypes]
+              (Prelude.catMaybes
+                 [(JSON..=) "ExcludeVaults" Prelude.<$> excludeVaults,
+                  (JSON..=) "SelectionWindowDays" Prelude.<$> selectionWindowDays])))
+instance Property "Algorithm" RestoreTestingRecoveryPointSelectionProperty where
+  type PropertyType "Algorithm" RestoreTestingRecoveryPointSelectionProperty = Value Prelude.Text
+  set newValue RestoreTestingRecoveryPointSelectionProperty {..}
+    = RestoreTestingRecoveryPointSelectionProperty
+        {algorithm = newValue, ..}
+instance Property "ExcludeVaults" RestoreTestingRecoveryPointSelectionProperty where
+  type PropertyType "ExcludeVaults" RestoreTestingRecoveryPointSelectionProperty = ValueList Prelude.Text
+  set newValue RestoreTestingRecoveryPointSelectionProperty {..}
+    = RestoreTestingRecoveryPointSelectionProperty
+        {excludeVaults = Prelude.pure newValue, ..}
+instance Property "IncludeVaults" RestoreTestingRecoveryPointSelectionProperty where
+  type PropertyType "IncludeVaults" RestoreTestingRecoveryPointSelectionProperty = ValueList Prelude.Text
+  set newValue RestoreTestingRecoveryPointSelectionProperty {..}
+    = RestoreTestingRecoveryPointSelectionProperty
+        {includeVaults = newValue, ..}
+instance Property "RecoveryPointTypes" RestoreTestingRecoveryPointSelectionProperty where
+  type PropertyType "RecoveryPointTypes" RestoreTestingRecoveryPointSelectionProperty = ValueList Prelude.Text
+  set newValue RestoreTestingRecoveryPointSelectionProperty {..}
+    = RestoreTestingRecoveryPointSelectionProperty
+        {recoveryPointTypes = newValue, ..}
+instance Property "SelectionWindowDays" RestoreTestingRecoveryPointSelectionProperty where
+  type PropertyType "SelectionWindowDays" RestoreTestingRecoveryPointSelectionProperty = Value Prelude.Integer
+  set newValue RestoreTestingRecoveryPointSelectionProperty {..}
+    = RestoreTestingRecoveryPointSelectionProperty
+        {selectionWindowDays = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Backup/RestoreTestingPlan/RestoreTestingRecoveryPointSelectionProperty.hs-boot b/gen/Stratosphere/Backup/RestoreTestingPlan/RestoreTestingRecoveryPointSelectionProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Backup/RestoreTestingPlan/RestoreTestingRecoveryPointSelectionProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Backup.RestoreTestingPlan.RestoreTestingRecoveryPointSelectionProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data RestoreTestingRecoveryPointSelectionProperty :: Prelude.Type
+instance ToResourceProperties RestoreTestingRecoveryPointSelectionProperty
+instance Prelude.Eq RestoreTestingRecoveryPointSelectionProperty
+instance Prelude.Show RestoreTestingRecoveryPointSelectionProperty
+instance JSON.ToJSON RestoreTestingRecoveryPointSelectionProperty
diff --git a/gen/Stratosphere/Backup/RestoreTestingSelection.hs b/gen/Stratosphere/Backup/RestoreTestingSelection.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Backup/RestoreTestingSelection.hs
@@ -0,0 +1,124 @@
+module Stratosphere.Backup.RestoreTestingSelection (
+        module Exports, RestoreTestingSelection(..),
+        mkRestoreTestingSelection
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.Backup.RestoreTestingSelection.ProtectedResourceConditionsProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data RestoreTestingSelection
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-backup-restoretestingselection.html>
+    RestoreTestingSelection {haddock_workaround_ :: (),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-backup-restoretestingselection.html#cfn-backup-restoretestingselection-iamrolearn>
+                             iamRoleArn :: (Value Prelude.Text),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-backup-restoretestingselection.html#cfn-backup-restoretestingselection-protectedresourcearns>
+                             protectedResourceArns :: (Prelude.Maybe (ValueList Prelude.Text)),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-backup-restoretestingselection.html#cfn-backup-restoretestingselection-protectedresourceconditions>
+                             protectedResourceConditions :: (Prelude.Maybe ProtectedResourceConditionsProperty),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-backup-restoretestingselection.html#cfn-backup-restoretestingselection-protectedresourcetype>
+                             protectedResourceType :: (Value Prelude.Text),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-backup-restoretestingselection.html#cfn-backup-restoretestingselection-restoremetadataoverrides>
+                             restoreMetadataOverrides :: (Prelude.Maybe (Prelude.Map Prelude.Text (Value Prelude.Text))),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-backup-restoretestingselection.html#cfn-backup-restoretestingselection-restoretestingplanname>
+                             restoreTestingPlanName :: (Value Prelude.Text),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-backup-restoretestingselection.html#cfn-backup-restoretestingselection-restoretestingselectionname>
+                             restoreTestingSelectionName :: (Value Prelude.Text),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-backup-restoretestingselection.html#cfn-backup-restoretestingselection-validationwindowhours>
+                             validationWindowHours :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkRestoreTestingSelection ::
+  Value Prelude.Text
+  -> Value Prelude.Text
+     -> Value Prelude.Text
+        -> Value Prelude.Text -> RestoreTestingSelection
+mkRestoreTestingSelection
+  iamRoleArn
+  protectedResourceType
+  restoreTestingPlanName
+  restoreTestingSelectionName
+  = RestoreTestingSelection
+      {haddock_workaround_ = (), iamRoleArn = iamRoleArn,
+       protectedResourceType = protectedResourceType,
+       restoreTestingPlanName = restoreTestingPlanName,
+       restoreTestingSelectionName = restoreTestingSelectionName,
+       protectedResourceArns = Prelude.Nothing,
+       protectedResourceConditions = Prelude.Nothing,
+       restoreMetadataOverrides = Prelude.Nothing,
+       validationWindowHours = Prelude.Nothing}
+instance ToResourceProperties RestoreTestingSelection where
+  toResourceProperties RestoreTestingSelection {..}
+    = ResourceProperties
+        {awsType = "AWS::Backup::RestoreTestingSelection",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["IamRoleArn" JSON..= iamRoleArn,
+                            "ProtectedResourceType" JSON..= protectedResourceType,
+                            "RestoreTestingPlanName" JSON..= restoreTestingPlanName,
+                            "RestoreTestingSelectionName" JSON..= restoreTestingSelectionName]
+                           (Prelude.catMaybes
+                              [(JSON..=) "ProtectedResourceArns"
+                                 Prelude.<$> protectedResourceArns,
+                               (JSON..=) "ProtectedResourceConditions"
+                                 Prelude.<$> protectedResourceConditions,
+                               (JSON..=) "RestoreMetadataOverrides"
+                                 Prelude.<$> restoreMetadataOverrides,
+                               (JSON..=) "ValidationWindowHours"
+                                 Prelude.<$> validationWindowHours]))}
+instance JSON.ToJSON RestoreTestingSelection where
+  toJSON RestoreTestingSelection {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["IamRoleArn" JSON..= iamRoleArn,
+               "ProtectedResourceType" JSON..= protectedResourceType,
+               "RestoreTestingPlanName" JSON..= restoreTestingPlanName,
+               "RestoreTestingSelectionName" JSON..= restoreTestingSelectionName]
+              (Prelude.catMaybes
+                 [(JSON..=) "ProtectedResourceArns"
+                    Prelude.<$> protectedResourceArns,
+                  (JSON..=) "ProtectedResourceConditions"
+                    Prelude.<$> protectedResourceConditions,
+                  (JSON..=) "RestoreMetadataOverrides"
+                    Prelude.<$> restoreMetadataOverrides,
+                  (JSON..=) "ValidationWindowHours"
+                    Prelude.<$> validationWindowHours])))
+instance Property "IamRoleArn" RestoreTestingSelection where
+  type PropertyType "IamRoleArn" RestoreTestingSelection = Value Prelude.Text
+  set newValue RestoreTestingSelection {..}
+    = RestoreTestingSelection {iamRoleArn = newValue, ..}
+instance Property "ProtectedResourceArns" RestoreTestingSelection where
+  type PropertyType "ProtectedResourceArns" RestoreTestingSelection = ValueList Prelude.Text
+  set newValue RestoreTestingSelection {..}
+    = RestoreTestingSelection
+        {protectedResourceArns = Prelude.pure newValue, ..}
+instance Property "ProtectedResourceConditions" RestoreTestingSelection where
+  type PropertyType "ProtectedResourceConditions" RestoreTestingSelection = ProtectedResourceConditionsProperty
+  set newValue RestoreTestingSelection {..}
+    = RestoreTestingSelection
+        {protectedResourceConditions = Prelude.pure newValue, ..}
+instance Property "ProtectedResourceType" RestoreTestingSelection where
+  type PropertyType "ProtectedResourceType" RestoreTestingSelection = Value Prelude.Text
+  set newValue RestoreTestingSelection {..}
+    = RestoreTestingSelection {protectedResourceType = newValue, ..}
+instance Property "RestoreMetadataOverrides" RestoreTestingSelection where
+  type PropertyType "RestoreMetadataOverrides" RestoreTestingSelection = Prelude.Map Prelude.Text (Value Prelude.Text)
+  set newValue RestoreTestingSelection {..}
+    = RestoreTestingSelection
+        {restoreMetadataOverrides = Prelude.pure newValue, ..}
+instance Property "RestoreTestingPlanName" RestoreTestingSelection where
+  type PropertyType "RestoreTestingPlanName" RestoreTestingSelection = Value Prelude.Text
+  set newValue RestoreTestingSelection {..}
+    = RestoreTestingSelection {restoreTestingPlanName = newValue, ..}
+instance Property "RestoreTestingSelectionName" RestoreTestingSelection where
+  type PropertyType "RestoreTestingSelectionName" RestoreTestingSelection = Value Prelude.Text
+  set newValue RestoreTestingSelection {..}
+    = RestoreTestingSelection
+        {restoreTestingSelectionName = newValue, ..}
+instance Property "ValidationWindowHours" RestoreTestingSelection where
+  type PropertyType "ValidationWindowHours" RestoreTestingSelection = Value Prelude.Integer
+  set newValue RestoreTestingSelection {..}
+    = RestoreTestingSelection
+        {validationWindowHours = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Backup/RestoreTestingSelection/KeyValueProperty.hs b/gen/Stratosphere/Backup/RestoreTestingSelection/KeyValueProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Backup/RestoreTestingSelection/KeyValueProperty.hs
@@ -0,0 +1,38 @@
+module Stratosphere.Backup.RestoreTestingSelection.KeyValueProperty (
+        KeyValueProperty(..), mkKeyValueProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data KeyValueProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-restoretestingselection-keyvalue.html>
+    KeyValueProperty {haddock_workaround_ :: (),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-restoretestingselection-keyvalue.html#cfn-backup-restoretestingselection-keyvalue-key>
+                      key :: (Value Prelude.Text),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-restoretestingselection-keyvalue.html#cfn-backup-restoretestingselection-keyvalue-value>
+                      value :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkKeyValueProperty ::
+  Value Prelude.Text -> Value Prelude.Text -> KeyValueProperty
+mkKeyValueProperty key value
+  = KeyValueProperty
+      {haddock_workaround_ = (), key = key, value = value}
+instance ToResourceProperties KeyValueProperty where
+  toResourceProperties KeyValueProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Backup::RestoreTestingSelection.KeyValue",
+         supportsTags = Prelude.False,
+         properties = ["Key" JSON..= key, "Value" JSON..= value]}
+instance JSON.ToJSON KeyValueProperty where
+  toJSON KeyValueProperty {..}
+    = JSON.object ["Key" JSON..= key, "Value" JSON..= value]
+instance Property "Key" KeyValueProperty where
+  type PropertyType "Key" KeyValueProperty = Value Prelude.Text
+  set newValue KeyValueProperty {..}
+    = KeyValueProperty {key = newValue, ..}
+instance Property "Value" KeyValueProperty where
+  type PropertyType "Value" KeyValueProperty = Value Prelude.Text
+  set newValue KeyValueProperty {..}
+    = KeyValueProperty {value = newValue, ..}
diff --git a/gen/Stratosphere/Backup/RestoreTestingSelection/KeyValueProperty.hs-boot b/gen/Stratosphere/Backup/RestoreTestingSelection/KeyValueProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Backup/RestoreTestingSelection/KeyValueProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Backup.RestoreTestingSelection.KeyValueProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data KeyValueProperty :: Prelude.Type
+instance ToResourceProperties KeyValueProperty
+instance Prelude.Eq KeyValueProperty
+instance Prelude.Show KeyValueProperty
+instance JSON.ToJSON KeyValueProperty
diff --git a/gen/Stratosphere/Backup/RestoreTestingSelection/ProtectedResourceConditionsProperty.hs b/gen/Stratosphere/Backup/RestoreTestingSelection/ProtectedResourceConditionsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Backup/RestoreTestingSelection/ProtectedResourceConditionsProperty.hs
@@ -0,0 +1,49 @@
+module Stratosphere.Backup.RestoreTestingSelection.ProtectedResourceConditionsProperty (
+        module Exports, ProtectedResourceConditionsProperty(..),
+        mkProtectedResourceConditionsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.Backup.RestoreTestingSelection.KeyValueProperty as Exports
+import Stratosphere.ResourceProperties
+data ProtectedResourceConditionsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-restoretestingselection-protectedresourceconditions.html>
+    ProtectedResourceConditionsProperty {haddock_workaround_ :: (),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-restoretestingselection-protectedresourceconditions.html#cfn-backup-restoretestingselection-protectedresourceconditions-stringequals>
+                                         stringEquals :: (Prelude.Maybe [KeyValueProperty]),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-restoretestingselection-protectedresourceconditions.html#cfn-backup-restoretestingselection-protectedresourceconditions-stringnotequals>
+                                         stringNotEquals :: (Prelude.Maybe [KeyValueProperty])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkProtectedResourceConditionsProperty ::
+  ProtectedResourceConditionsProperty
+mkProtectedResourceConditionsProperty
+  = ProtectedResourceConditionsProperty
+      {haddock_workaround_ = (), stringEquals = Prelude.Nothing,
+       stringNotEquals = Prelude.Nothing}
+instance ToResourceProperties ProtectedResourceConditionsProperty where
+  toResourceProperties ProtectedResourceConditionsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Backup::RestoreTestingSelection.ProtectedResourceConditions",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "StringEquals" Prelude.<$> stringEquals,
+                            (JSON..=) "StringNotEquals" Prelude.<$> stringNotEquals])}
+instance JSON.ToJSON ProtectedResourceConditionsProperty where
+  toJSON ProtectedResourceConditionsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "StringEquals" Prelude.<$> stringEquals,
+               (JSON..=) "StringNotEquals" Prelude.<$> stringNotEquals]))
+instance Property "StringEquals" ProtectedResourceConditionsProperty where
+  type PropertyType "StringEquals" ProtectedResourceConditionsProperty = [KeyValueProperty]
+  set newValue ProtectedResourceConditionsProperty {..}
+    = ProtectedResourceConditionsProperty
+        {stringEquals = Prelude.pure newValue, ..}
+instance Property "StringNotEquals" ProtectedResourceConditionsProperty where
+  type PropertyType "StringNotEquals" ProtectedResourceConditionsProperty = [KeyValueProperty]
+  set newValue ProtectedResourceConditionsProperty {..}
+    = ProtectedResourceConditionsProperty
+        {stringNotEquals = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Backup/RestoreTestingSelection/ProtectedResourceConditionsProperty.hs-boot b/gen/Stratosphere/Backup/RestoreTestingSelection/ProtectedResourceConditionsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Backup/RestoreTestingSelection/ProtectedResourceConditionsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Backup.RestoreTestingSelection.ProtectedResourceConditionsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ProtectedResourceConditionsProperty :: Prelude.Type
+instance ToResourceProperties ProtectedResourceConditionsProperty
+instance Prelude.Eq ProtectedResourceConditionsProperty
+instance Prelude.Show ProtectedResourceConditionsProperty
+instance JSON.ToJSON ProtectedResourceConditionsProperty
diff --git a/stratosphere-backup.cabal b/stratosphere-backup.cabal
new file mode 100644
--- /dev/null
+++ b/stratosphere-backup.cabal
@@ -0,0 +1,101 @@
+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-backup
+version:        1.0.0
+synopsis:       Stratosphere integration for AWS Backup.
+description:    Integration into stratosphere to generate resources and properties for AWS Backup
+category:       AWS, Cloud, Backup
+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.Backup.BackupPlan
+      Stratosphere.Backup.BackupPlan.AdvancedBackupSettingResourceTypeProperty
+      Stratosphere.Backup.BackupPlan.BackupPlanResourceTypeProperty
+      Stratosphere.Backup.BackupPlan.BackupRuleResourceTypeProperty
+      Stratosphere.Backup.BackupPlan.CopyActionResourceTypeProperty
+      Stratosphere.Backup.BackupPlan.IndexActionsResourceTypeProperty
+      Stratosphere.Backup.BackupPlan.LifecycleResourceTypeProperty
+      Stratosphere.Backup.BackupSelection
+      Stratosphere.Backup.BackupSelection.BackupSelectionResourceTypeProperty
+      Stratosphere.Backup.BackupSelection.ConditionParameterProperty
+      Stratosphere.Backup.BackupSelection.ConditionResourceTypeProperty
+      Stratosphere.Backup.BackupSelection.ConditionsProperty
+      Stratosphere.Backup.BackupVault
+      Stratosphere.Backup.BackupVault.LockConfigurationTypeProperty
+      Stratosphere.Backup.BackupVault.NotificationObjectTypeProperty
+      Stratosphere.Backup.Framework
+      Stratosphere.Backup.Framework.ControlInputParameterProperty
+      Stratosphere.Backup.Framework.ControlScopeProperty
+      Stratosphere.Backup.Framework.FrameworkControlProperty
+      Stratosphere.Backup.LogicallyAirGappedBackupVault
+      Stratosphere.Backup.LogicallyAirGappedBackupVault.NotificationObjectTypeProperty
+      Stratosphere.Backup.ReportPlan
+      Stratosphere.Backup.ReportPlan.ReportDeliveryChannelProperty
+      Stratosphere.Backup.ReportPlan.ReportSettingProperty
+      Stratosphere.Backup.RestoreTestingPlan
+      Stratosphere.Backup.RestoreTestingPlan.RestoreTestingRecoveryPointSelectionProperty
+      Stratosphere.Backup.RestoreTestingSelection
+      Stratosphere.Backup.RestoreTestingSelection.KeyValueProperty
+      Stratosphere.Backup.RestoreTestingSelection.ProtectedResourceConditionsProperty
+  other-modules:
+      Paths_stratosphere_backup
+  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
