diff --git a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/cli/OpenstackNodeCheckCommand.java b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/cli/OpenstackNodeCheckCommand.java
index 3ad60ef..ff57b61 100644
--- a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/cli/OpenstackNodeCheckCommand.java
+++ b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/cli/OpenstackNodeCheckCommand.java
@@ -27,7 +27,8 @@
 import org.onosproject.openstacknode.api.OpenstackNodeService;
 
 import static org.onosproject.net.AnnotationKeys.PORT_NAME;
-import static org.onosproject.openstacknode.api.Constants.*;
+import static org.onosproject.openstacknode.api.Constants.DEFAULT_TUNNEL;
+import static org.onosproject.openstacknode.api.Constants.INTEGRATION_BRIDGE;
 
 /**
  * Checks detailed node init state.
diff --git a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/cli/OpenstackNodeInitCommand.java b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/cli/OpenstackNodeInitCommand.java
index 5cc3285..d620e37 100644
--- a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/cli/OpenstackNodeInitCommand.java
+++ b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/cli/OpenstackNodeInitCommand.java
@@ -25,9 +25,6 @@
 import org.onosproject.openstacknode.api.OpenstackNodeAdminService;
 import org.onosproject.openstacknode.api.OpenstackNodeService;
 
-import java.util.List;
-import java.util.stream.Collectors;
-
 /**
  * Initializes nodes for OpenStack node service.
  */
@@ -64,16 +61,12 @@
         }
 
         if (isAll) {
-            List<String> osNodes = osNodeService.nodes().stream()
-                    .map(OpenstackNode::hostname)
-                    .collect(Collectors.toList());
-            hostnames = osNodes.toArray(new String[osNodes.size()]);
+            hostnames = osNodeService.nodes().stream()
+                    .map(OpenstackNode::hostname).toArray(String[]::new);
         } else if (isIncomplete) {
-            List<String> osNodes = osNodeService.nodes().stream()
+            hostnames = osNodeService.nodes().stream()
                     .filter(osNode -> osNode.state() != NodeState.COMPLETE)
-                    .map(OpenstackNode::hostname)
-                    .collect(Collectors.toList());
-            hostnames = osNodes.toArray(new String[osNodes.size()]);
+                    .map(OpenstackNode::hostname).toArray(String[]::new);
         }
 
         for (String hostname : hostnames) {
diff --git a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/DefaultOpenstackNode.java b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/DefaultOpenstackNode.java
index 8681008..8927880 100644
--- a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/DefaultOpenstackNode.java
+++ b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/DefaultOpenstackNode.java
@@ -214,15 +214,13 @@
 
         if (obj instanceof DefaultOpenstackNode) {
             DefaultOpenstackNode that = (DefaultOpenstackNode) obj;
-            if (Objects.equals(hostname, that.hostname) &&
+            return Objects.equals(hostname, that.hostname) &&
                     Objects.equals(type, that.type) &&
                     Objects.equals(intgBridge, that.intgBridge) &&
                     Objects.equals(managementIp, that.managementIp) &&
                     Objects.equals(dataIp, that.dataIp) &&
                     Objects.equals(uplinkPort, that.uplinkPort) &&
-                    Objects.equals(vlanIntf, that.vlanIntf)) {
-                return true;
-            }
+                    Objects.equals(vlanIntf, that.vlanIntf);
         }
         return false;
     }
diff --git a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/DefaultOpenstackNodeHandler.java b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/DefaultOpenstackNodeHandler.java
index 397ff37..939b628 100644
--- a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/DefaultOpenstackNodeHandler.java
+++ b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/DefaultOpenstackNodeHandler.java
@@ -77,8 +77,11 @@
 import static org.onlab.util.Tools.groupedThreads;
 import static org.onosproject.net.AnnotationKeys.PORT_NAME;
 import static org.onosproject.net.flow.instructions.ExtensionTreatmentType.ExtensionTreatmentTypes.NICIRA_SET_TUNNEL_DST;
-import static org.onosproject.openstacknode.api.Constants.*;
-import static org.onosproject.openstacknode.api.NodeState.*;
+import static org.onosproject.openstacknode.api.Constants.DEFAULT_TUNNEL;
+import static org.onosproject.openstacknode.api.Constants.INTEGRATION_BRIDGE;
+import static org.onosproject.openstacknode.api.NodeState.COMPLETE;
+import static org.onosproject.openstacknode.api.NodeState.DEVICE_CREATED;
+import static org.onosproject.openstacknode.api.NodeState.INCOMPLETE;
 import static org.onosproject.openstacknode.api.OpenstackNode.NodeType.GATEWAY;
 import static org.onosproject.openstacknode.api.OpenstackNodeService.APP_ID;
 import static org.slf4j.LoggerFactory.getLogger;
@@ -89,7 +92,7 @@
 @Component(immediate = true)
 public class DefaultOpenstackNodeHandler implements OpenstackNodeHandler {
 
-    protected final Logger log = getLogger(getClass());
+    private final Logger log = getLogger(getClass());
 
     private static final String OVSDB_PORT = "ovsdbPortNum";
     private static final int DEFAULT_OVSDB_PORT = 6640;
@@ -351,13 +354,11 @@
      * @return true if the given interface is enabled, false otherwise
      */
     private boolean isIntfEnabled(OpenstackNode osNode, String intf) {
-        if (!deviceService.isAvailable(osNode.intgBridge())) {
-            return false;
-        }
-        return deviceService.getPorts(osNode.intgBridge()).stream()
-                .anyMatch(port -> Objects.equals(
-                        port.annotations().value(PORT_NAME), intf) &&
-                        port.isEnabled());
+        return deviceService.isAvailable(osNode.intgBridge()) &&
+                deviceService.getPorts(osNode.intgBridge()).stream()
+                        .anyMatch(port -> Objects.equals(
+                                port.annotations().value(PORT_NAME), intf) &&
+                                port.isEnabled());
     }
 
     /**
@@ -369,10 +370,7 @@
     private boolean isCurrentStateDone(OpenstackNode osNode) {
         switch (osNode.state()) {
             case INIT:
-                if (!deviceService.isAvailable(osNode.intgBridge())) {
-                    return false;
-                }
-                return true;
+                return deviceService.isAvailable(osNode.intgBridge());
             case DEVICE_CREATED:
                 if (osNode.dataIp() != null &&
                         !isIntfEnabled(osNode, DEFAULT_TUNNEL)) {
@@ -388,7 +386,6 @@
                 }
                 return true;
             case COMPLETE:
-                return false;
             case INCOMPLETE:
                 // always return false
                 // run init CLI to re-trigger node bootstrap
@@ -556,9 +553,7 @@
             switch (event.type()) {
                 case OPENSTACK_NODE_CREATED:
                 case OPENSTACK_NODE_UPDATED:
-                    eventExecutor.execute(() -> {
-                        bootstrapNode(event.subject());
-                    });
+                    eventExecutor.execute(() -> bootstrapNode(event.subject()));
                     break;
                 case OPENSTACK_NODE_COMPLETE:
                     break;
diff --git a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/DistributedOpenstackNodeStore.java b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/DistributedOpenstackNodeStore.java
index ea21db5..dd54eb7 100644
--- a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/DistributedOpenstackNodeStore.java
+++ b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/DistributedOpenstackNodeStore.java
@@ -49,7 +49,11 @@
 import static org.onlab.util.Tools.groupedThreads;
 import static org.onosproject.openstacknode.api.NodeState.COMPLETE;
 import static org.onosproject.openstacknode.api.NodeState.INCOMPLETE;
-import static org.onosproject.openstacknode.api.OpenstackNodeEvent.Type.*;
+import static org.onosproject.openstacknode.api.OpenstackNodeEvent.Type.OPENSTACK_NODE_COMPLETE;
+import static org.onosproject.openstacknode.api.OpenstackNodeEvent.Type.OPENSTACK_NODE_CREATED;
+import static org.onosproject.openstacknode.api.OpenstackNodeEvent.Type.OPENSTACK_NODE_INCOMPLETE;
+import static org.onosproject.openstacknode.api.OpenstackNodeEvent.Type.OPENSTACK_NODE_REMOVED;
+import static org.onosproject.openstacknode.api.OpenstackNodeEvent.Type.OPENSTACK_NODE_UPDATED;
 import static org.slf4j.LoggerFactory.getLogger;
 
 /**
@@ -61,7 +65,7 @@
         extends AbstractStore<OpenstackNodeEvent, OpenstackNodeStoreDelegate>
         implements OpenstackNodeStore {
 
-    protected final Logger log = getLogger(getClass());
+    private final Logger log = getLogger(getClass());
 
     private static final String ERR_NOT_FOUND = " does not exist";
     private static final String ERR_DUPLICATE = " already exists";
@@ -158,12 +162,10 @@
             switch (event.type()) {
                 case INSERT:
                     log.debug("OpenStack node created {}", event.newValue());
-                    eventExecutor.execute(() -> {
-                        notifyDelegate(new OpenstackNodeEvent(
-                                OPENSTACK_NODE_CREATED,
-                                event.newValue().value()
-                        ));
-                    });
+                    eventExecutor.execute(() ->
+                            notifyDelegate(new OpenstackNodeEvent(
+                                OPENSTACK_NODE_CREATED, event.newValue().value()
+                    )));
                     break;
                 case UPDATE:
                     log.debug("OpenStack node updated {}", event.newValue());
@@ -187,12 +189,10 @@
                     break;
                 case REMOVE:
                     log.debug("OpenStack node removed {}", event.oldValue());
-                    eventExecutor.execute(() -> {
-                        notifyDelegate(new OpenstackNodeEvent(
-                                OPENSTACK_NODE_REMOVED,
-                                event.oldValue().value()
-                        ));
-                    });
+                    eventExecutor.execute(() ->
+                            notifyDelegate(new OpenstackNodeEvent(
+                                OPENSTACK_NODE_REMOVED, event.oldValue().value()
+                    )));
                     break;
                 default:
                     // do nothing
diff --git a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/OpenstackNodeManager.java b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/OpenstackNodeManager.java
index 1202d49..fb8a871 100644
--- a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/OpenstackNodeManager.java
+++ b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/OpenstackNodeManager.java
@@ -58,7 +58,7 @@
 public class OpenstackNodeManager extends ListenerRegistry<OpenstackNodeEvent, OpenstackNodeListener>
         implements OpenstackNodeService, OpenstackNodeAdminService {
 
-    protected final Logger log = getLogger(getClass());
+    private final Logger log = getLogger(getClass());
 
     private static final String MSG_NODE = "OpenStack node %s %s";
     private static final String MSG_CREATED = "created";
@@ -166,11 +166,10 @@
 
     @Override
     public OpenstackNode node(DeviceId deviceId) {
-        OpenstackNode result = osNodeStore.nodes().stream()
+        return osNodeStore.nodes().stream()
                 .filter(osNode -> Objects.equals(osNode.intgBridge(), deviceId) ||
                         Objects.equals(osNode.ovsdb(), deviceId))
                 .findFirst().orElse(null);
-        return result;
     }
 
     private class InternalNodeStoreDelegate implements OpenstackNodeStoreDelegate {
diff --git a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/web/OpenstackNodeCodecRegister.java b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/web/OpenstackNodeCodecRegister.java
index 86947d8..70df974 100644
--- a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/web/OpenstackNodeCodecRegister.java
+++ b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/web/OpenstackNodeCodecRegister.java
@@ -38,14 +38,14 @@
     protected CodecService codecService;
 
     @Activate
-    public void activate() {
+    protected void activate() {
         codecService.registerCodec(OpenstackNode.class, new OpenstackNodeCodec());
 
         log.info("Started");
     }
 
     @Deactivate
-    public void deactivate() {
+    protected void deactivate() {
         codecService.unregisterCodec(OpenstackNode.class);
 
         log.info("Stopped");
