diff --git a/apps/openstacknode/api/src/main/java/org/onosproject/openstacknode/api/OpenstackNode.java b/apps/openstacknode/api/src/main/java/org/onosproject/openstacknode/api/OpenstackNode.java
index 2ecfefe..1b8316d 100644
--- a/apps/openstacknode/api/src/main/java/org/onosproject/openstacknode/api/OpenstackNode.java
+++ b/apps/openstacknode/api/src/main/java/org/onosproject/openstacknode/api/OpenstackNode.java
@@ -123,7 +123,7 @@
     PortNumber tunnelPortNum();
 
     /**
-     * Returns the vlan port nubmer.
+     * Returns the vlan port number.
      *
      * @return port number; null if vlan port does not exist
      */
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 f208529..8681008 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
@@ -52,8 +52,22 @@
     private final String uplinkPort;
     private final NodeState state;
 
+    private static final String NOT_NULL_MSG = "Node % cannot be null";
+
     private static final String OVSDB = "ovsdb:";
 
+    /**
+     * A default constructor of Openstack Node.
+     *
+     * @param hostname      hostname
+     * @param type          node type
+     * @param intgBridge    integration bridge
+     * @param managementIp  management IP address
+     * @param dataIp        data IP address
+     * @param vlanIntf      VLAN interface
+     * @param uplinkPort    uplink port name
+     * @param state         node state
+     */
     protected DefaultOpenstackNode(String hostname, NodeType type,
                                    DeviceId intgBridge,
                                    IpAddress managementIp,
@@ -279,6 +293,9 @@
                 .state(osNode.state());
     }
 
+    /**
+     * A builder class for openstack Node.
+     */
     public static final class Builder implements OpenstackNode.Builder {
 
         private String hostname;
@@ -290,16 +307,17 @@
         private String uplinkPort;
         private NodeState state;
 
+        // private constructor not intended to use from external
         private Builder() {
         }
 
         @Override
         public DefaultOpenstackNode build() {
-            checkArgument(hostname != null, "Node hostname cannot be null");
-            checkArgument(type != null, "Node type cannot be null");
-            checkArgument(intgBridge != null, "Node integration bridge cannot be null");
-            checkArgument(managementIp != null, "Node management IP cannot be null");
-            checkArgument(state != null, "Node state cannot be null");
+            checkArgument(hostname != null, NOT_NULL_MSG, "hostname");
+            checkArgument(type != null, NOT_NULL_MSG, "type");
+            checkArgument(intgBridge != null, NOT_NULL_MSG, "integration bridge");
+            checkArgument(managementIp != null, NOT_NULL_MSG, "management IP");
+            checkArgument(state != null, NOT_NULL_MSG, "state");
 
             if (type == NodeType.GATEWAY && uplinkPort == null) {
                 throw new IllegalArgumentException("Uplink port is required for gateway node");
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 7b8cda1..397ff37 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
@@ -208,7 +208,7 @@
                 addSystemInterface(osNode, INTEGRATION_BRIDGE, osNode.vlanIntf());
             }
         } catch (Exception e) {
-            log.error("Exception occured because of {}", e.toString());
+            log.error("Exception occurred because of {}", e.toString());
         }
     }
 
@@ -226,6 +226,13 @@
         //TODO
     }
 
+    /**
+     * Checks whether the controller has a connection with an OVSDB that resides
+     * inside the given openstack node.
+     *
+     * @param osNode openstack node
+     * @return true if the controller is connected to the OVSDB, false otherwise
+     */
     private boolean isOvsdbConnected(OpenstackNode osNode) {
         OvsdbNodeId ovsdb = new OvsdbNodeId(osNode.managementIp(), ovsdbPort);
         OvsdbClientService client = ovsdbController.getOvsdbClient(ovsdb);
@@ -234,6 +241,13 @@
                 client.isConnected();
     }
 
+    /**
+     * Creates a bridge with a given name on a given openstack node.
+     *
+     * @param osNode openstack node
+     * @param bridgeName bridge name
+     * @param deviceId device identifier
+     */
     private void createBridge(OpenstackNode osNode, String bridgeName, DeviceId deviceId) {
         Device device = deviceService.getDevice(osNode.ovsdb());
         if (device == null || !device.is(BridgeConfig.class)) {
@@ -263,6 +277,13 @@
         bridgeConfig.addBridge(bridgeDesc);
     }
 
+    /**
+     * Adds a network interface (aka port) into a given bridge of openstack node.
+     *
+     * @param osNode openstack node
+     * @param bridgeName bridge name
+     * @param intfName interface name
+     */
     private void addSystemInterface(OpenstackNode osNode, String bridgeName, String intfName) {
         Device device = deviceService.getDevice(osNode.ovsdb());
         if (device == null || !device.is(BridgeConfig.class)) {
@@ -272,6 +293,11 @@
         bridgeConfig.addPort(BridgeName.bridgeName(bridgeName), intfName);
     }
 
+    /**
+     * Creates a tunnel interface in a given openstack node.
+     *
+     * @param osNode openstack node
+     */
     private void createTunnelInterface(OpenstackNode osNode) {
         if (isIntfEnabled(osNode, DEFAULT_TUNNEL)) {
             return;
@@ -317,6 +343,13 @@
         }
     }
 
+    /**
+     * Checks whether a given network interface in a given openstack node is enabled or not.
+     *
+     * @param osNode openstack node
+     * @param intf network interface name
+     * @return true if the given interface is enabled, false otherwise
+     */
     private boolean isIntfEnabled(OpenstackNode osNode, String intf) {
         if (!deviceService.isAvailable(osNode.intgBridge())) {
             return false;
@@ -327,6 +360,12 @@
                         port.isEnabled());
     }
 
+    /**
+     * Checks whether all requirements for this state are fulfilled or not.
+     *
+     * @param osNode openstack node
+     * @return true if all requirements are fulfilled, false otherwise
+     */
     private boolean isCurrentStateDone(OpenstackNode osNode) {
         switch (osNode.state()) {
             case INIT:
@@ -359,6 +398,12 @@
         }
     }
 
+    /**
+     * Configures the openstack node with new state.
+     *
+     * @param osNode openstack node
+     * @param newState a new state
+     */
     private void setState(OpenstackNode osNode, NodeState newState) {
         if (osNode.state() == newState) {
             return;
@@ -368,6 +413,11 @@
         log.info("Changed {} state: {}", osNode.hostname(), newState);
     }
 
+    /**
+     * Bootstraps a new openstack node.
+     *
+     * @param osNode openstack node
+     */
     private void bootstrapNode(OpenstackNode osNode) {
         if (isCurrentStateDone(osNode)) {
             setState(osNode, osNode.state().nextState());
@@ -377,6 +427,11 @@
         }
     }
 
+    /**
+     * An internal OVSDB listener. This listener is used for listening the
+     * network facing events from OVSDB device. If a new OVSDB device is detected,
+     * ONOS tries to bootstrap the openstack node.
+     */
     private class InternalOvsdbListener implements DeviceListener {
 
         @Override
@@ -415,6 +470,12 @@
         }
     }
 
+    /**
+     * An internal integration bridge listener. This listener is used for
+     * listening the events from integration bridge. To listen the events from
+     * other types of bridge such as provider bridge or tunnel bridge, we need
+     * to augment OpenstackNodeService.node() method.
+     */
     private class InternalBridgeListener implements DeviceListener {
 
         @Override
@@ -478,6 +539,10 @@
         }
     }
 
+    /**
+     * An internal openstack node listener.
+     * The notification is triggered by OpenstackNodeStore.
+     */
     private class InternalOpenstackNodeListener implements OpenstackNodeListener {
 
         @Override
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 b636152..ea21db5 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
@@ -148,6 +148,9 @@
         return osNode == null ? null : osNode.value();
     }
 
+    /**
+     * An internal openstack node map listener.
+     */
     private class OpenstackNodeMapListener implements MapEventListener<String, OpenstackNode> {
 
         @Override
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 f3ece18..1202d49 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
@@ -25,7 +25,6 @@
 import org.apache.felix.scr.annotations.Service;
 import org.onosproject.cluster.ClusterService;
 import org.onosproject.cluster.LeadershipService;
-import org.onosproject.cluster.NodeId;
 import org.onosproject.core.ApplicationId;
 import org.onosproject.core.CoreService;
 import org.onosproject.event.ListenerRegistry;
@@ -87,14 +86,12 @@
     private final OpenstackNodeStoreDelegate delegate = new InternalNodeStoreDelegate();
 
     private ApplicationId appId;
-    private NodeId localNode;
 
     @Activate
     protected void activate() {
         appId = coreService.registerApplication(APP_ID);
         osNodeStore.setDelegate(delegate);
 
-        localNode = clusterService.getLocalNode().id();
         leadershipService.runForLeadership(appId.name());
 
         log.info("Started");
