diff --git a/gso/products/__init__.py b/gso/products/__init__.py
index b8b60c156ba992f6394d41035f9b66b3b3645fbd..857128fb672bf6350e674bfc81e8d89fa2765af2 100644
--- a/gso/products/__init__.py
+++ b/gso/products/__init__.py
@@ -2,9 +2,11 @@ from orchestrator.domain import SUBSCRIPTION_MODEL_REGISTRY
 
 from gso.products.product_types.device import Device
 from gso.products.product_types.iptrunk import Iptrunk
+from gso.products.product_types.site import Site
 
 SUBSCRIPTION_MODEL_REGISTRY.update(
     {
+        "Site": Site,
         "Router": Device,
         "Switch": Device,
         "Iptrunk": Iptrunk,
diff --git a/gso/products/product_blocks/device.py b/gso/products/product_blocks/device.py
index 9e34743f2e1e2eea7f3610cd6e3cab616061e020..44581ef557c9f49fe51f7633ac919267e0a68a84 100644
--- a/gso/products/product_blocks/device.py
+++ b/gso/products/product_blocks/device.py
@@ -2,62 +2,62 @@ from typing import Optional
 
 from orchestrator.domain.base import ProductBlockModel
 from orchestrator.types import SubscriptionLifecycle
+from gso.products.product_blocks.site \
+    import SiteBlock, SiteBlockInactive, SiteBlockProvisioning
 import ipaddress
 
+class DeviceVendor(strEnum):
+    juniper = "juniper"
+    nokia = "nokia"
+
+class DeviceRole(strEnum):
+    p = "p"
+    pe = "pe"
+    amt = "amt"
 
 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
+    device_fqdn: Optional[str] = None
+    device_ts_address: Optional[str] = None
+    device_ts_port: Optional[int] = None
+    device_lo_ipv4_address: Optional[ipaddress.IPv4Address] = None
+    device_lo_ipv6_address: Optional[ipaddress.IPv6Address] = None
+    device_lo_iso_address: Optional[str] = None
+    device_si_ipv4_network: Optional[ipaddress.IPv4Network] = None
+    device_ias_lt_ipv4_network: Optional[ipaddress.IPv4Network] = None
+    device_ias_lt_ipv6_network: Optional[ipaddress.IPv6Network] = None
+    device_vendor: Optional[DeviceVendor] = None
+    device_role: Optional[DeviceRole] = None
+    device_site: Optional[SiteBlockInactive]
 
 
 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
-
+    device_fqdn: str
+    device_ts_address: str
+    device_ts_port: str
+    device_lo_ipv4_address: Optional[ipaddress.IPv4Address] = None
+    device_lo_ipv6_address: Optional[ipaddress.IPv6Address] = None
+    device_lo_iso_address: Optional[str] = None
+    device_si_ipv4_network: Optional[ipaddress.IPv4Network] = None
+    device_ias_lt_ipv4_network: Optional[ipaddress.IPv4Network] = None
+    device_ias_lt_ipv6_network: Optional[ipaddress.IPv6Network] = None
+    device_vendor: Optional[DeviceVendor] = None
+    device_role: Optional[DeviceRole] = None
+    device_site: Optional[SiteBlockProvisioning]
 
 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
+    device_fqdn: str
+    device_ts_address: str
+    device_ts_port: str
+    device_lo_ipv4_address: ipaddress.IPv4Address
+    device_lo_ipv6_address: ipaddress.IPv6Address
+    device_lo_iso_address: str
+    device_si_ipv4_network: ipaddress.IPv4Network
+    device_ias_lt_ipv4_network: ipaddress.IPv4Network
+    device_ias_lt_ipv6_network: ipaddress.IPv6Network
+    device_vendor: DeviceVendor
+    device_role: DeviceRole
+    device_site: SiteBlock
diff --git a/gso/products/product_blocks/site.py b/gso/products/product_blocks/site.py
new file mode 100644
index 0000000000000000000000000000000000000000..564dd811dc9333f1a662bf75c1b3b3e39ada1e4f
--- /dev/null
+++ b/gso/products/product_blocks/site.py
@@ -0,0 +1,51 @@
+from typing import Optional
+from pydantic import Field
+
+from orchestrator.domain.base import ProductBlockModel
+from orchestrator.types import SubscriptionLifecycle, Enum
+
+import ipaddress
+
+class SiteTier(Enum):
+    tier1 = 1
+    tier2 = 2
+    tier3 = 3
+    tier4 = 4
+
+
+class SiteBlockInactive(ProductBlockModel,
+                          lifecycle=[SubscriptionLifecycle.INITIAL],
+                          product_block_name="SiteBlock"):
+    site_name: Optional[str]
+    site_city: Optional[str]
+    site_country: Optional[str]
+    site_country_code: Optional[str]
+    site_latitude: Optional[float]
+    site_longitude: Optional[float]
+    site_internal_id: Optional[int]
+    site_bgp_id: Optional[int]
+    site_tier: Optional[SiteTier]
+
+class SiteBlockProvisioning(SiteBlockInactive,
+                            lifecycle=[SubscriptionLifecycle.PROVISIONING]):
+    site_name: Optional[str]
+    site_city: Optional[str]
+    site_country: Optional[str]
+    site_country_code: Optional[str]
+    site_latitude: Optional[float]
+    site_longitude: Optional[float]
+    site_internal_id: Optional[int]
+    site_bgp_id: Optional[int]
+    site_tier: Optional[SiteTier]
+
+class SiteBlock(SiteBlockProvisioning,
+                  lifecycle=[SubscriptionLifecycle.ACTIVE]):
+    site_name: str
+    site_city: str
+    site_country: str
+    site_country_code: str
+    site_latitude: float
+    site_longitude: float
+    site_internal_id: int
+    site_bgp_id: int
+    site_tier: SiteTier
\ No newline at end of file
diff --git a/gso/products/product_types/device.py b/gso/products/product_types/device.py
index e79762c12f9fae68b409955b9e4a5a49e08c75dc..17a99081b68919cbc8d213251432db23fbee6146 100644
--- a/gso/products/product_types/device.py
+++ b/gso/products/product_types/device.py
@@ -10,21 +10,14 @@ class DeviceType(strEnum):
     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
 
 
diff --git a/gso/products/product_types/site.py b/gso/products/product_types/site.py
new file mode 100644
index 0000000000000000000000000000000000000000..003e37d4962fbd8ac45b0d0d3e46fa4340ffb53a
--- /dev/null
+++ b/gso/products/product_types/site.py
@@ -0,0 +1,18 @@
+from orchestrator.domain.base import SubscriptionModel
+from orchestrator.types import SubscriptionLifecycle, strEnum
+
+from gso.products.product_blocks.site \
+    import SiteBlock, SiteBlockInactive, SiteBlockProvisioning
+
+
+class SiteInactive(SubscriptionModel, is_base=True):
+    site: SiteBlockInactive
+
+
+class SiteProvisioning(SiteInactive,
+                         lifecycle=[SubscriptionLifecycle.PROVISIONING]):
+    site: SiteBlockProvisioning
+
+
+class Site(SiteProvisioning, lifecycle=[SubscriptionLifecycle.ACTIVE]):
+    site: SiteBlock
\ No newline at end of file