diff --git a/proto/context.proto b/proto/context.proto
index ce7534c806aecd4e1b43fd1c8a39772c1f1a7b9c..3ab3597e46345464b20b5533e7d6725b2231344e 100644
--- a/proto/context.proto
+++ b/proto/context.proto
@@ -19,56 +19,59 @@ import "acl.proto";
 import "kpi_sample_types.proto";
 
 service ContextService {
-  rpc ListContextIds     (Empty       ) returns (       ContextIdList   ) {}
-  rpc ListContexts       (Empty       ) returns (       ContextList     ) {}
-  rpc GetContext         (ContextId   ) returns (       Context         ) {}
-  rpc SetContext         (Context     ) returns (       ContextId       ) {}
-  rpc RemoveContext      (ContextId   ) returns (       Empty           ) {}
-  rpc GetContextEvents   (Empty       ) returns (stream ContextEvent    ) {}
-
-  rpc ListTopologyIds    (ContextId   ) returns (       TopologyIdList  ) {}
-  rpc ListTopologies     (ContextId   ) returns (       TopologyList    ) {}
-  rpc GetTopology        (TopologyId  ) returns (       Topology        ) {}
-  rpc SetTopology        (Topology    ) returns (       TopologyId      ) {}
-  rpc RemoveTopology     (TopologyId  ) returns (       Empty           ) {}
-  rpc GetTopologyEvents  (Empty       ) returns (stream TopologyEvent   ) {}
-
-  rpc ListDeviceIds      (Empty       ) returns (       DeviceIdList    ) {}
-  rpc ListDevices        (Empty       ) returns (       DeviceList      ) {}
-  rpc GetDevice          (DeviceId    ) returns (       Device          ) {}
-  rpc SetDevice          (Device      ) returns (       DeviceId        ) {}
-  rpc RemoveDevice       (DeviceId    ) returns (       Empty           ) {}
-  rpc GetDeviceEvents    (Empty       ) returns (stream DeviceEvent     ) {}
-
-  rpc ListLinkIds        (Empty       ) returns (       LinkIdList      ) {}
-  rpc ListLinks          (Empty       ) returns (       LinkList        ) {}
-  rpc GetLink            (LinkId      ) returns (       Link            ) {}
-  rpc SetLink            (Link        ) returns (       LinkId          ) {}
-  rpc RemoveLink         (LinkId      ) returns (       Empty           ) {}
-  rpc GetLinkEvents      (Empty       ) returns (stream LinkEvent       ) {}
-
-  rpc ListServiceIds     (ContextId   ) returns (       ServiceIdList   ) {}
-  rpc ListServices       (ContextId   ) returns (       ServiceList     ) {}
-  rpc GetService         (ServiceId   ) returns (       Service         ) {}
-  rpc SetService         (Service     ) returns (       ServiceId       ) {}
-  rpc UnsetService       (Service     ) returns (       ServiceId       ) {}
-  rpc RemoveService      (ServiceId   ) returns (       Empty           ) {}
-  rpc GetServiceEvents   (Empty       ) returns (stream ServiceEvent    ) {}
-
-  rpc ListSliceIds       (ContextId   ) returns (       SliceIdList     ) {}
-  rpc ListSlices         (ContextId   ) returns (       SliceList       ) {}
-  rpc GetSlice           (SliceId     ) returns (       Slice           ) {}
-  rpc SetSlice           (Slice       ) returns (       SliceId         ) {}
-  rpc UnsetSlice         (Slice       ) returns (       SliceId         ) {}
-  rpc RemoveSlice        (SliceId     ) returns (       Empty           ) {}
-  rpc GetSliceEvents     (Empty       ) returns (stream SliceEvent      ) {}
-
-  rpc ListConnectionIds  (ServiceId   ) returns (       ConnectionIdList) {}
-  rpc ListConnections    (ServiceId   ) returns (       ConnectionList  ) {}
-  rpc GetConnection      (ConnectionId) returns (       Connection      ) {}
-  rpc SetConnection      (Connection  ) returns (       ConnectionId    ) {}
-  rpc RemoveConnection   (ConnectionId) returns (       Empty           ) {}
-  rpc GetConnectionEvents(Empty       ) returns (stream ConnectionEvent ) {}
+  rpc ListContextIds     (Empty         ) returns (       ContextIdList   ) {}
+  rpc ListContexts       (Empty         ) returns (       ContextList     ) {}
+  rpc GetContext         (ContextId     ) returns (       Context         ) {}
+  rpc SetContext         (Context       ) returns (       ContextId       ) {}
+  rpc RemoveContext      (ContextId     ) returns (       Empty           ) {}
+  rpc GetContextEvents   (Empty         ) returns (stream ContextEvent    ) {}
+
+  rpc ListTopologyIds    (ContextId     ) returns (       TopologyIdList  ) {}
+  rpc ListTopologies     (ContextId     ) returns (       TopologyList    ) {}
+  rpc GetTopology        (TopologyId    ) returns (       Topology        ) {}
+  rpc GetTopologyDetails (TopologyId    ) returns (       TopologyDetails ) {}
+  rpc SetTopology        (Topology      ) returns (       TopologyId      ) {}
+  rpc RemoveTopology     (TopologyId    ) returns (       Empty           ) {}
+  rpc GetTopologyEvents  (Empty         ) returns (stream TopologyEvent   ) {}
+
+  rpc ListDeviceIds      (Empty         ) returns (       DeviceIdList    ) {}
+  rpc ListDevices        (Empty         ) returns (       DeviceList      ) {}
+  rpc GetDevice          (DeviceId      ) returns (       Device          ) {}
+  rpc SetDevice          (Device        ) returns (       DeviceId        ) {}
+  rpc RemoveDevice       (DeviceId      ) returns (       Empty           ) {}
+  rpc GetDeviceEvents    (Empty         ) returns (stream DeviceEvent     ) {}
+
+  rpc ListEndPointNames  (EndPointIdList) returns (       EndPointNameList) {}
+
+  rpc ListLinkIds        (Empty         ) returns (       LinkIdList      ) {}
+  rpc ListLinks          (Empty         ) returns (       LinkList        ) {}
+  rpc GetLink            (LinkId        ) returns (       Link            ) {}
+  rpc SetLink            (Link          ) returns (       LinkId          ) {}
+  rpc RemoveLink         (LinkId        ) returns (       Empty           ) {}
+  rpc GetLinkEvents      (Empty         ) returns (stream LinkEvent       ) {}
+
+  rpc ListServiceIds     (ContextId     ) returns (       ServiceIdList   ) {}
+  rpc ListServices       (ContextId     ) returns (       ServiceList     ) {}
+  rpc GetService         (ServiceId     ) returns (       Service         ) {}
+  rpc SetService         (Service       ) returns (       ServiceId       ) {}
+  rpc UnsetService       (Service       ) returns (       ServiceId       ) {}
+  rpc RemoveService      (ServiceId     ) returns (       Empty           ) {}
+  rpc GetServiceEvents   (Empty         ) returns (stream ServiceEvent    ) {}
+
+  rpc ListSliceIds       (ContextId     ) returns (       SliceIdList     ) {}
+  rpc ListSlices         (ContextId     ) returns (       SliceList       ) {}
+  rpc GetSlice           (SliceId       ) returns (       Slice           ) {}
+  rpc SetSlice           (Slice         ) returns (       SliceId         ) {}
+  rpc UnsetSlice         (Slice         ) returns (       SliceId         ) {}
+  rpc RemoveSlice        (SliceId       ) returns (       Empty           ) {}
+  rpc GetSliceEvents     (Empty         ) returns (stream SliceEvent      ) {}
+
+  rpc ListConnectionIds  (ServiceId     ) returns (       ConnectionIdList) {}
+  rpc ListConnections    (ServiceId     ) returns (       ConnectionList  ) {}
+  rpc GetConnection      (ConnectionId  ) returns (       Connection      ) {}
+  rpc SetConnection      (Connection    ) returns (       ConnectionId    ) {}
+  rpc RemoveConnection   (ConnectionId  ) returns (       Empty           ) {}
+  rpc GetConnectionEvents(Empty         ) returns (stream ConnectionEvent ) {}
 }
 
 // ----- Generic -------------------------------------------------------------------------------------------------------
@@ -135,6 +138,13 @@ message Topology {
   repeated LinkId link_ids = 4;
 }
 
+message TopologyDetails {
+  TopologyId topology_id = 1;
+  string name = 2;
+  repeated Device devices = 3;
+  repeated Link links = 4;
+}
+
 message TopologyIdList {
   repeated TopologyId topology_ids = 1;
 }
@@ -413,6 +423,21 @@ message EndPoint {
   Location endpoint_location = 5;
 }
 
+message EndPointName {
+  EndPointId endpoint_id = 1;
+  string device_name = 2;
+  string endpoint_name = 3;
+  string endpoint_type = 4;
+}
+
+message EndPointIdList {
+  repeated EndPointId endpoint_ids = 1;
+}
+
+message EndPointNameList {
+  repeated EndPointName endpoint_names = 1;
+}
+
 
 // ----- Configuration -------------------------------------------------------------------------------------------------
 enum ConfigActionEnum {
diff --git a/src/common/tools/context_queries/EndPoint.py b/src/common/tools/context_queries/EndPoint.py
new file mode 100644
index 0000000000000000000000000000000000000000..c5114d124319fedbfc70dfac14e9603214384ca7
--- /dev/null
+++ b/src/common/tools/context_queries/EndPoint.py
@@ -0,0 +1,46 @@
+# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import logging
+from typing import Dict, List, Set, Tuple
+from common.proto.context_pb2 import EndPointId, EndPointIdList
+from context.client.ContextClient import ContextClient
+
+LOGGER = logging.getLogger(__name__)
+
+TYPE_DEVICE_NAMES   = Dict[str, str]             # device_uuid => device_name
+TYPE_ENDPOINTS_DATA = Dict[str, Tuple[str, str]] # endpoint_uuid => (endpoint_name, endpoint_type)
+TYPE_NAME_MAPS      = Tuple[TYPE_DEVICE_NAMES, TYPE_ENDPOINTS_DATA]
+
+def get_endpoint_names(context_client : ContextClient, endpoint_ids : List[EndPointId]) -> TYPE_NAME_MAPS:
+    endpoint_uuids_to_names : Set[str] = set()
+    endpoint_id_list = EndPointIdList()
+    for endpoint_id in endpoint_ids:
+        endpoint_uuid = endpoint_id.endpoint_uuid.uuid
+        if endpoint_uuid in endpoint_uuids_to_names: continue
+        endpoint_id_list.endpoint_ids.add().CopyFrom(endpoint_id)   # pylint: disable=no-member
+        endpoint_uuids_to_names.add(endpoint_uuid)
+
+    endpoint_names = context_client.ListEndPointNames(endpoint_id_list)
+
+    device_names   : TYPE_DEVICE_NAMES   = dict()
+    endpoints_data : TYPE_ENDPOINTS_DATA = dict()
+    for endpoint_name in endpoint_names.endpoint_names:
+        device_uuid = endpoint_name.endpoint_id.device_id.device_uuid.uuid
+        device_names[device_uuid] = endpoint_name.device_name
+
+        endpoint_uuid = endpoint_name.endpoint_id.endpoint_uuid.uuid
+        endpoints_data[endpoint_uuid] = (endpoint_name.endpoint_name, endpoint_name.endpoint_type)
+
+    return device_names, endpoints_data
diff --git a/src/context/client/ContextClient.py b/src/context/client/ContextClient.py
index f91f36cf5bf73669e4010c8c65d9c4cabd9c6e2e..7559dde0f64f3264ee568eecd7842ebc1c76c740 100644
--- a/src/context/client/ContextClient.py
+++ b/src/context/client/ContextClient.py
@@ -22,11 +22,11 @@ from common.proto.context_pb2 import (
     Connection, ConnectionEvent, ConnectionId, ConnectionIdList, ConnectionList,
     Context, ContextEvent, ContextId, ContextIdList, ContextList,
     Device, DeviceEvent, DeviceId, DeviceIdList, DeviceList,
-    Empty,
+    Empty, EndPointIdList, EndPointNameList,
     Link, LinkEvent, LinkId, LinkIdList, LinkList,
     Service, ServiceEvent, ServiceId, ServiceIdList, ServiceList,
     Slice, SliceEvent, SliceId, SliceIdList, SliceList,
-    Topology, TopologyEvent, TopologyId, TopologyIdList, TopologyList)
+    Topology, TopologyDetails, TopologyEvent, TopologyId, TopologyIdList, TopologyList)
 from common.proto.context_pb2_grpc import ContextServiceStub
 from common.proto.context_policy_pb2_grpc import ContextPolicyServiceStub
 from common.proto.policy_pb2 import PolicyRuleIdList, PolicyRuleId, PolicyRuleList, PolicyRule
@@ -143,6 +143,13 @@ class ContextClient:
         LOGGER.debug('GetTopologyEvents result: {:s}'.format(grpc_message_to_json_string(response)))
         return response
 
+    @RETRY_DECORATOR
+    def GetTopologyDetails(self, request: TopologyId) -> TopologyDetails:
+        LOGGER.debug('GetTopologyDetails request: {:s}'.format(grpc_message_to_json_string(request)))
+        response = self.stub.GetTopologyDetails(request)
+        LOGGER.debug('GetTopologyDetails result: {:s}'.format(grpc_message_to_json_string(response)))
+        return response
+
     @RETRY_DECORATOR
     def ListDeviceIds(self, request: Empty) -> DeviceIdList:
         LOGGER.debug('ListDeviceIds request: {:s}'.format(grpc_message_to_json_string(request)))
@@ -185,6 +192,13 @@ class ContextClient:
         LOGGER.debug('GetDeviceEvents result: {:s}'.format(grpc_message_to_json_string(response)))
         return response
 
+    @RETRY_DECORATOR
+    def ListEndPointNames(self, request: EndPointIdList) -> EndPointNameList:
+        LOGGER.debug('ListEndPointNames request: {:s}'.format(grpc_message_to_json_string(request)))
+        response = self.stub.ListEndPointNames(request)
+        LOGGER.debug('ListEndPointNames result: {:s}'.format(grpc_message_to_json_string(response)))
+        return response
+
     @RETRY_DECORATOR
     def ListLinkIds(self, request: Empty) -> LinkIdList:
         LOGGER.debug('ListLinkIds request: {:s}'.format(grpc_message_to_json_string(request)))
diff --git a/src/context/service/ContextServiceServicerImpl.py b/src/context/service/ContextServiceServicerImpl.py
index 82e28a7f13135735909a99b635cf26bb3e02e252..41126b8d41a6df30340ec12b1adeb767fdcc58a3 100644
--- a/src/context/service/ContextServiceServicerImpl.py
+++ b/src/context/service/ContextServiceServicerImpl.py
@@ -19,11 +19,11 @@ from common.proto.context_pb2 import (
     Connection, ConnectionEvent, ConnectionId, ConnectionIdList, ConnectionList,
     Context, ContextEvent, ContextId, ContextIdList, ContextList,
     Device, DeviceEvent, DeviceId, DeviceIdList, DeviceList,
-    Empty, EventTypeEnum,
+    Empty, EndPointIdList, EndPointNameList, EventTypeEnum,
     Link, LinkEvent, LinkId, LinkIdList, LinkList,
     Service, ServiceEvent, ServiceId, ServiceIdList, ServiceList,
     Slice, SliceEvent, SliceId, SliceIdList, SliceList,
-    Topology, TopologyEvent, TopologyId, TopologyIdList, TopologyList)
+    Topology, TopologyDetails, TopologyEvent, TopologyId, TopologyIdList, TopologyList)
 from common.proto.policy_pb2 import PolicyRuleIdList, PolicyRuleId, PolicyRuleList, PolicyRule
 from common.proto.context_pb2_grpc import ContextServiceServicer
 from common.proto.context_policy_pb2_grpc import ContextPolicyServiceServicer
@@ -32,12 +32,14 @@ from .database.Connection import (
     connection_delete, connection_get, connection_list_ids, connection_list_objs, connection_set)
 from .database.Context import context_delete, context_get, context_list_ids, context_list_objs, context_set
 from .database.Device import device_delete, device_get, device_list_ids, device_list_objs, device_set
+from .database.EndPoint import endpoint_list_names
 from .database.Link import link_delete, link_get, link_list_ids, link_list_objs, link_set
 from .database.PolicyRule import (
     policyrule_delete, policyrule_get, policyrule_list_ids, policyrule_list_objs, policyrule_set)
 from .database.Service import service_delete, service_get, service_list_ids, service_list_objs, service_set
 from .database.Slice import slice_delete, slice_get, slice_list_ids, slice_list_objs, slice_set, slice_unset
-from .database.Topology import topology_delete, topology_get, topology_list_ids, topology_list_objs, topology_set
+from .database.Topology import (
+    topology_delete, topology_get, topology_get_details, topology_list_ids, topology_list_objs, topology_set)
 from .Events import (
     CONSUME_TIMEOUT, TOPIC_CONNECTION, TOPIC_CONTEXT, TOPIC_DEVICE, TOPIC_LINK, TOPIC_POLICY, TOPIC_SERVICE,
     TOPIC_SLICE, TOPIC_TOPOLOGY, notify_event)
@@ -105,6 +107,10 @@ class ContextServiceServicerImpl(ContextServiceServicer, ContextPolicyServiceSer
     def GetTopology(self, request : TopologyId, context : grpc.ServicerContext) -> Topology:
         return Topology(**topology_get(self.db_engine, request))
 
+    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
+    def GetTopologyDetails(self, request : TopologyId, context : grpc.ServicerContext) -> TopologyDetails:
+        return TopologyDetails(**topology_get_details(self.db_engine, request))
+
     @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
     def SetTopology(self, request : Topology, context : grpc.ServicerContext) -> TopologyId:
         topology_id,updated = topology_set(self.db_engine, request)
@@ -160,6 +166,10 @@ class ContextServiceServicerImpl(ContextServiceServicer, ContextPolicyServiceSer
         for message in self.messagebroker.consume({TOPIC_DEVICE}, consume_timeout=CONSUME_TIMEOUT):
             yield DeviceEvent(**json.loads(message.content))
 
+    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
+    def ListEndPointNames(self, request : EndPointIdList, context : grpc.ServicerContext) -> EndPointNameList:
+        return EndPointNameList(endpoint_names=endpoint_list_names(self.db_engine, request))
+
 
     # ----- Link -------------------------------------------------------------------------------------------------------
 
diff --git a/src/context/service/database/EndPoint.py b/src/context/service/database/EndPoint.py
new file mode 100644
index 0000000000000000000000000000000000000000..a26ed902c5b756dfe6bf24eefaaa55eed923db96
--- /dev/null
+++ b/src/context/service/database/EndPoint.py
@@ -0,0 +1,35 @@
+# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import logging
+from sqlalchemy.engine import Engine
+from sqlalchemy.orm import Session, sessionmaker
+from sqlalchemy_cockroachdb import run_transaction
+from typing import Dict, List
+from common.proto.context_pb2 import EndPointIdList
+from .models.EndPointModel import EndPointModel
+from .uuids.EndPoint import endpoint_get_uuid
+
+LOGGER = logging.getLogger(__name__)
+
+def endpoint_list_names(db_engine : Engine, request : EndPointIdList) -> List[Dict]:
+    endpoint_uuids = {
+        endpoint_get_uuid(endpoint_id, allow_random=False)[-1]
+        for endpoint_id in request.endpoint_ids
+    }
+    def callback(session : Session) -> List[Dict]:
+        obj_list : List[EndPointModel] = \
+            session.query(EndPointModel).filter(EndPointModel.endpoint_uuid.in_(endpoint_uuids)).all()
+        return [obj.dump_name() for obj in obj_list]
+    return run_transaction(sessionmaker(bind=db_engine), callback)
diff --git a/src/context/service/database/Topology.py b/src/context/service/database/Topology.py
index fcd93e6bb2500c370b5e0e9a206e7d7117507b88..81170d0a1dfb13185fb1a746be4b3ae8a97ff718 100644
--- a/src/context/service/database/Topology.py
+++ b/src/context/service/database/Topology.py
@@ -58,6 +58,22 @@ def topology_get(db_engine : Engine, request : TopologyId) -> Dict:
         ])
     return obj
 
+def topology_get_details(db_engine : Engine, request : TopologyId) -> Dict:
+    _,topology_uuid = topology_get_uuid(request, allow_random=False)
+    def callback(session : Session) -> Optional[Dict]:
+        obj : Optional[TopologyModel] = session.query(TopologyModel)\
+            .filter_by(topology_uuid=topology_uuid).one_or_none()
+        return None if obj is None else obj.dump_details()
+    obj = run_transaction(sessionmaker(bind=db_engine), callback)
+    if obj is None:
+        context_uuid = context_get_uuid(request.context_id, allow_random=False)
+        raw_topology_uuid = '{:s}/{:s}'.format(request.context_id.context_uuid.uuid, request.topology_uuid.uuid)
+        raise NotFoundException('Topology', raw_topology_uuid, extra_details=[
+            'context_uuid generated was: {:s}'.format(context_uuid),
+            'topology_uuid generated was: {:s}'.format(topology_uuid),
+        ])
+    return obj
+
 def topology_set(db_engine : Engine, request : Topology) -> Tuple[Dict, bool]:
     topology_name = request.name
     if len(topology_name) == 0: topology_name = request.topology_id.topology_uuid.uuid
diff --git a/src/context/service/database/models/EndPointModel.py b/src/context/service/database/models/EndPointModel.py
index 07a5df2bf69e154f8d969d716a2eb914145f9919..65d867f3f7ec80c7ffab7e3e2eadae0ca6849a48 100644
--- a/src/context/service/database/models/EndPointModel.py
+++ b/src/context/service/database/models/EndPointModel.py
@@ -51,3 +51,11 @@ class EndPointModel(_Base):
             'endpoint_type'   : self.endpoint_type,
             'kpi_sample_types': [kst.value for kst in self.kpi_sample_types],
         }
+
+    def dump_name(self) -> Dict:
+        return {
+            'endpoint_id'  : self.dump_id(),
+            'device_name'  : self.device.device_name,
+            'endpoint_name': self.name,
+            'endpoint_type': self.endpoint_type,
+        }
diff --git a/src/context/service/database/models/TopologyModel.py b/src/context/service/database/models/TopologyModel.py
index 59659ecd3f8ad9f896bd7d8f07c1f65ba1d6f27d..cf730b168a42b30daff0119595f57ace8e665060 100644
--- a/src/context/service/database/models/TopologyModel.py
+++ b/src/context/service/database/models/TopologyModel.py
@@ -45,6 +45,14 @@ class TopologyModel(_Base):
             'link_ids'   : [{'link_uuid'  : {'uuid': tl.link_uuid  }} for tl in self.topology_links  ],
         }
 
+    def dump_details(self) -> Dict:
+        return {
+            'topology_id': self.dump_id(),
+            'name'       : self.topology_name,
+            'devices'    : [td.device.dump() for td in self.topology_devices],
+            'links'      : [tl.link.dump()   for tl in self.topology_links  ],
+        }
+
 class TopologyDeviceModel(_Base):
     __tablename__ = 'topology_device'
 
diff --git a/src/webui/service/link/routes.py b/src/webui/service/link/routes.py
index 0bfe2b9026050b3de6d6f0a1ee3674169c53913a..0fc598d657797a3ba6f657faa6de3f04383483d3 100644
--- a/src/webui/service/link/routes.py
+++ b/src/webui/service/link/routes.py
@@ -13,8 +13,9 @@
 # limitations under the License.
 
 
-from flask import current_app, render_template, Blueprint, flash, session, redirect, url_for
-from common.proto.context_pb2 import Empty, Link, LinkEvent, LinkId, LinkIdList, LinkList, DeviceId, TopologyId
+from flask import render_template, Blueprint, flash, session, redirect, url_for
+from common.proto.context_pb2 import Empty, LinkId, LinkList, TopologyId
+from common.tools.context_queries.EndPoint import get_endpoint_names
 from common.tools.object_factory.Context import json_context_id
 from common.tools.object_factory.Topology import json_topology_id
 from context.client.ContextClient import ContextClient
@@ -37,22 +38,26 @@ def home():
     grpc_topology = context_client.GetTopology(TopologyId(**json_topo_id))
     topo_link_uuids = {link_id.link_uuid.uuid for link_id in grpc_topology.link_ids}
     grpc_links: LinkList = context_client.ListLinks(Empty())
-    context_client.close()
 
-    links = [
-        link for link in grpc_links.links
-        if link.link_id.link_uuid.uuid in topo_link_uuids
-    ]
+    endpoint_ids = []
+    links = []
+    for link_ in grpc_links.links:
+        if link_.link_id.link_uuid.uuid not in topo_link_uuids: continue
+        links.append(link_)
+        endpoint_ids.extend(link_.link_endpoint_ids)
+
+    device_names, endpoints_data = get_endpoint_names(context_client, endpoint_ids)
+    context_client.close()
 
-    return render_template(
-        'link/home.html', links=links)
+    return render_template('link/home.html', links=links, device_names=device_names, endpoints_data=endpoints_data)
 
 
 @link.route('detail/<path:link_uuid>', methods=('GET', 'POST'))
 def detail(link_uuid: str):
     request = LinkId()
-    request.link_uuid.uuid = link_uuid
+    request.link_uuid.uuid = link_uuid  # pylint: disable=no-member
     context_client.connect()
     response = context_client.GetLink(request)
+    device_names, endpoints_data = get_endpoint_names(context_client, response.link_endpoint_ids)
     context_client.close()
-    return render_template('link/detail.html',link=response)
+    return render_template('link/detail.html',link=response, device_names=device_names, endpoints_data=endpoints_data)
diff --git a/src/webui/service/service/routes.py b/src/webui/service/service/routes.py
index bc05daee3e4ff8795c26bed9e0707b9a3ab2be7c..c3b33df1e93516c1cbd9e19743898f253887a627 100644
--- a/src/webui/service/service/routes.py
+++ b/src/webui/service/service/routes.py
@@ -14,7 +14,8 @@
 
 import grpc
 from flask import current_app, redirect, render_template, Blueprint, flash, session, url_for
-from common.proto.context_pb2 import ContextId, Service, ServiceId, ServiceList, ServiceTypeEnum, ServiceStatusEnum, Connection
+from common.proto.context_pb2 import ContextId, Service, ServiceId, ServiceTypeEnum, ServiceStatusEnum, Connection
+from common.tools.context_queries.EndPoint import get_endpoint_names
 from context.client.ContextClient import ContextClient
 from service.client.ServiceClient import ServiceClient
 
@@ -39,18 +40,25 @@ def home():
         service_list = context_client.ListServices(request)
         # print(service_list)
         services = service_list.services
-        context_not_found = False
+        context_found = True
     except grpc.RpcError as e:
         if e.code() != grpc.StatusCode.NOT_FOUND: raise
         if e.details() != 'Context({:s}) not found'.format(context_uuid): raise
         services = []
-        context_not_found = True
+        context_found = False
+
+    if context_found:
+        endpoint_ids = []
+        for service_ in services:
+            endpoint_ids.extend(service_.service_endpoint_ids)
+        device_names, endpoints_data = get_endpoint_names(context_client, endpoint_ids)
+    else:
+        device_names, endpoints_data = [],[]
 
     context_client.close()
-    return render_template('service/home.html', services=services,
-                                                context_not_found=context_not_found,
-                                                ste=ServiceTypeEnum,
-                                                sse=ServiceStatusEnum)
+    return render_template(
+        'service/home.html', services=services, device_names=device_names, endpoints_data=endpoints_data,
+        context_not_found=not context_found, ste=ServiceTypeEnum, sse=ServiceStatusEnum)
 
 
 @service.route('add', methods=['GET', 'POST'])
@@ -74,13 +82,22 @@ def detail(service_uuid: str):
         context_client.connect()
         response: Service = context_client.GetService(request)
         connections: Connection = context_client.ListConnections(request)
+        connections = connections.connections
+
+        endpoint_ids = []
+        endpoint_ids.extend(response.service_endpoint_ids)
+        for connection in connections:
+            endpoint_ids.extend(connection.path_hops_endpoint_ids)
+        device_names, endpoints_data = get_endpoint_names(context_client, endpoint_ids)
+
         context_client.close()
     except Exception as e:
         flash('The system encountered an error and cannot show the details of this service.', 'warning')
         current_app.logger.exception(e)
         return redirect(url_for('service.home'))
-    return render_template('service/detail.html', service=response, connections=connections,ste=ServiceTypeEnum,
-                                                sse=ServiceStatusEnum)
+    return render_template(
+        'service/detail.html', service=response, connections=connections, device_names=device_names,
+        endpoints_data=endpoints_data, ste=ServiceTypeEnum, sse=ServiceStatusEnum)
 
 
 @service.get('<path:service_uuid>/delete')
@@ -102,4 +119,4 @@ def delete(service_uuid: str):
     except Exception as e:
         flash('Problem deleting service "{:s}": {:s}'.format(service_uuid, str(e.details())), 'danger')
         current_app.logger.exception(e)
-    return redirect(url_for('service.home'))
\ No newline at end of file
+    return redirect(url_for('service.home'))
diff --git a/src/webui/service/slice/routes.py b/src/webui/service/slice/routes.py
index c5287501362db88edaf334426ca6e6d0e3331ef2..a3dfc99ea76a25167f185fe5d1682cd578b36e67 100644
--- a/src/webui/service/slice/routes.py
+++ b/src/webui/service/slice/routes.py
@@ -14,22 +14,18 @@
 #
 import grpc
 from flask import current_app, redirect, render_template, Blueprint, flash, session, url_for
-from common.proto.context_pb2 import ContextId, Slice, SliceId, SliceList, Connection, SliceStatusEnum
+from common.proto.context_pb2 import ContextId, Slice, SliceId, SliceStatusEnum
+from common.tools.context_queries.EndPoint import get_endpoint_names
 from context.client.ContextClient import ContextClient
-#from slice.client.SliceClient import SliceClient
-
-
+from slice.client.SliceClient import SliceClient
 
 slice = Blueprint('slice', __name__, url_prefix='/slice')
 
 context_client = ContextClient()
-#slice_client = SliceClient()
+slice_client = SliceClient()
 
 @slice.get('/')
 def home():
-    # flash('This is an info message', 'info')
-    # flash('This is a danger message', 'danger')
-
     context_uuid = session.get('context_uuid', '-')
     if context_uuid == "-":
         flash("Please select a context!", "warning")
@@ -39,25 +35,36 @@ def home():
     context_client.connect()
     try:
         slice_list = context_client.ListSlices(request)
-        # print(slice_list)
         slices = slice_list.slices
-        context_not_found = False
+        context_found = True
     except grpc.RpcError as e:
         if e.code() != grpc.StatusCode.NOT_FOUND: raise
         if e.details() != 'Context({:s}) not found'.format(context_uuid): raise
         slices = []
-        context_not_found = True
+        context_found = False
+
+    if context_found:
+        endpoint_ids = []
+        for slice_ in slices:
+            endpoint_ids.extend(slice_.slice_endpoint_ids)
+        device_names, endpoints_data = get_endpoint_names(context_client, endpoint_ids)
+    else:
+        device_names, endpoints_data = [],[]
+
     context_client.close()
-    return render_template('slice/home.html',slices=slices, context_not_found=context_not_found, sse=SliceStatusEnum)
 
-#
-#@slice.route('add', methods=['GET', 'POST'])
-#def add():
-#    flash('Add slice route called', 'danger')
-#    raise NotImplementedError()
-#    return render_template('slice/home.html')
-#
-#
+    return render_template(
+        'slice/home.html', slices=slices, device_names=device_names, endpoints_data=endpoints_data,
+        context_not_found=not context_found, sse=SliceStatusEnum)
+
+
+@slice.route('add', methods=['GET', 'POST'])
+def add():
+    flash('Add slice route called', 'danger')
+    raise NotImplementedError()
+    return render_template('slice/home.html')
+
+
 @slice.get('<path:slice_uuid>/detail')
 def detail(slice_uuid: str):
     context_uuid = session.get('context_uuid', '-')
@@ -74,13 +81,20 @@ def detail(slice_uuid: str):
         context_client.connect()
         response: Slice = context_client.GetSlice(request)
         services = context_client.ListServices(req)
+
+        endpoint_ids = []
+        endpoint_ids.extend(response.slice_endpoint_ids)
+        device_names, endpoints_data = get_endpoint_names(context_client, endpoint_ids)
+
         context_client.close()
     except Exception as e:
         flash('The system encountered an error and cannot show the details of this slice.', 'warning')
         current_app.logger.exception(e)
         return redirect(url_for('slice.home'))
-    return render_template('slice/detail.html', slice=response, sse=SliceStatusEnum, services=services)
-#
+    return render_template(
+        'slice/detail.html', slice=response, device_names=device_names, endpoints_data=endpoints_data,
+        sse=SliceStatusEnum, services=services)
+
 #@slice.get('<path:slice_uuid>/delete')
 #def delete(slice_uuid: str):
 #    context_uuid = session.get('context_uuid', '-')
@@ -100,4 +114,4 @@ def detail(slice_uuid: str):
 #    except Exception as e:
 #        flash('Problem deleting slice "{:s}": {:s}'.format(slice_uuid, str(e.details())), 'danger')
 #        current_app.logger.exception(e) 
-#    return redirect(url_for('slice.home'))
\ No newline at end of file
+#    return redirect(url_for('slice.home'))
diff --git a/src/webui/service/templates/link/detail.html b/src/webui/service/templates/link/detail.html
index 16ec5470cfa428905091004affe28b8876d9c68d..d247527dedcac45180af528c2ddf9141974c0292 100644
--- a/src/webui/service/templates/link/detail.html
+++ b/src/webui/service/templates/link/detail.html
@@ -38,23 +38,27 @@
                             <tr>
                                 <th scope="col">Endpoint UUID</th>
                                 <th scope="col">Device</th>
+                                <th scope="col">Endpoint Type</th>
                             </tr>
                         </thead>
                         <tbody>
-                              {% for end_point in link.link_endpoint_ids %}
+                              {% for endpoint in link.link_endpoint_ids %}
                               <tr>
                                    <td>
-                                        {{ end_point.endpoint_uuid.uuid }} 
+                                        {{ endpoints_data.get(endpoint.endpoint_uuid.uuid, (endpoint.endpoint_uuid.uuid, ''))[0] }}
                                    </td>
                                    <td>
-                                        <a href="{{ url_for('device.detail', device_uuid=end_point.device_id.device_uuid.uuid) }}">
-                                             {{ end_point.device_id.device_uuid.uuid }}
+                                        <a href="{{ url_for('device.detail', device_uuid=endpoint.device_id.device_uuid.uuid) }}">
+                                             {{ device_names.get(endpoint.device_id.device_uuid.uuid, endpoint.device_id.device_uuid.uuid) }}
                                              <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-eye" viewBox="0 0 16 16">
                                                  <path d="M16 8s-3-5.5-8-5.5S0 8 0 8s3 5.5 8 5.5S16 8 16 8zM1.173 8a13.133 13.133 0 0 1 1.66-2.043C4.12 4.668 5.88 3.5 8 3.5c2.12 0 3.879 1.168 5.168 2.457A13.133 13.133 0 0 1 14.828 8c-.058.087-.122.183-.195.288-.335.48-.83 1.12-1.465 1.755C11.879 11.332 10.119 12.5 8 12.5c-2.12 0-3.879-1.168-5.168-2.457A13.134 13.134 0 0 1 1.172 8z"/>
                                                  <path d="M8 5.5a2.5 2.5 0 1 0 0 5 2.5 2.5 0 0 0 0-5zM4.5 8a3.5 3.5 0 1 1 7 0 3.5 3.5 0 0 1-7 0z"/>
                                              </svg>
                                         </a>
                                    </td>
+                                   <td>
+                                        {{ endpoints_data.get(endpoint.endpoint_uuid.uuid, ('', '-'))[1] }}
+                                   </td>
                               </tr>
                               {% endfor %}
                         </tbody>
diff --git a/src/webui/service/templates/link/home.html b/src/webui/service/templates/link/home.html
index 16fe36e1f4a70ce76ff32257a508acc841248605..6a14e60dd751d32499a101588384a20d48cc06ad 100644
--- a/src/webui/service/templates/link/home.html
+++ b/src/webui/service/templates/link/home.html
@@ -61,12 +61,12 @@
 
                        <td>
                            <ul>
-                               {% for end_point in link.link_endpoint_ids %}
+                               {% for endpoint in link.link_endpoint_ids %}
                                <li>
-                                   {{ end_point.endpoint_uuid.uuid }} / 
+                                   {{ endpoints_data.get(endpoint.endpoint_uuid.uuid, (endpoint.endpoint_uuid.uuid, ''))[0] }} / 
                                    Device: 
-                                   <a href="{{ url_for('device.detail', device_uuid=end_point.device_id.device_uuid.uuid) }}">
-                                       {{ end_point.device_id.device_uuid.uuid }}
+                                   <a href="{{ url_for('device.detail', device_uuid=endpoint.device_id.device_uuid.uuid) }}">
+                                       {{ device_names.get(endpoint.device_id.device_uuid.uuid, endpoint.device_id.device_uuid.uuid) }}
                                        <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-eye" viewBox="0 0 16 16">
                                            <path d="M16 8s-3-5.5-8-5.5S0 8 0 8s3 5.5 8 5.5S16 8 16 8zM1.173 8a13.133 13.133 0 0 1 1.66-2.043C4.12 4.668 5.88 3.5 8 3.5c2.12 0 3.879 1.168 5.168 2.457A13.133 13.133 0 0 1 14.828 8c-.058.087-.122.183-.195.288-.335.48-.83 1.12-1.465 1.755C11.879 11.332 10.119 12.5 8 12.5c-2.12 0-3.879-1.168-5.168-2.457A13.134 13.134 0 0 1 1.172 8z"/>
                                            <path d="M8 5.5a2.5 2.5 0 1 0 0 5 2.5 2.5 0 0 0 0-5zM4.5 8a3.5 3.5 0 1 1 7 0 3.5 3.5 0 0 1-7 0z"/>
diff --git a/src/webui/service/templates/service/detail.html b/src/webui/service/templates/service/detail.html
index e8d3a4221f68c5b0ea1eb51dcdc81cf13266c8e8..f453b2f2dbe8ea3172b313417da0a9d5959a4602 100644
--- a/src/webui/service/templates/service/detail.html
+++ b/src/webui/service/templates/service/detail.html
@@ -55,26 +55,27 @@
                 <tr>
                     <th scope="col">Endpoint UUID</th>
                     <th scope="col">Device</th>
+                    <th scope="col">Endpoint Type</th>
                 </tr>
             </thead>
             <tbody>
                 {% for endpoint in service.service_endpoint_ids %}
                 <tr>
                     <td>
-                        {{ endpoint.endpoint_uuid.uuid }}
+                        {{ endpoints_data.get(endpoint.endpoint_uuid.uuid, (endpoint.endpoint_uuid.uuid, ''))[0] }}
                     </td>
                     <td>
                         <a href="{{ url_for('device.detail', device_uuid=endpoint.device_id.device_uuid.uuid) }}">
-                            {{ endpoint.device_id.device_uuid.uuid }}
-                            <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"
-                                class="bi bi-eye" viewBox="0 0 16 16">
-                                <path
-                                    d="M16 8s-3-5.5-8-5.5S0 8 0 8s3 5.5 8 5.5S16 8 16 8zM1.173 8a13.133 13.133 0 0 1 1.66-2.043C4.12 4.668 5.88 3.5 8 3.5c2.12 0 3.879 1.168 5.168 2.457A13.133 13.133 0 0 1 14.828 8c-.058.087-.122.183-.195.288-.335.48-.83 1.12-1.465 1.755C11.879 11.332 10.119 12.5 8 12.5c-2.12 0-3.879-1.168-5.168-2.457A13.134 13.134 0 0 1 1.172 8z" />
-                                <path
-                                    d="M8 5.5a2.5 2.5 0 1 0 0 5 2.5 2.5 0 0 0 0-5zM4.5 8a3.5 3.5 0 1 1 7 0 3.5 3.5 0 0 1-7 0z" />
+                            {{ device_names.get(endpoint.device_id.device_uuid.uuid, endpoint.device_id.device_uuid.uuid) }}
+                            <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-eye" viewBox="0 0 16 16">
+                                <path d="M16 8s-3-5.5-8-5.5S0 8 0 8s3 5.5 8 5.5S16 8 16 8zM1.173 8a13.133 13.133 0 0 1 1.66-2.043C4.12 4.668 5.88 3.5 8 3.5c2.12 0 3.879 1.168 5.168 2.457A13.133 13.133 0 0 1 14.828 8c-.058.087-.122.183-.195.288-.335.48-.83 1.12-1.465 1.755C11.879 11.332 10.119 12.5 8 12.5c-2.12 0-3.879-1.168-5.168-2.457A13.134 13.134 0 0 1 1.172 8z"/>
+                                <path d="M8 5.5a2.5 2.5 0 1 0 0 5 2.5 2.5 0 0 0 0-5zM4.5 8a3.5 3.5 0 1 1 7 0 3.5 3.5 0 0 1-7 0z"/>
                             </svg>
                         </a>
                     </td>
+                    <td>
+                        {{ endpoints_data.get(endpoint.endpoint_uuid.uuid, ('', '-'))[1] }}
+                    </td>
                 </tr>
                 {% endfor %}
             </tbody>
@@ -102,8 +103,13 @@
         <tr>
             <td>Endpoint Location</td>
             <td>
-                {{ constraint.endpoint_location.endpoint_id.device_id.device_uuid.uuid }} / {{
-                constraint.endpoint_location.endpoint_id.endpoint_uuid.uuid }}
+                <a href="{{ url_for('device.detail', device_uuid=constraint.endpoint_location.endpoint_id.device_id.device_uuid.uuid) }}">
+                    {{ device_names.get(constraint.endpoint_location.endpoint_id.device_id.device_uuid.uuid, constraint.endpoint_location.endpoint_id.device_id.device_uuid.uuid) }}
+                    <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-eye" viewBox="0 0 16 16">
+                        <path d="M16 8s-3-5.5-8-5.5S0 8 0 8s3 5.5 8 5.5S16 8 16 8zM1.173 8a13.133 13.133 0 0 1 1.66-2.043C4.12 4.668 5.88 3.5 8 3.5c2.12 0 3.879 1.168 5.168 2.457A13.133 13.133 0 0 1 14.828 8c-.058.087-.122.183-.195.288-.335.48-.83 1.12-1.465 1.755C11.879 11.332 10.119 12.5 8 12.5c-2.12 0-3.879-1.168-5.168-2.457A13.134 13.134 0 0 1 1.172 8z"/>
+                        <path d="M8 5.5a2.5 2.5 0 1 0 0 5 2.5 2.5 0 0 0 0-5zM4.5 8a3.5 3.5 0 1 1 7 0 3.5 3.5 0 0 1-7 0z"/>
+                    </svg>
+                </a> / {{ endpoints_data.get(constraint.endpoint_location.endpoint_id.endpoint_uuid.uuid, (constraint.endpoint_location.endpoint_id.endpoint_uuid.uuid, ''))[0] }}
             </td>
             <td>
                 {% if constraint.endpoint_location.location.WhichOneof('location')=='region' %}
@@ -119,8 +125,13 @@
         <tr>
             <td>Endpoint Priority</td>
             <td>
-                {{ constraint.endpoint_priority.endpoint_id.device_id.device_uuid.uuid }} / {{
-                constraint.endpoint_priority.endpoint_id.endpoint_uuid.uuid }}
+                <a href="{{ url_for('device.detail', device_uuid=constraint.endpoint_priority.endpoint_id.device_id.device_uuid.uuid) }}">
+                    {{ device_names.get(constraint.endpoint_priority.endpoint_id.device_id.device_uuid.uuid, constraint.endpoint_priority.endpoint_id.device_id.device_uuid.uuid) }}
+                    <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-eye" viewBox="0 0 16 16">
+                        <path d="M16 8s-3-5.5-8-5.5S0 8 0 8s3 5.5 8 5.5S16 8 16 8zM1.173 8a13.133 13.133 0 0 1 1.66-2.043C4.12 4.668 5.88 3.5 8 3.5c2.12 0 3.879 1.168 5.168 2.457A13.133 13.133 0 0 1 14.828 8c-.058.087-.122.183-.195.288-.335.48-.83 1.12-1.465 1.755C11.879 11.332 10.119 12.5 8 12.5c-2.12 0-3.879-1.168-5.168-2.457A13.134 13.134 0 0 1 1.172 8z"/>
+                        <path d="M8 5.5a2.5 2.5 0 1 0 0 5 2.5 2.5 0 0 0 0-5zM4.5 8a3.5 3.5 0 1 1 7 0 3.5 3.5 0 0 1-7 0z"/>
+                    </svg>
+                </a> / {{ endpoints_data.get(constraint.endpoint_priority.endpoint_id.endpoint_uuid.uuid, (constraint.endpoint_priority.endpoint_id.endpoint_uuid.uuid, ''))[0] }}
             </td>
             <td>{{ constraint.endpoint_priority.priority }}</td>
         </tr>
@@ -130,7 +141,7 @@
             <td>-</td>
             <td>
                 {{ constraint.sla_availability.num_disjoint_paths }} disjoint paths;
-                {% if constraint.sla_availability.all_active %}all{% else %}single{% endif %}active
+                {% if constraint.sla_availability.all_active %}all{% else %}single{% endif %}-active
             </td>
         </tr>
         {% else %}
@@ -206,7 +217,7 @@
         </tr>
     </thead>
     <tbody>
-        {% for connection in connections.connections %}
+        {% for connection in connections %}
         <tr>
             <td>
                 {{ connection.connection_id.connection_uuid.uuid }}
@@ -231,10 +242,15 @@
                 </ul>
             </td>
 
-            {% for i in range(connection.path_hops_endpoint_ids|length) %}
+            {% for endpoint_id in connection.path_hops_endpoint_ids %}
             <td>
-                {{ connection.path_hops_endpoint_ids[i].device_id.device_uuid.uuid }} / {{
-                connection.path_hops_endpoint_ids[i].endpoint_uuid.uuid }}
+                <a href="{{ url_for('device.detail', device_uuid=endpoint_id.device_id.device_uuid.uuid) }}">
+                    {{ device_names.get(endpoint_id.device_id.device_uuid.uuid, endpoint_id.device_id.device_uuid.uuid) }}
+                    <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-eye" viewBox="0 0 16 16">
+                        <path d="M16 8s-3-5.5-8-5.5S0 8 0 8s3 5.5 8 5.5S16 8 16 8zM1.173 8a13.133 13.133 0 0 1 1.66-2.043C4.12 4.668 5.88 3.5 8 3.5c2.12 0 3.879 1.168 5.168 2.457A13.133 13.133 0 0 1 14.828 8c-.058.087-.122.183-.195.288-.335.48-.83 1.12-1.465 1.755C11.879 11.332 10.119 12.5 8 12.5c-2.12 0-3.879-1.168-5.168-2.457A13.134 13.134 0 0 1 1.172 8z"/>
+                        <path d="M8 5.5a2.5 2.5 0 1 0 0 5 2.5 2.5 0 0 0 0-5zM4.5 8a3.5 3.5 0 1 1 7 0 3.5 3.5 0 0 1-7 0z"/>
+                    </svg>
+                </a> / {{ endpoints_data.get(endpoint_id.endpoint_uuid.uuid, (endpoint_id.endpoint_uuid.uuid, ''))[0] }}
             </td>
             {% endfor %}
         </tr>
diff --git a/src/webui/service/templates/service/home.html b/src/webui/service/templates/service/home.html
index 280685fc537af1b0eafd4d04056f4e4b0ed48e48..785012422b66039a8c42dbd3a7e4da1ce101bb1e 100644
--- a/src/webui/service/templates/service/home.html
+++ b/src/webui/service/templates/service/home.html
@@ -69,7 +69,17 @@
                     <td>
                         <ul>
                             {% for end_point in service.service_endpoint_ids %}
-                            <li>{{ end_point.device_id.device_uuid.uuid }} / {{ end_point.endpoint_uuid.uuid }}</li>
+                            <li>
+                                {{ endpoints_data.get(end_point.endpoint_uuid.uuid, (end_point.endpoint_uuid.uuid, ''))[0] }} / 
+                                Device: 
+                                <a href="{{ url_for('device.detail', device_uuid=end_point.device_id.device_uuid.uuid) }}">
+                                    {{ device_names.get(end_point.device_id.device_uuid.uuid, end_point.device_id.device_uuid.uuid) }}
+                                    <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-eye" viewBox="0 0 16 16">
+                                        <path d="M16 8s-3-5.5-8-5.5S0 8 0 8s3 5.5 8 5.5S16 8 16 8zM1.173 8a13.133 13.133 0 0 1 1.66-2.043C4.12 4.668 5.88 3.5 8 3.5c2.12 0 3.879 1.168 5.168 2.457A13.133 13.133 0 0 1 14.828 8c-.058.087-.122.183-.195.288-.335.48-.83 1.12-1.465 1.755C11.879 11.332 10.119 12.5 8 12.5c-2.12 0-3.879-1.168-5.168-2.457A13.134 13.134 0 0 1 1.172 8z"/>
+                                        <path d="M8 5.5a2.5 2.5 0 1 0 0 5 2.5 2.5 0 0 0 0-5zM4.5 8a3.5 3.5 0 1 1 7 0 3.5 3.5 0 0 1-7 0z"/>
+                                    </svg>
+                                </a>
+                            </li>
                             {% endfor %}
                         </ul>
                     </td>
diff --git a/src/webui/service/templates/slice/detail.html b/src/webui/service/templates/slice/detail.html
index 4f26c75a50138df4fe1ff0806d250a5906e8cfd3..92be94849814ba48e9b650099727244274f39206 100644
--- a/src/webui/service/templates/slice/detail.html
+++ b/src/webui/service/templates/slice/detail.html
@@ -56,26 +56,27 @@
                 <tr>
                     <th scope="col">Endpoint UUID</th>
                     <th scope="col">Device</th>
+                    <th scope="col">Endpoint Type</th>
                 </tr>
             </thead>
             <tbody>
                 {% for endpoint in slice.slice_endpoint_ids %}
                 <tr>
                     <td>
-                        {{ endpoint.endpoint_uuid.uuid }}
+                        {{ endpoints_data.get(endpoint.endpoint_uuid.uuid, (endpoint.endpoint_uuid.uuid, ''))[0] }}
                     </td>
                     <td>
                         <a href="{{ url_for('device.detail', device_uuid=endpoint.device_id.device_uuid.uuid) }}">
-                            {{ endpoint.device_id.device_uuid.uuid }}
-                            <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"
-                                class="bi bi-eye" viewBox="0 0 16 16">
-                                <path
-                                    d="M16 8s-3-5.5-8-5.5S0 8 0 8s3 5.5 8 5.5S16 8 16 8zM1.173 8a13.133 13.133 0 0 1 1.66-2.043C4.12 4.668 5.88 3.5 8 3.5c2.12 0 3.879 1.168 5.168 2.457A13.133 13.133 0 0 1 14.828 8c-.058.087-.122.183-.195.288-.335.48-.83 1.12-1.465 1.755C11.879 11.332 10.119 12.5 8 12.5c-2.12 0-3.879-1.168-5.168-2.457A13.134 13.134 0 0 1 1.172 8z" />
-                                <path
-                                    d="M8 5.5a2.5 2.5 0 1 0 0 5 2.5 2.5 0 0 0 0-5zM4.5 8a3.5 3.5 0 1 1 7 0 3.5 3.5 0 0 1-7 0z" />
+                            {{ device_names.get(endpoint.device_id.device_uuid.uuid, endpoint.device_id.device_uuid.uuid) }}
+                            <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-eye" viewBox="0 0 16 16">
+                                <path d="M16 8s-3-5.5-8-5.5S0 8 0 8s3 5.5 8 5.5S16 8 16 8zM1.173 8a13.133 13.133 0 0 1 1.66-2.043C4.12 4.668 5.88 3.5 8 3.5c2.12 0 3.879 1.168 5.168 2.457A13.133 13.133 0 0 1 14.828 8c-.058.087-.122.183-.195.288-.335.48-.83 1.12-1.465 1.755C11.879 11.332 10.119 12.5 8 12.5c-2.12 0-3.879-1.168-5.168-2.457A13.134 13.134 0 0 1 1.172 8z"/>
+                                <path d="M8 5.5a2.5 2.5 0 1 0 0 5 2.5 2.5 0 0 0 0-5zM4.5 8a3.5 3.5 0 1 1 7 0 3.5 3.5 0 0 1-7 0z"/>
                             </svg>
                         </a>
                     </td>
+                    <td>
+                        {{ endpoints_data.get(endpoint.endpoint_uuid.uuid, ('', '-'))[1] }}
+                    </td>
                 </tr>
                 {% endfor %}
             </tbody>
@@ -103,8 +104,13 @@
         <tr>
             <td>Endpoint Location</td>
             <td>
-                {{ constraint.endpoint_location.endpoint_id.device_id.device_uuid.uuid }} / {{
-                constraint.endpoint_location.endpoint_id.endpoint_uuid.uuid }}
+                <a href="{{ url_for('device.detail', device_uuid=constraint.endpoint_location.endpoint_id.device_id.device_uuid.uuid) }}">
+                    {{ device_names.get(constraint.endpoint_location.endpoint_id.device_id.device_uuid.uuid, constraint.endpoint_location.endpoint_id.device_id.device_uuid.uuid) }}
+                    <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-eye" viewBox="0 0 16 16">
+                        <path d="M16 8s-3-5.5-8-5.5S0 8 0 8s3 5.5 8 5.5S16 8 16 8zM1.173 8a13.133 13.133 0 0 1 1.66-2.043C4.12 4.668 5.88 3.5 8 3.5c2.12 0 3.879 1.168 5.168 2.457A13.133 13.133 0 0 1 14.828 8c-.058.087-.122.183-.195.288-.335.48-.83 1.12-1.465 1.755C11.879 11.332 10.119 12.5 8 12.5c-2.12 0-3.879-1.168-5.168-2.457A13.134 13.134 0 0 1 1.172 8z"/>
+                        <path d="M8 5.5a2.5 2.5 0 1 0 0 5 2.5 2.5 0 0 0 0-5zM4.5 8a3.5 3.5 0 1 1 7 0 3.5 3.5 0 0 1-7 0z"/>
+                    </svg>
+                </a> / {{ endpoints_data.get(constraint.endpoint_location.endpoint_id.endpoint_uuid.uuid, (constraint.endpoint_location.endpoint_id.endpoint_uuid.uuid, ''))[0] }}
             </td>
             <td>
                 {% if constraint.endpoint_location.location.WhichOneof('location')=='region' %}
@@ -120,8 +126,13 @@
         <tr>
             <td>Endpoint Priority</td>
             <td>
-                {{ constraint.endpoint_priority.endpoint_id.device_id.device_uuid.uuid }} / {{
-                constraint.endpoint_priority.endpoint_id.endpoint_uuid.uuid }}
+                <a href="{{ url_for('device.detail', device_uuid=constraint.endpoint_priority.endpoint_id.device_id.device_uuid.uuid) }}">
+                    {{ device_names.get(constraint.endpoint_priority.endpoint_id.device_id.device_uuid.uuid, constraint.endpoint_priority.endpoint_id.device_id.device_uuid.uuid) }}
+                    <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-eye" viewBox="0 0 16 16">
+                        <path d="M16 8s-3-5.5-8-5.5S0 8 0 8s3 5.5 8 5.5S16 8 16 8zM1.173 8a13.133 13.133 0 0 1 1.66-2.043C4.12 4.668 5.88 3.5 8 3.5c2.12 0 3.879 1.168 5.168 2.457A13.133 13.133 0 0 1 14.828 8c-.058.087-.122.183-.195.288-.335.48-.83 1.12-1.465 1.755C11.879 11.332 10.119 12.5 8 12.5c-2.12 0-3.879-1.168-5.168-2.457A13.134 13.134 0 0 1 1.172 8z"/>
+                        <path d="M8 5.5a2.5 2.5 0 1 0 0 5 2.5 2.5 0 0 0 0-5zM4.5 8a3.5 3.5 0 1 1 7 0 3.5 3.5 0 0 1-7 0z"/>
+                    </svg>
+                </a> / {{ endpoints_data.get(constraint.endpoint_priority.endpoint_id.endpoint_uuid.uuid, (constraint.endpoint_priority.endpoint_id.endpoint_uuid.uuid, ''))[0] }}
             </td>
             <td>{{ constraint.endpoint_priority.priority }}</td>
         </tr>
diff --git a/src/webui/service/templates/slice/home.html b/src/webui/service/templates/slice/home.html
index 141234acadfc4dac61070e55ac9b161bbb01e2b2..59ad1750bf201b594c52cf29032cb37d67ce1d32 100644
--- a/src/webui/service/templates/slice/home.html
+++ b/src/webui/service/templates/slice/home.html
@@ -46,8 +46,18 @@
                     <td>{{ slice.name }}</td>
                     <td>
                         <ul>
-                        {% for i in range(slice.slice_endpoint_ids|length) %}
-                            <li> {{ slice.slice_endpoint_ids[i].device_id.device_uuid.uuid }} / {{ slice.slice_endpoint_ids[i].endpoint_uuid.uuid }} </li>
+                        {% for end_point in slice.slice_endpoint_ids %}
+                            <li>
+                                {{ endpoints_data.get(end_point.endpoint_uuid.uuid, (end_point.endpoint_uuid.uuid, ''))[0] }} / 
+                                Device: 
+                                <a href="{{ url_for('device.detail', device_uuid=end_point.device_id.device_uuid.uuid) }}">
+                                    {{ device_names.get(end_point.device_id.device_uuid.uuid, end_point.device_id.device_uuid.uuid) }}
+                                    <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-eye" viewBox="0 0 16 16">
+                                        <path d="M16 8s-3-5.5-8-5.5S0 8 0 8s3 5.5 8 5.5S16 8 16 8zM1.173 8a13.133 13.133 0 0 1 1.66-2.043C4.12 4.668 5.88 3.5 8 3.5c2.12 0 3.879 1.168 5.168 2.457A13.133 13.133 0 0 1 14.828 8c-.058.087-.122.183-.195.288-.335.48-.83 1.12-1.465 1.755C11.879 11.332 10.119 12.5 8 12.5c-2.12 0-3.879-1.168-5.168-2.457A13.134 13.134 0 0 1 1.172 8z"/>
+                                        <path d="M8 5.5a2.5 2.5 0 1 0 0 5 2.5 2.5 0 0 0 0-5zM4.5 8a3.5 3.5 0 1 1 7 0 3.5 3.5 0 0 1-7 0z"/>
+                                    </svg>
+                                </a>
+                            </li>
                         {% endfor %}
                         </ul>
                     </td>