diff --git a/src/pathcomp/frontend/service/algorithms/tools/ComputeSubServices.py b/src/pathcomp/frontend/service/algorithms/tools/ComputeSubServices.py
index 053e6d542788e5231e48ee17fde88d31c186a86b..7cd419c6be3896c034abf43a8abe45fccbad1733 100644
--- a/src/pathcomp/frontend/service/algorithms/tools/ComputeSubServices.py
+++ b/src/pathcomp/frontend/service/algorithms/tools/ComputeSubServices.py
@@ -61,9 +61,11 @@ class ConnectionEntry:
     uuid: str = ''
     service_type : ServiceTypeEnum = ServiceTypeEnum.SERVICETYPE_UNKNOWN
     path_hops    : List[Dict] = field(default_factory=list)
-    dependencies : List[str] = field(default_factory=list)
+    dependencies : List['ConnectionEntry'] = field(default_factory=list)
 
     def calculate_subservice_uuid(self, main_service_uuid: str) -> None:
+        if self.uuid:
+            return
         composed_string = main_service_uuid + '-'.join(
             f'{path_hop["device"]}/{path_hop["ingress_ep"]}/{path_hop["egress_ep"]}' for path_hop in self.path_hops
         )
@@ -103,28 +105,25 @@ def convert_explicit_path_hops_to_connections(
             prv_service_type = connection_stack.queue[-1].service_type
             service_type = get_service_type(res_class[1], prv_service_type)
             connection_entry = ConnectionEntry(service_type=service_type, path_hops=[path_hop])
-            connection_entry.calculate_subservice_uuid(main_service_uuid)
             connection_stack.put(connection_entry)
 
             # underlying connection ended
             connection: ConnectionEntry = connection_stack.get()
             connections.append(connection)
-            connection_stack.queue[-1].dependencies.append(connection.uuid)
-            #connection_stack.queue[-1][2].append(path_hop)
+            connection_stack.queue[-1].dependencies.append(connection)
         elif prv_res_class[2] is None and res_class[2] is not None:
             # entering domain of a device controller, create underlying connection
             LOGGER.debug('  entering domain of a device controller, create underlying connection')
             prv_service_type = connection_stack.queue[-1].service_type
             service_type = get_service_type(res_class[1], prv_service_type)
             connection_entry = ConnectionEntry(service_type=service_type, path_hops=[path_hop])
-            connection_entry.calculate_subservice_uuid(main_service_uuid)
             connection_stack.put(connection_entry)
         elif prv_res_class[2] is not None and res_class[2] is None:
             # leaving domain of a device controller, terminate underlying connection
             LOGGER.debug('  leaving domain of a device controller, terminate underlying connection')
             connection = connection_stack.get()
             connections.append(connection)
-            connection_stack.queue[-1].dependencies.append(connection.uuid)
+            connection_stack.queue[-1].dependencies.append(connection)
             connection_stack.queue[-1].path_hops.append(path_hop)
         elif prv_res_class[2] is not None and res_class[2] is not None:
             if prv_res_class[2] == res_class[2]:
@@ -136,12 +135,11 @@ def convert_explicit_path_hops_to_connections(
                 LOGGER.debug('  switching to different device controller, chain connections')
                 connection = connection_stack.get()
                 connections.append(connection)
-                connection_stack.queue[-1].dependencies.append(connection.uuid)
+                connection_stack.queue[-1].dependencies.append(connection)
 
                 prv_service_type = connection_stack.queue[-1].service_type
                 service_type = get_service_type(res_class[1], prv_service_type)
                 connection_entry = ConnectionEntry(service_type=service_type, path_hops=[path_hop])
-                connection_entry.calculate_subservice_uuid (main_service_uuid)
                 connection_stack.put(connection_entry)
         elif prv_res_class[0] is None:
             # path ingress
@@ -154,7 +152,6 @@ def convert_explicit_path_hops_to_connections(
             prv_service_type = connection_stack.queue[-1].service_type
             service_type = get_service_type(res_class[1], prv_service_type)
             connection_entry = ConnectionEntry(service_type=service_type, path_hops=[path_hop])
-            connection_entry.calculate_subservice_uuid(main_service_uuid)
             connection_stack.put(connection_entry)
         elif prv_res_class[0] == res_class[0]:
             # same resource group kind
@@ -168,19 +165,18 @@ def convert_explicit_path_hops_to_connections(
                 LOGGER.debug('  chain connections')
                 connection = connection_stack.get()
                 connections.append(connection)
-                connection_stack.queue[-1].dependencies.append(connection.uuid)
+                connection_stack.queue[-1].dependencies.append(connection)
 
                 prv_service_type = connection_stack.queue[-1].service_type
                 service_type = get_service_type(res_class[1], prv_service_type)
                 connection_entry = ConnectionEntry(service_type=service_type, path_hops=[path_hop])
-                connection_entry.calculate_subservice_uuid(main_service_uuid)
                 connection_stack.put(connection_entry)
         elif prv_res_class[0] < res_class[0]:
             # underlying connection ended
             LOGGER.debug('  underlying connection ended')
             connection = connection_stack.get()
             connections.append(connection)
-            connection_stack.queue[-1].dependencies.append(connection.uuid)
+            connection_stack.queue[-1].dependencies.append(connection)
             connection_stack.queue[-1].path_hops.append(path_hop)
         else:
             raise Exception('Uncontrolled condition')
@@ -193,7 +189,9 @@ def convert_explicit_path_hops_to_connections(
     connections.append(connection_stack.get())
     LOGGER.debug('connections={:s}'.format(str(connections)))
     assert connection_stack.empty()
-    return [(c.uuid, c.service_type, c.path_hops, c.dependencies) for c in connections]
+    for c in connections:
+        c.calculate_subservice_uuid(main_service_uuid)
+    return [(c.uuid, c.service_type, c.path_hops, [cd.uuid for cd in c.dependencies]) for c in connections]
 
 def convert_explicit_path_hops_to_plain_connection(
     path_hops : List[Dict], main_service_uuid : str, main_service_type : ServiceTypeEnum