diff --git a/global/config-samples/ecord-global-config.json b/global/config-samples/ecord-global-config.json
index cd6b082..156c23a 100644
--- a/global/config-samples/ecord-global-config.json
+++ b/global/config-samples/ecord-global-config.json
@@ -5,7 +5,7 @@
         "username" : "xosadmin@opencord.org",
         "password" : "0Ui8QNJNCdXrjjLpF1U6",
         "address" : "127.0.0.1",
-        "resource" : "/xosapi/v1/metronet/usernetworkinterfaces/"
+        "resource" : "/xosapi/v1/vnaas/usernetworkinterfaces/"
       }
     },
     "org.opencord.ce.global.channel.http" : {
diff --git a/global/virtualprovider/src/main/java/org/opencord/ce/global/virtualdomain/VirtualDomainDeviceProvider.java b/global/virtualprovider/src/main/java/org/opencord/ce/global/virtualdomain/VirtualDomainDeviceProvider.java
index d1bdefb..36daf56 100644
--- a/global/virtualprovider/src/main/java/org/opencord/ce/global/virtualdomain/VirtualDomainDeviceProvider.java
+++ b/global/virtualprovider/src/main/java/org/opencord/ce/global/virtualdomain/VirtualDomainDeviceProvider.java
@@ -71,6 +71,7 @@
 import static org.onosproject.net.AnnotationKeys.DRIVER;
 import static org.onosproject.net.AnnotationKeys.LATITUDE;
 import static org.onosproject.net.AnnotationKeys.LONGITUDE;
+import static org.opencord.ce.api.services.channel.Symbols.MEF_PORT_TYPE;
 import static org.slf4j.LoggerFactory.getLogger;
 import static org.opencord.ce.api.models.CarrierEthernetNetworkInterface.Type;
 
@@ -87,7 +88,7 @@
     private static final String UNKNOWN = "unknown";
     private static final String NO_LLDP = "no-lldp";
     private static final String DOMAIN_ID = "domainId";
-    private static final String MEF_IF_TYPE = "mefIfType";
+
 
     private ApplicationId appId;
 
@@ -272,19 +273,19 @@
 
     private void notifyXoS(DeviceId deviceId, List<PortDescription> portDescriptions) {
         portDescriptions.forEach(port -> {
-            if (port.annotations().keys().contains(MEF_IF_TYPE)) {
+            if (port.annotations().keys().contains(MEF_PORT_TYPE)) {
                 Type type = Type.valueOf(
-                        port.annotations().value(MEF_IF_TYPE));
+                        port.annotations().value(MEF_PORT_TYPE));
                 ConnectPoint cp = new ConnectPoint(deviceId, port.portNumber());
                 switch (type) {
                     case UNI:
                         ObjectNode body = xoSHttpClient.mapper().createObjectNode();
                         body.put("tenant", port.annotations().value(DOMAIN_ID));
                         body.put("name", "UNI:" + cp.toString());
-                        body.put("latlng", "[" + port.annotations().value(LATITUDE) + "," +
+                        body.put("latlng", "[" + port.annotations().value(LATITUDE) + ", " +
                                 port.annotations().value(LONGITUDE) + "]");
                         body.put("cpe_id", cp.toString());
-                        xoSHttpClient.restPut(body.toString(), cp.toString());
+                        xoSHttpClient.restPost(body.toString());
                         break;
                     case ENNI:
 
@@ -311,9 +312,9 @@
      */
     private void addGlobalMefLtp(DeviceId deviceId, List<PortDescription> portDescriptions) {
         portDescriptions.forEach(port -> {
-            if (port.annotations().keys().contains(MEF_IF_TYPE)) {
+            if (port.annotations().keys().contains(MEF_PORT_TYPE)) {
                 Type type = Type.valueOf(
-                        port.annotations().value(MEF_IF_TYPE));
+                        port.annotations().value(MEF_PORT_TYPE));
                 CarrierEthernetNetworkInterface ni;
                 ConnectPoint cp = new ConnectPoint(deviceId, port.portNumber());
                 switch (type) {
diff --git a/global/virtualprovider/src/main/java/org/opencord/ce/global/virtualdomain/XoSHttpClient.java b/global/virtualprovider/src/main/java/org/opencord/ce/global/virtualdomain/XoSHttpClient.java
index 1d72b40..fdd8570 100644
--- a/global/virtualprovider/src/main/java/org/opencord/ce/global/virtualdomain/XoSHttpClient.java
+++ b/global/virtualprovider/src/main/java/org/opencord/ce/global/virtualdomain/XoSHttpClient.java
@@ -18,6 +18,7 @@
 
 import com.fasterxml.jackson.databind.SerializationFeature;
 import org.glassfish.jersey.client.ClientProperties;
+import org.glassfish.jersey.client.authentication.HttpAuthenticationFeature;
 import org.onosproject.rest.AbstractWebResource;
 import org.slf4j.Logger;
 
@@ -46,21 +47,29 @@
 
     public XoSHttpClient(XosEndPoint xosEndPoint) {
         this.xosEndPoint = xosEndPoint;
+        // Setup credentials
+        HttpAuthenticationFeature feature = HttpAuthenticationFeature.basicBuilder()
+                .nonPreemptive()
+                .credentials(xosEndPoint.username(), xosEndPoint.password())
+                .build();
 
+        client.register(feature);
         client.property(ClientProperties.CONNECT_TIMEOUT, DEFAULT_TIMEOUT_MS);
         client.property(ClientProperties.READ_TIMEOUT, DEFAULT_TIMEOUT_MS);
         mapper().enable(SerializationFeature.INDENT_OUTPUT);
     }
 
-    public void restPut(String body, String cpeId) {
+    public void restPost(String body) {
         WebTarget webTarget = client.target("http://" + xosEndPoint.ipAddress().toString() +
-                 xosEndPoint.resource() + "/" + cpeId);
+                 xosEndPoint.resource() + "/");
         Response response;
         response = webTarget.request(MediaType.APPLICATION_JSON)
-                .put(Entity.entity(body, MediaType.APPLICATION_JSON));
+                .post(Entity.entity(body, MediaType.APPLICATION_JSON));
         try {
             if (response.getStatus() != HTTP_OK) {
                 log.warn("Failed to put resource {}", xosEndPoint.resource());
+            } else {
+                log.info("Post to XoS successful: {}", response.getStatus());
             }
         } catch (javax.ws.rs.ProcessingException e) {
             log.error("Javax process exception in XoSClientHttp: {}", e.getMessage());
