diff --git a/gso/workflows/router/promote_p_to_pe.py b/gso/workflows/router/promote_p_to_pe.py
index 08a12d6d68ff4446e0233f305f621bb99f6331d6..03d68f099a0a8a373c0d5435e5afdfc0d845112e 100644
--- a/gso/workflows/router/promote_p_to_pe.py
+++ b/gso/workflows/router/promote_p_to_pe.py
@@ -25,6 +25,16 @@ from gso.utils.helpers import generate_inventory_for_active_routers
 from gso.utils.shared_enums import Vendor
 from gso.utils.types.tt_number import TTNumber
 from gso.utils.workflow_steps import (
+    add_all_p_to_pe_dry,
+    add_all_p_to_pe_real,
+    add_pe_mesh_to_pe_dry,
+    add_pe_mesh_to_pe_real,
+    add_pe_to_all_p_dry,
+    add_pe_to_all_p_real,
+    add_pe_to_pe_mesh_dry,
+    add_pe_to_pe_mesh_real,
+    check_l3_services,
+    check_pe_ibgp,
     update_sdp_mesh_dry,
     update_sdp_mesh_real,
 )
@@ -204,109 +214,6 @@ def remove_p_from_pe_real(
     )
 
 
-@step("[DRY RUN] Add PE mesh to PE")
-def add_pe_mesh_to_pe_dry(
-    subscription: dict[str, Any], callback_route: str, tt_number: str, process_id: UUIDstr
-) -> None:
-    """Perform a dry run of adding list of PE routers into iGEANT/iGEANT6 of promoted router."""
-    extra_vars = {
-        "dry_run": True,
-        "subscription": subscription,
-        "commit_comment": f"GSO_PROCESS_ID: {process_id} - TT_NUMBER: {tt_number} - "
-        f"Add list of PE routers into iGEANT/iGEANT6 of promoted router",
-        "verb": "add_pe_mesh_to_pe",
-        "pe_router_list": generate_inventory_for_active_routers(RouterRole.PE)["all"]["hosts"],
-    }
-
-    lso_client.execute_playbook(
-        playbook_name="update_ibgp_mesh.yaml",
-        callback_route=callback_route,
-        inventory=subscription["router"]["router_fqdn"],
-        extra_vars=extra_vars,
-    )
-
-
-@step("[FOR REAL] Add PE mesh to PE")
-def add_pe_mesh_to_pe_real(
-    subscription: dict[str, Any], callback_route: str, tt_number: str, process_id: UUIDstr
-) -> None:
-    """Perform a real run of adding list of PE routers into iGEANT/iGEANT6 of promoted router."""
-    extra_vars = {
-        "dry_run": False,
-        "subscription": subscription,
-        "commit_comment": f"GSO_PROCESS_ID: {process_id} - TT_NUMBER: {tt_number} - "
-        f"Add list of PE routers into iGEANT/iGEANT6 of promoted router",
-        "verb": "add_pe_mesh_to_pe",
-        "pe_router_list": generate_inventory_for_active_routers(RouterRole.PE)["all"]["hosts"],
-    }
-
-    lso_client.execute_playbook(
-        playbook_name="update_ibgp_mesh.yaml",
-        callback_route=callback_route,
-        inventory=subscription["router"]["router_fqdn"],
-        extra_vars=extra_vars,
-    )
-
-
-@step("[DRY RUN] Add PE to PE mesh")
-def add_pe_to_pe_mesh_dry(
-    subscription: dict[str, Any], callback_route: str, tt_number: str, process_id: UUIDstr
-) -> None:
-    """Perform a dry run of adding the promoted router to all PE routers in iGEANT/iGEANT6."""
-    extra_vars = {
-        "dry_run": True,
-        "subscription": subscription,
-        "commit_comment": f"GSO_PROCESS_ID: {process_id} - TT_NUMBER: {tt_number} - "
-        f"Add promoted router to all PE routers in iGEANT/iGEANT6.",
-        "verb": "add_pe_to_pe_mesh",
-    }
-
-    lso_client.execute_playbook(
-        playbook_name="update_ibgp_mesh.yaml",
-        callback_route=callback_route,
-        inventory=generate_inventory_for_active_routers(RouterRole.PE),
-        extra_vars=extra_vars,
-    )
-
-
-@step("[FOR REAL] Add PE to PE mesh")
-def add_pe_to_pe_mesh_real(
-    subscription: dict[str, Any], callback_route: str, tt_number: str, process_id: UUIDstr
-) -> None:
-    """Perform a real run of adding the promoted router to all PE routers in iGEANT/iGEANT6."""
-    extra_vars = {
-        "dry_run": False,
-        "subscription": subscription,
-        "commit_comment": f"GSO_PROCESS_ID: {process_id} - TT_NUMBER: {tt_number} - "
-        f"Add promoted router to all PE routers in iGEANT/iGEANT6.",
-        "verb": "add_pe_to_pe_mesh",
-    }
-
-    lso_client.execute_playbook(
-        playbook_name="update_ibgp_mesh.yaml",
-        callback_route=callback_route,
-        inventory=generate_inventory_for_active_routers(RouterRole.PE),
-        extra_vars=extra_vars,
-    )
-
-
-@step("Check iBGP session")
-def check_pe_ibgp(subscription: dict[str, Any], callback_route: str) -> None:
-    """Check the iBGP session."""
-    extra_vars = {
-        "dry_run": False,
-        "subscription": subscription,
-        "verb": "check_pe_ibgp",
-    }
-
-    lso_client.execute_playbook(
-        playbook_name="check_ibgp.yaml",
-        callback_route=callback_route,
-        inventory=subscription["router"]["router_fqdn"],
-        extra_vars=extra_vars,
-    )
-
-
 @step("[DRY RUN] Deploy routing instances")
 def deploy_routing_instances_dry(
     subscription: dict[str, Any], callback_route: str, tt_number: str, process_id: UUIDstr
@@ -347,23 +254,6 @@ def deploy_routing_instances_real(
     )
 
 
-@step("Check L3 services")
-def check_l3_services(subscription: dict[str, Any], callback_route: str) -> None:
-    """Check L3 services."""
-    extra_vars = {
-        "dry_run": False,
-        "subscription": subscription,
-        "verb": "check_base_ris",
-    }
-
-    lso_client.execute_playbook(
-        playbook_name="check_l3_services.yaml",
-        callback_route=callback_route,
-        inventory=subscription["router"]["router_fqdn"],
-        extra_vars=extra_vars,
-    )
-
-
 @step("Remove ISIS overload")
 def remove_isis_overload(
     subscription: dict[str, Any], callback_route: str, tt_number: str, process_id: UUIDstr
@@ -392,94 +282,6 @@ def update_subscription_model(subscription: Router) -> State:
     return {"subscription": subscription}
 
 
-@step("[DRY RUN] Add all P to this new PE")
-def add_all_p_to_pe_dry(subscription: dict[str, Any], callback_route: str, tt_number: str, process_id: UUIDstr) -> None:
-    """Perform a dry run of adding all P routers to the PE router."""
-    extra_vars = {
-        "dry_run": True,
-        "subscription": subscription,
-        "commit_comment": f"GSO_PROCESS_ID: {process_id} - TT_NUMBER: {tt_number} - Add all P-routers to this new PE",
-        "verb": "add_all_p_to_pe",
-        "p_router_list": generate_inventory_for_active_routers(
-            RouterRole.P, exclude_routers=[subscription["router"]["router_fqdn"]]
-        )["all"]["hosts"],
-    }
-
-    lso_client.execute_playbook(
-        playbook_name="update_ibgp_mesh.yaml",
-        callback_route=callback_route,
-        inventory=subscription["router"]["router_fqdn"],
-        extra_vars=extra_vars,
-    )
-
-
-@step("[FOR REAL] Add all P to this new PE")
-def add_all_p_to_pe_real(
-    subscription: dict[str, Any], callback_route: str, tt_number: str, process_id: UUIDstr
-) -> None:
-    """Perform a real run of adding all P routers to the PE router."""
-    extra_vars = {
-        "dry_run": False,
-        "subscription": subscription,
-        "commit_comment": f"GSO_PROCESS_ID: {process_id} - TT_NUMBER: {tt_number} - Add all P-routers to this new PE",
-        "verb": "add_all_p_to_pe",
-        "p_router_list": generate_inventory_for_active_routers(
-            RouterRole.P, exclude_routers=[subscription["router"]["router_fqdn"]]
-        )["all"]["hosts"],
-    }
-
-    lso_client.execute_playbook(
-        playbook_name="update_ibgp_mesh.yaml",
-        callback_route=callback_route,
-        inventory=subscription["router"]["router_fqdn"],
-        extra_vars=extra_vars,
-    )
-
-
-@step("[DRY RUN] Add this new PE to all P")
-def add_pe_to_all_p_dry(subscription: dict[str, Any], callback_route: str, tt_number: str, process_id: UUIDstr) -> None:
-    """Perform a dry run of adding promoted router to all PE routers in iGEANT/iGEANT6."""
-    extra_vars = {
-        "dry_run": True,
-        "subscription": subscription,
-        "commit_comment": f"GSO_PROCESS_ID: {process_id} - TT_NUMBER: {tt_number} - "
-        f"Add promoted router to all PE routers in iGEANT/iGEANT6",
-        "verb": "add_pe_to_all_p",
-    }
-
-    lso_client.execute_playbook(
-        playbook_name="update_ibgp_mesh.yaml",
-        callback_route=callback_route,
-        inventory=generate_inventory_for_active_routers(
-            RouterRole.P, exclude_routers=[subscription["router"]["router_fqdn"]]
-        ),
-        extra_vars=extra_vars,
-    )
-
-
-@step("[FOR REAL] Add this new PE to all P")
-def add_pe_to_all_p_real(
-    subscription: dict[str, Any], callback_route: str, tt_number: str, process_id: UUIDstr
-) -> None:
-    """Perform a real run of adding promoted router to all PE routers in iGEANT/iGEANT6."""
-    extra_vars = {
-        "dry_run": False,
-        "subscription": subscription,
-        "commit_comment": f"GSO_PROCESS_ID: {process_id} - TT_NUMBER: {tt_number} - "
-        f"Add promoted router to all PE routers in iGEANT/iGEANT6",
-        "verb": "add_pe_to_all_p",
-    }
-
-    lso_client.execute_playbook(
-        playbook_name="update_ibgp_mesh.yaml",
-        callback_route=callback_route,
-        inventory=generate_inventory_for_active_routers(
-            RouterRole.P, exclude_routers=[subscription["router"]["router_fqdn"]]
-        ),
-        extra_vars=extra_vars,
-    )
-
-
 @step("[DRY RUN] Delete default routes")
 def delete_default_routes_dry(
     subscription: dict[str, Any], callback_route: str, tt_number: str, process_id: UUIDstr