diff --git a/apps/openstacknetworking/network-cfg.json b/apps/openstacknetworking/network-cfg.json
index 703d0e9..76c5c09 100644
--- a/apps/openstacknetworking/network-cfg.json
+++ b/apps/openstacknetworking/network-cfg.json
@@ -19,6 +19,20 @@
                 "network": "oamnetwork",
                 "intf": "eth4"
               }
+            ],
+            "controllers": [
+              {
+                "ip": "10.10.10.2",
+                "port": 6653
+              },
+              {
+                "ip": "10.10.10.3",
+                "port": 6653
+              },
+              {
+                "ip": "10.10.10.4",
+                "port": 6653
+              }
             ]
           },
           {
diff --git a/apps/openstacknode/api/src/main/java/org/onosproject/openstacknode/api/DefaultOpenstackNode.java b/apps/openstacknode/api/src/main/java/org/onosproject/openstacknode/api/DefaultOpenstackNode.java
index f3a0246..fd8d3b6 100644
--- a/apps/openstacknode/api/src/main/java/org/onosproject/openstacknode/api/DefaultOpenstackNode.java
+++ b/apps/openstacknode/api/src/main/java/org/onosproject/openstacknode/api/DefaultOpenstackNode.java
@@ -24,6 +24,7 @@
 import org.onosproject.net.DeviceId;
 import org.onosproject.net.Port;
 import org.onosproject.net.PortNumber;
+import org.onosproject.net.behaviour.ControllerInfo;
 import org.onosproject.net.device.DeviceService;
 import org.onosproject.net.group.DefaultGroupKey;
 import org.onosproject.net.group.GroupKey;
@@ -53,6 +54,7 @@
     private final String uplinkPort;
     private final NodeState state;
     private final Collection<OpenstackPhyInterface> phyIntfs;
+    private final Collection<ControllerInfo> controllers;
     private final OpenstackAuth auth;
     private final String endPoint;
 
@@ -72,6 +74,7 @@
      * @param uplinkPort    uplink port name
      * @param state         node state
      * @param phyIntfs      physical interfaces
+     * @param controllers   customized controllers
      * @param auth          keystone authentication info
      * @param endPoint      openstack endpoint URL
      */
@@ -83,6 +86,7 @@
                                    String uplinkPort,
                                    NodeState state,
                                    Collection<OpenstackPhyInterface> phyIntfs,
+                                   Collection<ControllerInfo> controllers,
                                    OpenstackAuth auth,
                                    String endPoint) {
         this.hostname = hostname;
@@ -94,6 +98,7 @@
         this.uplinkPort = uplinkPort;
         this.state = state;
         this.phyIntfs = phyIntfs;
+        this.controllers = controllers;
         this.auth = auth;
         this.endPoint = endPoint;
     }
@@ -235,6 +240,7 @@
                     Objects.equals(uplinkPort, that.uplinkPort) &&
                     Objects.equals(vlanIntf, that.vlanIntf) &&
                     Objects.equals(phyIntfs, that.phyIntfs) &&
+                    Objects.equals(controllers, that.controllers) &&
                     Objects.equals(auth, that.auth) &&
                     Objects.equals(endPoint, that.endPoint);
         }
@@ -251,6 +257,7 @@
                 vlanIntf,
                 uplinkPort,
                 phyIntfs,
+                controllers,
                 auth,
                 endPoint);
     }
@@ -267,6 +274,7 @@
                 .add("uplinkPort", uplinkPort)
                 .add("state", state)
                 .add("phyIntfs", phyIntfs)
+                .add("controllers", controllers)
                 .add("auth", auth)
                 .add("endpoint", endPoint)
                 .toString();
@@ -284,6 +292,7 @@
                 .uplinkPort(uplinkPort)
                 .state(newState)
                 .phyIntfs(phyIntfs)
+                .controllers(controllers)
                 .authentication(auth)
                 .endPoint(endPoint)
                 .build();
@@ -299,6 +308,16 @@
         return phyIntfs;
     }
 
+
+    @Override
+    public Collection<ControllerInfo> controllers() {
+        if (controllers == null) {
+            return new ArrayList<>();
+        }
+
+        return controllers;
+    }
+
     @Override
     public PortNumber phyIntfPortNum(String providerPhysnet) {
         Optional<OpenstackPhyInterface> openstackPhyInterface =
@@ -354,6 +373,7 @@
                 .uplinkPort(osNode.uplinkPort())
                 .state(osNode.state())
                 .phyIntfs(osNode.phyIntfs())
+                .controllers(osNode.controllers())
                 .authentication(osNode.authentication())
                 .endPoint(osNode.endPoint());
     }
@@ -372,6 +392,7 @@
         private String uplinkPort;
         private NodeState state;
         private Collection<OpenstackPhyInterface> phyIntfs;
+        private Collection<ControllerInfo> controllers;
         private OpenstackAuth auth;
         private String endPoint;
 
@@ -409,6 +430,7 @@
                     uplinkPort,
                     state,
                     phyIntfs,
+                    controllers,
                     auth,
                     endPoint);
         }
@@ -470,6 +492,12 @@
         }
 
         @Override
+        public Builder controllers(Collection<ControllerInfo> controllers) {
+            this.controllers = controllers;
+            return this;
+        }
+
+        @Override
         public Builder authentication(OpenstackAuth auth) {
             this.auth = auth;
             return this;
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 14acbea..35e84fe 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
@@ -20,6 +20,7 @@
 import org.onosproject.core.GroupId;
 import org.onosproject.net.DeviceId;
 import org.onosproject.net.PortNumber;
+import org.onosproject.net.behaviour.ControllerInfo;
 import org.onosproject.net.group.GroupKey;
 
 import java.util.Collection;
@@ -200,6 +201,13 @@
     String endPoint();
 
     /**
+     * Returns a collection of customized controllers.
+     *
+     * @return customized controllers
+     */
+    Collection<ControllerInfo> controllers();
+
+    /**
      * Builder of new node entities.
      */
     interface Builder {
@@ -284,6 +292,14 @@
         Builder phyIntfs(Collection<OpenstackPhyInterface> phyIntfs);
 
         /**
+         * Returns openstack node builder with supplied customized controllers.
+         *
+         * @param controllers a collection of customized controllers
+         * @return openstack node builder
+         */
+        Builder controllers(Collection<ControllerInfo> controllers);
+
+        /**
          * Returns openstack node builder with supplied authentication info.
          *
          * @param auth keystone authentication info
diff --git a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/codec/OpenstackControllerCodec.java b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/codec/OpenstackControllerCodec.java
new file mode 100644
index 0000000..1921d43
--- /dev/null
+++ b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/codec/OpenstackControllerCodec.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2018-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.openstacknode.codec;
+
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import org.onlab.packet.IpAddress;
+import org.onosproject.codec.CodecContext;
+import org.onosproject.codec.JsonCodec;
+import org.onosproject.net.behaviour.ControllerInfo;
+import org.slf4j.Logger;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static org.onlab.util.Tools.nullIsIllegal;
+import static org.slf4j.LoggerFactory.getLogger;
+
+/**
+ * Openstack controller codec used for serializing and de-serializing JSON string.
+ */
+public class OpenstackControllerCodec extends JsonCodec<ControllerInfo> {
+
+    private final Logger log = getLogger(getClass());
+
+    private static final String IP = "ip";
+    private static final String PORT = "port";
+    private static final String TCP = "tcp";  // controller connection should always be TCP
+
+    private static final String MISSING_MESSAGE = " is required in ControllerInfo";
+
+    @Override
+    public ObjectNode encode(ControllerInfo controller, CodecContext context) {
+        checkNotNull(controller, "Openstack controller cannot be null");
+
+        return context.mapper().createObjectNode()
+                .put(IP, controller.ip().toString())
+                .put(PORT, controller.port());
+    }
+
+    @Override
+    public ControllerInfo decode(ObjectNode json, CodecContext context) {
+        if (json == null || !json.isObject()) {
+            return null;
+        }
+
+        String ip = nullIsIllegal(json.get(IP).asText(),
+                IP + MISSING_MESSAGE);
+        int port = nullIsIllegal(json.get(PORT).asInt(),
+                PORT + MISSING_MESSAGE);
+
+        return new ControllerInfo(IpAddress.valueOf(ip), port, TCP);
+    }
+}
diff --git a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/codec/OpenstackNodeCodec.java b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/codec/OpenstackNodeCodec.java
index 4f89c3c..282560d 100644
--- a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/codec/OpenstackNodeCodec.java
+++ b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/codec/OpenstackNodeCodec.java
@@ -22,11 +22,12 @@
 import org.onosproject.codec.CodecContext;
 import org.onosproject.codec.JsonCodec;
 import org.onosproject.net.DeviceId;
+import org.onosproject.net.behaviour.ControllerInfo;
+import org.onosproject.openstacknode.api.DefaultOpenstackNode;
 import org.onosproject.openstacknode.api.NodeState;
 import org.onosproject.openstacknode.api.OpenstackAuth;
 import org.onosproject.openstacknode.api.OpenstackNode;
 import org.onosproject.openstacknode.api.OpenstackPhyInterface;
-import org.onosproject.openstacknode.api.DefaultOpenstackNode;
 import org.slf4j.Logger;
 
 import java.util.ArrayList;
@@ -55,6 +56,7 @@
     private static final String INTEGRATION_BRIDGE = "integrationBridge";
     private static final String STATE = "state";
     private static final String PHYSICAL_INTERFACES = "phyIntfs";
+    private static final String CONTROLLERS = "controllers";
     private static final String AUTHENTICATION = "authentication";
     private static final String END_POINT = "endPoint";
 
@@ -100,6 +102,12 @@
         });
         result.set(PHYSICAL_INTERFACES, phyIntfs);
 
+        ArrayNode controllers = context.mapper().createArrayNode();
+        node.controllers().forEach(controller -> {
+            ObjectNode controllerJson = context.codec(ControllerInfo.class).encode(controller, context);
+            controllers.add(controllerJson);
+        });
+
         if (node.authentication() != null) {
             ObjectNode authJson = context.codec(OpenstackAuth.class)
                     .encode(node.authentication(), context);
@@ -163,6 +171,21 @@
         }
         nodeBuilder.phyIntfs(phyIntfs);
 
+        // parse customized controllers
+        List<ControllerInfo> controllers = new ArrayList<>();
+        JsonNode controllersJson = json.get(CONTROLLERS);
+        if (controllersJson != null) {
+
+            final JsonCodec<ControllerInfo>
+                    controllerCodec = context.codec(ControllerInfo.class);
+
+            IntStream.range(0, controllersJson.size()).forEach(i -> {
+                ObjectNode controllerJson = get(controllersJson, i);
+                controllers.add(controllerCodec.decode(controllerJson, context));
+            });
+        }
+        nodeBuilder.controllers(controllers);
+
         // parse authentication
         JsonNode authJson = json.get(AUTHENTICATION);
         if (json.get(AUTHENTICATION) != null) {
diff --git a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/DefaultOpenstackAuth.java b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/DefaultOpenstackAuth.java
index 3257353..5a3b30d 100644
--- a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/DefaultOpenstackAuth.java
+++ b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/DefaultOpenstackAuth.java
@@ -22,6 +22,9 @@
 
 import static com.google.common.base.Preconditions.checkArgument;
 
+/**
+ * Implementation class of openstack authentication.
+ */
 public class DefaultOpenstackAuth implements OpenstackAuth {
 
     private final String version;
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 dc879d8..06b65a3 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
@@ -256,13 +256,19 @@
             return;
         }
 
-        Set<IpAddress> controllerIps = clusterService.getNodes().stream()
+        List<ControllerInfo> controllers;
+
+        if (osNode.controllers() != null && osNode.controllers().size() > 0) {
+            controllers = (List<ControllerInfo>) osNode.controllers();
+        } else {
+            Set<IpAddress> controllerIps = clusterService.getNodes().stream()
                     .map(ControllerNode::ip)
                     .collect(Collectors.toSet());
 
-        List<ControllerInfo> controllers = controllerIps.stream()
-                .map(ip -> new ControllerInfo(ip, DEFAULT_OFPORT, DEFAULT_OF_PROTO))
-                .collect(Collectors.toList());
+            controllers = controllerIps.stream()
+                    .map(ip -> new ControllerInfo(ip, DEFAULT_OFPORT, DEFAULT_OF_PROTO))
+                    .collect(Collectors.toList());
+        }
 
         String dpid = deviceId.toString().substring(DPID_BEGIN);
 
diff --git a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/DefaultOpenstackPhyInterface.java b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/DefaultOpenstackPhyInterface.java
index f4238a3..498ce5c 100644
--- a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/DefaultOpenstackPhyInterface.java
+++ b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/DefaultOpenstackPhyInterface.java
@@ -22,6 +22,9 @@
 
 import static com.google.common.base.Preconditions.checkArgument;
 
+/**
+ * Implementation class of openstack physical interface.
+ */
 public class DefaultOpenstackPhyInterface implements OpenstackPhyInterface {
 
     private final String network;
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 d766473..0383b97 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
@@ -25,6 +25,7 @@
 import org.onlab.util.KryoNamespace;
 import org.onosproject.core.ApplicationId;
 import org.onosproject.core.CoreService;
+import org.onosproject.net.behaviour.ControllerInfo;
 import org.onosproject.openstacknode.api.DefaultOpenstackNode;
 import org.onosproject.openstacknode.api.NodeState;
 import org.onosproject.openstacknode.api.OpenstackNode;
@@ -83,6 +84,7 @@
             .register(NodeState.class)
             .register(OpenstackPhyInterface.class)
             .register(DefaultOpenstackPhyInterface.class)
+            .register(ControllerInfo.class)
             .register(DefaultOpenstackAuth.class)
             .register(DefaultOpenstackAuth.Perspective.class)
             .register(DefaultOpenstackAuth.Protocol.class)
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 c1609a9..9002237 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
@@ -21,10 +21,12 @@
 import org.apache.felix.scr.annotations.Reference;
 import org.apache.felix.scr.annotations.ReferenceCardinality;
 import org.onosproject.codec.CodecService;
+import org.onosproject.net.behaviour.ControllerInfo;
 import org.onosproject.openstacknode.api.OpenstackAuth;
 import org.onosproject.openstacknode.api.OpenstackNode;
 import org.onosproject.openstacknode.api.OpenstackPhyInterface;
 import org.onosproject.openstacknode.codec.OpenstackAuthCodec;
+import org.onosproject.openstacknode.codec.OpenstackControllerCodec;
 import org.onosproject.openstacknode.codec.OpenstackNodeCodec;
 import org.onosproject.openstacknode.codec.OpenstackPhyInterfaceCodec;
 
@@ -46,6 +48,7 @@
         codecService.registerCodec(OpenstackNode.class, new OpenstackNodeCodec());
         codecService.registerCodec(OpenstackAuth.class, new OpenstackAuthCodec());
         codecService.registerCodec(OpenstackPhyInterface.class, new OpenstackPhyInterfaceCodec());
+        codecService.registerCodec(ControllerInfo.class, new OpenstackControllerCodec());
 
         log.info("Started");
     }
@@ -55,6 +58,7 @@
         codecService.unregisterCodec(OpenstackNode.class);
         codecService.unregisterCodec(OpenstackAuth.class);
         codecService.unregisterCodec(OpenstackPhyInterface.class);
+        codecService.unregisterCodec(ControllerInfo.class);
 
         log.info("Stopped");
     }
diff --git a/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/codec/OpenstackControllerJsonMatcher.java b/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/codec/OpenstackControllerJsonMatcher.java
new file mode 100644
index 0000000..0d1340c
--- /dev/null
+++ b/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/codec/OpenstackControllerJsonMatcher.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright 2018-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.openstacknode.codec;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import org.hamcrest.Description;
+import org.hamcrest.TypeSafeDiagnosingMatcher;
+import org.onosproject.net.behaviour.ControllerInfo;
+
+/**
+ * Hamcrest matcher for openstack controller.
+ */
+public final class OpenstackControllerJsonMatcher extends TypeSafeDiagnosingMatcher<JsonNode> {
+
+    private final ControllerInfo controller;
+    private static final String IP = "ip";
+    private static final String PORT = "port";
+
+    private OpenstackControllerJsonMatcher(ControllerInfo controller) {
+        this.controller = controller;
+    }
+
+    @Override
+    protected boolean matchesSafely(JsonNode jsonNode, Description description) {
+
+        // check IP address
+        String jsonIp = jsonNode.get(IP).asText();
+        String ip = controller.ip().toString();
+        if (!jsonIp.equals(ip)) {
+            description.appendText("controller IP was " + jsonIp);
+            return false;
+        }
+
+        // check port
+        int jsonPort = jsonNode.get(PORT).asInt();
+        int port = controller.port();
+
+        if (jsonPort != port) {
+            description.appendText("controller port was " + jsonPort);
+            return false;
+        }
+
+        return true;
+    }
+
+    @Override
+    public void describeTo(Description description) {
+        description.appendText(controller.toString());
+    }
+
+    /**
+     * Factory to allocate an openstack controller matcher.
+     *
+     * @param controller openstack controller object we are looking for
+     * @return matcher
+     */
+    public static OpenstackControllerJsonMatcher
+                    matchesOpenstackController(ControllerInfo controller) {
+        return new OpenstackControllerJsonMatcher(controller);
+    }
+}
diff --git a/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/codec/OpenstackNodeCodecTest.java b/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/codec/OpenstackNodeCodecTest.java
index 3f9fcb4..7d504d3 100644
--- a/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/codec/OpenstackNodeCodecTest.java
+++ b/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/codec/OpenstackNodeCodecTest.java
@@ -28,6 +28,7 @@
 import org.onosproject.codec.impl.CodecManager;
 import org.onosproject.core.CoreService;
 import org.onosproject.net.DeviceId;
+import org.onosproject.net.behaviour.ControllerInfo;
 import org.onosproject.openstacknode.api.NodeState;
 import org.onosproject.openstacknode.api.OpenstackAuth;
 import org.onosproject.openstacknode.api.OpenstackNode;
@@ -57,6 +58,7 @@
     MockCodecContext context;
     JsonCodec<OpenstackNode> openstackNodeCodec;
     JsonCodec<OpenstackPhyInterface> openstackPhyIntfJsonCodec;
+    JsonCodec<ControllerInfo> openstackControllerJsonCodec;
     JsonCodec<OpenstackAuth> openstackAuthJsonCodec;
     final CoreService mockCoreService = createMock(CoreService.class);
     private static final String REST_APP_ID = "org.onosproject.rest";
@@ -66,10 +68,12 @@
         context = new MockCodecContext();
         openstackNodeCodec = new OpenstackNodeCodec();
         openstackPhyIntfJsonCodec = new OpenstackPhyInterfaceCodec();
+        openstackControllerJsonCodec = new OpenstackControllerCodec();
         openstackAuthJsonCodec = new OpenstackAuthCodec();
 
         assertThat(openstackNodeCodec, notNullValue());
         assertThat(openstackPhyIntfJsonCodec, notNullValue());
+        assertThat(openstackControllerJsonCodec, notNullValue());
         assertThat(openstackAuthJsonCodec, notNullValue());
 
         expect(mockCoreService.registerApplication(REST_APP_ID))
@@ -93,6 +97,11 @@
                                 .intf("eth4")
                                 .build();
 
+        ControllerInfo controller1 =
+                new ControllerInfo(IpAddress.valueOf("10.10.10.2"), 6653, "tcp");
+        ControllerInfo controller2 =
+                new ControllerInfo(IpAddress.valueOf("10.10.10.3"), 6663, "tcp");
+
         OpenstackNode node = DefaultOpenstackNode.builder()
                                 .hostname("compute")
                                 .type(OpenstackNode.NodeType.COMPUTE)
@@ -102,6 +111,7 @@
                                 .vlanIntf("vxlan")
                                 .dataIp(IpAddress.valueOf("20.20.20.2"))
                                 .phyIntfs(ImmutableList.of(phyIntf1, phyIntf2))
+                                .controllers(ImmutableList.of(controller1, controller2))
                                 .build();
 
         ObjectNode nodeJson = openstackNodeCodec.encode(node, context);
@@ -124,6 +134,7 @@
         assertThat(node.intgBridge().toString(), is("of:00000000000000a1"));
         assertThat(node.vlanIntf(), is("eth2"));
         assertThat(node.phyIntfs().size(), is(2));
+        assertThat(node.controllers().size(), is(2));
 
         node.phyIntfs().forEach(intf -> {
             if (intf.network().equals("mgmtnetwork")) {
@@ -133,6 +144,15 @@
                 assertThat(intf.intf(), is("eth4"));
             }
         });
+
+        node.controllers().forEach(ctrl -> {
+            if (ctrl.ip().toString().equals("10.10.10.2")) {
+                assertThat(ctrl.port(), is(6653));
+            }
+            if (ctrl.ip().toString().equals("10.10.10.3")) {
+                assertThat(ctrl.port(), is(6663));
+            }
+        });
     }
 
     /**
@@ -228,6 +248,9 @@
             if (entityClass == OpenstackPhyInterface.class) {
                 return (JsonCodec<T>) openstackPhyIntfJsonCodec;
             }
+            if (entityClass == ControllerInfo.class) {
+                return (JsonCodec<T>) openstackControllerJsonCodec;
+            }
             if (entityClass == OpenstackAuth.class) {
                 return (JsonCodec<T>) openstackAuthJsonCodec;
             }
diff --git a/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/codec/OpenstackNodeJsonMatcher.java b/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/codec/OpenstackNodeJsonMatcher.java
index 603edac..d715865 100644
--- a/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/codec/OpenstackNodeJsonMatcher.java
+++ b/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/codec/OpenstackNodeJsonMatcher.java
@@ -18,6 +18,7 @@
 import com.fasterxml.jackson.databind.JsonNode;
 import org.hamcrest.Description;
 import org.hamcrest.TypeSafeDiagnosingMatcher;
+import org.onosproject.net.behaviour.ControllerInfo;
 import org.onosproject.openstacknode.api.Constants;
 import org.onosproject.openstacknode.api.OpenstackAuth;
 import org.onosproject.openstacknode.api.OpenstackNode;
@@ -36,6 +37,7 @@
     private static final String INTEGRATION_BRIDGE = "integrationBridge";
     private static final String STATE = "state";
     private static final String PHYSICAL_INTERFACES = "phyIntfs";
+    private static final String CONTROLLERS = "controllers";
     private static final String AUTHENTICATION = "authentication";
     private static final String END_POINT = "endPoint";
 
@@ -154,6 +156,32 @@
             }
         }
 
+        // check controllers
+        JsonNode jsonControllers = jsonNode.get(CONTROLLERS);
+        if (jsonControllers != null) {
+            if (jsonControllers.size() != node.controllers().size()) {
+                description.appendText("controllers size was " + jsonControllers.size());
+                return false;
+            }
+
+            for (ControllerInfo controller : node.controllers()) {
+                boolean ctrlFound = false;
+                for (int ctrlIndex = 0; ctrlIndex < jsonControllers.size(); ctrlIndex++) {
+                    OpenstackControllerJsonMatcher ctrlMatcher =
+                            OpenstackControllerJsonMatcher.matchesOpenstackController(controller);
+                    if (ctrlMatcher.matches(jsonControllers.get(ctrlIndex))) {
+                        ctrlFound = true;
+                        break;
+                    }
+                }
+
+                if (!ctrlFound) {
+                    description.appendText("Controller not found " + controller.toString());
+                    return false;
+                }
+            }
+        }
+
         return true;
     }
 
diff --git a/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/codec/OpenstackPhyInterfaceJsonMatcher.java b/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/codec/OpenstackPhyInterfaceJsonMatcher.java
index 09955bd..6a4cce7 100644
--- a/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/codec/OpenstackPhyInterfaceJsonMatcher.java
+++ b/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/codec/OpenstackPhyInterfaceJsonMatcher.java
@@ -20,6 +20,9 @@
 import org.hamcrest.TypeSafeDiagnosingMatcher;
 import org.onosproject.openstacknode.api.OpenstackPhyInterface;
 
+/**
+ * Hamcrest matcher for openstack physical interface.
+ */
 public final class OpenstackPhyInterfaceJsonMatcher extends TypeSafeDiagnosingMatcher<JsonNode> {
 
     private final OpenstackPhyInterface phyIntf;
diff --git a/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/impl/DefaultOpenstackNodeHandlerTest.java b/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/impl/DefaultOpenstackNodeHandlerTest.java
index 4305cc3..92c7615 100644
--- a/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/impl/DefaultOpenstackNodeHandlerTest.java
+++ b/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/impl/DefaultOpenstackNodeHandlerTest.java
@@ -49,6 +49,7 @@
 import org.onosproject.net.behaviour.BridgeConfig;
 import org.onosproject.net.behaviour.BridgeDescription;
 import org.onosproject.net.behaviour.BridgeName;
+import org.onosproject.net.behaviour.ControllerInfo;
 import org.onosproject.net.behaviour.DefaultBridgeDescription;
 import org.onosproject.net.behaviour.ExtensionTreatmentResolver;
 import org.onosproject.net.behaviour.InterfaceConfig;
@@ -152,6 +153,10 @@
     private static final Set<OpenstackPhyInterface> COMPUTE_2_PHY_INTFS = createPhyIntfs();
     private static final Set<OpenstackPhyInterface> COMPUTE_3_PHY_INTFS = createPhyIntfs();
 
+    private static final Set<ControllerInfo> COMPUTE_1_CONTROLLERS = createControllers();
+    private static final Set<ControllerInfo> COMPUTE_2_CONTROLLERS = createControllers();
+    private static final Set<ControllerInfo> COMPUTE_3_CONTROLLERS = createControllers();
+
     private static final Device COMPUTE_1_INTG_DEVICE = createOpenFlowDevice(1, INTEGRATION_BRIDGE);
     private static final Device COMPUTE_2_INTG_DEVICE = createOpenFlowDevice(2, INTEGRATION_BRIDGE);
     private static final Device COMPUTE_3_INTG_DEVICE = createOpenFlowDevice(3, INTEGRATION_BRIDGE);
@@ -170,7 +175,8 @@
             COMPUTE_1_INTG_DEVICE,
             COMPUTE_1_IP,
             INIT,
-            COMPUTE_1_PHY_INTFS
+            COMPUTE_1_PHY_INTFS,
+            COMPUTE_1_CONTROLLERS
     );
 
     private static final OpenstackNode COMPUTE_2 = createNode(
@@ -179,7 +185,8 @@
             COMPUTE_2_INTG_DEVICE,
             COMPUTE_2_IP,
             DEVICE_CREATED,
-            COMPUTE_2_PHY_INTFS
+            COMPUTE_2_PHY_INTFS,
+            COMPUTE_2_CONTROLLERS
     );
 
     private static final OpenstackNode COMPUTE_3 = createNode(
@@ -188,7 +195,8 @@
             COMPUTE_3_INTG_DEVICE,
             COMPUTE_3_IP,
             COMPLETE,
-            COMPUTE_3_PHY_INTFS
+            COMPUTE_3_PHY_INTFS,
+            COMPUTE_3_CONTROLLERS
     );
 
     private static final OpenstackNode GATEWAY_1 = createGatewayNode(
@@ -397,19 +405,24 @@
         return Sets.newConcurrentHashSet();
     }
 
+    private static Set<ControllerInfo> createControllers() {
+        return Sets.newConcurrentHashSet();
+    }
+
     private static OpenstackNode createNode(String hostname,
                                             OpenstackNode.NodeType type,
                                             Device intgBridge,
                                             IpAddress ipAddr,
                                             NodeState state,
-                                            Set<OpenstackPhyInterface> phyIntfs) {
+                                            Set<OpenstackPhyInterface> phyIntfs,
+                                            Set<ControllerInfo> controllers) {
         return new TestOpenstackNode(
                 hostname,
                 type,
                 intgBridge.id(),
                 ipAddr,
                 ipAddr,
-                null, null, state, phyIntfs, null, null);
+                null, null, state, phyIntfs, controllers, null, null);
     }
 
     private static OpenstackNode createGatewayNode(String hostname,
@@ -424,7 +437,7 @@
                 intgBridge.id(),
                 ipAddr,
                 ipAddr,
-                null, uplinkPort, state, null, null, null);
+                null, uplinkPort, state, null, null, null, null);
     }
 
     private static final class TestDevice extends DefaultDevice {
@@ -483,6 +496,7 @@
                                   String uplinkPort,
                                   NodeState state,
                                   Set<OpenstackPhyInterface> phyIntfs,
+                                  Set<ControllerInfo> controllers,
                                   OpenstackAuth auth,
                                   String endPoint) {
             super(hostname,
@@ -494,6 +508,7 @@
                     uplinkPort,
                     state,
                     phyIntfs,
+                    controllers,
                     auth,
                     endPoint);
         }
diff --git a/apps/openstacknode/app/src/test/resources/org/onosproject/openstacknode/codec/OpenstackComputeNode.json b/apps/openstacknode/app/src/test/resources/org/onosproject/openstacknode/codec/OpenstackComputeNode.json
index ff561c6..c630c43 100644
--- a/apps/openstacknode/app/src/test/resources/org/onosproject/openstacknode/codec/OpenstackComputeNode.json
+++ b/apps/openstacknode/app/src/test/resources/org/onosproject/openstacknode/codec/OpenstackComputeNode.json
@@ -14,5 +14,15 @@
       "network": "oamnetwork",
       "intf": "eth4"
     }
+  ],
+  "controllers": [
+    {
+      "ip": "10.10.10.2",
+      "port": 6653
+    },
+    {
+      "ip": "10.10.10.3",
+      "port": 6663
+    }
   ]
 }
\ No newline at end of file
diff --git a/apps/openstacknode/network-cfg.json b/apps/openstacknode/network-cfg.json
index 703d0e9..76c5c09 100644
--- a/apps/openstacknode/network-cfg.json
+++ b/apps/openstacknode/network-cfg.json
@@ -19,6 +19,20 @@
                 "network": "oamnetwork",
                 "intf": "eth4"
               }
+            ],
+            "controllers": [
+              {
+                "ip": "10.10.10.2",
+                "port": 6653
+              },
+              {
+                "ip": "10.10.10.3",
+                "port": 6653
+              },
+              {
+                "ip": "10.10.10.4",
+                "port": 6653
+              }
             ]
           },
           {
