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/ConnectCampaigns/Campaign.hs b/gen/Stratosphere/ConnectCampaigns/Campaign.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaigns/Campaign.hs
@@ -0,0 +1,72 @@
+module Stratosphere.ConnectCampaigns.Campaign (
+        module Exports, Campaign(..), mkCampaign
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ConnectCampaigns.Campaign.DialerConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.ConnectCampaigns.Campaign.OutboundCallConfigProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data Campaign
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-connectcampaigns-campaign.html>
+    Campaign {haddock_workaround_ :: (),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-connectcampaigns-campaign.html#cfn-connectcampaigns-campaign-connectinstancearn>
+              connectInstanceArn :: (Value Prelude.Text),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-connectcampaigns-campaign.html#cfn-connectcampaigns-campaign-dialerconfig>
+              dialerConfig :: DialerConfigProperty,
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-connectcampaigns-campaign.html#cfn-connectcampaigns-campaign-name>
+              name :: (Value Prelude.Text),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-connectcampaigns-campaign.html#cfn-connectcampaigns-campaign-outboundcallconfig>
+              outboundCallConfig :: OutboundCallConfigProperty,
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-connectcampaigns-campaign.html#cfn-connectcampaigns-campaign-tags>
+              tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCampaign ::
+  Value Prelude.Text
+  -> DialerConfigProperty
+     -> Value Prelude.Text -> OutboundCallConfigProperty -> Campaign
+mkCampaign connectInstanceArn dialerConfig name outboundCallConfig
+  = Campaign
+      {haddock_workaround_ = (), connectInstanceArn = connectInstanceArn,
+       dialerConfig = dialerConfig, name = name,
+       outboundCallConfig = outboundCallConfig, tags = Prelude.Nothing}
+instance ToResourceProperties Campaign where
+  toResourceProperties Campaign {..}
+    = ResourceProperties
+        {awsType = "AWS::ConnectCampaigns::Campaign",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["ConnectInstanceArn" JSON..= connectInstanceArn,
+                            "DialerConfig" JSON..= dialerConfig, "Name" JSON..= name,
+                            "OutboundCallConfig" JSON..= outboundCallConfig]
+                           (Prelude.catMaybes [(JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON Campaign where
+  toJSON Campaign {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["ConnectInstanceArn" JSON..= connectInstanceArn,
+               "DialerConfig" JSON..= dialerConfig, "Name" JSON..= name,
+               "OutboundCallConfig" JSON..= outboundCallConfig]
+              (Prelude.catMaybes [(JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "ConnectInstanceArn" Campaign where
+  type PropertyType "ConnectInstanceArn" Campaign = Value Prelude.Text
+  set newValue Campaign {..}
+    = Campaign {connectInstanceArn = newValue, ..}
+instance Property "DialerConfig" Campaign where
+  type PropertyType "DialerConfig" Campaign = DialerConfigProperty
+  set newValue Campaign {..} = Campaign {dialerConfig = newValue, ..}
+instance Property "Name" Campaign where
+  type PropertyType "Name" Campaign = Value Prelude.Text
+  set newValue Campaign {..} = Campaign {name = newValue, ..}
+instance Property "OutboundCallConfig" Campaign where
+  type PropertyType "OutboundCallConfig" Campaign = OutboundCallConfigProperty
+  set newValue Campaign {..}
+    = Campaign {outboundCallConfig = newValue, ..}
+instance Property "Tags" Campaign where
+  type PropertyType "Tags" Campaign = [Tag]
+  set newValue Campaign {..}
+    = Campaign {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ConnectCampaigns/Campaign/AgentlessDialerConfigProperty.hs b/gen/Stratosphere/ConnectCampaigns/Campaign/AgentlessDialerConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaigns/Campaign/AgentlessDialerConfigProperty.hs
@@ -0,0 +1,37 @@
+module Stratosphere.ConnectCampaigns.Campaign.AgentlessDialerConfigProperty (
+        AgentlessDialerConfigProperty(..), mkAgentlessDialerConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AgentlessDialerConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaigns-campaign-agentlessdialerconfig.html>
+    AgentlessDialerConfigProperty {haddock_workaround_ :: (),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaigns-campaign-agentlessdialerconfig.html#cfn-connectcampaigns-campaign-agentlessdialerconfig-dialingcapacity>
+                                   dialingCapacity :: (Prelude.Maybe (Value Prelude.Double))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAgentlessDialerConfigProperty :: AgentlessDialerConfigProperty
+mkAgentlessDialerConfigProperty
+  = AgentlessDialerConfigProperty
+      {haddock_workaround_ = (), dialingCapacity = Prelude.Nothing}
+instance ToResourceProperties AgentlessDialerConfigProperty where
+  toResourceProperties AgentlessDialerConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ConnectCampaigns::Campaign.AgentlessDialerConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "DialingCapacity" Prelude.<$> dialingCapacity])}
+instance JSON.ToJSON AgentlessDialerConfigProperty where
+  toJSON AgentlessDialerConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "DialingCapacity" Prelude.<$> dialingCapacity]))
+instance Property "DialingCapacity" AgentlessDialerConfigProperty where
+  type PropertyType "DialingCapacity" AgentlessDialerConfigProperty = Value Prelude.Double
+  set newValue AgentlessDialerConfigProperty {..}
+    = AgentlessDialerConfigProperty
+        {dialingCapacity = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ConnectCampaigns/Campaign/AgentlessDialerConfigProperty.hs-boot b/gen/Stratosphere/ConnectCampaigns/Campaign/AgentlessDialerConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaigns/Campaign/AgentlessDialerConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ConnectCampaigns.Campaign.AgentlessDialerConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AgentlessDialerConfigProperty :: Prelude.Type
+instance ToResourceProperties AgentlessDialerConfigProperty
+instance Prelude.Eq AgentlessDialerConfigProperty
+instance Prelude.Show AgentlessDialerConfigProperty
+instance JSON.ToJSON AgentlessDialerConfigProperty
diff --git a/gen/Stratosphere/ConnectCampaigns/Campaign/AnswerMachineDetectionConfigProperty.hs b/gen/Stratosphere/ConnectCampaigns/Campaign/AnswerMachineDetectionConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaigns/Campaign/AnswerMachineDetectionConfigProperty.hs
@@ -0,0 +1,56 @@
+module Stratosphere.ConnectCampaigns.Campaign.AnswerMachineDetectionConfigProperty (
+        AnswerMachineDetectionConfigProperty(..),
+        mkAnswerMachineDetectionConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AnswerMachineDetectionConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaigns-campaign-answermachinedetectionconfig.html>
+    AnswerMachineDetectionConfigProperty {haddock_workaround_ :: (),
+                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaigns-campaign-answermachinedetectionconfig.html#cfn-connectcampaigns-campaign-answermachinedetectionconfig-awaitanswermachineprompt>
+                                          awaitAnswerMachinePrompt :: (Prelude.Maybe (Value Prelude.Bool)),
+                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaigns-campaign-answermachinedetectionconfig.html#cfn-connectcampaigns-campaign-answermachinedetectionconfig-enableanswermachinedetection>
+                                          enableAnswerMachineDetection :: (Value Prelude.Bool)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAnswerMachineDetectionConfigProperty ::
+  Value Prelude.Bool -> AnswerMachineDetectionConfigProperty
+mkAnswerMachineDetectionConfigProperty enableAnswerMachineDetection
+  = AnswerMachineDetectionConfigProperty
+      {haddock_workaround_ = (),
+       enableAnswerMachineDetection = enableAnswerMachineDetection,
+       awaitAnswerMachinePrompt = Prelude.Nothing}
+instance ToResourceProperties AnswerMachineDetectionConfigProperty where
+  toResourceProperties AnswerMachineDetectionConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ConnectCampaigns::Campaign.AnswerMachineDetectionConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["EnableAnswerMachineDetection"
+                              JSON..= enableAnswerMachineDetection]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AwaitAnswerMachinePrompt"
+                                 Prelude.<$> awaitAnswerMachinePrompt]))}
+instance JSON.ToJSON AnswerMachineDetectionConfigProperty where
+  toJSON AnswerMachineDetectionConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["EnableAnswerMachineDetection"
+                 JSON..= enableAnswerMachineDetection]
+              (Prelude.catMaybes
+                 [(JSON..=) "AwaitAnswerMachinePrompt"
+                    Prelude.<$> awaitAnswerMachinePrompt])))
+instance Property "AwaitAnswerMachinePrompt" AnswerMachineDetectionConfigProperty where
+  type PropertyType "AwaitAnswerMachinePrompt" AnswerMachineDetectionConfigProperty = Value Prelude.Bool
+  set newValue AnswerMachineDetectionConfigProperty {..}
+    = AnswerMachineDetectionConfigProperty
+        {awaitAnswerMachinePrompt = Prelude.pure newValue, ..}
+instance Property "EnableAnswerMachineDetection" AnswerMachineDetectionConfigProperty where
+  type PropertyType "EnableAnswerMachineDetection" AnswerMachineDetectionConfigProperty = Value Prelude.Bool
+  set newValue AnswerMachineDetectionConfigProperty {..}
+    = AnswerMachineDetectionConfigProperty
+        {enableAnswerMachineDetection = newValue, ..}
diff --git a/gen/Stratosphere/ConnectCampaigns/Campaign/AnswerMachineDetectionConfigProperty.hs-boot b/gen/Stratosphere/ConnectCampaigns/Campaign/AnswerMachineDetectionConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaigns/Campaign/AnswerMachineDetectionConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ConnectCampaigns.Campaign.AnswerMachineDetectionConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AnswerMachineDetectionConfigProperty :: Prelude.Type
+instance ToResourceProperties AnswerMachineDetectionConfigProperty
+instance Prelude.Eq AnswerMachineDetectionConfigProperty
+instance Prelude.Show AnswerMachineDetectionConfigProperty
+instance JSON.ToJSON AnswerMachineDetectionConfigProperty
diff --git a/gen/Stratosphere/ConnectCampaigns/Campaign/DialerConfigProperty.hs b/gen/Stratosphere/ConnectCampaigns/Campaign/DialerConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaigns/Campaign/DialerConfigProperty.hs
@@ -0,0 +1,65 @@
+module Stratosphere.ConnectCampaigns.Campaign.DialerConfigProperty (
+        module Exports, DialerConfigProperty(..), mkDialerConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ConnectCampaigns.Campaign.AgentlessDialerConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.ConnectCampaigns.Campaign.PredictiveDialerConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.ConnectCampaigns.Campaign.ProgressiveDialerConfigProperty as Exports
+import Stratosphere.ResourceProperties
+data DialerConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaigns-campaign-dialerconfig.html>
+    DialerConfigProperty {haddock_workaround_ :: (),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaigns-campaign-dialerconfig.html#cfn-connectcampaigns-campaign-dialerconfig-agentlessdialerconfig>
+                          agentlessDialerConfig :: (Prelude.Maybe AgentlessDialerConfigProperty),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaigns-campaign-dialerconfig.html#cfn-connectcampaigns-campaign-dialerconfig-predictivedialerconfig>
+                          predictiveDialerConfig :: (Prelude.Maybe PredictiveDialerConfigProperty),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaigns-campaign-dialerconfig.html#cfn-connectcampaigns-campaign-dialerconfig-progressivedialerconfig>
+                          progressiveDialerConfig :: (Prelude.Maybe ProgressiveDialerConfigProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkDialerConfigProperty :: DialerConfigProperty
+mkDialerConfigProperty
+  = DialerConfigProperty
+      {haddock_workaround_ = (), agentlessDialerConfig = Prelude.Nothing,
+       predictiveDialerConfig = Prelude.Nothing,
+       progressiveDialerConfig = Prelude.Nothing}
+instance ToResourceProperties DialerConfigProperty where
+  toResourceProperties DialerConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ConnectCampaigns::Campaign.DialerConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AgentlessDialerConfig"
+                              Prelude.<$> agentlessDialerConfig,
+                            (JSON..=) "PredictiveDialerConfig"
+                              Prelude.<$> predictiveDialerConfig,
+                            (JSON..=) "ProgressiveDialerConfig"
+                              Prelude.<$> progressiveDialerConfig])}
+instance JSON.ToJSON DialerConfigProperty where
+  toJSON DialerConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AgentlessDialerConfig"
+                 Prelude.<$> agentlessDialerConfig,
+               (JSON..=) "PredictiveDialerConfig"
+                 Prelude.<$> predictiveDialerConfig,
+               (JSON..=) "ProgressiveDialerConfig"
+                 Prelude.<$> progressiveDialerConfig]))
+instance Property "AgentlessDialerConfig" DialerConfigProperty where
+  type PropertyType "AgentlessDialerConfig" DialerConfigProperty = AgentlessDialerConfigProperty
+  set newValue DialerConfigProperty {..}
+    = DialerConfigProperty
+        {agentlessDialerConfig = Prelude.pure newValue, ..}
+instance Property "PredictiveDialerConfig" DialerConfigProperty where
+  type PropertyType "PredictiveDialerConfig" DialerConfigProperty = PredictiveDialerConfigProperty
+  set newValue DialerConfigProperty {..}
+    = DialerConfigProperty
+        {predictiveDialerConfig = Prelude.pure newValue, ..}
+instance Property "ProgressiveDialerConfig" DialerConfigProperty where
+  type PropertyType "ProgressiveDialerConfig" DialerConfigProperty = ProgressiveDialerConfigProperty
+  set newValue DialerConfigProperty {..}
+    = DialerConfigProperty
+        {progressiveDialerConfig = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ConnectCampaigns/Campaign/DialerConfigProperty.hs-boot b/gen/Stratosphere/ConnectCampaigns/Campaign/DialerConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaigns/Campaign/DialerConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ConnectCampaigns.Campaign.DialerConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data DialerConfigProperty :: Prelude.Type
+instance ToResourceProperties DialerConfigProperty
+instance Prelude.Eq DialerConfigProperty
+instance Prelude.Show DialerConfigProperty
+instance JSON.ToJSON DialerConfigProperty
diff --git a/gen/Stratosphere/ConnectCampaigns/Campaign/OutboundCallConfigProperty.hs b/gen/Stratosphere/ConnectCampaigns/Campaign/OutboundCallConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaigns/Campaign/OutboundCallConfigProperty.hs
@@ -0,0 +1,76 @@
+module Stratosphere.ConnectCampaigns.Campaign.OutboundCallConfigProperty (
+        module Exports, OutboundCallConfigProperty(..),
+        mkOutboundCallConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ConnectCampaigns.Campaign.AnswerMachineDetectionConfigProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data OutboundCallConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaigns-campaign-outboundcallconfig.html>
+    OutboundCallConfigProperty {haddock_workaround_ :: (),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaigns-campaign-outboundcallconfig.html#cfn-connectcampaigns-campaign-outboundcallconfig-answermachinedetectionconfig>
+                                answerMachineDetectionConfig :: (Prelude.Maybe AnswerMachineDetectionConfigProperty),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaigns-campaign-outboundcallconfig.html#cfn-connectcampaigns-campaign-outboundcallconfig-connectcontactflowarn>
+                                connectContactFlowArn :: (Value Prelude.Text),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaigns-campaign-outboundcallconfig.html#cfn-connectcampaigns-campaign-outboundcallconfig-connectqueuearn>
+                                connectQueueArn :: (Prelude.Maybe (Value Prelude.Text)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaigns-campaign-outboundcallconfig.html#cfn-connectcampaigns-campaign-outboundcallconfig-connectsourcephonenumber>
+                                connectSourcePhoneNumber :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkOutboundCallConfigProperty ::
+  Value Prelude.Text -> OutboundCallConfigProperty
+mkOutboundCallConfigProperty connectContactFlowArn
+  = OutboundCallConfigProperty
+      {haddock_workaround_ = (),
+       connectContactFlowArn = connectContactFlowArn,
+       answerMachineDetectionConfig = Prelude.Nothing,
+       connectQueueArn = Prelude.Nothing,
+       connectSourcePhoneNumber = Prelude.Nothing}
+instance ToResourceProperties OutboundCallConfigProperty where
+  toResourceProperties OutboundCallConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ConnectCampaigns::Campaign.OutboundCallConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["ConnectContactFlowArn" JSON..= connectContactFlowArn]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AnswerMachineDetectionConfig"
+                                 Prelude.<$> answerMachineDetectionConfig,
+                               (JSON..=) "ConnectQueueArn" Prelude.<$> connectQueueArn,
+                               (JSON..=) "ConnectSourcePhoneNumber"
+                                 Prelude.<$> connectSourcePhoneNumber]))}
+instance JSON.ToJSON OutboundCallConfigProperty where
+  toJSON OutboundCallConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["ConnectContactFlowArn" JSON..= connectContactFlowArn]
+              (Prelude.catMaybes
+                 [(JSON..=) "AnswerMachineDetectionConfig"
+                    Prelude.<$> answerMachineDetectionConfig,
+                  (JSON..=) "ConnectQueueArn" Prelude.<$> connectQueueArn,
+                  (JSON..=) "ConnectSourcePhoneNumber"
+                    Prelude.<$> connectSourcePhoneNumber])))
+instance Property "AnswerMachineDetectionConfig" OutboundCallConfigProperty where
+  type PropertyType "AnswerMachineDetectionConfig" OutboundCallConfigProperty = AnswerMachineDetectionConfigProperty
+  set newValue OutboundCallConfigProperty {..}
+    = OutboundCallConfigProperty
+        {answerMachineDetectionConfig = Prelude.pure newValue, ..}
+instance Property "ConnectContactFlowArn" OutboundCallConfigProperty where
+  type PropertyType "ConnectContactFlowArn" OutboundCallConfigProperty = Value Prelude.Text
+  set newValue OutboundCallConfigProperty {..}
+    = OutboundCallConfigProperty {connectContactFlowArn = newValue, ..}
+instance Property "ConnectQueueArn" OutboundCallConfigProperty where
+  type PropertyType "ConnectQueueArn" OutboundCallConfigProperty = Value Prelude.Text
+  set newValue OutboundCallConfigProperty {..}
+    = OutboundCallConfigProperty
+        {connectQueueArn = Prelude.pure newValue, ..}
+instance Property "ConnectSourcePhoneNumber" OutboundCallConfigProperty where
+  type PropertyType "ConnectSourcePhoneNumber" OutboundCallConfigProperty = Value Prelude.Text
+  set newValue OutboundCallConfigProperty {..}
+    = OutboundCallConfigProperty
+        {connectSourcePhoneNumber = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ConnectCampaigns/Campaign/OutboundCallConfigProperty.hs-boot b/gen/Stratosphere/ConnectCampaigns/Campaign/OutboundCallConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaigns/Campaign/OutboundCallConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ConnectCampaigns.Campaign.OutboundCallConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data OutboundCallConfigProperty :: Prelude.Type
+instance ToResourceProperties OutboundCallConfigProperty
+instance Prelude.Eq OutboundCallConfigProperty
+instance Prelude.Show OutboundCallConfigProperty
+instance JSON.ToJSON OutboundCallConfigProperty
diff --git a/gen/Stratosphere/ConnectCampaigns/Campaign/PredictiveDialerConfigProperty.hs b/gen/Stratosphere/ConnectCampaigns/Campaign/PredictiveDialerConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaigns/Campaign/PredictiveDialerConfigProperty.hs
@@ -0,0 +1,52 @@
+module Stratosphere.ConnectCampaigns.Campaign.PredictiveDialerConfigProperty (
+        PredictiveDialerConfigProperty(..),
+        mkPredictiveDialerConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data PredictiveDialerConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaigns-campaign-predictivedialerconfig.html>
+    PredictiveDialerConfigProperty {haddock_workaround_ :: (),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaigns-campaign-predictivedialerconfig.html#cfn-connectcampaigns-campaign-predictivedialerconfig-bandwidthallocation>
+                                    bandwidthAllocation :: (Value Prelude.Double),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaigns-campaign-predictivedialerconfig.html#cfn-connectcampaigns-campaign-predictivedialerconfig-dialingcapacity>
+                                    dialingCapacity :: (Prelude.Maybe (Value Prelude.Double))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkPredictiveDialerConfigProperty ::
+  Value Prelude.Double -> PredictiveDialerConfigProperty
+mkPredictiveDialerConfigProperty bandwidthAllocation
+  = PredictiveDialerConfigProperty
+      {haddock_workaround_ = (),
+       bandwidthAllocation = bandwidthAllocation,
+       dialingCapacity = Prelude.Nothing}
+instance ToResourceProperties PredictiveDialerConfigProperty where
+  toResourceProperties PredictiveDialerConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ConnectCampaigns::Campaign.PredictiveDialerConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["BandwidthAllocation" JSON..= bandwidthAllocation]
+                           (Prelude.catMaybes
+                              [(JSON..=) "DialingCapacity" Prelude.<$> dialingCapacity]))}
+instance JSON.ToJSON PredictiveDialerConfigProperty where
+  toJSON PredictiveDialerConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["BandwidthAllocation" JSON..= bandwidthAllocation]
+              (Prelude.catMaybes
+                 [(JSON..=) "DialingCapacity" Prelude.<$> dialingCapacity])))
+instance Property "BandwidthAllocation" PredictiveDialerConfigProperty where
+  type PropertyType "BandwidthAllocation" PredictiveDialerConfigProperty = Value Prelude.Double
+  set newValue PredictiveDialerConfigProperty {..}
+    = PredictiveDialerConfigProperty
+        {bandwidthAllocation = newValue, ..}
+instance Property "DialingCapacity" PredictiveDialerConfigProperty where
+  type PropertyType "DialingCapacity" PredictiveDialerConfigProperty = Value Prelude.Double
+  set newValue PredictiveDialerConfigProperty {..}
+    = PredictiveDialerConfigProperty
+        {dialingCapacity = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ConnectCampaigns/Campaign/PredictiveDialerConfigProperty.hs-boot b/gen/Stratosphere/ConnectCampaigns/Campaign/PredictiveDialerConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaigns/Campaign/PredictiveDialerConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ConnectCampaigns.Campaign.PredictiveDialerConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data PredictiveDialerConfigProperty :: Prelude.Type
+instance ToResourceProperties PredictiveDialerConfigProperty
+instance Prelude.Eq PredictiveDialerConfigProperty
+instance Prelude.Show PredictiveDialerConfigProperty
+instance JSON.ToJSON PredictiveDialerConfigProperty
diff --git a/gen/Stratosphere/ConnectCampaigns/Campaign/ProgressiveDialerConfigProperty.hs b/gen/Stratosphere/ConnectCampaigns/Campaign/ProgressiveDialerConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaigns/Campaign/ProgressiveDialerConfigProperty.hs
@@ -0,0 +1,52 @@
+module Stratosphere.ConnectCampaigns.Campaign.ProgressiveDialerConfigProperty (
+        ProgressiveDialerConfigProperty(..),
+        mkProgressiveDialerConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ProgressiveDialerConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaigns-campaign-progressivedialerconfig.html>
+    ProgressiveDialerConfigProperty {haddock_workaround_ :: (),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaigns-campaign-progressivedialerconfig.html#cfn-connectcampaigns-campaign-progressivedialerconfig-bandwidthallocation>
+                                     bandwidthAllocation :: (Value Prelude.Double),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaigns-campaign-progressivedialerconfig.html#cfn-connectcampaigns-campaign-progressivedialerconfig-dialingcapacity>
+                                     dialingCapacity :: (Prelude.Maybe (Value Prelude.Double))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkProgressiveDialerConfigProperty ::
+  Value Prelude.Double -> ProgressiveDialerConfigProperty
+mkProgressiveDialerConfigProperty bandwidthAllocation
+  = ProgressiveDialerConfigProperty
+      {haddock_workaround_ = (),
+       bandwidthAllocation = bandwidthAllocation,
+       dialingCapacity = Prelude.Nothing}
+instance ToResourceProperties ProgressiveDialerConfigProperty where
+  toResourceProperties ProgressiveDialerConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ConnectCampaigns::Campaign.ProgressiveDialerConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["BandwidthAllocation" JSON..= bandwidthAllocation]
+                           (Prelude.catMaybes
+                              [(JSON..=) "DialingCapacity" Prelude.<$> dialingCapacity]))}
+instance JSON.ToJSON ProgressiveDialerConfigProperty where
+  toJSON ProgressiveDialerConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["BandwidthAllocation" JSON..= bandwidthAllocation]
+              (Prelude.catMaybes
+                 [(JSON..=) "DialingCapacity" Prelude.<$> dialingCapacity])))
+instance Property "BandwidthAllocation" ProgressiveDialerConfigProperty where
+  type PropertyType "BandwidthAllocation" ProgressiveDialerConfigProperty = Value Prelude.Double
+  set newValue ProgressiveDialerConfigProperty {..}
+    = ProgressiveDialerConfigProperty
+        {bandwidthAllocation = newValue, ..}
+instance Property "DialingCapacity" ProgressiveDialerConfigProperty where
+  type PropertyType "DialingCapacity" ProgressiveDialerConfigProperty = Value Prelude.Double
+  set newValue ProgressiveDialerConfigProperty {..}
+    = ProgressiveDialerConfigProperty
+        {dialingCapacity = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ConnectCampaigns/Campaign/ProgressiveDialerConfigProperty.hs-boot b/gen/Stratosphere/ConnectCampaigns/Campaign/ProgressiveDialerConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaigns/Campaign/ProgressiveDialerConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ConnectCampaigns.Campaign.ProgressiveDialerConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ProgressiveDialerConfigProperty :: Prelude.Type
+instance ToResourceProperties ProgressiveDialerConfigProperty
+instance Prelude.Eq ProgressiveDialerConfigProperty
+instance Prelude.Show ProgressiveDialerConfigProperty
+instance JSON.ToJSON ProgressiveDialerConfigProperty
diff --git a/stratosphere-connectcampaigns.cabal b/stratosphere-connectcampaigns.cabal
new file mode 100644
--- /dev/null
+++ b/stratosphere-connectcampaigns.cabal
@@ -0,0 +1,79 @@
+cabal-version: 1.12
+
+-- This file has been generated from package.yaml by hpack version 0.38.2.
+--
+-- see: https://github.com/sol/hpack
+
+name:           stratosphere-connectcampaigns
+version:        1.0.0
+synopsis:       Stratosphere integration for AWS ConnectCampaigns.
+description:    Integration into stratosphere to generate resources and properties for AWS ConnectCampaigns
+category:       AWS, Cloud, ConnectCampaigns
+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.ConnectCampaigns.Campaign
+      Stratosphere.ConnectCampaigns.Campaign.AgentlessDialerConfigProperty
+      Stratosphere.ConnectCampaigns.Campaign.AnswerMachineDetectionConfigProperty
+      Stratosphere.ConnectCampaigns.Campaign.DialerConfigProperty
+      Stratosphere.ConnectCampaigns.Campaign.OutboundCallConfigProperty
+      Stratosphere.ConnectCampaigns.Campaign.PredictiveDialerConfigProperty
+      Stratosphere.ConnectCampaigns.Campaign.ProgressiveDialerConfigProperty
+  other-modules:
+      Paths_stratosphere_connectcampaigns
+  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
