diff --git a/gso/migrations/versions/2023-06-21_7694b98571f8_add_iptrunk_isis_modify_workflow.py b/gso/migrations/versions/2023-06-21_7694b98571f8_add_iptrunk_isis_modify_workflow.py
new file mode 100644
index 0000000000000000000000000000000000000000..cd751156ba9ba0def54b63a7d4623c3d53f8e120
--- /dev/null
+++ b/gso/migrations/versions/2023-06-21_7694b98571f8_add_iptrunk_isis_modify_workflow.py
@@ -0,0 +1,39 @@
+"""add Iptrunk ISIS modify workflow.
+
+Revision ID: 7694b98571f8
+Revises: 84d0ad6e7294
+Create Date: 2023-06-21 08:36:42.824952
+
+"""
+import sqlalchemy as sa
+from alembic import op
+
+# revision identifiers, used by Alembic.
+revision = '7694b98571f8'
+down_revision = '84d0ad6e7294'
+branch_labels = None
+depends_on = None
+
+
+from orchestrator.migrations.helpers import create_workflow, delete_workflow
+
+new_workflows = [
+    {
+        "name": "modify_isis_metric",
+        "target": "MODIFY",
+        "description": "Modify IP trunk",
+        "product_type": "Iptrunk"
+    }
+]
+
+
+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/gso/workflows/__init__.py b/gso/workflows/__init__.py
index e1dfe7e35c76296279ea9e85e065a5d0cfeb6ec0..77366536d0b024d4ae7837ad7a11e74bf3816612 100644
--- a/gso/workflows/__init__.py
+++ b/gso/workflows/__init__.py
@@ -10,8 +10,6 @@ LazyWorkflowInstance("gso.workflows.device.get_facts", "get_facts")
 LazyWorkflowInstance("gso.workflows.iptrunk.create_iptrunk", "create_iptrunk")
 LazyWorkflowInstance("gso.workflows.iptrunk.terminate_iptrunk",
                      "terminate_iptrunk")
-LazyWorkflowInstance("gso.workflows.iptrunk.modify_iptrunk_interface",
-                     "modify_iptrunk_interface")
-LazyWorkflowInstance("gso.workflows.iptrunk.modify_iptrunk_isis_metric",
-                     "modify_iptrunk_isis_metric")
+LazyWorkflowInstance("gso.workflows.iptrunk.modify_isis_metric",
+                     "modify_isis_metric")
 LazyWorkflowInstance("gso.workflows.site.create_site", "create_site")
diff --git a/gso/workflows/iptrunk/modify_isis_metric.py b/gso/workflows/iptrunk/modify_isis_metric.py
new file mode 100644
index 0000000000000000000000000000000000000000..e287f8a9c38992e306d14687ec08c87491ce77ad
--- /dev/null
+++ b/gso/workflows/iptrunk/modify_isis_metric.py
@@ -0,0 +1,102 @@
+from orchestrator.forms import FormPage
+from orchestrator.targets import Target
+from orchestrator.types import FormGenerator, State
+from orchestrator.types import UUIDstr
+from orchestrator.workflow import done, init, step, workflow
+from orchestrator.workflows.steps import resync
+from orchestrator.workflows.steps import store_process_subscription, unsync
+from orchestrator.workflows.utils import wrap_modify_initial_input_form
+
+from gso.products.product_types.iptrunk import (
+    Iptrunk,
+)
+from gso.services import provisioning_proxy
+from gso.services.provisioning_proxy import (
+    confirm_pp_results,
+    await_pp_results,
+)
+
+
+def initial_input_form_generator(subscription_id: UUIDstr) -> FormGenerator:
+    subscription = Iptrunk.from_subscription(subscription_id)
+
+    class ModifyIptrunkForm(FormPage):
+        isis_metric: int = subscription.iptrunk.iptrunk_isis_metric
+
+    user_input = yield ModifyIptrunkForm
+
+    return user_input.dict()
+
+
+@step("Update subscription")
+def modify_iptrunk_subscription(
+    subscription: Iptrunk, isis_metric: int
+) -> State:
+    subscription.iptrunk.iptrunk_isis_metric = isis_metric
+    subscription.description = f"Iptrunk {subscription.description} updated)"
+
+    return {"subscription": subscription}
+
+
+@step("Provision IP trunk ISIS interface [DRY RUN]")
+def provision_ip_trunk_isis_iface_dry(
+    subscription: Iptrunk, process_id: UUIDstr
+) -> State:
+    provisioning_proxy.provision_ip_trunk(
+        subscription, process_id, "isis_interface"
+    )
+
+    return {
+        "subscription": subscription,
+        "label_text": (
+            "This is a dry run for the deployment of a new IP "
+            "trunk ISIS interface. "
+            "Deployment is being taken care of by the "
+            "provisioning proxy, please wait for the results to "
+            "come back before continuing."
+        ),
+    }
+
+
+@step("Provision IP trunk ISIS interface [FOR REAL]")
+def provision_ip_trunk_isis_iface_real(
+    subscription: Iptrunk, process_id: UUIDstr
+) -> State:
+    provisioning_proxy.provision_ip_trunk(
+        subscription, process_id, "isis_interface", False
+    )
+
+    return {
+        "subscription": subscription,
+        "label_text": (
+            "This is a live deployment of a new IP trunk "
+            "ISIS interface. "
+            "Deployment is being taken care of by the "
+            "provisioning proxy, please wait for the results to "
+            "come back before continuing."
+        ),
+    }
+
+
+@workflow(
+    "Modify IP trunk",
+    initial_input_form=wrap_modify_initial_input_form(
+        initial_input_form_generator
+    ),
+    target=Target.MODIFY,
+)
+def modify_isis_metric():
+    return (
+        init
+        >> store_process_subscription(Target.MODIFY)
+        >> unsync
+        >> modify_iptrunk_subscription
+        >> provision_ip_trunk_isis_iface_dry
+        >> await_pp_results
+        >> confirm_pp_results
+        >> provision_ip_trunk_isis_iface_real
+        >> await_pp_results
+        >> confirm_pp_results
+        >> resync
+        >> done
+    )