diff --git a/geant_service_orchestrator/main.py b/geant_service_orchestrator/main.py
index 2e7800f185aef35a99fb9e09ffb602effa4484aa..24f60f65ceab42d0b6234280fb8ec9045fa57300 100644
--- a/geant_service_orchestrator/main.py
+++ b/geant_service_orchestrator/main.py
@@ -1,9 +1,9 @@
 from orchestrator import OrchestratorCore
 from orchestrator.cli.main import app as core_cli
 from orchestrator.settings import AppSettings
+#import products
+#import workflows
 
-# import products
-# import workflows
 
 app = OrchestratorCore(base_settings=AppSettings())
 
diff --git a/geant_service_orchestrator/products/product_blocks/__init__.py b/geant_service_orchestrator/products/product_blocks/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/geant_service_orchestrator/products/product_blocks/device.py b/geant_service_orchestrator/products/product_blocks/device.py
new file mode 100644
index 0000000000000000000000000000000000000000..17601997420076d018375f02c837610386a97b54
--- /dev/null
+++ b/geant_service_orchestrator/products/product_blocks/device.py
@@ -0,0 +1,58 @@
+from typing import Optional
+
+from orchestrator.domain.base import ProductBlockModel
+from orchestrator.types import SubscriptionLifecycle
+import ipaddress
+
+class DeviceBlockInactive(ProductBlockModel, lifecycle=[SubscriptionLifecycle.INITIAL], product_block_name="DeviceBlock"):
+    fqdn: Optional[str] = None
+    ts_address: Optional[str] = None
+    ts_port: Optional[int] = None
+    lo_ipv4_address: Optional[ipaddress.IPv4Address] = None
+    lo_ipv6_address: Optional[ipaddress.IPv6Address] = None
+    lo_iso_address: Optional[str] = None
+    si_ipv4_network: Optional[ipaddress.IPv4Network] = None
+    ias_lt_ipv4_network: Optional[ipaddress.IPv4Network] = None
+    ias_lt_ipv6_network: Optional[ipaddress.IPv6Network] = None
+    site_city: Optional[str] = None
+    site_country: Optional[str] = None
+    site_country_code: Optional[str] = None
+    site_latitude: Optional[str] = None
+    site_longitude: Optional[str] = None
+    snmp_location: Optional[str] = None
+
+
+class DeviceBlockProvisioning(DeviceBlockInactive, lifecycle=[SubscriptionLifecycle.PROVISIONING]):
+    fqdn: str
+    ts_address: str
+    ts_port: str
+    lo_ipv4_address: Optional[ipaddress.IPv4Address] = None
+    lo_ipv6_address: Optional[ipaddress.IPv6Address] = None
+    lo_iso_address: Optional[str] = None
+    si_ipv4_network: Optional[ipaddress.IPv4Network] = None
+    ias_lt_ipv4_network: Optional[ipaddress.IPv4Network] = None
+    ias_lt_ipv6_network: Optional[ipaddress.IPv6Network] = None
+    site_city: Optional[str] = None
+    site_country: Optional[str] = None
+    site_country_code: Optional[str] = None
+    site_latitude: Optional[str] = None
+    site_longitude: Optional[str] = None
+    snmp_location: Optional[str] = None
+
+
+class DeviceBlock(DeviceBlockProvisioning, lifecycle=[SubscriptionLifecycle.ACTIVE]):
+    fqdn: str
+    ts_address: str
+    ts_port: str
+    lo_ipv4_address: ipaddress.IPv4Address 
+    lo_ipv6_address: ipaddress.IPv6Address 
+    lo_iso_address: str 
+    si_ipv4_network: ipaddress.IPv4Network 
+    ias_lt_ipv4_network: ipaddress.IPv4Network 
+    ias_lt_ipv6_network: ipaddress.IPv6Network 
+    site_city: str
+    site_country: str
+    site_country_code: str
+    site_latitude: str
+    site_longitude: str
+    snmp_location: str
diff --git a/geant_service_orchestrator/products/product_types/__init__.py b/geant_service_orchestrator/products/product_types/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/geant_service_orchestrator/products/product_types/device.py b/geant_service_orchestrator/products/product_types/device.py
new file mode 100644
index 0000000000000000000000000000000000000000..6af0e3ddccdc65be60efe7f7e04b5128711dca85
--- /dev/null
+++ b/geant_service_orchestrator/products/product_types/device.py
@@ -0,0 +1,30 @@
+from orchestrator.domain.base import SubscriptionModel
+from orchestrator.types import SubscriptionLifecycle, strEnum
+
+from products.product_blocks.device import DeviceBlock, DeviceBlockInactive, DeviceBlockProvisioning
+
+
+class DeviceType(strEnum):
+    router = "router"
+    switch= "switch"
+
+class DeviceVendor(strEnum):
+    Juniper = "juniper"
+    Newvendor= "newvendor"
+
+class DeviceInactive(SubscriptionModel, is_base=True):
+    device_type: DeviceType
+    device_vendor: DeviceVendor
+    device: DeviceBlockInactive
+
+
+class DeviceProvisioning(DeviceInactive, lifecycle=[SubscriptionLifecycle.PROVISIONING]):
+    device_type: DeviceType
+    device_vendor: DeviceVendor
+    device: DeviceBlockProvisioning
+
+
+class Device(DeviceProvisioning, lifecycle=[SubscriptionLifecycle.ACTIVE]):
+    device_type: DeviceType
+    device_vendor: DeviceVendor
+    device: DeviceBlock