diff --git a/gso/workflows/l2_circuit/migrate_layer_2_circuit.py b/gso/workflows/l2_circuit/migrate_layer_2_circuit.py
index 70a91e5aaaf24c274ca510bb9121e3b2ac37a882..661e27d32a00589c87d33ec0c199d4fcb154c0f3 100644
--- a/gso/workflows/l2_circuit/migrate_layer_2_circuit.py
+++ b/gso/workflows/l2_circuit/migrate_layer_2_circuit.py
@@ -87,6 +87,7 @@ def input_form_generator(subscription_id: UUIDstr) -> FormGenerator:
         model_config = ConfigDict(title="Migrating Layer 2 Circuit")
 
         new_edge_port: active_edge_port_selector(partner_id=replace_side_partner.partner_id)  # type: ignore[valid-type]
+        generate_new_vc_id: bool = False
 
     user_input = yield SelectNewEdgePortForm
 
@@ -98,11 +99,17 @@ def input_form_generator(subscription_id: UUIDstr) -> FormGenerator:
         "subscription_id": subscription_id,
         "old_edge_port": initial_user_input.replace_side,
         "new_edge_port": user_input.new_edge_port,
+        "generate_new_vc_id": user_input.generate_new_vc_id,
     }
 
 
 @step("Update subscription model")
-def update_subscription_model(subscription: Layer2Circuit, old_edge_port: UUIDstr, new_edge_port: UUIDstr) -> State:
+def update_subscription_model(
+    subscription: Layer2Circuit,
+    old_edge_port: UUIDstr,
+    new_edge_port: UUIDstr,
+    generate_new_vc_id: bool,  # noqa: FBT001
+) -> State:
     """Replace the old Edge Port with the newly selected one in the subscription model."""
     replace_index = (
         0
@@ -114,12 +121,12 @@ def update_subscription_model(subscription: Layer2Circuit, old_edge_port: UUIDst
         new_edge_port
     ).edge_port
 
-    vc_id = generate_unique_vc_id(l2c_type=subscription.layer_2_circuit.layer_2_circuit_type)
-    if not vc_id:
-        msg = "Failed to generate unique Virtual Circuit ID."
-        raise ProcessFailureError(msg)
-
-    subscription.layer_2_circuit.virtual_circuit_id = vc_id
+    if generate_new_vc_id:
+        vc_id = generate_unique_vc_id(l2c_type=subscription.layer_2_circuit.layer_2_circuit_type)
+        if not vc_id:
+            msg = "Failed to generate unique Virtual Circuit ID."
+            raise ProcessFailureError(msg)
+        subscription.layer_2_circuit.virtual_circuit_id = vc_id
 
     return {"subscription": subscription}
 
diff --git a/test/workflows/l2_circuit/test_migrate_layer_2_circuit.py b/test/workflows/l2_circuit/test_migrate_layer_2_circuit.py
index 9c016cd28a5abbbd1a3d9cfd8572eeb78c5fedff..a0f05946cde87647941cb5421af0399a30ce0e47 100644
--- a/test/workflows/l2_circuit/test_migrate_layer_2_circuit.py
+++ b/test/workflows/l2_circuit/test_migrate_layer_2_circuit.py
@@ -12,9 +12,11 @@ from test.workflows import assert_complete, assert_lso_interaction_success, extr
 @pytest.mark.parametrize("layer_2_circuit_service_type", LAYER_2_CIRCUIT_SERVICE_TYPES)
 @pytest.mark.parametrize("run_old_side_ansible", [False, True])
 @pytest.mark.parametrize("run_new_side_ansible", [False, True])
+@pytest.mark.parametrize("generate_new_vc_id", [False, True])
 @patch("gso.services.lso_client._send_request")
 def test_migrate_layer_2_circuit(
     mock_lso_interaction,
+    generate_new_vc_id,
     run_new_side_ansible,
     run_old_side_ansible,
     layer_2_circuit_service_type,
@@ -31,6 +33,7 @@ def test_migrate_layer_2_circuit(
     )
     new_edge_port = edge_port_subscription_factory(node=side_b_router.router)
 
+    old_vc_id = subscription.layer_2_circuit.virtual_circuit_id
     initial_layer_2_circuit_data = [
         {"subscription_id": subscription.subscription_id},
         {
@@ -40,7 +43,10 @@ def test_migrate_layer_2_circuit(
             "run_old_side_ansible": run_old_side_ansible,
             "run_new_side_ansible": run_new_side_ansible,
         },
-        {"new_edge_port": new_edge_port.subscription_id},
+        {
+            "new_edge_port": new_edge_port.subscription_id,
+            "generate_new_vc_id": generate_new_vc_id,
+        },
     ]
 
     result, process_stat, step_log = run_workflow("migrate_layer_2_circuit", initial_layer_2_circuit_data)
@@ -70,3 +76,4 @@ def test_migrate_layer_2_circuit(
     assert replaced_edge_port.edge_port_ae_members[1].model_dump(
         exclude="owner_subscription_id"
     ) == new_edge_port.edge_port.edge_port_ae_members[1].model_dump(exclude="owner_subscription_id")
+    assert (old_vc_id == subscription.layer_2_circuit.virtual_circuit_id) is not generate_new_vc_id