diff --git a/src/pathcomp/frontend/service/PathCompServiceServicerImpl.py b/src/pathcomp/frontend/service/PathCompServiceServicerImpl.py
index 1d55646abffcdb4a882167406ba046aca7bfa651..3c37036499e693b1a25760adde54ba12404da1d2 100644
--- a/src/pathcomp/frontend/service/PathCompServiceServicerImpl.py
+++ b/src/pathcomp/frontend/service/PathCompServiceServicerImpl.py
@@ -13,13 +13,19 @@
 # limitations under the License.
 
 import grpc, logging
-from common.proto.context_pb2 import Empty
+from common.Constants import DEFAULT_CONTEXT_UUID, INTERDOMAIN_TOPOLOGY_UUID
+from common.proto.context_pb2 import ContextId, Empty
 from common.proto.pathcomp_pb2 import PathCompReply, PathCompRequest
 from common.proto.pathcomp_pb2_grpc import PathCompServiceServicer
 from common.rpc_method_wrapper.Decorator import create_metrics, safe_and_metered_rpc_method
+from common.tools.context_queries.Device import get_devices_in_topology
+from common.tools.context_queries.Link import get_links_in_topology
+from common.tools.context_queries.InterDomain import is_multi_domain
 from common.tools.grpc.Tools import grpc_message_to_json_string
+from common.tools.object_factory.Context import json_context_id
 from context.client.ContextClient import ContextClient
 from pathcomp.frontend.service.algorithms.Factory import get_algorithm
+from pathcomp.frontend.service.algorithms.ShortestPathAlgorithm import ShortestPathAlgorithm
 
 LOGGER = logging.getLogger(__name__)
 
@@ -27,6 +33,8 @@ SERVICE_NAME = 'PathComp'
 METHOD_NAMES = ['Compute']
 METRICS = create_metrics(SERVICE_NAME, METHOD_NAMES)
 
+ADMIN_CONTEXT_ID = ContextId(**json_context_id(DEFAULT_CONTEXT_UUID))
+
 class PathCompServiceServicerImpl(PathCompServiceServicer):
     def __init__(self) -> None:
         LOGGER.debug('Creating Servicer...')
@@ -38,11 +46,18 @@ class PathCompServiceServicerImpl(PathCompServiceServicer):
 
         context_client = ContextClient()
 
-        # TODO: add filtering of devices and links
-        # TODO: add contexts, topologies, and membership of devices/links in topologies
+        if (len(request.services) == 1) and is_multi_domain(context_client, request.services[0].service_endpoint_ids):
+            devices = get_devices_in_topology(context_client, ADMIN_CONTEXT_ID, INTERDOMAIN_TOPOLOGY_UUID)
+            links = get_links_in_topology(context_client, ADMIN_CONTEXT_ID, INTERDOMAIN_TOPOLOGY_UUID)
+        else:
+            # TODO: improve filtering of devices and links
+            # TODO: add contexts, topologies, and membership of devices/links in topologies
+            devices = context_client.ListDevices(Empty())
+            links = context_client.ListLinks(Empty())
+
         algorithm = get_algorithm(request)
-        algorithm.add_devices(context_client.ListDevices(Empty()))
-        algorithm.add_links(context_client.ListLinks(Empty()))
+        algorithm.add_devices(devices)
+        algorithm.add_links(links)
         algorithm.add_service_requests(request)
 
         #LOGGER.debug('device_list = {:s}'  .format(str(algorithm.device_list  )))
diff --git a/src/pathcomp/frontend/service/algorithms/_Algorithm.py b/src/pathcomp/frontend/service/algorithms/_Algorithm.py
index b798813a83d984d6d1d75450529e9c826e220624..dfd657467e19bacdf3d6c8023a60c9a87cfacdc6 100644
--- a/src/pathcomp/frontend/service/algorithms/_Algorithm.py
+++ b/src/pathcomp/frontend/service/algorithms/_Algorithm.py
@@ -13,7 +13,7 @@
 # limitations under the License.
 
 import json, logging, requests
-from typing import Dict, List, Optional, Tuple
+from typing import Dict, List, Optional, Tuple, Union
 from common.proto.context_pb2 import (
     ConfigRule, Connection, Device, DeviceList, EndPointId, Link, LinkList, Service, ServiceStatusEnum,
     ServiceTypeEnum)
@@ -46,8 +46,9 @@ class _Algorithm:
         self.service_list : List[Dict] = list()
         self.service_dict : Dict[Tuple[str, str], Tuple[Dict, Service]] = dict()
 
-    def add_devices(self, grpc_devices : DeviceList) -> None:
-        for grpc_device in grpc_devices.devices:
+    def add_devices(self, grpc_devices : Union[List[Device], DeviceList]) -> None:
+        if isinstance(grpc_devices, DeviceList): grpc_devices = grpc_devices.devices
+        for grpc_device in grpc_devices:
             json_device = compose_device(grpc_device)
             self.device_list.append(json_device)
 
@@ -62,8 +63,9 @@ class _Algorithm:
 
             self.endpoint_dict[device_uuid] = device_endpoint_dict
 
-    def add_links(self, grpc_links : LinkList) -> None:
-        for grpc_link in grpc_links.links:
+    def add_links(self, grpc_links : Union[List[Link], LinkList]) -> None:
+        if isinstance(grpc_links, LinkList): grpc_links = grpc_links.links
+        for grpc_link in grpc_links:
             json_link = compose_link(grpc_link)
             self.link_list.append(json_link)
 
diff --git a/src/pathcomp/frontend/service/algorithms/tools/ConstantsMappings.py b/src/pathcomp/frontend/service/algorithms/tools/ConstantsMappings.py
index 8561ab110ad09b52c3040063241c0cc90dbbb223..5d1ce4b4e39af5cac0fda1a2459d6adddc960614 100644
--- a/src/pathcomp/frontend/service/algorithms/tools/ConstantsMappings.py
+++ b/src/pathcomp/frontend/service/algorithms/tools/ConstantsMappings.py
@@ -80,6 +80,7 @@ class DeviceLayerEnum(IntEnum):
 DEVICE_TYPE_TO_LAYER = {
     DeviceTypeEnum.EMULATED_DATACENTER.value      : DeviceLayerEnum.APPLICATION_DEVICE,
     DeviceTypeEnum.DATACENTER.value               : DeviceLayerEnum.APPLICATION_DEVICE,
+    DeviceTypeEnum.NETWORK.value                  : DeviceLayerEnum.APPLICATION_DEVICE,
 
     DeviceTypeEnum.EMULATED_PACKET_ROUTER.value   : DeviceLayerEnum.PACKET_DEVICE,
     DeviceTypeEnum.PACKET_ROUTER.value            : DeviceLayerEnum.PACKET_DEVICE,