diff --git a/src/webui/service/device/routes.py b/src/webui/service/device/routes.py
index 16b86c769c5af1b69db4b669f5689043d03536bd..977f0ec4bd2be791a2379492773142b3d0dd8599 100644
--- a/src/webui/service/device/routes.py
+++ b/src/webui/service/device/routes.py
@@ -184,20 +184,21 @@ def logical(device_uuid: str):
 @device.get('<path:device_uuid>/delete')
 def delete(device_uuid):
     try:
+        context_client.connect()
+
+        device_obj = get_device(
+            context_client, device_uuid, rw_copy=False, include_components=False,
+            include_config_rules=False, include_endpoints=False
+        )
+        if device_obj is None:
+            flash('Device({:s}) not found'.format(str(device_uuid)), 'danger')
+        else:
+            device_client.connect()
+            device_client.DeleteDevice(device_obj.device_id)
+            device_client.close()
+            flash(f'Device "{device_uuid}" deleted successfully!', 'success')
 
-        # first, check if device exists!
-        # request: DeviceId = DeviceId()
-        # request.device_uuid.uuid = device_uuid
-        # response: Device = client.GetDevice(request)
-        # TODO: finalize implementation
-
-        request = DeviceId()
-        request.device_uuid.uuid = device_uuid # pylint: disable=no-member
-        device_client.connect()
-        device_client.DeleteDevice(request)
-        device_client.close()
-
-        flash(f'Device "{device_uuid}" deleted successfully!', 'success')
+        context_client.close()
     except Exception as e: # pylint: disable=broad-except
         flash(f'Problem deleting device "{device_uuid}": {e.details()}', 'danger')
         current_app.logger.exception(e)
diff --git a/src/webui/service/link/routes.py b/src/webui/service/link/routes.py
index 42f5984a3c0957a0740690ad6e37bed7438449b7..34b2af27ff3015bef72262e4a517c9c96dbc6093 100644
--- a/src/webui/service/link/routes.py
+++ b/src/webui/service/link/routes.py
@@ -21,10 +21,12 @@ from common.tools.context_queries.EndPoint import get_endpoint_names
 from common.tools.context_queries.Link import get_link
 from common.tools.context_queries.Topology import get_topology
 from context.client.ContextClient import ContextClient
+from vnt_manager.client.VNTManagerClient import VNTManagerClient
 
 
 link = Blueprint('link', __name__, url_prefix='/link')
 context_client = ContextClient()
+vntm_client = VNTManagerClient()
 
 @link.get('/')
 def home():
@@ -77,20 +79,20 @@ def detail(link_uuid: str):
 @link.get('<path:link_uuid>/delete')
 def delete(link_uuid):
     try:
+        context_client.connect()
 
-        # first, check if link exists!
-        # request: LinkId = LinkId()
-        # request.link_uuid.uuid = link_uuid
-        # response: Link = client.GetLink(request)
-        # TODO: finalize implementation
+        link_obj = get_link(context_client, link_uuid, rw_copy=False)
+        if link_obj is None:
+            flash('Link({:s}) not found'.format(str(link_uuid)), 'danger')
+        else:
+            link_type = link_obj.link_type
+            if link_type == LinkTypeEnum.LINKTYPE_VIRTUAL:
+                vntm_client.RemoveVirtualLink(link_obj.link_id)
+            else:
+                context_client.RemoveLink(link_obj.link_id)
+            flash(f'Link "{link_uuid}" deleted successfully!', 'success')
 
-        request = LinkId()
-        request.link_uuid.uuid = link_uuid # pylint: disable=no-member
-        context_client.connect()
-        context_client.RemoveLink(request)
         context_client.close()
-
-        flash(f'Link "{link_uuid}" deleted successfully!', 'success')
     except Exception as e: # pylint: disable=broad-except
         flash(f'Problem deleting link "{link_uuid}": {e.details()}', 'danger')
         current_app.logger.exception(e)