diff --git a/src/main/java/org/onosproject/cordvtn/CordVtn.java b/src/main/java/org/onosproject/cordvtn/CordVtn.java
index 4672912..7503c08 100644
--- a/src/main/java/org/onosproject/cordvtn/CordVtn.java
+++ b/src/main/java/org/onosproject/cordvtn/CordVtn.java
@@ -291,17 +291,9 @@
 
     @Override
     public void removeServiceVm(ConnectPoint connectPoint) {
-        Host host = hostService.getConnectedHosts(connectPoint)
+        hostService.getConnectedHosts(connectPoint)
                 .stream()
-                .findFirst()
-                .orElse(null);
-
-        if (host == null) {
-            log.debug("No host is connected on {}", connectPoint.toString());
-            return;
-        }
-
-        hostProvider.hostVanished(host.id());
+                .forEach(host -> hostProvider.hostVanished(host.id()));
     }
 
     @Override
@@ -322,6 +314,14 @@
                         entry.getValue(),
                         serviceVlan));
 
+        hostService.getConnectedHosts(vSgVm.location()).stream()
+                .filter(host -> !host.mac().equals(vSgVm.mac()))
+                .filter(host -> !vSgs.values().contains(host.mac()))
+                .forEach(host -> {
+                    log.info("Removed vSG {}", host.toString());
+                    hostProvider.hostVanished(host.id());
+                });
+
         ruleInstaller.populateSubscriberGatewayRules(vSgVm, vSgs.keySet());
     }
 
@@ -333,11 +333,12 @@
      * @param vSgMac vSG mac address
      * @param serviceVlan service vlan
      */
-    public void addVirtualSubscriberGateway(Host vSgHost, IpAddress vSgIp, MacAddress vSgMac, String serviceVlan) {
+    private void addVirtualSubscriberGateway(Host vSgHost, IpAddress vSgIp, MacAddress vSgMac,
+                                             String serviceVlan) {
         HostId hostId = HostId.hostId(vSgMac);
         Host host = hostService.getHost(hostId);
         if (host != null) {
-            log.debug("vSG with {} already exists", vSgMac.toString());
+            log.trace("vSG with {} already exists", vSgMac.toString());
             return;
         }
 
@@ -524,7 +525,7 @@
     private void serviceVmAdded(Host host) {
         String vNetId = host.annotations().value(SERVICE_ID);
         if (vNetId == null) {
-            // ignore this host, it not a VM we injected or a vSG
+            // ignore this host, it is not the service VM, or it's a vSG
             return;
         }
 
@@ -583,12 +584,16 @@
      * @param host host
      */
     private void serviceVmRemoved(Host host) {
-        if (host.annotations().value(OPENSTACK_VM_ID) == null) {
-            // this host was not injected from CordVtn, just return
+        String vNetId = host.annotations().value(SERVICE_ID);
+        if (vNetId == null) {
+            // ignore it, it's not the service VM or it's a vSG
+            String serviceVlan = host.annotations().value(S_TAG);
+            if (serviceVlan != null) {
+                log.info("vSG {} removed", host.id());
+            }
             return;
         }
 
-        String vNetId = host.annotations().value(SERVICE_ID);
         OpenstackNetwork vNet = openstackService.network(vNetId);
         if (vNet == null) {
             log.warn("Failed to get OpenStack network {} for VM {}({}).",
diff --git a/src/main/java/org/onosproject/cordvtn/CordVtnArpProxy.java b/src/main/java/org/onosproject/cordvtn/CordVtnArpProxy.java
index 9d20e55..82f5dd3 100644
--- a/src/main/java/org/onosproject/cordvtn/CordVtnArpProxy.java
+++ b/src/main/java/org/onosproject/cordvtn/CordVtnArpProxy.java
@@ -233,7 +233,7 @@
                 .orElse(null);
 
         if (host != null) {
-            log.debug("Found MAC from host service for {}", targetIp.toString());
+            log.trace("Found MAC from host service for {}", targetIp.toString());
             return host.mac();
         } else {
             return MacAddress.NONE;
