diff --git a/gso/products/product_blocks/router.py b/gso/products/product_blocks/router.py
index 200012a79396564eeebd43fc6a5e06ac8486c3f7..580263185b9a7f05c537b231e3d4975422d5ddfa 100644
--- a/gso/products/product_blocks/router.py
+++ b/gso/products/product_blocks/router.py
@@ -4,9 +4,9 @@ from typing import Optional
 
 from orchestrator.domain.base import ProductBlockModel
 from orchestrator.types import SubscriptionLifecycle, strEnum
-from pydantic import ConstrainedInt
 
 from gso.products.product_blocks.site import SiteBlock, SiteBlockInactive, SiteBlockProvisioning
+from gso.products.shared import PortNumber
 
 
 class RouterVendor(strEnum):
@@ -24,16 +24,6 @@ class RouterRole(strEnum):
     AMT = "amt"
 
 
-class PortNumber(ConstrainedInt):
-    """Constrained integer for valid port numbers.
-
-    The range from 49152 to 65535 is marked as ephemeral, and can therefore not be selected for permanent allocation.
-    """
-
-    gt = 0
-    le = 49151
-
-
 class RouterBlockInactive(
     ProductBlockModel, lifecycle=[SubscriptionLifecycle.INITIAL], product_block_name="RouterBlock"
 ):
diff --git a/gso/products/shared.py b/gso/products/shared.py
new file mode 100644
index 0000000000000000000000000000000000000000..81e080618557b4431b1c58df1c9f9c172d79078f
--- /dev/null
+++ b/gso/products/shared.py
@@ -0,0 +1,11 @@
+from pydantic import ConstrainedInt
+
+
+class PortNumber(ConstrainedInt):
+    """Constrained integer for valid port numbers.
+
+    The range from 49152 to 65535 is marked as ephemeral, and can therefore not be selected for permanent allocation.
+    """
+
+    gt = 0
+    le = 49151
diff --git a/gso/workflows/router/create_router.py b/gso/workflows/router/create_router.py
index 1f7b96c480d0ddf72f28b2fb75a1874c23622cec..c94826f286cb49e44d5c77fb10a7f5888b6ff309 100644
--- a/gso/workflows/router/create_router.py
+++ b/gso/workflows/router/create_router.py
@@ -9,12 +9,12 @@ from orchestrator.types import FormGenerator, State, SubscriptionLifecycle, UUID
 from orchestrator.workflow import StepList, done, init, step, workflow
 from orchestrator.workflows.steps import resync, set_status, store_process_subscription
 from orchestrator.workflows.utils import wrap_create_initial_input_form
-from products.product_blocks.router import PortNumber
 
 from gso.products.product_blocks import router as router_pb
 from gso.products.product_types import router
 from gso.products.product_types.router import RouterInactive, RouterProvisioning
 from gso.products.product_types.site import Site
+from gso.products.shared import PortNumber
 from gso.services import ipam, provisioning_proxy, subscriptions
 from gso.services.provisioning_proxy import pp_interaction
 from gso.workflows.utils import customer_selector, iso_from_ipv4
diff --git a/gso/workflows/tasks/import_router.py b/gso/workflows/tasks/import_router.py
index 8f122b35048107f53ab012899b3343ba72307bf8..01b7081d7a9253f5b4cf7bdc1b50b56c78d12f9b 100644
--- a/gso/workflows/tasks/import_router.py
+++ b/gso/workflows/tasks/import_router.py
@@ -10,9 +10,10 @@ from orchestrator.workflow import StepList, done, init, step
 from orchestrator.workflows.steps import resync, set_status, store_process_subscription
 
 from gso.products.product_blocks import router as router_pb
-from gso.products.product_blocks.router import PortNumber, RouterRole, RouterVendor
+from gso.products.product_blocks.router import RouterRole, RouterVendor
 from gso.products.product_types import router
 from gso.products.product_types.router import RouterInactive
+from gso.products.shared import PortNumber
 from gso.products.product_types.site import Site
 from gso.schemas.enums import ProductType
 from gso.services import subscriptions