diff --git a/src/main/java/org/onosproject/cordvtn/CordVtn.java b/src/main/java/org/onosproject/cordvtn/CordVtn.java
index 0104c71..c7a7c79 100644
--- a/src/main/java/org/onosproject/cordvtn/CordVtn.java
+++ b/src/main/java/org/onosproject/cordvtn/CordVtn.java
@@ -38,7 +38,6 @@
 import org.onosproject.net.Host;
 import org.onosproject.net.HostId;
 import org.onosproject.net.Port;
-import org.onosproject.net.PortNumber;
 import org.onosproject.net.behaviour.BridgeConfig;
 import org.onosproject.net.behaviour.BridgeName;
 import org.onosproject.net.behaviour.ControllerInfo;
@@ -77,7 +76,6 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.NoSuchElementException;
 import java.util.Objects;
 import java.util.Set;
 import java.util.concurrent.ExecutorService;
@@ -492,14 +490,9 @@
      * @return cordvtn node, null if it fails to find the node
      */
     private CordVtnNode getNodeByOvsdbId(DeviceId ovsdbId) {
-        try {
-            return getNodes().stream()
-                    .filter(node -> node.ovsdbId().equals(ovsdbId))
-                    .findFirst().get();
-        } catch (NoSuchElementException e) {
-            log.debug("Couldn't find node information for {}", ovsdbId);
-            return null;
-        }
+        return getNodes().stream()
+                .filter(node -> node.ovsdbId().equals(ovsdbId))
+                .findFirst().orElse(null);
     }
 
     /**
@@ -509,14 +502,9 @@
      * @return cordvtn node, null if it fails to find the node
      */
     private CordVtnNode getNodeByBridgeId(DeviceId bridgeId) {
-        try {
-            return getNodes().stream()
-                    .filter(node -> node.intBrId().equals(bridgeId))
-                    .findFirst().get();
-        } catch (NoSuchElementException e) {
-            log.debug("Couldn't find node information for {}", bridgeId);
-            return null;
-        }
+        return getNodes().stream()
+                .filter(node -> node.intBrId().equals(bridgeId))
+                .findFirst().orElse(null);
     }
 
     /**
@@ -620,16 +608,11 @@
      * @return true if the interface exists, false otherwise
      */
     private boolean checkTunnelInterface(CordVtnNode node) {
-        try {
-            deviceService.getPorts(node.intBrId())
-                    .stream()
-                    .filter(p -> getPortName(p).contains(DEFAULT_TUNNEL)
-                            && p.isEnabled())
-                    .findAny().get();
-            return true;
-        } catch (NoSuchElementException e) {
-            return false;
-        }
+        return deviceService.getPorts(node.intBrId())
+                .stream()
+                .filter(p -> getPortName(p).contains(DEFAULT_TUNNEL)
+                        && p.isEnabled())
+                .findAny().isPresent();
     }
 
     /**
@@ -639,33 +622,11 @@
      * @return true if the interface exists, false otherwise
      */
     private boolean checkPhyInterface(CordVtnNode node) {
-        try {
-            deviceService.getPorts(node.intBrId())
-                    .stream()
-                    .filter(p -> getPortName(p).contains(node.phyPortName())
-                            && p.isEnabled())
-                    .findAny().get();
-            return true;
-        } catch (NoSuchElementException e) {
-            return false;
-        }
-    }
-
-    /**
-     * Returns tunnel port of the device.
-     *
-     * @param bridgeId device id
-     * @return port number, null if no tunnel port exists on a given device
-     */
-    private PortNumber getTunnelPort(DeviceId bridgeId) {
-        try {
-            return deviceService.getPorts(bridgeId).stream()
-                    .filter(p -> getPortName(p).contains(DEFAULT_TUNNEL)
-                            && p.isEnabled())
-                    .findFirst().get().number();
-        } catch (NoSuchElementException e) {
-            return null;
-        }
+        return deviceService.getPorts(node.intBrId())
+                .stream()
+                .filter(p -> getPortName(p).contains(node.phyPortName())
+                        && p.isEnabled())
+                .findAny().isPresent();
     }
 
     /**
@@ -679,6 +640,7 @@
         if (node != null) {
             return node.localIp().getIp4Address();
         } else {
+            log.debug("Couldn't find node information for {}", bridgeId);
             return null;
         }
     }
@@ -897,6 +859,8 @@
             CordVtnNode node = getNodeByOvsdbId(device.id());
             if (node != null) {
                 setNodeState(node, checkNodeState(node));
+            } else {
+                log.debug("Unregistered device {} connected, ignore it.", device.id());
             }
         }
 
@@ -915,6 +879,8 @@
             CordVtnNode node = getNodeByBridgeId(device.id());
             if (node != null) {
                 setNodeState(node, checkNodeState(node));
+            } else {
+                log.debug("Unregistered device {} connected, ignore it.", device.id());
             }
         }
 
@@ -938,6 +904,8 @@
             CordVtnNode node = getNodeByBridgeId((DeviceId) port.element().id());
             if (node == null) {
                 return;
+            } else {
+                log.debug("Port {} added to unregistered device, ignore it.", getPortName(port));
             }
 
             // TODO add host by updating network config
diff --git a/src/main/java/org/onosproject/cordvtn/CordVtnRuleInstaller.java b/src/main/java/org/onosproject/cordvtn/CordVtnRuleInstaller.java
index dd76ea9..ef310c7 100644
--- a/src/main/java/org/onosproject/cordvtn/CordVtnRuleInstaller.java
+++ b/src/main/java/org/onosproject/cordvtn/CordVtnRuleInstaller.java
@@ -33,6 +33,7 @@
 import org.onosproject.net.Device;
 import org.onosproject.net.DeviceId;
 import org.onosproject.net.Host;
+import org.onosproject.net.Port;
 import org.onosproject.net.PortNumber;
 import org.onosproject.net.behaviour.ExtensionTreatmentResolver;
 import org.onosproject.net.device.DeviceService;
@@ -75,7 +76,6 @@
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
-import java.util.NoSuchElementException;
 import java.util.Objects;
 import java.util.Set;
 import java.util.stream.Collectors;
@@ -828,13 +828,11 @@
      * @return tunnel port number, or null if no tunnel port exists on a given device
      */
     private PortNumber getTunnelPort(DeviceId deviceId) {
-        try {
-            return deviceService.getPorts(deviceId).stream()
+        Port port = deviceService.getPorts(deviceId).stream()
                     .filter(p -> p.annotations().value("portName").contains(tunnelType))
-                    .findFirst().get().number();
-        } catch (NoSuchElementException e) {
-            return null;
-        }
+                    .findFirst().orElse(null);
+
+        return port == null ? null : port.number();
     }
 
     /**
@@ -845,14 +843,12 @@
      * @return physical port number, or null if no physical port exists
      */
     private PortNumber getPhyPort(DeviceId deviceId, String phyPortName) {
-        try {
-            return deviceService.getPorts(deviceId).stream()
+        Port port = deviceService.getPorts(deviceId).stream()
                     .filter(p -> p.annotations().value("portName").contains(phyPortName) &&
                             p.isEnabled())
-                    .findFirst().get().number();
-        } catch (NoSuchElementException e) {
-            return null;
-        }
+                    .findFirst().orElse(null);
+
+        return port == null ? null : port.number();
     }
 
     /**
