diff --git a/gso/gso-services-config.json b/gso/gso-services-config.json
new file mode 100644
index 0000000000000000000000000000000000000000..dc53bbff599587fca2e09d47af0b2f8fe82b4b02
--- /dev/null
+++ b/gso/gso-services-config.json
@@ -0,0 +1,16 @@
+{
+  "IP_TRUNK": {
+    "VERSION": {
+      "1.0": "Base Version",
+      "1.1":" Minor Upgrade"
+    },
+    "default_version": "1.0"
+  },
+  "GEANT_IP": {
+    "VERSION": {
+      "1.0": "Base Version",
+      "2.0": "Major Upgrade"
+    },
+    "default_version": "1.0"
+  }
+}
diff --git a/gso/settings.py b/gso/settings.py
index bf5dd53e1793d7f67e2f5b6ca6fa0eb935c69411..2059a6023cf580bd04f43a83ec8ef247e2ec0f37 100644
--- a/gso/settings.py
+++ b/gso/settings.py
@@ -250,7 +250,28 @@ def load_oss_params() -> OSSParams:
         return OSSParams(**json.loads(file.read()))
 
 
+class ServiceConfig(BaseSettings):
+    """Configurations for base gso service."""
+
+    version:  dict[str, str]
+    default_version: str
+
+
+class GSOServiceConfig(BaseSettings):
+    """Configuration for the GSO service."""
+    IP_TRUNK: ServiceConfig
+    GEANT_IP: ServiceConfig
+
+
+def load_gso_service_config() -> GSOServiceConfig:
+    """Load the GSO service configuration from the environment variable."""
+    """Look for ``GSO_SERVICE_CONFIG`` in the environment and load the parameters from that file."""
+    with Path(os.environ["GSO_SERVICE_CONFIG"]).open(encoding="utf-8") as file:
+        return GSOServiceConfig(**json.loads(file.read()))
+
+
 celery_settings = CelerySettings()
 
 if __name__ == "__main__":
     logger.debug(load_oss_params())
+    logger.debug(load_gso_service_config())
diff --git a/gso/workflows/iptrunk/modify_trunk_interface.py b/gso/workflows/iptrunk/modify_trunk_interface.py
index 58277b0c58f31e8db877370cb941a84ea15527b8..793c1bc00f10d36ad5ea9375866860e7e73c9ab0 100644
--- a/gso/workflows/iptrunk/modify_trunk_interface.py
+++ b/gso/workflows/iptrunk/modify_trunk_interface.py
@@ -12,12 +12,6 @@ from typing import Annotated
 from uuid import UUID, uuid4
 
 from annotated_types import Len
-from orchestrator.forms import FormPage, SubmitFormPage
-from orchestrator.targets import Target
-from orchestrator.utils.json import json_dumps
-from orchestrator.workflow import StepList, begin, conditional, done, step, workflow
-from orchestrator.workflows.steps import resync, store_process_subscription, unsync
-from orchestrator.workflows.utils import wrap_modify_initial_input_form
 from pydantic import AfterValidator, ConfigDict, Field
 from pydantic_forms.types import FormGenerator, State, UUIDstr
 from pydantic_forms.validators import Label, ReadOnlyField
@@ -30,6 +24,7 @@ from gso.products.product_blocks.iptrunk import (
 from gso.products.product_types.iptrunk import Iptrunk
 from gso.services.lso_client import LSOState, lso_interaction
 from gso.services.netbox_client import NetboxClient
+from gso.settings import ServiceConfig, load_gso_service_config
 from gso.utils.helpers import (
     available_interfaces_choices,
     available_interfaces_choices_including_current_members,
@@ -43,6 +38,12 @@ from gso.utils.types.tt_number import TTNumber
 from gso.utils.types.unique_field import validate_field_is_unique
 from gso.workflows.iptrunk.migrate_iptrunk import check_ip_trunk_optical_levels_pre
 from gso.workflows.iptrunk.validate_iptrunk import check_ip_trunk_isis
+from orchestrator.forms import FormPage, SubmitFormPage
+from orchestrator.targets import Target
+from orchestrator.utils.json import json_dumps
+from orchestrator.workflow import StepList, begin, conditional, done, step, workflow
+from orchestrator.workflows.steps import resync, store_process_subscription, unsync
+from orchestrator.workflows.utils import wrap_modify_initial_input_form
 
 
 def initialize_ae_members(
@@ -94,7 +95,10 @@ def initial_input_form_generator(subscription_id: UUIDstr) -> FormGenerator:
             ]
             | None
         ) = subscription.iptrunk.gs_id
+
         iptrunk_description: str | None = subscription.iptrunk.iptrunk_description
+        iptrunk_config_version: load_gso_service_config().IP_TRUNK.version | str \
+            = subscription.iptrunk.iptrunk_config_version
         iptrunk_type: IptrunkType | str = subscription.iptrunk.iptrunk_type  # FIXME: remove str workaround
         warning_label: Label = (
             "Changing the PhyPortCapacity will result in the deletion of all AE members. "
@@ -268,6 +272,7 @@ def modify_iptrunk_subscription(
     iptrunk_speed: PhysicalPortCapacity,
     iptrunk_minimum_links: int,
     iptrunk_description_suffix: str | None,
+    iptrunk_config_version: ServiceConfig.version,
     side_a_ga_id: str | None,
     side_a_ae_members: list[dict],
     side_b_ga_id: str | None,
@@ -302,7 +307,7 @@ def modify_iptrunk_subscription(
     subscription.iptrunk.iptrunk_speed = iptrunk_speed
     subscription.iptrunk.iptrunk_minimum_links = iptrunk_minimum_links
     subscription.iptrunk.iptrunk_description_suffix = iptrunk_description_suffix
-
+    subscription.iptrunk.iptrunk_config_version = iptrunk_config_version
     subscription.iptrunk.iptrunk_sides[0].ga_id = side_a_ga_id
     update_side_members(subscription, 0, side_a_ae_members)
     subscription.iptrunk.iptrunk_sides[1].ga_id = side_b_ga_id
@@ -534,8 +539,8 @@ def modify_trunk_interface() -> StepList:
         >> capacity_has_changed(lso_interaction(check_ip_trunk_connectivity))
         >> capacity_has_changed(lso_interaction(check_ip_trunk_isis))
         >> modify_iptrunk_subscription
-        >> side_a_is_nokia(netbox_update_interfaces_side_a)
-        >> side_b_is_nokia(netbox_update_interfaces_side_b)
+        # >> side_a_is_nokia(netbox_update_interfaces_side_a)
+        # >> side_b_is_nokia(netbox_update_interfaces_side_b)
         >> lso_interaction(provision_ip_trunk_iface_dry)
         >> lso_interaction(provision_ip_trunk_iface_real)
         >> side_a_is_nokia(allocate_interfaces_in_netbox_side_a)