diff --git a/gso/products/product_blocks/router.py b/gso/products/product_blocks/router.py
index d8e9996ba0821d48765ae36f50df1bb2aa541752..5d1a307d85825759b734a0c06b665d1e7eb06866 100644
--- a/gso/products/product_blocks/router.py
+++ b/gso/products/product_blocks/router.py
@@ -68,12 +68,12 @@ class RouterBlockProvisioning(RouterBlockInactive, lifecycle=[SubscriptionLifecy
 
     router_fqdn: str
     router_ts_port: PortNumber
-    router_access_via_ts: bool | None = None
-    router_lo_ipv4_address: ipaddress.IPv4Address | None = None
-    router_lo_ipv6_address: ipaddress.IPv6Address | None = None
-    router_lo_iso_address: str | None = None
-    router_role: RouterRole | None = None
-    router_site: SiteBlockProvisioning | None
+    router_access_via_ts: bool
+    router_lo_ipv4_address: ipaddress.IPv4Address
+    router_lo_ipv6_address: ipaddress.IPv6Address
+    router_lo_iso_address: str
+    router_role: RouterRole
+    router_site: SiteBlockProvisioning
     vendor: RouterVendor
 
 
diff --git a/gso/products/product_blocks/site.py b/gso/products/product_blocks/site.py
index efe21c4b270a8974c1615b89f025012ff8793582..1852b24615076b2d76dde41db71a9e5d5fcc535f 100644
--- a/gso/products/product_blocks/site.py
+++ b/gso/products/product_blocks/site.py
@@ -82,16 +82,16 @@ class SiteBlockInactive(
 class SiteBlockProvisioning(SiteBlockInactive, lifecycle=[SubscriptionLifecycle.PROVISIONING]):
     """A site that's currently being provisioned, see :class:`SiteBlock`."""
 
-    site_name: str | None = None
-    site_city: str | None = None
-    site_country: str | None = None
-    site_country_code: str | None = None
-    site_latitude: LatitudeCoordinate | None = None
-    site_longitude: LongitudeCoordinate | None = None
-    site_internal_id: int | None = None
-    site_bgp_community_id: int | None = None
-    site_tier: SiteTier | None = None
-    site_ts_address: str | None = None
+    site_name: str
+    site_city: str
+    site_country: str
+    site_country_code: str
+    site_latitude: LatitudeCoordinate
+    site_longitude: LongitudeCoordinate
+    site_internal_id: int
+    site_bgp_community_id: int
+    site_tier: SiteTier
+    site_ts_address: str
 
 
 class SiteBlock(SiteBlockProvisioning, lifecycle=[SubscriptionLifecycle.ACTIVE]):
@@ -120,4 +120,4 @@ class SiteBlock(SiteBlockProvisioning, lifecycle=[SubscriptionLifecycle.ACTIVE])
     #:  The address of the terminal server that this router is connected to. The terminal server provides out of band
     #:  access. This is required in case a link goes down, or when a router is initially added to the network and it
     #:  does not have any IP trunks connected to it.
-    site_ts_address: str | None = None
+    site_ts_address: str
diff --git a/gso/workflows/router/create_router.py b/gso/workflows/router/create_router.py
index 3ea3e16250e9ccaee4559c43c3aedc8d89f0ff7b..e42d22991e83951c957b1c6b8caab69993386e5e 100644
--- a/gso/workflows/router/create_router.py
+++ b/gso/workflows/router/create_router.py
@@ -107,21 +107,24 @@ def initialize_subscription(
     subscription.router.vendor = vendor
     subscription.description = f"Router {fqdn}"
 
-    subscription = RouterProvisioning.from_other_lifecycle(subscription, SubscriptionLifecycle.PROVISIONING)
-
     return {"subscription": subscription}
 
 
 @step("Allocate loopback interfaces in IPAM")
-def ipam_allocate_loopback(subscription: RouterProvisioning) -> State:
+def ipam_allocate_loopback(subscription: RouterInactive) -> State:
     """Allocate :term:`IPAM` resources for the loopback interface."""
     fqdn = subscription.router.router_fqdn
+    if not fqdn:
+        msg = f"Router fqdn for subscription id {subscription.subscription_id} is missing!"
+        raise ValueError(msg)
     loopback_v4, loopback_v6 = infoblox.allocate_host(f"lo0.{fqdn}", "LO", [fqdn], str(subscription.subscription_id))
 
     subscription.router.router_lo_ipv4_address = loopback_v4
     subscription.router.router_lo_ipv6_address = loopback_v6
     subscription.router.router_lo_iso_address = iso_from_ipv4(subscription.router.router_lo_ipv4_address)
 
+    subscription = RouterProvisioning.from_other_lifecycle(subscription, SubscriptionLifecycle.PROVISIONING)
+
     return {"subscription": subscription}
 
 
@@ -130,7 +133,7 @@ def create_netbox_device(subscription: RouterProvisioning) -> State:
     """Create a new NOKIA device in Netbox."""
     NetboxClient().create_device(
         subscription.router.router_fqdn,
-        str(subscription.router.router_site.site_tier),  # type: ignore[union-attr]
+        str(subscription.router.router_site.site_tier),
     )
     return {"subscription": subscription}