diff --git a/gso/migrations/versions/2024-04-02_1ec810b289c0_add_orchestrator_2_1_2_migrations.py b/gso/migrations/versions/2024-04-20_1ec810b289c0_add_orchestrator_2_1_2_migrations.py
similarity index 98%
rename from gso/migrations/versions/2024-04-02_1ec810b289c0_add_orchestrator_2_1_2_migrations.py
rename to gso/migrations/versions/2024-04-20_1ec810b289c0_add_orchestrator_2_1_2_migrations.py
index c9842e731cab00e90653b8ca5bb32185a3d0b025..89fcbfcd056850a331ca92e379bf392a51a0cdc4 100644
--- a/gso/migrations/versions/2024-04-02_1ec810b289c0_add_orchestrator_2_1_2_migrations.py
+++ b/gso/migrations/versions/2024-04-20_1ec810b289c0_add_orchestrator_2_1_2_migrations.py
@@ -10,7 +10,7 @@ from orchestrator.migrations.helpers import create_workflow, delete_workflow
 
 # revision identifiers, used by Alembic.
 revision = '1ec810b289c0'
-down_revision = '4ec89ab289c0'
+down_revision = '393acfa175c0'
 branch_labels = None
 # TODO: check it carefuly
 depends_on = '048219045729'  # in this revision, SURF has added a new columns to the workflow table like delted_at, so we need to add a dependency on the revision that added the columns to the workflow table.
diff --git a/gso/products/product_blocks/pop_vlan.py b/gso/products/product_blocks/pop_vlan.py
index 4935c2f69966874c686489c7e06e3061d5509365..e556ad1e9903772f7fb58a38a4047286595a1fb8 100644
--- a/gso/products/product_blocks/pop_vlan.py
+++ b/gso/products/product_blocks/pop_vlan.py
@@ -1,12 +1,13 @@
 """Pop VLAN product block that has all parameters of a subscription throughout its lifecycle."""
 
 from ipaddress import IPv4Network, IPv6Network
-from typing import TypeVar
+from typing import TypeVar, Annotated
 
 from orchestrator.domain.base import ProductBlockModel
-from orchestrator.forms.validators import UniqueConstrainedList
 from orchestrator.types import SubscriptionLifecycle
+from pydantic import AfterValidator
 from pydantic_forms.types import strEnum
+from pydantic_forms.validators import validate_unique_list
 
 from gso.products.product_blocks.lan_switch_interconnect import (
     LanSwitchInterconnectBlock,
@@ -14,7 +15,7 @@ from gso.products.product_blocks.lan_switch_interconnect import (
     LanSwitchInterconnectBlockProvisioning,
 )
 
-T_co = TypeVar("T_co", covariant=True)
+T = TypeVar("T")
 
 
 class LayerPreference(strEnum):
@@ -24,8 +25,7 @@ class LayerPreference(strEnum):
     L3 = "L3"
 
 
-class PortList(UniqueConstrainedList[T_co]):  # type: ignore[type-var]
-    """A list of ports."""
+PortList = Annotated[list[T], AfterValidator(validate_unique_list)]
 
 
 class PopVlanPortBlockInactive(
diff --git a/gso/workflows/iptrunk/modify_trunk_interface.py b/gso/workflows/iptrunk/modify_trunk_interface.py
index dcbb40cf874dafb4507aa6c8f8c7c7c00d5be182..3395774c577957fcbf1bdfa5a08a9de6d23233ee 100644
--- a/gso/workflows/iptrunk/modify_trunk_interface.py
+++ b/gso/workflows/iptrunk/modify_trunk_interface.py
@@ -62,7 +62,7 @@ def initialize_ae_members(subscription: Iptrunk, initial_user_input: dict, side_
                 )
             )
 
-        ae_members = Annotated[list[NokiaLAGMember], AfterValidator(validate_unique_list), Len(min_length=iptrunk_number_of_members, max_lenght=iptrunk_number_of_members)]
+        ae_members = Annotated[list[NokiaLAGMember], AfterValidator(validate_unique_list), Len(min_length=iptrunk_number_of_members, max_length=iptrunk_number_of_members)]
     else:
 
         ae_members = Annotated[list[LAGMember], AfterValidator(validate_unique_list), Len(min_length=iptrunk_number_of_members, max_length=iptrunk_number_of_members)]
diff --git a/gso/workflows/tasks/import_iptrunk.py b/gso/workflows/tasks/import_iptrunk.py
index 8763ca8e094c4da1f611e9d6b4ad02c1b8fb610a..e1290bc3d91d023b959b2ef1b20a91c49e2443c4 100644
--- a/gso/workflows/tasks/import_iptrunk.py
+++ b/gso/workflows/tasks/import_iptrunk.py
@@ -1,15 +1,18 @@
 """A creation workflow for adding an existing IP trunk to the service database."""
 
 import ipaddress
+from typing import Annotated
 from uuid import uuid4
 
 from orchestrator import workflow
 from orchestrator.forms import FormPage
-from orchestrator.forms.validators import Choice, UniqueConstrainedList
+from orchestrator.forms.validators import Choice
 from orchestrator.targets import Target
 from orchestrator.types import FormGenerator, State, SubscriptionLifecycle
 from orchestrator.workflow import StepList, done, init, step
 from orchestrator.workflows.steps import resync, set_status, store_process_subscription
+from pydantic import AfterValidator, ConfigDict
+from pydantic_forms.validators import validate_unique_list
 
 from gso.products import ProductName
 from gso.products.product_blocks.iptrunk import IptrunkInterfaceBlockInactive, IptrunkType, PhysicalPortCapacity