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/Cassandra/Keyspace.hs b/gen/Stratosphere/Cassandra/Keyspace.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cassandra/Keyspace.hs
@@ -0,0 +1,69 @@
+module Stratosphere.Cassandra.Keyspace (
+        module Exports, Keyspace(..), mkKeyspace
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.Cassandra.Keyspace.ReplicationSpecificationProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data Keyspace
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cassandra-keyspace.html>
+    Keyspace {haddock_workaround_ :: (),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cassandra-keyspace.html#cfn-cassandra-keyspace-clientsidetimestampsenabled>
+              clientSideTimestampsEnabled :: (Prelude.Maybe (Value Prelude.Bool)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cassandra-keyspace.html#cfn-cassandra-keyspace-keyspacename>
+              keyspaceName :: (Prelude.Maybe (Value Prelude.Text)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cassandra-keyspace.html#cfn-cassandra-keyspace-replicationspecification>
+              replicationSpecification :: (Prelude.Maybe ReplicationSpecificationProperty),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cassandra-keyspace.html#cfn-cassandra-keyspace-tags>
+              tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkKeyspace :: Keyspace
+mkKeyspace
+  = Keyspace
+      {haddock_workaround_ = (),
+       clientSideTimestampsEnabled = Prelude.Nothing,
+       keyspaceName = Prelude.Nothing,
+       replicationSpecification = Prelude.Nothing, tags = Prelude.Nothing}
+instance ToResourceProperties Keyspace where
+  toResourceProperties Keyspace {..}
+    = ResourceProperties
+        {awsType = "AWS::Cassandra::Keyspace", supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "ClientSideTimestampsEnabled"
+                              Prelude.<$> clientSideTimestampsEnabled,
+                            (JSON..=) "KeyspaceName" Prelude.<$> keyspaceName,
+                            (JSON..=) "ReplicationSpecification"
+                              Prelude.<$> replicationSpecification,
+                            (JSON..=) "Tags" Prelude.<$> tags])}
+instance JSON.ToJSON Keyspace where
+  toJSON Keyspace {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "ClientSideTimestampsEnabled"
+                 Prelude.<$> clientSideTimestampsEnabled,
+               (JSON..=) "KeyspaceName" Prelude.<$> keyspaceName,
+               (JSON..=) "ReplicationSpecification"
+                 Prelude.<$> replicationSpecification,
+               (JSON..=) "Tags" Prelude.<$> tags]))
+instance Property "ClientSideTimestampsEnabled" Keyspace where
+  type PropertyType "ClientSideTimestampsEnabled" Keyspace = Value Prelude.Bool
+  set newValue Keyspace {..}
+    = Keyspace
+        {clientSideTimestampsEnabled = Prelude.pure newValue, ..}
+instance Property "KeyspaceName" Keyspace where
+  type PropertyType "KeyspaceName" Keyspace = Value Prelude.Text
+  set newValue Keyspace {..}
+    = Keyspace {keyspaceName = Prelude.pure newValue, ..}
+instance Property "ReplicationSpecification" Keyspace where
+  type PropertyType "ReplicationSpecification" Keyspace = ReplicationSpecificationProperty
+  set newValue Keyspace {..}
+    = Keyspace {replicationSpecification = Prelude.pure newValue, ..}
+instance Property "Tags" Keyspace where
+  type PropertyType "Tags" Keyspace = [Tag]
+  set newValue Keyspace {..}
+    = Keyspace {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Cassandra/Keyspace/ReplicationSpecificationProperty.hs b/gen/Stratosphere/Cassandra/Keyspace/ReplicationSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cassandra/Keyspace/ReplicationSpecificationProperty.hs
@@ -0,0 +1,49 @@
+module Stratosphere.Cassandra.Keyspace.ReplicationSpecificationProperty (
+        ReplicationSpecificationProperty(..),
+        mkReplicationSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ReplicationSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cassandra-keyspace-replicationspecification.html>
+    ReplicationSpecificationProperty {haddock_workaround_ :: (),
+                                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cassandra-keyspace-replicationspecification.html#cfn-cassandra-keyspace-replicationspecification-regionlist>
+                                      regionList :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cassandra-keyspace-replicationspecification.html#cfn-cassandra-keyspace-replicationspecification-replicationstrategy>
+                                      replicationStrategy :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkReplicationSpecificationProperty ::
+  ReplicationSpecificationProperty
+mkReplicationSpecificationProperty
+  = ReplicationSpecificationProperty
+      {haddock_workaround_ = (), regionList = Prelude.Nothing,
+       replicationStrategy = Prelude.Nothing}
+instance ToResourceProperties ReplicationSpecificationProperty where
+  toResourceProperties ReplicationSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Cassandra::Keyspace.ReplicationSpecification",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "RegionList" Prelude.<$> regionList,
+                            (JSON..=) "ReplicationStrategy" Prelude.<$> replicationStrategy])}
+instance JSON.ToJSON ReplicationSpecificationProperty where
+  toJSON ReplicationSpecificationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "RegionList" Prelude.<$> regionList,
+               (JSON..=) "ReplicationStrategy" Prelude.<$> replicationStrategy]))
+instance Property "RegionList" ReplicationSpecificationProperty where
+  type PropertyType "RegionList" ReplicationSpecificationProperty = ValueList Prelude.Text
+  set newValue ReplicationSpecificationProperty {..}
+    = ReplicationSpecificationProperty
+        {regionList = Prelude.pure newValue, ..}
+instance Property "ReplicationStrategy" ReplicationSpecificationProperty where
+  type PropertyType "ReplicationStrategy" ReplicationSpecificationProperty = Value Prelude.Text
+  set newValue ReplicationSpecificationProperty {..}
+    = ReplicationSpecificationProperty
+        {replicationStrategy = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Cassandra/Keyspace/ReplicationSpecificationProperty.hs-boot b/gen/Stratosphere/Cassandra/Keyspace/ReplicationSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cassandra/Keyspace/ReplicationSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Cassandra.Keyspace.ReplicationSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ReplicationSpecificationProperty :: Prelude.Type
+instance ToResourceProperties ReplicationSpecificationProperty
+instance Prelude.Eq ReplicationSpecificationProperty
+instance Prelude.Show ReplicationSpecificationProperty
+instance JSON.ToJSON ReplicationSpecificationProperty
diff --git a/gen/Stratosphere/Cassandra/Table.hs b/gen/Stratosphere/Cassandra/Table.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cassandra/Table.hs
@@ -0,0 +1,168 @@
+module Stratosphere.Cassandra.Table (
+        module Exports, Table(..), mkTable
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.Cassandra.Table.AutoScalingSpecificationProperty as Exports
+import {-# SOURCE #-} Stratosphere.Cassandra.Table.BillingModeProperty as Exports
+import {-# SOURCE #-} Stratosphere.Cassandra.Table.CdcSpecificationProperty as Exports
+import {-# SOURCE #-} Stratosphere.Cassandra.Table.ClusteringKeyColumnProperty as Exports
+import {-# SOURCE #-} Stratosphere.Cassandra.Table.ColumnProperty as Exports
+import {-# SOURCE #-} Stratosphere.Cassandra.Table.EncryptionSpecificationProperty as Exports
+import {-# SOURCE #-} Stratosphere.Cassandra.Table.ReplicaSpecificationProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data Table
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cassandra-table.html>
+    Table {haddock_workaround_ :: (),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cassandra-table.html#cfn-cassandra-table-autoscalingspecifications>
+           autoScalingSpecifications :: (Prelude.Maybe AutoScalingSpecificationProperty),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cassandra-table.html#cfn-cassandra-table-billingmode>
+           billingMode :: (Prelude.Maybe BillingModeProperty),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cassandra-table.html#cfn-cassandra-table-cdcspecification>
+           cdcSpecification :: (Prelude.Maybe CdcSpecificationProperty),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cassandra-table.html#cfn-cassandra-table-clientsidetimestampsenabled>
+           clientSideTimestampsEnabled :: (Prelude.Maybe (Value Prelude.Bool)),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cassandra-table.html#cfn-cassandra-table-clusteringkeycolumns>
+           clusteringKeyColumns :: (Prelude.Maybe [ClusteringKeyColumnProperty]),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cassandra-table.html#cfn-cassandra-table-defaulttimetolive>
+           defaultTimeToLive :: (Prelude.Maybe (Value Prelude.Integer)),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cassandra-table.html#cfn-cassandra-table-encryptionspecification>
+           encryptionSpecification :: (Prelude.Maybe EncryptionSpecificationProperty),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cassandra-table.html#cfn-cassandra-table-keyspacename>
+           keyspaceName :: (Value Prelude.Text),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cassandra-table.html#cfn-cassandra-table-partitionkeycolumns>
+           partitionKeyColumns :: [ColumnProperty],
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cassandra-table.html#cfn-cassandra-table-pointintimerecoveryenabled>
+           pointInTimeRecoveryEnabled :: (Prelude.Maybe (Value Prelude.Bool)),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cassandra-table.html#cfn-cassandra-table-regularcolumns>
+           regularColumns :: (Prelude.Maybe [ColumnProperty]),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cassandra-table.html#cfn-cassandra-table-replicaspecifications>
+           replicaSpecifications :: (Prelude.Maybe [ReplicaSpecificationProperty]),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cassandra-table.html#cfn-cassandra-table-tablename>
+           tableName :: (Prelude.Maybe (Value Prelude.Text)),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cassandra-table.html#cfn-cassandra-table-tags>
+           tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTable :: Value Prelude.Text -> [ColumnProperty] -> Table
+mkTable keyspaceName partitionKeyColumns
+  = Table
+      {haddock_workaround_ = (), keyspaceName = keyspaceName,
+       partitionKeyColumns = partitionKeyColumns,
+       autoScalingSpecifications = Prelude.Nothing,
+       billingMode = Prelude.Nothing, cdcSpecification = Prelude.Nothing,
+       clientSideTimestampsEnabled = Prelude.Nothing,
+       clusteringKeyColumns = Prelude.Nothing,
+       defaultTimeToLive = Prelude.Nothing,
+       encryptionSpecification = Prelude.Nothing,
+       pointInTimeRecoveryEnabled = Prelude.Nothing,
+       regularColumns = Prelude.Nothing,
+       replicaSpecifications = Prelude.Nothing,
+       tableName = Prelude.Nothing, tags = Prelude.Nothing}
+instance ToResourceProperties Table where
+  toResourceProperties Table {..}
+    = ResourceProperties
+        {awsType = "AWS::Cassandra::Table", supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["KeyspaceName" JSON..= keyspaceName,
+                            "PartitionKeyColumns" JSON..= partitionKeyColumns]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AutoScalingSpecifications"
+                                 Prelude.<$> autoScalingSpecifications,
+                               (JSON..=) "BillingMode" Prelude.<$> billingMode,
+                               (JSON..=) "CdcSpecification" Prelude.<$> cdcSpecification,
+                               (JSON..=) "ClientSideTimestampsEnabled"
+                                 Prelude.<$> clientSideTimestampsEnabled,
+                               (JSON..=) "ClusteringKeyColumns" Prelude.<$> clusteringKeyColumns,
+                               (JSON..=) "DefaultTimeToLive" Prelude.<$> defaultTimeToLive,
+                               (JSON..=) "EncryptionSpecification"
+                                 Prelude.<$> encryptionSpecification,
+                               (JSON..=) "PointInTimeRecoveryEnabled"
+                                 Prelude.<$> pointInTimeRecoveryEnabled,
+                               (JSON..=) "RegularColumns" Prelude.<$> regularColumns,
+                               (JSON..=) "ReplicaSpecifications"
+                                 Prelude.<$> replicaSpecifications,
+                               (JSON..=) "TableName" Prelude.<$> tableName,
+                               (JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON Table where
+  toJSON Table {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["KeyspaceName" JSON..= keyspaceName,
+               "PartitionKeyColumns" JSON..= partitionKeyColumns]
+              (Prelude.catMaybes
+                 [(JSON..=) "AutoScalingSpecifications"
+                    Prelude.<$> autoScalingSpecifications,
+                  (JSON..=) "BillingMode" Prelude.<$> billingMode,
+                  (JSON..=) "CdcSpecification" Prelude.<$> cdcSpecification,
+                  (JSON..=) "ClientSideTimestampsEnabled"
+                    Prelude.<$> clientSideTimestampsEnabled,
+                  (JSON..=) "ClusteringKeyColumns" Prelude.<$> clusteringKeyColumns,
+                  (JSON..=) "DefaultTimeToLive" Prelude.<$> defaultTimeToLive,
+                  (JSON..=) "EncryptionSpecification"
+                    Prelude.<$> encryptionSpecification,
+                  (JSON..=) "PointInTimeRecoveryEnabled"
+                    Prelude.<$> pointInTimeRecoveryEnabled,
+                  (JSON..=) "RegularColumns" Prelude.<$> regularColumns,
+                  (JSON..=) "ReplicaSpecifications"
+                    Prelude.<$> replicaSpecifications,
+                  (JSON..=) "TableName" Prelude.<$> tableName,
+                  (JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "AutoScalingSpecifications" Table where
+  type PropertyType "AutoScalingSpecifications" Table = AutoScalingSpecificationProperty
+  set newValue Table {..}
+    = Table {autoScalingSpecifications = Prelude.pure newValue, ..}
+instance Property "BillingMode" Table where
+  type PropertyType "BillingMode" Table = BillingModeProperty
+  set newValue Table {..}
+    = Table {billingMode = Prelude.pure newValue, ..}
+instance Property "CdcSpecification" Table where
+  type PropertyType "CdcSpecification" Table = CdcSpecificationProperty
+  set newValue Table {..}
+    = Table {cdcSpecification = Prelude.pure newValue, ..}
+instance Property "ClientSideTimestampsEnabled" Table where
+  type PropertyType "ClientSideTimestampsEnabled" Table = Value Prelude.Bool
+  set newValue Table {..}
+    = Table {clientSideTimestampsEnabled = Prelude.pure newValue, ..}
+instance Property "ClusteringKeyColumns" Table where
+  type PropertyType "ClusteringKeyColumns" Table = [ClusteringKeyColumnProperty]
+  set newValue Table {..}
+    = Table {clusteringKeyColumns = Prelude.pure newValue, ..}
+instance Property "DefaultTimeToLive" Table where
+  type PropertyType "DefaultTimeToLive" Table = Value Prelude.Integer
+  set newValue Table {..}
+    = Table {defaultTimeToLive = Prelude.pure newValue, ..}
+instance Property "EncryptionSpecification" Table where
+  type PropertyType "EncryptionSpecification" Table = EncryptionSpecificationProperty
+  set newValue Table {..}
+    = Table {encryptionSpecification = Prelude.pure newValue, ..}
+instance Property "KeyspaceName" Table where
+  type PropertyType "KeyspaceName" Table = Value Prelude.Text
+  set newValue Table {..} = Table {keyspaceName = newValue, ..}
+instance Property "PartitionKeyColumns" Table where
+  type PropertyType "PartitionKeyColumns" Table = [ColumnProperty]
+  set newValue Table {..}
+    = Table {partitionKeyColumns = newValue, ..}
+instance Property "PointInTimeRecoveryEnabled" Table where
+  type PropertyType "PointInTimeRecoveryEnabled" Table = Value Prelude.Bool
+  set newValue Table {..}
+    = Table {pointInTimeRecoveryEnabled = Prelude.pure newValue, ..}
+instance Property "RegularColumns" Table where
+  type PropertyType "RegularColumns" Table = [ColumnProperty]
+  set newValue Table {..}
+    = Table {regularColumns = Prelude.pure newValue, ..}
+instance Property "ReplicaSpecifications" Table where
+  type PropertyType "ReplicaSpecifications" Table = [ReplicaSpecificationProperty]
+  set newValue Table {..}
+    = Table {replicaSpecifications = Prelude.pure newValue, ..}
+instance Property "TableName" Table where
+  type PropertyType "TableName" Table = Value Prelude.Text
+  set newValue Table {..}
+    = Table {tableName = Prelude.pure newValue, ..}
+instance Property "Tags" Table where
+  type PropertyType "Tags" Table = [Tag]
+  set newValue Table {..} = Table {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Cassandra/Table/AutoScalingSettingProperty.hs b/gen/Stratosphere/Cassandra/Table/AutoScalingSettingProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cassandra/Table/AutoScalingSettingProperty.hs
@@ -0,0 +1,68 @@
+module Stratosphere.Cassandra.Table.AutoScalingSettingProperty (
+        module Exports, AutoScalingSettingProperty(..),
+        mkAutoScalingSettingProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.Cassandra.Table.ScalingPolicyProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AutoScalingSettingProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cassandra-table-autoscalingsetting.html>
+    AutoScalingSettingProperty {haddock_workaround_ :: (),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cassandra-table-autoscalingsetting.html#cfn-cassandra-table-autoscalingsetting-autoscalingdisabled>
+                                autoScalingDisabled :: (Prelude.Maybe (Value Prelude.Bool)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cassandra-table-autoscalingsetting.html#cfn-cassandra-table-autoscalingsetting-maximumunits>
+                                maximumUnits :: (Prelude.Maybe (Value Prelude.Integer)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cassandra-table-autoscalingsetting.html#cfn-cassandra-table-autoscalingsetting-minimumunits>
+                                minimumUnits :: (Prelude.Maybe (Value Prelude.Integer)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cassandra-table-autoscalingsetting.html#cfn-cassandra-table-autoscalingsetting-scalingpolicy>
+                                scalingPolicy :: (Prelude.Maybe ScalingPolicyProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAutoScalingSettingProperty :: AutoScalingSettingProperty
+mkAutoScalingSettingProperty
+  = AutoScalingSettingProperty
+      {haddock_workaround_ = (), autoScalingDisabled = Prelude.Nothing,
+       maximumUnits = Prelude.Nothing, minimumUnits = Prelude.Nothing,
+       scalingPolicy = Prelude.Nothing}
+instance ToResourceProperties AutoScalingSettingProperty where
+  toResourceProperties AutoScalingSettingProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Cassandra::Table.AutoScalingSetting",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AutoScalingDisabled" Prelude.<$> autoScalingDisabled,
+                            (JSON..=) "MaximumUnits" Prelude.<$> maximumUnits,
+                            (JSON..=) "MinimumUnits" Prelude.<$> minimumUnits,
+                            (JSON..=) "ScalingPolicy" Prelude.<$> scalingPolicy])}
+instance JSON.ToJSON AutoScalingSettingProperty where
+  toJSON AutoScalingSettingProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AutoScalingDisabled" Prelude.<$> autoScalingDisabled,
+               (JSON..=) "MaximumUnits" Prelude.<$> maximumUnits,
+               (JSON..=) "MinimumUnits" Prelude.<$> minimumUnits,
+               (JSON..=) "ScalingPolicy" Prelude.<$> scalingPolicy]))
+instance Property "AutoScalingDisabled" AutoScalingSettingProperty where
+  type PropertyType "AutoScalingDisabled" AutoScalingSettingProperty = Value Prelude.Bool
+  set newValue AutoScalingSettingProperty {..}
+    = AutoScalingSettingProperty
+        {autoScalingDisabled = Prelude.pure newValue, ..}
+instance Property "MaximumUnits" AutoScalingSettingProperty where
+  type PropertyType "MaximumUnits" AutoScalingSettingProperty = Value Prelude.Integer
+  set newValue AutoScalingSettingProperty {..}
+    = AutoScalingSettingProperty
+        {maximumUnits = Prelude.pure newValue, ..}
+instance Property "MinimumUnits" AutoScalingSettingProperty where
+  type PropertyType "MinimumUnits" AutoScalingSettingProperty = Value Prelude.Integer
+  set newValue AutoScalingSettingProperty {..}
+    = AutoScalingSettingProperty
+        {minimumUnits = Prelude.pure newValue, ..}
+instance Property "ScalingPolicy" AutoScalingSettingProperty where
+  type PropertyType "ScalingPolicy" AutoScalingSettingProperty = ScalingPolicyProperty
+  set newValue AutoScalingSettingProperty {..}
+    = AutoScalingSettingProperty
+        {scalingPolicy = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Cassandra/Table/AutoScalingSettingProperty.hs-boot b/gen/Stratosphere/Cassandra/Table/AutoScalingSettingProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cassandra/Table/AutoScalingSettingProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Cassandra.Table.AutoScalingSettingProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AutoScalingSettingProperty :: Prelude.Type
+instance ToResourceProperties AutoScalingSettingProperty
+instance Prelude.Eq AutoScalingSettingProperty
+instance Prelude.Show AutoScalingSettingProperty
+instance JSON.ToJSON AutoScalingSettingProperty
diff --git a/gen/Stratosphere/Cassandra/Table/AutoScalingSpecificationProperty.hs b/gen/Stratosphere/Cassandra/Table/AutoScalingSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cassandra/Table/AutoScalingSpecificationProperty.hs
@@ -0,0 +1,54 @@
+module Stratosphere.Cassandra.Table.AutoScalingSpecificationProperty (
+        module Exports, AutoScalingSpecificationProperty(..),
+        mkAutoScalingSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.Cassandra.Table.AutoScalingSettingProperty as Exports
+import Stratosphere.ResourceProperties
+data AutoScalingSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cassandra-table-autoscalingspecification.html>
+    AutoScalingSpecificationProperty {haddock_workaround_ :: (),
+                                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cassandra-table-autoscalingspecification.html#cfn-cassandra-table-autoscalingspecification-readcapacityautoscaling>
+                                      readCapacityAutoScaling :: (Prelude.Maybe AutoScalingSettingProperty),
+                                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cassandra-table-autoscalingspecification.html#cfn-cassandra-table-autoscalingspecification-writecapacityautoscaling>
+                                      writeCapacityAutoScaling :: (Prelude.Maybe AutoScalingSettingProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAutoScalingSpecificationProperty ::
+  AutoScalingSpecificationProperty
+mkAutoScalingSpecificationProperty
+  = AutoScalingSpecificationProperty
+      {haddock_workaround_ = (),
+       readCapacityAutoScaling = Prelude.Nothing,
+       writeCapacityAutoScaling = Prelude.Nothing}
+instance ToResourceProperties AutoScalingSpecificationProperty where
+  toResourceProperties AutoScalingSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Cassandra::Table.AutoScalingSpecification",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "ReadCapacityAutoScaling"
+                              Prelude.<$> readCapacityAutoScaling,
+                            (JSON..=) "WriteCapacityAutoScaling"
+                              Prelude.<$> writeCapacityAutoScaling])}
+instance JSON.ToJSON AutoScalingSpecificationProperty where
+  toJSON AutoScalingSpecificationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "ReadCapacityAutoScaling"
+                 Prelude.<$> readCapacityAutoScaling,
+               (JSON..=) "WriteCapacityAutoScaling"
+                 Prelude.<$> writeCapacityAutoScaling]))
+instance Property "ReadCapacityAutoScaling" AutoScalingSpecificationProperty where
+  type PropertyType "ReadCapacityAutoScaling" AutoScalingSpecificationProperty = AutoScalingSettingProperty
+  set newValue AutoScalingSpecificationProperty {..}
+    = AutoScalingSpecificationProperty
+        {readCapacityAutoScaling = Prelude.pure newValue, ..}
+instance Property "WriteCapacityAutoScaling" AutoScalingSpecificationProperty where
+  type PropertyType "WriteCapacityAutoScaling" AutoScalingSpecificationProperty = AutoScalingSettingProperty
+  set newValue AutoScalingSpecificationProperty {..}
+    = AutoScalingSpecificationProperty
+        {writeCapacityAutoScaling = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Cassandra/Table/AutoScalingSpecificationProperty.hs-boot b/gen/Stratosphere/Cassandra/Table/AutoScalingSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cassandra/Table/AutoScalingSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Cassandra.Table.AutoScalingSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AutoScalingSpecificationProperty :: Prelude.Type
+instance ToResourceProperties AutoScalingSpecificationProperty
+instance Prelude.Eq AutoScalingSpecificationProperty
+instance Prelude.Show AutoScalingSpecificationProperty
+instance JSON.ToJSON AutoScalingSpecificationProperty
diff --git a/gen/Stratosphere/Cassandra/Table/BillingModeProperty.hs b/gen/Stratosphere/Cassandra/Table/BillingModeProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cassandra/Table/BillingModeProperty.hs
@@ -0,0 +1,51 @@
+module Stratosphere.Cassandra.Table.BillingModeProperty (
+        module Exports, BillingModeProperty(..), mkBillingModeProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.Cassandra.Table.ProvisionedThroughputProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data BillingModeProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cassandra-table-billingmode.html>
+    BillingModeProperty {haddock_workaround_ :: (),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cassandra-table-billingmode.html#cfn-cassandra-table-billingmode-mode>
+                         mode :: (Value Prelude.Text),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cassandra-table-billingmode.html#cfn-cassandra-table-billingmode-provisionedthroughput>
+                         provisionedThroughput :: (Prelude.Maybe ProvisionedThroughputProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkBillingModeProperty :: Value Prelude.Text -> BillingModeProperty
+mkBillingModeProperty mode
+  = BillingModeProperty
+      {haddock_workaround_ = (), mode = mode,
+       provisionedThroughput = Prelude.Nothing}
+instance ToResourceProperties BillingModeProperty where
+  toResourceProperties BillingModeProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Cassandra::Table.BillingMode",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Mode" JSON..= mode]
+                           (Prelude.catMaybes
+                              [(JSON..=) "ProvisionedThroughput"
+                                 Prelude.<$> provisionedThroughput]))}
+instance JSON.ToJSON BillingModeProperty where
+  toJSON BillingModeProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Mode" JSON..= mode]
+              (Prelude.catMaybes
+                 [(JSON..=) "ProvisionedThroughput"
+                    Prelude.<$> provisionedThroughput])))
+instance Property "Mode" BillingModeProperty where
+  type PropertyType "Mode" BillingModeProperty = Value Prelude.Text
+  set newValue BillingModeProperty {..}
+    = BillingModeProperty {mode = newValue, ..}
+instance Property "ProvisionedThroughput" BillingModeProperty where
+  type PropertyType "ProvisionedThroughput" BillingModeProperty = ProvisionedThroughputProperty
+  set newValue BillingModeProperty {..}
+    = BillingModeProperty
+        {provisionedThroughput = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Cassandra/Table/BillingModeProperty.hs-boot b/gen/Stratosphere/Cassandra/Table/BillingModeProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cassandra/Table/BillingModeProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Cassandra.Table.BillingModeProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data BillingModeProperty :: Prelude.Type
+instance ToResourceProperties BillingModeProperty
+instance Prelude.Eq BillingModeProperty
+instance Prelude.Show BillingModeProperty
+instance JSON.ToJSON BillingModeProperty
diff --git a/gen/Stratosphere/Cassandra/Table/CdcSpecificationProperty.hs b/gen/Stratosphere/Cassandra/Table/CdcSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cassandra/Table/CdcSpecificationProperty.hs
@@ -0,0 +1,57 @@
+module Stratosphere.Cassandra.Table.CdcSpecificationProperty (
+        CdcSpecificationProperty(..), mkCdcSpecificationProperty
+    ) 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 CdcSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cassandra-table-cdcspecification.html>
+    CdcSpecificationProperty {haddock_workaround_ :: (),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cassandra-table-cdcspecification.html#cfn-cassandra-table-cdcspecification-status>
+                              status :: (Value Prelude.Text),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cassandra-table-cdcspecification.html#cfn-cassandra-table-cdcspecification-tags>
+                              tags :: (Prelude.Maybe [Tag]),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cassandra-table-cdcspecification.html#cfn-cassandra-table-cdcspecification-viewtype>
+                              viewType :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCdcSpecificationProperty ::
+  Value Prelude.Text -> CdcSpecificationProperty
+mkCdcSpecificationProperty status
+  = CdcSpecificationProperty
+      {haddock_workaround_ = (), status = status, tags = Prelude.Nothing,
+       viewType = Prelude.Nothing}
+instance ToResourceProperties CdcSpecificationProperty where
+  toResourceProperties CdcSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Cassandra::Table.CdcSpecification",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Status" JSON..= status]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Tags" Prelude.<$> tags,
+                               (JSON..=) "ViewType" Prelude.<$> viewType]))}
+instance JSON.ToJSON CdcSpecificationProperty where
+  toJSON CdcSpecificationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Status" JSON..= status]
+              (Prelude.catMaybes
+                 [(JSON..=) "Tags" Prelude.<$> tags,
+                  (JSON..=) "ViewType" Prelude.<$> viewType])))
+instance Property "Status" CdcSpecificationProperty where
+  type PropertyType "Status" CdcSpecificationProperty = Value Prelude.Text
+  set newValue CdcSpecificationProperty {..}
+    = CdcSpecificationProperty {status = newValue, ..}
+instance Property "Tags" CdcSpecificationProperty where
+  type PropertyType "Tags" CdcSpecificationProperty = [Tag]
+  set newValue CdcSpecificationProperty {..}
+    = CdcSpecificationProperty {tags = Prelude.pure newValue, ..}
+instance Property "ViewType" CdcSpecificationProperty where
+  type PropertyType "ViewType" CdcSpecificationProperty = Value Prelude.Text
+  set newValue CdcSpecificationProperty {..}
+    = CdcSpecificationProperty {viewType = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Cassandra/Table/CdcSpecificationProperty.hs-boot b/gen/Stratosphere/Cassandra/Table/CdcSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cassandra/Table/CdcSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Cassandra.Table.CdcSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CdcSpecificationProperty :: Prelude.Type
+instance ToResourceProperties CdcSpecificationProperty
+instance Prelude.Eq CdcSpecificationProperty
+instance Prelude.Show CdcSpecificationProperty
+instance JSON.ToJSON CdcSpecificationProperty
diff --git a/gen/Stratosphere/Cassandra/Table/ClusteringKeyColumnProperty.hs b/gen/Stratosphere/Cassandra/Table/ClusteringKeyColumnProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cassandra/Table/ClusteringKeyColumnProperty.hs
@@ -0,0 +1,48 @@
+module Stratosphere.Cassandra.Table.ClusteringKeyColumnProperty (
+        module Exports, ClusteringKeyColumnProperty(..),
+        mkClusteringKeyColumnProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.Cassandra.Table.ColumnProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ClusteringKeyColumnProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cassandra-table-clusteringkeycolumn.html>
+    ClusteringKeyColumnProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cassandra-table-clusteringkeycolumn.html#cfn-cassandra-table-clusteringkeycolumn-column>
+                                 column :: ColumnProperty,
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cassandra-table-clusteringkeycolumn.html#cfn-cassandra-table-clusteringkeycolumn-orderby>
+                                 orderBy :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkClusteringKeyColumnProperty ::
+  ColumnProperty -> ClusteringKeyColumnProperty
+mkClusteringKeyColumnProperty column
+  = ClusteringKeyColumnProperty
+      {haddock_workaround_ = (), column = column,
+       orderBy = Prelude.Nothing}
+instance ToResourceProperties ClusteringKeyColumnProperty where
+  toResourceProperties ClusteringKeyColumnProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Cassandra::Table.ClusteringKeyColumn",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Column" JSON..= column]
+                           (Prelude.catMaybes [(JSON..=) "OrderBy" Prelude.<$> orderBy]))}
+instance JSON.ToJSON ClusteringKeyColumnProperty where
+  toJSON ClusteringKeyColumnProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Column" JSON..= column]
+              (Prelude.catMaybes [(JSON..=) "OrderBy" Prelude.<$> orderBy])))
+instance Property "Column" ClusteringKeyColumnProperty where
+  type PropertyType "Column" ClusteringKeyColumnProperty = ColumnProperty
+  set newValue ClusteringKeyColumnProperty {..}
+    = ClusteringKeyColumnProperty {column = newValue, ..}
+instance Property "OrderBy" ClusteringKeyColumnProperty where
+  type PropertyType "OrderBy" ClusteringKeyColumnProperty = Value Prelude.Text
+  set newValue ClusteringKeyColumnProperty {..}
+    = ClusteringKeyColumnProperty {orderBy = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Cassandra/Table/ClusteringKeyColumnProperty.hs-boot b/gen/Stratosphere/Cassandra/Table/ClusteringKeyColumnProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cassandra/Table/ClusteringKeyColumnProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Cassandra.Table.ClusteringKeyColumnProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ClusteringKeyColumnProperty :: Prelude.Type
+instance ToResourceProperties ClusteringKeyColumnProperty
+instance Prelude.Eq ClusteringKeyColumnProperty
+instance Prelude.Show ClusteringKeyColumnProperty
+instance JSON.ToJSON ClusteringKeyColumnProperty
diff --git a/gen/Stratosphere/Cassandra/Table/ColumnProperty.hs b/gen/Stratosphere/Cassandra/Table/ColumnProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cassandra/Table/ColumnProperty.hs
@@ -0,0 +1,41 @@
+module Stratosphere.Cassandra.Table.ColumnProperty (
+        ColumnProperty(..), mkColumnProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ColumnProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cassandra-table-column.html>
+    ColumnProperty {haddock_workaround_ :: (),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cassandra-table-column.html#cfn-cassandra-table-column-columnname>
+                    columnName :: (Value Prelude.Text),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cassandra-table-column.html#cfn-cassandra-table-column-columntype>
+                    columnType :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkColumnProperty ::
+  Value Prelude.Text -> Value Prelude.Text -> ColumnProperty
+mkColumnProperty columnName columnType
+  = ColumnProperty
+      {haddock_workaround_ = (), columnName = columnName,
+       columnType = columnType}
+instance ToResourceProperties ColumnProperty where
+  toResourceProperties ColumnProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Cassandra::Table.Column",
+         supportsTags = Prelude.False,
+         properties = ["ColumnName" JSON..= columnName,
+                       "ColumnType" JSON..= columnType]}
+instance JSON.ToJSON ColumnProperty where
+  toJSON ColumnProperty {..}
+    = JSON.object
+        ["ColumnName" JSON..= columnName, "ColumnType" JSON..= columnType]
+instance Property "ColumnName" ColumnProperty where
+  type PropertyType "ColumnName" ColumnProperty = Value Prelude.Text
+  set newValue ColumnProperty {..}
+    = ColumnProperty {columnName = newValue, ..}
+instance Property "ColumnType" ColumnProperty where
+  type PropertyType "ColumnType" ColumnProperty = Value Prelude.Text
+  set newValue ColumnProperty {..}
+    = ColumnProperty {columnType = newValue, ..}
diff --git a/gen/Stratosphere/Cassandra/Table/ColumnProperty.hs-boot b/gen/Stratosphere/Cassandra/Table/ColumnProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cassandra/Table/ColumnProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Cassandra.Table.ColumnProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ColumnProperty :: Prelude.Type
+instance ToResourceProperties ColumnProperty
+instance Prelude.Eq ColumnProperty
+instance Prelude.Show ColumnProperty
+instance JSON.ToJSON ColumnProperty
diff --git a/gen/Stratosphere/Cassandra/Table/EncryptionSpecificationProperty.hs b/gen/Stratosphere/Cassandra/Table/EncryptionSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cassandra/Table/EncryptionSpecificationProperty.hs
@@ -0,0 +1,50 @@
+module Stratosphere.Cassandra.Table.EncryptionSpecificationProperty (
+        EncryptionSpecificationProperty(..),
+        mkEncryptionSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data EncryptionSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cassandra-table-encryptionspecification.html>
+    EncryptionSpecificationProperty {haddock_workaround_ :: (),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cassandra-table-encryptionspecification.html#cfn-cassandra-table-encryptionspecification-encryptiontype>
+                                     encryptionType :: (Value Prelude.Text),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cassandra-table-encryptionspecification.html#cfn-cassandra-table-encryptionspecification-kmskeyidentifier>
+                                     kmsKeyIdentifier :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkEncryptionSpecificationProperty ::
+  Value Prelude.Text -> EncryptionSpecificationProperty
+mkEncryptionSpecificationProperty encryptionType
+  = EncryptionSpecificationProperty
+      {haddock_workaround_ = (), encryptionType = encryptionType,
+       kmsKeyIdentifier = Prelude.Nothing}
+instance ToResourceProperties EncryptionSpecificationProperty where
+  toResourceProperties EncryptionSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Cassandra::Table.EncryptionSpecification",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["EncryptionType" JSON..= encryptionType]
+                           (Prelude.catMaybes
+                              [(JSON..=) "KmsKeyIdentifier" Prelude.<$> kmsKeyIdentifier]))}
+instance JSON.ToJSON EncryptionSpecificationProperty where
+  toJSON EncryptionSpecificationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["EncryptionType" JSON..= encryptionType]
+              (Prelude.catMaybes
+                 [(JSON..=) "KmsKeyIdentifier" Prelude.<$> kmsKeyIdentifier])))
+instance Property "EncryptionType" EncryptionSpecificationProperty where
+  type PropertyType "EncryptionType" EncryptionSpecificationProperty = Value Prelude.Text
+  set newValue EncryptionSpecificationProperty {..}
+    = EncryptionSpecificationProperty {encryptionType = newValue, ..}
+instance Property "KmsKeyIdentifier" EncryptionSpecificationProperty where
+  type PropertyType "KmsKeyIdentifier" EncryptionSpecificationProperty = Value Prelude.Text
+  set newValue EncryptionSpecificationProperty {..}
+    = EncryptionSpecificationProperty
+        {kmsKeyIdentifier = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Cassandra/Table/EncryptionSpecificationProperty.hs-boot b/gen/Stratosphere/Cassandra/Table/EncryptionSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cassandra/Table/EncryptionSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Cassandra.Table.EncryptionSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data EncryptionSpecificationProperty :: Prelude.Type
+instance ToResourceProperties EncryptionSpecificationProperty
+instance Prelude.Eq EncryptionSpecificationProperty
+instance Prelude.Show EncryptionSpecificationProperty
+instance JSON.ToJSON EncryptionSpecificationProperty
diff --git a/gen/Stratosphere/Cassandra/Table/ProvisionedThroughputProperty.hs b/gen/Stratosphere/Cassandra/Table/ProvisionedThroughputProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cassandra/Table/ProvisionedThroughputProperty.hs
@@ -0,0 +1,45 @@
+module Stratosphere.Cassandra.Table.ProvisionedThroughputProperty (
+        ProvisionedThroughputProperty(..), mkProvisionedThroughputProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ProvisionedThroughputProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cassandra-table-provisionedthroughput.html>
+    ProvisionedThroughputProperty {haddock_workaround_ :: (),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cassandra-table-provisionedthroughput.html#cfn-cassandra-table-provisionedthroughput-readcapacityunits>
+                                   readCapacityUnits :: (Value Prelude.Integer),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cassandra-table-provisionedthroughput.html#cfn-cassandra-table-provisionedthroughput-writecapacityunits>
+                                   writeCapacityUnits :: (Value Prelude.Integer)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkProvisionedThroughputProperty ::
+  Value Prelude.Integer
+  -> Value Prelude.Integer -> ProvisionedThroughputProperty
+mkProvisionedThroughputProperty
+  readCapacityUnits
+  writeCapacityUnits
+  = ProvisionedThroughputProperty
+      {haddock_workaround_ = (), readCapacityUnits = readCapacityUnits,
+       writeCapacityUnits = writeCapacityUnits}
+instance ToResourceProperties ProvisionedThroughputProperty where
+  toResourceProperties ProvisionedThroughputProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Cassandra::Table.ProvisionedThroughput",
+         supportsTags = Prelude.False,
+         properties = ["ReadCapacityUnits" JSON..= readCapacityUnits,
+                       "WriteCapacityUnits" JSON..= writeCapacityUnits]}
+instance JSON.ToJSON ProvisionedThroughputProperty where
+  toJSON ProvisionedThroughputProperty {..}
+    = JSON.object
+        ["ReadCapacityUnits" JSON..= readCapacityUnits,
+         "WriteCapacityUnits" JSON..= writeCapacityUnits]
+instance Property "ReadCapacityUnits" ProvisionedThroughputProperty where
+  type PropertyType "ReadCapacityUnits" ProvisionedThroughputProperty = Value Prelude.Integer
+  set newValue ProvisionedThroughputProperty {..}
+    = ProvisionedThroughputProperty {readCapacityUnits = newValue, ..}
+instance Property "WriteCapacityUnits" ProvisionedThroughputProperty where
+  type PropertyType "WriteCapacityUnits" ProvisionedThroughputProperty = Value Prelude.Integer
+  set newValue ProvisionedThroughputProperty {..}
+    = ProvisionedThroughputProperty {writeCapacityUnits = newValue, ..}
diff --git a/gen/Stratosphere/Cassandra/Table/ProvisionedThroughputProperty.hs-boot b/gen/Stratosphere/Cassandra/Table/ProvisionedThroughputProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cassandra/Table/ProvisionedThroughputProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Cassandra.Table.ProvisionedThroughputProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ProvisionedThroughputProperty :: Prelude.Type
+instance ToResourceProperties ProvisionedThroughputProperty
+instance Prelude.Eq ProvisionedThroughputProperty
+instance Prelude.Show ProvisionedThroughputProperty
+instance JSON.ToJSON ProvisionedThroughputProperty
diff --git a/gen/Stratosphere/Cassandra/Table/ReplicaSpecificationProperty.hs b/gen/Stratosphere/Cassandra/Table/ReplicaSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cassandra/Table/ReplicaSpecificationProperty.hs
@@ -0,0 +1,63 @@
+module Stratosphere.Cassandra.Table.ReplicaSpecificationProperty (
+        module Exports, ReplicaSpecificationProperty(..),
+        mkReplicaSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.Cassandra.Table.AutoScalingSettingProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ReplicaSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cassandra-table-replicaspecification.html>
+    ReplicaSpecificationProperty {haddock_workaround_ :: (),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cassandra-table-replicaspecification.html#cfn-cassandra-table-replicaspecification-readcapacityautoscaling>
+                                  readCapacityAutoScaling :: (Prelude.Maybe AutoScalingSettingProperty),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cassandra-table-replicaspecification.html#cfn-cassandra-table-replicaspecification-readcapacityunits>
+                                  readCapacityUnits :: (Prelude.Maybe (Value Prelude.Integer)),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cassandra-table-replicaspecification.html#cfn-cassandra-table-replicaspecification-region>
+                                  region :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkReplicaSpecificationProperty ::
+  Value Prelude.Text -> ReplicaSpecificationProperty
+mkReplicaSpecificationProperty region
+  = ReplicaSpecificationProperty
+      {haddock_workaround_ = (), region = region,
+       readCapacityAutoScaling = Prelude.Nothing,
+       readCapacityUnits = Prelude.Nothing}
+instance ToResourceProperties ReplicaSpecificationProperty where
+  toResourceProperties ReplicaSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Cassandra::Table.ReplicaSpecification",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Region" JSON..= region]
+                           (Prelude.catMaybes
+                              [(JSON..=) "ReadCapacityAutoScaling"
+                                 Prelude.<$> readCapacityAutoScaling,
+                               (JSON..=) "ReadCapacityUnits" Prelude.<$> readCapacityUnits]))}
+instance JSON.ToJSON ReplicaSpecificationProperty where
+  toJSON ReplicaSpecificationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Region" JSON..= region]
+              (Prelude.catMaybes
+                 [(JSON..=) "ReadCapacityAutoScaling"
+                    Prelude.<$> readCapacityAutoScaling,
+                  (JSON..=) "ReadCapacityUnits" Prelude.<$> readCapacityUnits])))
+instance Property "ReadCapacityAutoScaling" ReplicaSpecificationProperty where
+  type PropertyType "ReadCapacityAutoScaling" ReplicaSpecificationProperty = AutoScalingSettingProperty
+  set newValue ReplicaSpecificationProperty {..}
+    = ReplicaSpecificationProperty
+        {readCapacityAutoScaling = Prelude.pure newValue, ..}
+instance Property "ReadCapacityUnits" ReplicaSpecificationProperty where
+  type PropertyType "ReadCapacityUnits" ReplicaSpecificationProperty = Value Prelude.Integer
+  set newValue ReplicaSpecificationProperty {..}
+    = ReplicaSpecificationProperty
+        {readCapacityUnits = Prelude.pure newValue, ..}
+instance Property "Region" ReplicaSpecificationProperty where
+  type PropertyType "Region" ReplicaSpecificationProperty = Value Prelude.Text
+  set newValue ReplicaSpecificationProperty {..}
+    = ReplicaSpecificationProperty {region = newValue, ..}
diff --git a/gen/Stratosphere/Cassandra/Table/ReplicaSpecificationProperty.hs-boot b/gen/Stratosphere/Cassandra/Table/ReplicaSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cassandra/Table/ReplicaSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Cassandra.Table.ReplicaSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ReplicaSpecificationProperty :: Prelude.Type
+instance ToResourceProperties ReplicaSpecificationProperty
+instance Prelude.Eq ReplicaSpecificationProperty
+instance Prelude.Show ReplicaSpecificationProperty
+instance JSON.ToJSON ReplicaSpecificationProperty
diff --git a/gen/Stratosphere/Cassandra/Table/ScalingPolicyProperty.hs b/gen/Stratosphere/Cassandra/Table/ScalingPolicyProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cassandra/Table/ScalingPolicyProperty.hs
@@ -0,0 +1,41 @@
+module Stratosphere.Cassandra.Table.ScalingPolicyProperty (
+        module Exports, ScalingPolicyProperty(..), mkScalingPolicyProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.Cassandra.Table.TargetTrackingScalingPolicyConfigurationProperty as Exports
+import Stratosphere.ResourceProperties
+data ScalingPolicyProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cassandra-table-scalingpolicy.html>
+    ScalingPolicyProperty {haddock_workaround_ :: (),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cassandra-table-scalingpolicy.html#cfn-cassandra-table-scalingpolicy-targettrackingscalingpolicyconfiguration>
+                           targetTrackingScalingPolicyConfiguration :: (Prelude.Maybe TargetTrackingScalingPolicyConfigurationProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkScalingPolicyProperty :: ScalingPolicyProperty
+mkScalingPolicyProperty
+  = ScalingPolicyProperty
+      {haddock_workaround_ = (),
+       targetTrackingScalingPolicyConfiguration = Prelude.Nothing}
+instance ToResourceProperties ScalingPolicyProperty where
+  toResourceProperties ScalingPolicyProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Cassandra::Table.ScalingPolicy",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "TargetTrackingScalingPolicyConfiguration"
+                              Prelude.<$> targetTrackingScalingPolicyConfiguration])}
+instance JSON.ToJSON ScalingPolicyProperty where
+  toJSON ScalingPolicyProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "TargetTrackingScalingPolicyConfiguration"
+                 Prelude.<$> targetTrackingScalingPolicyConfiguration]))
+instance Property "TargetTrackingScalingPolicyConfiguration" ScalingPolicyProperty where
+  type PropertyType "TargetTrackingScalingPolicyConfiguration" ScalingPolicyProperty = TargetTrackingScalingPolicyConfigurationProperty
+  set newValue ScalingPolicyProperty {..}
+    = ScalingPolicyProperty
+        {targetTrackingScalingPolicyConfiguration = Prelude.pure newValue,
+         ..}
diff --git a/gen/Stratosphere/Cassandra/Table/ScalingPolicyProperty.hs-boot b/gen/Stratosphere/Cassandra/Table/ScalingPolicyProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cassandra/Table/ScalingPolicyProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Cassandra.Table.ScalingPolicyProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ScalingPolicyProperty :: Prelude.Type
+instance ToResourceProperties ScalingPolicyProperty
+instance Prelude.Eq ScalingPolicyProperty
+instance Prelude.Show ScalingPolicyProperty
+instance JSON.ToJSON ScalingPolicyProperty
diff --git a/gen/Stratosphere/Cassandra/Table/TargetTrackingScalingPolicyConfigurationProperty.hs b/gen/Stratosphere/Cassandra/Table/TargetTrackingScalingPolicyConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cassandra/Table/TargetTrackingScalingPolicyConfigurationProperty.hs
@@ -0,0 +1,73 @@
+module Stratosphere.Cassandra.Table.TargetTrackingScalingPolicyConfigurationProperty (
+        TargetTrackingScalingPolicyConfigurationProperty(..),
+        mkTargetTrackingScalingPolicyConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data TargetTrackingScalingPolicyConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cassandra-table-targettrackingscalingpolicyconfiguration.html>
+    TargetTrackingScalingPolicyConfigurationProperty {haddock_workaround_ :: (),
+                                                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cassandra-table-targettrackingscalingpolicyconfiguration.html#cfn-cassandra-table-targettrackingscalingpolicyconfiguration-disablescalein>
+                                                      disableScaleIn :: (Prelude.Maybe (Value Prelude.Bool)),
+                                                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cassandra-table-targettrackingscalingpolicyconfiguration.html#cfn-cassandra-table-targettrackingscalingpolicyconfiguration-scaleincooldown>
+                                                      scaleInCooldown :: (Prelude.Maybe (Value Prelude.Integer)),
+                                                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cassandra-table-targettrackingscalingpolicyconfiguration.html#cfn-cassandra-table-targettrackingscalingpolicyconfiguration-scaleoutcooldown>
+                                                      scaleOutCooldown :: (Prelude.Maybe (Value Prelude.Integer)),
+                                                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cassandra-table-targettrackingscalingpolicyconfiguration.html#cfn-cassandra-table-targettrackingscalingpolicyconfiguration-targetvalue>
+                                                      targetValue :: (Value Prelude.Integer)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTargetTrackingScalingPolicyConfigurationProperty ::
+  Value Prelude.Integer
+  -> TargetTrackingScalingPolicyConfigurationProperty
+mkTargetTrackingScalingPolicyConfigurationProperty targetValue
+  = TargetTrackingScalingPolicyConfigurationProperty
+      {haddock_workaround_ = (), targetValue = targetValue,
+       disableScaleIn = Prelude.Nothing,
+       scaleInCooldown = Prelude.Nothing,
+       scaleOutCooldown = Prelude.Nothing}
+instance ToResourceProperties TargetTrackingScalingPolicyConfigurationProperty where
+  toResourceProperties
+    TargetTrackingScalingPolicyConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Cassandra::Table.TargetTrackingScalingPolicyConfiguration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["TargetValue" JSON..= targetValue]
+                           (Prelude.catMaybes
+                              [(JSON..=) "DisableScaleIn" Prelude.<$> disableScaleIn,
+                               (JSON..=) "ScaleInCooldown" Prelude.<$> scaleInCooldown,
+                               (JSON..=) "ScaleOutCooldown" Prelude.<$> scaleOutCooldown]))}
+instance JSON.ToJSON TargetTrackingScalingPolicyConfigurationProperty where
+  toJSON TargetTrackingScalingPolicyConfigurationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["TargetValue" JSON..= targetValue]
+              (Prelude.catMaybes
+                 [(JSON..=) "DisableScaleIn" Prelude.<$> disableScaleIn,
+                  (JSON..=) "ScaleInCooldown" Prelude.<$> scaleInCooldown,
+                  (JSON..=) "ScaleOutCooldown" Prelude.<$> scaleOutCooldown])))
+instance Property "DisableScaleIn" TargetTrackingScalingPolicyConfigurationProperty where
+  type PropertyType "DisableScaleIn" TargetTrackingScalingPolicyConfigurationProperty = Value Prelude.Bool
+  set newValue TargetTrackingScalingPolicyConfigurationProperty {..}
+    = TargetTrackingScalingPolicyConfigurationProperty
+        {disableScaleIn = Prelude.pure newValue, ..}
+instance Property "ScaleInCooldown" TargetTrackingScalingPolicyConfigurationProperty where
+  type PropertyType "ScaleInCooldown" TargetTrackingScalingPolicyConfigurationProperty = Value Prelude.Integer
+  set newValue TargetTrackingScalingPolicyConfigurationProperty {..}
+    = TargetTrackingScalingPolicyConfigurationProperty
+        {scaleInCooldown = Prelude.pure newValue, ..}
+instance Property "ScaleOutCooldown" TargetTrackingScalingPolicyConfigurationProperty where
+  type PropertyType "ScaleOutCooldown" TargetTrackingScalingPolicyConfigurationProperty = Value Prelude.Integer
+  set newValue TargetTrackingScalingPolicyConfigurationProperty {..}
+    = TargetTrackingScalingPolicyConfigurationProperty
+        {scaleOutCooldown = Prelude.pure newValue, ..}
+instance Property "TargetValue" TargetTrackingScalingPolicyConfigurationProperty where
+  type PropertyType "TargetValue" TargetTrackingScalingPolicyConfigurationProperty = Value Prelude.Integer
+  set newValue TargetTrackingScalingPolicyConfigurationProperty {..}
+    = TargetTrackingScalingPolicyConfigurationProperty
+        {targetValue = newValue, ..}
diff --git a/gen/Stratosphere/Cassandra/Table/TargetTrackingScalingPolicyConfigurationProperty.hs-boot b/gen/Stratosphere/Cassandra/Table/TargetTrackingScalingPolicyConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cassandra/Table/TargetTrackingScalingPolicyConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Cassandra.Table.TargetTrackingScalingPolicyConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data TargetTrackingScalingPolicyConfigurationProperty :: Prelude.Type
+instance ToResourceProperties TargetTrackingScalingPolicyConfigurationProperty
+instance Prelude.Eq TargetTrackingScalingPolicyConfigurationProperty
+instance Prelude.Show TargetTrackingScalingPolicyConfigurationProperty
+instance JSON.ToJSON TargetTrackingScalingPolicyConfigurationProperty
diff --git a/gen/Stratosphere/Cassandra/Type.hs b/gen/Stratosphere/Cassandra/Type.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cassandra/Type.hs
@@ -0,0 +1,45 @@
+module Stratosphere.Cassandra.Type (
+        module Exports, Type(..), mkType
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.Cassandra.Type.FieldProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data Type
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cassandra-type.html>
+    Type {haddock_workaround_ :: (),
+          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cassandra-type.html#cfn-cassandra-type-fields>
+          fields :: [FieldProperty],
+          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cassandra-type.html#cfn-cassandra-type-keyspacename>
+          keyspaceName :: (Value Prelude.Text),
+          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cassandra-type.html#cfn-cassandra-type-typename>
+          typeName :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkType ::
+  [FieldProperty] -> Value Prelude.Text -> Value Prelude.Text -> Type
+mkType fields keyspaceName typeName
+  = Type
+      {haddock_workaround_ = (), fields = fields,
+       keyspaceName = keyspaceName, typeName = typeName}
+instance ToResourceProperties Type where
+  toResourceProperties Type {..}
+    = ResourceProperties
+        {awsType = "AWS::Cassandra::Type", supportsTags = Prelude.False,
+         properties = ["Fields" JSON..= fields,
+                       "KeyspaceName" JSON..= keyspaceName, "TypeName" JSON..= typeName]}
+instance JSON.ToJSON Type where
+  toJSON Type {..}
+    = JSON.object
+        ["Fields" JSON..= fields, "KeyspaceName" JSON..= keyspaceName,
+         "TypeName" JSON..= typeName]
+instance Property "Fields" Type where
+  type PropertyType "Fields" Type = [FieldProperty]
+  set newValue Type {..} = Type {fields = newValue, ..}
+instance Property "KeyspaceName" Type where
+  type PropertyType "KeyspaceName" Type = Value Prelude.Text
+  set newValue Type {..} = Type {keyspaceName = newValue, ..}
+instance Property "TypeName" Type where
+  type PropertyType "TypeName" Type = Value Prelude.Text
+  set newValue Type {..} = Type {typeName = newValue, ..}
diff --git a/gen/Stratosphere/Cassandra/Type/FieldProperty.hs b/gen/Stratosphere/Cassandra/Type/FieldProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cassandra/Type/FieldProperty.hs
@@ -0,0 +1,41 @@
+module Stratosphere.Cassandra.Type.FieldProperty (
+        FieldProperty(..), mkFieldProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data FieldProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cassandra-type-field.html>
+    FieldProperty {haddock_workaround_ :: (),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cassandra-type-field.html#cfn-cassandra-type-field-fieldname>
+                   fieldName :: (Value Prelude.Text),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cassandra-type-field.html#cfn-cassandra-type-field-fieldtype>
+                   fieldType :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkFieldProperty ::
+  Value Prelude.Text -> Value Prelude.Text -> FieldProperty
+mkFieldProperty fieldName fieldType
+  = FieldProperty
+      {haddock_workaround_ = (), fieldName = fieldName,
+       fieldType = fieldType}
+instance ToResourceProperties FieldProperty where
+  toResourceProperties FieldProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Cassandra::Type.Field",
+         supportsTags = Prelude.False,
+         properties = ["FieldName" JSON..= fieldName,
+                       "FieldType" JSON..= fieldType]}
+instance JSON.ToJSON FieldProperty where
+  toJSON FieldProperty {..}
+    = JSON.object
+        ["FieldName" JSON..= fieldName, "FieldType" JSON..= fieldType]
+instance Property "FieldName" FieldProperty where
+  type PropertyType "FieldName" FieldProperty = Value Prelude.Text
+  set newValue FieldProperty {..}
+    = FieldProperty {fieldName = newValue, ..}
+instance Property "FieldType" FieldProperty where
+  type PropertyType "FieldType" FieldProperty = Value Prelude.Text
+  set newValue FieldProperty {..}
+    = FieldProperty {fieldType = newValue, ..}
diff --git a/gen/Stratosphere/Cassandra/Type/FieldProperty.hs-boot b/gen/Stratosphere/Cassandra/Type/FieldProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cassandra/Type/FieldProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Cassandra.Type.FieldProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data FieldProperty :: Prelude.Type
+instance ToResourceProperties FieldProperty
+instance Prelude.Eq FieldProperty
+instance Prelude.Show FieldProperty
+instance JSON.ToJSON FieldProperty
diff --git a/stratosphere-cassandra.cabal b/stratosphere-cassandra.cabal
new file mode 100644
--- /dev/null
+++ b/stratosphere-cassandra.cabal
@@ -0,0 +1,88 @@
+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-cassandra
+version:        1.0.0
+synopsis:       Stratosphere integration for AWS Cassandra.
+description:    Integration into stratosphere to generate resources and properties for AWS Cassandra
+category:       AWS, Cloud, Cassandra
+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.Cassandra.Keyspace
+      Stratosphere.Cassandra.Keyspace.ReplicationSpecificationProperty
+      Stratosphere.Cassandra.Table
+      Stratosphere.Cassandra.Table.AutoScalingSettingProperty
+      Stratosphere.Cassandra.Table.AutoScalingSpecificationProperty
+      Stratosphere.Cassandra.Table.BillingModeProperty
+      Stratosphere.Cassandra.Table.CdcSpecificationProperty
+      Stratosphere.Cassandra.Table.ClusteringKeyColumnProperty
+      Stratosphere.Cassandra.Table.ColumnProperty
+      Stratosphere.Cassandra.Table.EncryptionSpecificationProperty
+      Stratosphere.Cassandra.Table.ProvisionedThroughputProperty
+      Stratosphere.Cassandra.Table.ReplicaSpecificationProperty
+      Stratosphere.Cassandra.Table.ScalingPolicyProperty
+      Stratosphere.Cassandra.Table.TargetTrackingScalingPolicyConfigurationProperty
+      Stratosphere.Cassandra.Type
+      Stratosphere.Cassandra.Type.FieldProperty
+  other-modules:
+      Paths_stratosphere_cassandra
+  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
