diff --git a/gso/utils/workflow_steps.py b/gso/utils/workflow_steps.py
index 93891456bd96a02fb52f40b7b250e40825983047..40c7a116da89f9a603d320ea7aec0b58852c38cd 100644
--- a/gso/utils/workflow_steps.py
+++ b/gso/utils/workflow_steps.py
@@ -3,6 +3,7 @@
 import json
 from typing import Any
 
+from gso.products.product_blocks import router
 from orchestrator import inputstep, step
 from orchestrator.config.assignee import Assignee
 from orchestrator.types import State, UUIDstr
@@ -15,6 +16,7 @@ from pydantic_forms.validators import Label
 from gso.products.product_types.iptrunk import Iptrunk
 from gso.services import lso_client
 from gso.settings import load_oss_params
+from gso.utils.helpers import generate_inventory_for_active_routers
 
 
 def _deploy_base_config(
@@ -42,6 +44,67 @@ def _deploy_base_config(
     )
 
 
+def _update_sdp_mesh(
+    subscription: dict[str, Any],
+    callback_route: str,
+    tt_number: str,
+    process_id: UUIDstr,
+    dry_run: bool
+    ) -> None:
+    inventory=generate_inventory_for_active_routers(
+        router_role=RouterRole.PE,
+        router_vendor=Vendor.NOKIA,
+        exclude_routers=[subscription["router"]["router_fqdn"]]
+    )
+    extra_vars = {
+        "dry_run": dry_run,
+        "subscription": subscription,
+        "commit_comment": f"GSO_PROCESS_ID: {process_id} - TT_NUMBER: {tt_number} - "
+        f"Update the SDP mesh for L2circuits(epipes) config on PE NOKIA routers",
+        "verb": "update_sdp_mesh",
+        "pe_router_list": {
+            subscription["router"]["router_fqdn"]: {
+                "lo4": str(subscription["router"]["router_lo_ipv4_address"]),
+                "lo6": str(subscription["router"]["router_lo_ipv6_address"]),
+            }
+        },
+    }
+
+    lso_client.execute_playbook(
+        playbook_name="update_pe_sdp_mesh.yaml",
+        callback_route=callback_route,
+        inventory=inventory,
+        extra_vars=extra_vars,
+    )
+
+
+def _update_sdp_single_pe(
+    subscription: dict[str, Any],
+    callback_route: str,
+    tt_number: str,
+    process_id: UUIDstr,
+    dry_run: bool
+    ) -> None:
+    inventory=subscription["router"]["router_fqdn"]
+    extra_vars = {
+        "dry_run": dry_run,
+        "subscription": subscription,
+        "commit_comment": f"GSO_PROCESS_ID: {process_id} - TT_NUMBER: {tt_number} - "
+        f"Update the SDP mesh for L2circuits(epipes) config on PE NOKIA routers",
+        "verb": "update_sdp_mesh",
+        "pe_router_list": generate_inventory_for_active_routers(
+            router.RouterRole.PE, exclude_routers=[subscription["router"]["router_fqdn"]]
+        )
+    }
+
+    lso_client.execute_playbook(
+        playbook_name="update_pe_sdp_mesh.yaml",
+        callback_route=callback_route,
+        inventory=inventory,
+        extra_vars=extra_vars,
+    )
+ 
+
 @step("[DRY RUN] Deploy base config")
 def deploy_base_config_dry(
     subscription: dict[str, Any],
@@ -68,6 +131,57 @@ def deploy_base_config_real(
     return {"subscription": subscription}
 
 
+@step("[DRY RUN] Include new PE into SDP mesh on other Nokia PEs")
+def update_sdp_mesh_dry(
+    subscription: dict[str, Any],
+    callback_route: str,
+    tt_number: str,
+    process_id: UUIDstr
+) -> State:
+    """Perform a dry run of including new PE router in SDP mesh on other NOKIA PE routers"""
+    _update_sdp_mesh(subscription, tt_number, callback_route, process_id, dry_run=True)
+
+    return {"subscription": subscription}
+
+@step("[FOR REAL] Include new PE into SDP mesh on other Nokia PEs")
+def update_sdp_mesh_real(
+    subscription: dict[str, Any],
+    callback_route: str,
+    tt_number: str,
+    process_id: UUIDstr
+) -> State:
+    """Include new PE router in SDP mesh on other NOKIA PE routers."""
+    _update_sdp_mesh(subscription, tt_number, callback_route, process_id, dry_run=False)
+
+    return {"subscription": subscription}
+
+
+@step("[DRY RUN] Configure SDP on a new PE to all other Nokia PEs")
+def update_sdp_single_pe_dry(
+    subscription: dict[str, Any],
+    callback_route: str,
+    tt_number: str,
+    process_id: UUIDstr
+) -> State:
+    """Perform a dry run of configuring SDP on a new PE router to all other NOKIA PE routers"""
+    _update_sdp_single_pe(subscription, tt_number, callback_route, process_id, dry_run=True)
+
+    return {"subscription": subscription}
+
+
+@step("[FOR REAL] Configure SDP on a new PE to all other Nokia PEs")
+def update_sdp_single_pe_real(
+    subscription: dict[str, Any],
+    callback_route: str,
+    tt_number: str,
+    process_id: UUIDstr
+) -> State:
+    """Configure SDP on a new PE router to all other NOKIA PE routers."""
+    _update_sdp_single_pe(subscription, tt_number, callback_route, process_id, dry_run=False)
+
+    return {"subscription": subscription}
+
+
 @step("[FOR REAL] Set ISIS metric to very high value")
 def set_isis_to_max(subscription: Iptrunk, process_id: UUIDstr, callback_route: str, tt_number: str) -> State:
     """Workflow step for setting the :term:`ISIS` metric to an arbitrarily high value to drain a link."""
diff --git a/gso/workflows/router/promote_p_to_pe.py b/gso/workflows/router/promote_p_to_pe.py
index 0f0b31da1fcf7efe8049e9d24cd1e20726bff9c0..db2cf3eee6bf98a2a9fff4bbc8d51a3f286935da 100644
--- a/gso/workflows/router/promote_p_to_pe.py
+++ b/gso/workflows/router/promote_p_to_pe.py
@@ -24,7 +24,10 @@ from gso.services.subscriptions import get_all_active_sites
 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 (
+    update_sdp_mesh_dry,
+    update_sdp_mesh_real,
+)
 
 def initial_input_form_generator(subscription_id: UUIDstr) -> FormGenerator:
     """Promote P router to PE router."""
@@ -158,58 +161,6 @@ def create_kentik_device(subscription: Router) -> State:
     return {"kentik_device": kentik_device}
 
 
-@step("[DRY RUN] Include new PE into SDP mesh on other Nokia PEs")
-def update_sdp_mesh_dry(subscription: dict[str, Any], callback_route: str, tt_number: str, process_id: UUIDstr) -> None:
-    """Perform a dry run for updating the SDP mesh with the new router."""
-    extra_vars = {
-        "dry_run": True,
-        "subscription": subscription,
-        "commit_comment": f"GSO_PROCESS_ID: {process_id} - TT_NUMBER: {tt_number} - "
-        f"Update the SDP mesh for L2circuits(epipes) config on PE NOKIA routers",
-        "verb": "update_sdp_mesh",
-        "pe_router_list": {
-            subscription["router"]["router_fqdn"]: {
-                "lo4": str(subscription["router"]["router_lo_ipv4_address"]),
-                "lo6": str(subscription["router"]["router_lo_ipv6_address"]),
-            }
-        },
-    }
-
-    lso_client.execute_playbook(
-        playbook_name="update_pe_sdp_mesh.yaml",
-        callback_route=callback_route,
-        inventory=generate_inventory_for_active_routers(router_role=RouterRole.PE, router_vendor=Vendor.NOKIA),
-        extra_vars=extra_vars,
-    )
-
-
-@step("[FOR REAL] Include new PE into SDP mesh on other Nokia PEs")
-def update_sdp_mesh_real(
-    subscription: dict[str, Any], callback_route: str, tt_number: str, process_id: UUIDstr
-) -> None:
-    """Update the SDP mesh for L2 circuits(epipes) config on PE NOKIA routers."""
-    extra_vars = {
-        "dry_run": False,
-        "subscription": subscription,
-        "commit_comment": f"GSO_PROCESS_ID: {process_id} - TT_NUMBER: {tt_number} - "
-        f"Update the SDP mesh for l2circuits(epipes) config on PE NOKIA routers",
-        "verb": "update_sdp_mesh",
-        "pe_router_list": {
-            subscription["router"]["router_fqdn"]: {
-                "lo4": str(subscription["router"]["router_lo_ipv4_address"]),
-                "lo6": str(subscription["router"]["router_lo_ipv6_address"]),
-            }
-        },
-    }
-
-    lso_client.execute_playbook(
-        playbook_name="update_pe_sdp_mesh.yaml",
-        callback_route=callback_route,
-        inventory=generate_inventory_for_active_routers(router_role=RouterRole.PE, router_vendor=Vendor.NOKIA),
-        extra_vars=extra_vars,
-    )
-
-
 @step("[DRY RUN] Remove P from all PEs")
 def remove_p_from_pe_dry(
     subscription: dict[str, Any], callback_route: str, tt_number: str, process_id: UUIDstr