diff --git a/migrations/versions/schema/2023-03-13_8329fa45157b_add_delete_workflows_and_update_create_.py b/migrations/versions/schema/2023-03-13_8329fa45157b_add_delete_workflows_and_update_create_.py
new file mode 100644
index 0000000000000000000000000000000000000000..88081814b3869c74969b66d3630b56a8b7095a7a
--- /dev/null
+++ b/migrations/versions/schema/2023-03-13_8329fa45157b_add_delete_workflows_and_update_create_.py
@@ -0,0 +1,81 @@
+"""add DELETE workflows and update CREATE workflows.
+
+Revision ID: 8329fa45157b
+Revises: aa49bed10737
+Create Date: 2023-03-13 12:12:20.553551
+
+"""
+import sqlalchemy as sa
+from alembic import op
+
+# revision identifiers, used by Alembic.
+revision = '8329fa45157b'
+down_revision = 'aa49bed10737'
+branch_labels = None
+depends_on = None
+
+
+from orchestrator.migrations.helpers import create_workflow, delete_workflow
+
+new_workflows = [
+    {
+        "name": "create_trunk",
+        "target": "CREATE",
+        "description": "Create trunk",
+        "product_type": "Trunk"
+    },
+    {
+        "name": "terminate_trunk",
+        "target": "TERMINATE",
+        "description": "Terminate trunk",
+        "product_type": "Trunk"
+    },
+    {
+        "name": "create_trunk_config",
+        "target": "CREATE",
+        "description": "Create trunk config",
+        "product_type": "TrunkConfig"
+    },
+    {
+        "name": "terminate_trunk_config",
+        "target": "TERMINATE",
+        "description": "Terminate trunk config",
+        "product_type": "TrunkConfig"
+    },
+    {
+        "name": "create_trunk_config_common",
+        "target": "CREATE",
+        "description": "Create trunk config common",
+        "product_type": "TrunkConfigCommon"
+    },
+    {
+        "name": "terminate_trunk_config_common",
+        "target": "TERMINATE",
+        "description": "Terminate trunk config common",
+        "product_type": "TrunkConfigCommon"
+    },
+    {
+        "name": "create_trunk_config_side",
+        "target": "CREATE",
+        "description": "Create trunk config side",
+        "product_type": "TrunkConfigSide"
+    },
+    {
+        "name": "terminate_trunk_config_side",
+        "target": "TERMINATE",
+        "description": "Terminate trunk config side",
+        "product_type": "TrunkConfigSide"
+    }
+]
+
+
+def upgrade() -> None:
+    conn = op.get_bind()
+    for workflow in new_workflows:
+        create_workflow(conn, workflow)
+
+
+def downgrade() -> None:
+    conn = op.get_bind()
+    for workflow in new_workflows:
+        delete_workflow(conn, workflow["name"])
diff --git a/workflows/__init__.py b/workflows/__init__.py
index 6eeccd6dbb0490be4e7570b46dd8fa3656f791af..3a379cd401c3d7d0346f69e91f047b48886fe54a 100644
--- a/workflows/__init__.py
+++ b/workflows/__init__.py
@@ -4,3 +4,7 @@ LazyWorkflowInstance("workflows.trunk.create_trunk", "create_trunk")
 LazyWorkflowInstance("workflows.trunk_config.create_trunk_config", "create_trunk_config")
 LazyWorkflowInstance("workflows.trunk_config_common.create_trunk_config_common", "create_trunk_config_common")
 LazyWorkflowInstance("workflows.trunk_config_side.create_trunk_config_side", "create_trunk_config_side")
+LazyWorkflowInstance("workflows.trunk.terminate_trunk", "terminate_trunk")
+LazyWorkflowInstance("workflows.trunk_config.terminate_trunk_config", "terminate_trunk_config")
+LazyWorkflowInstance("workflows.trunk_config_common.terminate_trunk_config_common", "terminate_trunk_config_common")
+LazyWorkflowInstance("workflows.trunk_config_side.terminate_trunk_config_side", "terminate_trunk_config_side")
diff --git a/workflows/trunk/create_trunk.py b/workflows/trunk/create_trunk.py
index 16c5444bcc46b7c572bcc2fd05d6b62d2f141b21..f994aff805ec02c799ff96bdade5a27cda4b5ada 100644
--- a/workflows/trunk/create_trunk.py
+++ b/workflows/trunk/create_trunk.py
@@ -24,7 +24,7 @@ def initial_input_form_generator(product_name: str) -> FormGenerator:
     return user_input.dict()
 
 
-def _provision_in_group_management_system(trunk_name: str) -> int:
+def _provision_in_gap(trunk_name: str) -> int:
 
     return abs(hash(trunk_name))
 
@@ -48,7 +48,7 @@ def initialize_subscription(subscription: TrunkInactive, trunk_name: str, geant_
 
 @step("Provision trunk")
 def provision_trunk(subscription: TrunkProvisioning, trunk_name: str) -> State:
-    trunk_id = _provision_in_group_management_system(trunk_name)
+    trunk_id = _provision_in_gap(trunk_name)
     subscription.trunk.trunk_id = trunk_id
 
     return {"subscription": subscription}
diff --git a/workflows/trunk/terminate_trunk.py b/workflows/trunk/terminate_trunk.py
new file mode 100644
index 0000000000000000000000000000000000000000..cfb0e43147b3c2f1210342d670605fe656a62bfe
--- /dev/null
+++ b/workflows/trunk/terminate_trunk.py
@@ -0,0 +1,45 @@
+from orchestrator.forms import FormPage
+from orchestrator.forms.validators import Label
+from orchestrator.targets import Target
+from orchestrator.types import InputForm, SubscriptionLifecycle, UUIDstr
+from orchestrator.workflow import done, init, step, workflow
+from orchestrator.workflows.steps import resync, set_status, store_process_subscription, unsync
+from orchestrator.workflows.utils import wrap_modify_initial_input_form
+
+from products import Trunk
+
+
+def initial_input_form_generator(subscription_id: UUIDstr, organisation: UUIDstr) -> InputForm:
+    subscription = Trunk.from_subscription(subscription_id)
+
+    class TerminateForm(FormPage):
+        are_you_sure: Label = f"Are you sure you want to remove {subscription.description}?"  # type:ignore
+
+    return TerminateForm
+
+
+def _deprovision_in_gap(trunk_id: int) -> int:
+    pass
+
+
+@step("Deprovision trunk")
+def deprovision_trunk(subscription: Trunk) -> None:
+    _deprovision_in_gap(subscription.trunk.trunk_id)
+
+
+@workflow(
+    "Terminate trunk",
+    initial_input_form=wrap_modify_initial_input_form(initial_input_form_generator),
+    target=Target.TERMINATE,
+)
+def terminate_trunk():
+
+    return (
+        init
+        >> store_process_subscription(Target.TERMINATE)
+        >> unsync
+        >> deprovision_trunk
+        >> set_status(SubscriptionLifecycle.TERMINATED)
+        >> resync
+        >> done
+    )
\ No newline at end of file
diff --git a/workflows/trunk_config/create_trunk_config.py b/workflows/trunk_config/create_trunk_config.py
index f2c5c117dbc5128230b5e52e7815f349697abfb4..6338f7704d0915ce54d3ca54c67e80f2c3beabbc 100644
--- a/workflows/trunk_config/create_trunk_config.py
+++ b/workflows/trunk_config/create_trunk_config.py
@@ -47,7 +47,7 @@ def initial_input_form_generator(product_name: str) -> FormGenerator:
     return user_input.dict()
 
 
-def _provision_in_group_management_system() -> int:
+def _provision_in_gap() -> int:
 
     return random.randint(0, 2147483648)
 
@@ -70,7 +70,7 @@ def initialize_subscription(subscription: TrunkConfigInactive, trunk_ids: List[s
 
 @step("Provision trunk config")
 def provision_trunk_config(subscription: TrunkConfigProvisioning) -> State:
-    trunk_config_id = _provision_in_group_management_system()
+    trunk_config_id = _provision_in_gap()
     subscription.trunk_config.trunk_config_id = trunk_config_id
 
     return {"subscription": subscription}
diff --git a/workflows/trunk_config/terminate_trunk_config.py b/workflows/trunk_config/terminate_trunk_config.py
new file mode 100644
index 0000000000000000000000000000000000000000..2d4d6cb689da21992218dcf41693734fb6f987a4
--- /dev/null
+++ b/workflows/trunk_config/terminate_trunk_config.py
@@ -0,0 +1,45 @@
+from orchestrator.forms import FormPage
+from orchestrator.forms.validators import Label
+from orchestrator.targets import Target
+from orchestrator.types import InputForm, SubscriptionLifecycle, UUIDstr
+from orchestrator.workflow import done, init, step, workflow
+from orchestrator.workflows.steps import resync, set_status, store_process_subscription, unsync
+from orchestrator.workflows.utils import wrap_modify_initial_input_form
+
+from products import TrunkConfig
+
+
+def initial_input_form_generator(subscription_id: UUIDstr, organisation: UUIDstr) -> InputForm:
+    subscription = TrunkConfig.from_subscription(subscription_id)
+
+    class TerminateForm(FormPage):
+        are_you_sure: Label = f"Are you sure you want to remove {subscription.description}?"  # type:ignore
+
+    return TerminateForm
+
+
+def _deprovision_in_gap(trunk_config_id: int) -> int:
+    pass
+
+
+@step("Deprovision trunk config")
+def deprovision_trunk_config(subscription: TrunkConfig) -> None:
+    _deprovision_in_gap(subscription.trunk_config.trunk_config_id)
+
+
+@workflow(
+    "Terminate trunk config",
+    initial_input_form=wrap_modify_initial_input_form(initial_input_form_generator),
+    target=Target.TERMINATE,
+)
+def terminate_trunk_config():
+
+    return (
+        init
+        >> store_process_subscription(Target.TERMINATE)
+        >> unsync
+        >> deprovision_trunk_config
+        >> set_status(SubscriptionLifecycle.TERMINATED)
+        >> resync
+        >> done
+    )
\ No newline at end of file
diff --git a/workflows/trunk_config_common/create_trunk_config_common.py b/workflows/trunk_config_common/create_trunk_config_common.py
index 3d609ed6c7ca0161db2f7438194ed08f6885a5b6..0673d2f7349b2747702d4be007e82dc676e0dc3a 100644
--- a/workflows/trunk_config_common/create_trunk_config_common.py
+++ b/workflows/trunk_config_common/create_trunk_config_common.py
@@ -50,7 +50,7 @@ def initial_input_form_generator(product_name: str) -> FormGenerator:
     return user_input.dict()
 
 
-def _provision_in_group_management_system() -> int:
+def _provision_in_gap() -> int:
 
     return random.randint(0, 2147483648)
 
@@ -77,7 +77,7 @@ def initialize_subscription(subscription: TrunkConfigCommonInactive, speed: str,
 
 @step("Provision trunk config common")
 def provision_trunk_config_common(subscription: TrunkConfigCommonProvisioning) -> State:
-    trunk_config_common_id = _provision_in_group_management_system()
+    trunk_config_common_id = _provision_in_gap()
     subscription.trunk_config_common.trunk_config_common_id = trunk_config_common_id
 
     return {"subscription": subscription}
diff --git a/workflows/trunk_config_common/terminate_trunk_config_common.py b/workflows/trunk_config_common/terminate_trunk_config_common.py
new file mode 100644
index 0000000000000000000000000000000000000000..b92da2476a7da36556c9334c9c3671bf49bb996d
--- /dev/null
+++ b/workflows/trunk_config_common/terminate_trunk_config_common.py
@@ -0,0 +1,45 @@
+from orchestrator.forms import FormPage
+from orchestrator.forms.validators import Label
+from orchestrator.targets import Target
+from orchestrator.types import InputForm, SubscriptionLifecycle, UUIDstr
+from orchestrator.workflow import done, init, step, workflow
+from orchestrator.workflows.steps import resync, set_status, store_process_subscription, unsync
+from orchestrator.workflows.utils import wrap_modify_initial_input_form
+
+from products import TrunkConfigCommon
+
+
+def initial_input_form_generator(subscription_id: UUIDstr, organisation: UUIDstr) -> InputForm:
+    subscription = TrunkConfigCommon.from_subscription(subscription_id)
+
+    class TerminateForm(FormPage):
+        are_you_sure: Label = f"Are you sure you want to remove {subscription.description}?"  # type:ignore
+
+    return TerminateForm
+
+
+def _deprovision_in_gap(trunk_config_common_id: int) -> int:
+    pass
+
+
+@step("Deprovision trunk config common")
+def deprovision_trunk_config_common(subscription: TrunkConfigCommon) -> None:
+    _deprovision_in_gap(subscription.trunk_config_common.trunk_config_common_id)
+
+
+@workflow(
+    "Terminate trunk config common",
+    initial_input_form=wrap_modify_initial_input_form(initial_input_form_generator),
+    target=Target.TERMINATE,
+)
+def terminate_trunk_config_common():
+
+    return (
+        init
+        >> store_process_subscription(Target.TERMINATE)
+        >> unsync
+        >> deprovision_trunk_config_common
+        >> set_status(SubscriptionLifecycle.TERMINATED)
+        >> resync
+        >> done
+    )
\ No newline at end of file
diff --git a/workflows/trunk_config_side/create_trunk_config_side.py b/workflows/trunk_config_side/create_trunk_config_side.py
index 67897ea2bdedcbf155d7bc7c3f0e28140175b8ca..d5da830d977ebaf50f9ed614ec6c0142d565f52f 100644
--- a/workflows/trunk_config_side/create_trunk_config_side.py
+++ b/workflows/trunk_config_side/create_trunk_config_side.py
@@ -52,7 +52,7 @@ def initial_input_form_generator(product_name: str) -> FormGenerator:
     return user_input.dict()
 
 
-def _provision_in_group_management_system(fqdn: str) -> int:
+def _provision_in_gap(fqdn: str) -> int:
 
     return abs(hash(fqdn))
 
@@ -81,7 +81,7 @@ def initialize_subscription(subscription: TrunkConfigSideInactive, fqdn: str, ae
 
 @step("Provision trunk config side")
 def provision_trunk_config_side(subscription: TrunkConfigSideProvisioning, fqdn: str) -> State:
-    trunk_config_side_id = _provision_in_group_management_system(fqdn)
+    trunk_config_side_id = _provision_in_gap(fqdn)
     subscription.trunk_config_side.trunk_config_side_id = trunk_config_side_id
 
     return {"subscription": subscription}
diff --git a/workflows/trunk_config_side/terminate_trunk_config_side.py b/workflows/trunk_config_side/terminate_trunk_config_side.py
new file mode 100644
index 0000000000000000000000000000000000000000..a9a29e1f420c73e93392576bc6ba43e3caf2e5db
--- /dev/null
+++ b/workflows/trunk_config_side/terminate_trunk_config_side.py
@@ -0,0 +1,45 @@
+from orchestrator.forms import FormPage
+from orchestrator.forms.validators import Label
+from orchestrator.targets import Target
+from orchestrator.types import InputForm, SubscriptionLifecycle, UUIDstr
+from orchestrator.workflow import done, init, step, workflow
+from orchestrator.workflows.steps import resync, set_status, store_process_subscription, unsync
+from orchestrator.workflows.utils import wrap_modify_initial_input_form
+
+from products import TrunkConfigSide
+
+
+def initial_input_form_generator(subscription_id: UUIDstr, organisation: UUIDstr) -> InputForm:
+    subscription = TrunkConfigSide.from_subscription(subscription_id)
+
+    class TerminateForm(FormPage):
+        are_you_sure: Label = f"Are you sure you want to remove {subscription.description}?"  # type:ignore
+
+    return TerminateForm
+
+
+def _deprovision_in_gap(trunk_config_side_id: int) -> int:
+    pass
+
+
+@step("Deprovision trunk config side")
+def deprovision_trunk_config_side(subscription: TrunkConfigSide) -> None:
+    _deprovision_in_gap(subscription.trunk_config_side.trunk_config_side_id)
+
+
+@workflow(
+    "Terminate trunk config side",
+    initial_input_form=wrap_modify_initial_input_form(initial_input_form_generator),
+    target=Target.TERMINATE,
+)
+def terminate_trunk_config_side():
+
+    return (
+        init
+        >> store_process_subscription(Target.TERMINATE)
+        >> unsync
+        >> deprovision_trunk_config_side
+        >> set_status(SubscriptionLifecycle.TERMINATED)
+        >> resync
+        >> done
+    )
\ No newline at end of file