diff --git a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/codec/OpenstackAuthCodec.java b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/codec/OpenstackAuthCodec.java
index 35e806d..d3ddabb 100644
--- a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/codec/OpenstackAuthCodec.java
+++ b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/codec/OpenstackAuthCodec.java
@@ -35,7 +35,6 @@
     private final Logger log = getLogger(getClass());
 
     private static final String VERSION = "version";
-    private static final String PORT = "port";
     private static final String PROTOCOL = "protocol";
     private static final String USERNAME = "username";
     private static final String PASSWORD = "password";
@@ -50,7 +49,6 @@
 
         ObjectNode result = context.mapper().createObjectNode()
                 .put(VERSION, auth.version())
-                .put(PORT, auth.port())
                 .put(PROTOCOL, auth.protocol().name())
                 .put(USERNAME, auth.username())
                 .put(PASSWORD, auth.password())
@@ -71,8 +69,6 @@
 
         String version = nullIsIllegal(json.get(VERSION).asText(),
                 VERSION + MISSING_MESSAGE);
-        Integer port = nullIsIllegal(json.get(PORT).asInt(),
-                PORT + MISSING_MESSAGE);
         String protocol = nullIsIllegal(json.get(PROTOCOL).asText(),
                 PROTOCOL + MISSING_MESSAGE);
         String username = nullIsIllegal(json.get(USERNAME).asText(),
@@ -84,7 +80,6 @@
 
         DefaultOpenstackAuth.Builder authBuilder = DefaultOpenstackAuth.builder()
                 .version(version)
-                .port(port)
                 .protocol(OpenstackAuth.Protocol.valueOf(protocol))
                 .username(username)
                 .password(password)
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 ef7b341..66a3f8b 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
@@ -59,7 +59,7 @@
     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";
+    private static final String END_POINT = "endpoint";
     private static final String SSH_AUTH = "sshAuth";
     private static final String DATA_PATH_TYPE = "datapathType";
 
@@ -84,7 +84,7 @@
         }
 
         if (type == OpenstackNode.NodeType.CONTROLLER) {
-            result.put(END_POINT, node.endPoint());
+            result.put(END_POINT, node.endpoint());
         }
 
         if (node.intgBridge() != null) {
@@ -156,7 +156,7 @@
         if (type.equals(CONTROLLER)) {
             String endPoint = nullIsIllegal(json.get(END_POINT).asText(),
                     END_POINT + MISSING_MESSAGE);
-            nodeBuilder.endPoint(endPoint);
+            nodeBuilder.endpoint(endPoint);
         }
         if (json.get(VLAN_INTF_NAME) != null) {
             nodeBuilder.vlanIntf(json.get(VLAN_INTF_NAME).asText());
diff --git a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/util/OpenstackNodeUtil.java b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/util/OpenstackNodeUtil.java
index e970b2b..4d8167b 100644
--- a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/util/OpenstackNodeUtil.java
+++ b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/util/OpenstackNodeUtil.java
@@ -212,17 +212,7 @@
         StringBuilder endpointSb = new StringBuilder();
         endpointSb.append(auth.protocol().name().toLowerCase());
         endpointSb.append("://");
-        endpointSb.append(node.endPoint());
-        endpointSb.append(":");
-        endpointSb.append(auth.port());
-        endpointSb.append("/");
-
-        // in case the version is v3, we need to append identity path into endpoint
-        if (auth.version().equals(KEYSTONE_V3)) {
-            endpointSb.append(IDENTITY_PATH);
-        }
-
-        endpointSb.append(auth.version());
+        endpointSb.append(node.endpoint());
         return endpointSb.toString();
     }
 
diff --git a/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/codec/OpenstackAuthJsonMatcher.java b/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/codec/OpenstackAuthJsonMatcher.java
index 2f165f9..bed83ad 100644
--- a/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/codec/OpenstackAuthJsonMatcher.java
+++ b/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/codec/OpenstackAuthJsonMatcher.java
@@ -50,14 +50,6 @@
             return false;
         }
 
-        // check port
-        Integer jsonPort = jsonNode.get(PORT).asInt();
-        Integer port = auth.port();
-        if (!jsonPort.equals(port)) {
-            description.appendText("port was " + jsonPort);
-            return false;
-        }
-
         // check protocol
         String jsonProtocol = jsonNode.get(PROTOCOL).asText();
         String protocol = auth.protocol().name();
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 3d45238..49b67a5 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
@@ -181,7 +181,6 @@
     public void testOpenstackControllerNodeEncode() {
         OpenstackAuth auth = DefaultOpenstackAuth.builder()
                 .version("v2.0")
-                .port(35357)
                 .protocol(OpenstackAuth.Protocol.HTTP)
                 .project("admin")
                 .username("admin")
@@ -194,7 +193,7 @@
                 .type(OpenstackNode.NodeType.CONTROLLER)
                 .state(NodeState.INIT)
                 .managementIp(IpAddress.valueOf("172.16.130.10"))
-                .endPoint("keystone-end-point-url")
+                .endpoint("keystone-end-point-url")
                 .authentication(auth)
                 .build();
 
@@ -212,12 +211,11 @@
         assertThat(node.hostname(), is("controller"));
         assertThat(node.type().name(), is("CONTROLLER"));
         assertThat(node.managementIp().toString(), is("172.16.130.10"));
-        assertThat(node.endPoint(), is("keystone-end-point-url"));
+        assertThat(node.endpoint(), is("keystone-end-point-url"));
 
         OpenstackAuth auth = node.authentication();
 
         assertThat(auth.version(), is("v2.0"));
-        assertThat(auth.port(), is(35357));
         assertThat(auth.protocol(), is(OpenstackAuth.Protocol.HTTP));
         assertThat(auth.username(), is("admin"));
         assertThat(auth.password(), is("nova"));
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 3614f5f..b53c31c 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
@@ -40,7 +40,7 @@
     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";
+    private static final String END_POINT = "endpoint";
     private static final String SSH_AUTH = "sshAuth";
     private static final String DATA_PATH_TYPE = "datapathType";
 
@@ -135,11 +135,11 @@
         }
 
         // check endpoint URL
-        JsonNode jsonEndPoint = jsonNode.get(END_POINT);
-        if (jsonEndPoint != null) {
-            String endPoint = node.endPoint();
-            if (!jsonEndPoint.asText().equals(endPoint)) {
-                description.appendText("endpoint URL was " + jsonEndPoint);
+        JsonNode jsonEndpoint = jsonNode.get(END_POINT);
+        if (jsonEndpoint != null) {
+            String endpoint = node.endpoint();
+            if (!jsonEndpoint.asText().equals(endpoint)) {
+                description.appendText("endpoint URL was " + jsonEndpoint);
                 return false;
             }
         }
diff --git a/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/impl/DefaultOpenstackAuthTest.java b/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/impl/DefaultOpenstackAuthTest.java
index 7a09f96..e602cf2 100644
--- a/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/impl/DefaultOpenstackAuthTest.java
+++ b/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/impl/DefaultOpenstackAuthTest.java
@@ -33,24 +33,20 @@
     private static final String PROJECT = "admin";
     private static final String VERSION_1 = "v2.0";
     private static final String VERSION_2 = "v3";
-    private static final Integer PORT_1 = 35357;
-    private static final Integer PORT_2 = 5000;
     private static final OpenstackAuth.Protocol PROTOCOL_1 = OpenstackAuth.Protocol.HTTP;
     private static final OpenstackAuth.Protocol PROTOCOL_2 = OpenstackAuth.Protocol.HTTPS;
 
     private static final OpenstackAuth OS_AUTH_1 =
-                         createOpenstackAuth(VERSION_1, PORT_1, PROTOCOL_1);
+                         createOpenstackAuth(VERSION_1, PROTOCOL_1);
     private static final OpenstackAuth OS_AUTH_2 =
-                         createOpenstackAuth(VERSION_2, PORT_2, PROTOCOL_2);
+                         createOpenstackAuth(VERSION_2, PROTOCOL_2);
     private static final OpenstackAuth OS_AUTH_3 =
-                         createOpenstackAuth(VERSION_1, PORT_1, PROTOCOL_1);
+                         createOpenstackAuth(VERSION_1, PROTOCOL_1);
 
     private static OpenstackAuth createOpenstackAuth(String version,
-                                              Integer port,
                                               OpenstackAuth.Protocol protocol) {
         return DefaultOpenstackAuth.builder()
                 .version(version)
-                .port(port)
                 .protocol(protocol)
                 .username(USERNAME)
                 .password(PASSWORD)
@@ -77,7 +73,6 @@
         OpenstackAuth auth = OS_AUTH_1;
 
         assertThat(auth.version(), is("v2.0"));
-        assertThat(auth.port(), is(35357));
         assertThat(auth.protocol(), is(OpenstackAuth.Protocol.HTTP));
         assertThat(auth.username(), is("admin"));
         assertThat(auth.password(), is("nova"));
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 e24b4e4..9ed0a3a 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
@@ -501,7 +501,7 @@
                                   Set<OpenstackPhyInterface> phyIntfs,
                                   Set<ControllerInfo> controllers,
                                   OpenstackAuth auth,
-                                  String endPoint,
+                                  String endpoint,
                                   OpenstackSshAuth sshAuth,
                                   DatapathType datapathType) {
             super(hostname,
@@ -515,7 +515,7 @@
                     phyIntfs,
                     controllers,
                     auth,
-                    endPoint,
+                    endpoint,
                     sshAuth,
                     datapathType);
         }
diff --git a/apps/openstacknode/app/src/test/resources/org/onosproject/openstacknode/codec/OpenstackControllerNode.json b/apps/openstacknode/app/src/test/resources/org/onosproject/openstacknode/codec/OpenstackControllerNode.json
index 705a977..c60baad 100644
--- a/apps/openstacknode/app/src/test/resources/org/onosproject/openstacknode/codec/OpenstackControllerNode.json
+++ b/apps/openstacknode/app/src/test/resources/org/onosproject/openstacknode/codec/OpenstackControllerNode.json
@@ -2,7 +2,7 @@
   "hostname": "controller",
   "type": "CONTROLLER",
   "managementIp": "172.16.130.10",
-  "endPoint": "keystone-end-point-url",
+  "endpoint": "keystone-end-point-url",
   "authentication": {
     "version": "v2.0",
     "port": 35357,
