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) {
