diff --git a/apps/xos-integration/src/main/java/org/onosproject/xosintegration/OnosXOSIntegrationManager.java b/apps/xos-integration/src/main/java/org/onosproject/xosintegration/OnosXOSIntegrationManager.java
index 9950c33..dccbd4e 100644
--- a/apps/xos-integration/src/main/java/org/onosproject/xosintegration/OnosXOSIntegrationManager.java
+++ b/apps/xos-integration/src/main/java/org/onosproject/xosintegration/OnosXOSIntegrationManager.java
@@ -15,11 +15,12 @@
  */
 package org.onosproject.xosintegration;
 
-import java.util.Dictionary;
-import java.util.Set;
-import java.util.stream.Collectors;
-import java.util.stream.IntStream;
-
+import com.eclipsesource.json.JsonArray;
+import com.eclipsesource.json.JsonObject;
+import com.sun.jersey.api.client.Client;
+import com.sun.jersey.api.client.ClientResponse;
+import com.sun.jersey.api.client.WebResource;
+import com.sun.jersey.api.client.filter.HTTPBasicAuthFilter;
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Deactivate;
@@ -28,19 +29,28 @@
 import org.apache.felix.scr.annotations.Reference;
 import org.apache.felix.scr.annotations.ReferenceCardinality;
 import org.apache.felix.scr.annotations.Service;
+import org.onlab.packet.VlanId;
 import org.onlab.util.Tools;
 import org.onosproject.cfg.ComponentConfigService;
 import org.onosproject.core.ApplicationId;
 import org.onosproject.core.CoreService;
+import org.onosproject.net.ConnectPoint;
+import org.onosproject.net.DeviceId;
+import org.onosproject.net.PortNumber;
+import org.onosproject.net.flow.DefaultTrafficSelector;
+import org.onosproject.net.flow.DefaultTrafficTreatment;
+import org.onosproject.net.flow.TrafficSelector;
+import org.onosproject.net.flow.TrafficTreatment;
+import org.onosproject.net.flowobjective.DefaultForwardingObjective;
+import org.onosproject.net.flowobjective.FlowObjectiveService;
+import org.onosproject.net.flowobjective.ForwardingObjective;
 import org.osgi.service.component.ComponentContext;
 import org.slf4j.Logger;
 
-import com.eclipsesource.json.JsonArray;
-import com.eclipsesource.json.JsonObject;
-import com.sun.jersey.api.client.Client;
-import com.sun.jersey.api.client.ClientResponse;
-import com.sun.jersey.api.client.WebResource;
-import com.sun.jersey.api.client.filter.HTTPBasicAuthFilter;
+import java.util.Dictionary;
+import java.util.Set;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
 
 import static com.google.common.base.Strings.isNullOrEmpty;
 import static com.google.common.net.MediaType.JSON_UTF_8;
@@ -68,12 +78,26 @@
     private static final String XOS_TENANT_BASE_URI = "/xoslib/volttenant/";
     private static final int TEST_XOS_PROVIDER_SERVICE = 1;
 
+    private static final DeviceId FABRIC_DEVICE_ID = DeviceId.deviceId("of:5e3e486e73000187");
+    private static final PortNumber FABRIC_OLT_CONNECT_POINT = PortNumber.portNumber(2);
+    private static final PortNumber FABRIC_VCPE_CONNECT_POINT = PortNumber.portNumber(3);
+    private static final String FABRIC_CONTROLLER_ADDRESS = "10.0.3.136";
+    private static final int FABRIC_SERVER_PORT = 8181;
+    private static final String FABRIC_BASE_URI = "/onos/cordfabric/vlans/add";
+
+    private static final ConnectPoint FABRIC_PORT = new ConnectPoint(
+            DeviceId.deviceId("of:000090e2ba82f974"),
+            PortNumber.portNumber(2));
+
     private final Logger log = getLogger(getClass());
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
     protected CoreService coreService;
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
     protected ComponentConfigService cfgService;
 
+    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+    protected FlowObjectiveService flowObjectiveService;
+
     @Property(name = XOS_SERVER_ADDRESS_PROPERTY_NAME,
               value = TEST_XOS_SERVER_ADDRESS,
               label = "XOS Server address")
@@ -267,9 +291,16 @@
                 .withProviderService(providerServiceId)
                 .withServiceSpecificId(newTenant.serviceSpecificId())
                 .withVlanId(newTenant.vlanId())
+                .withPort(newTenant.port())
                 .build();
         String json = tenantToJson(tenantToCreate);
+
+        provisionDataPlane(tenantToCreate);
+
         postRest(json);
+
+        provisionFabric(VlanId.vlanId(Short.parseShort(newTenant.vlanId())));
+
         return newTenant;
     }
 
@@ -284,6 +315,72 @@
         }
     }
 
+    private void provisionDataPlane(VoltTenant tenant) {
+        VlanId vlan = VlanId.vlanId(Short.parseShort(tenant.vlanId()));
+
+        TrafficSelector fromGateway = DefaultTrafficSelector.builder()
+                .matchInPhyPort(tenant.port().port())
+                .build();
+
+        TrafficSelector fromFabric = DefaultTrafficSelector.builder()
+                .matchInPhyPort(FABRIC_PORT.port())
+                .matchVlanId(vlan)
+                .build();
+
+        TrafficTreatment toFabric = DefaultTrafficTreatment.builder()
+                .pushVlan()
+                .setVlanId(vlan)
+                .setOutput(FABRIC_PORT.port())
+                .build();
+
+        TrafficTreatment toGateway = DefaultTrafficTreatment.builder()
+                .popVlan()
+                .setOutput(tenant.port().port())
+                .build();
+
+        ForwardingObjective forwardToFabric = DefaultForwardingObjective.builder()
+                .withFlag(ForwardingObjective.Flag.VERSATILE)
+                .withPriority(1000)
+                .makePermanent()
+                .fromApp(appId)
+                .withSelector(fromGateway)
+                .withTreatment(toFabric)
+                .add();
+
+        ForwardingObjective forwardToGateway = DefaultForwardingObjective.builder()
+                .withFlag(ForwardingObjective.Flag.VERSATILE)
+                .withPriority(1000)
+                .makePermanent()
+                .fromApp(appId)
+                .withSelector(fromFabric)
+                .withTreatment(toGateway)
+                .add();
+
+        flowObjectiveService.forward(FABRIC_PORT.deviceId(), forwardToFabric);
+        flowObjectiveService.forward(FABRIC_PORT.deviceId(), forwardToGateway);
+    }
+
+    private void provisionFabric(VlanId vlanId) {
+        String json = "{\"vlan\":" + vlanId + ",\"ports\":[";
+        json += "{\"device\":\"" + FABRIC_DEVICE_ID.toString() + "\",\"port\":\""
+                + FABRIC_OLT_CONNECT_POINT.toString() + "\"},";
+        json += "{\"device\":\"" + FABRIC_DEVICE_ID.toString() + "\",\"port\":\""
+                + FABRIC_VCPE_CONNECT_POINT.toString() + "\"}";
+        json += "]}";
+
+        String baseUrl = "http://" + FABRIC_CONTROLLER_ADDRESS + ":"
+                + Integer.toString(FABRIC_SERVER_PORT);
+        Client client = Client.create();
+        client.addFilter(new HTTPBasicAuthFilter("padmin@vicci.org", "letmein"));
+        WebResource resource = client.resource(baseUrl
+                                                       + FABRIC_BASE_URI);
+        WebResource.Builder builder = resource.accept(JSON_UTF_8.toString())
+                .type(JSON_UTF_8.toString());
+
+        ClientResponse response = builder.post(ClientResponse.class, json);
+
+    }
+
     /**
      * Extracts properties from the component configuration context.
      *
diff --git a/apps/xos-integration/src/main/java/org/onosproject/xosintegration/VoltTenant.java b/apps/xos-integration/src/main/java/org/onosproject/xosintegration/VoltTenant.java
index 18b24e1..6685b7a 100644
--- a/apps/xos-integration/src/main/java/org/onosproject/xosintegration/VoltTenant.java
+++ b/apps/xos-integration/src/main/java/org/onosproject/xosintegration/VoltTenant.java
@@ -16,6 +16,7 @@
 package org.onosproject.xosintegration;
 
 import com.google.common.base.MoreObjects;
+import org.onosproject.net.ConnectPoint;
 
 public final class VoltTenant {
 
@@ -24,6 +25,7 @@
     private final long providerService;
     private final String serviceSpecificId;
     private final String vlanId;
+    private final ConnectPoint port;
 
     /**
      * Constructs a vOLT tenant object.
@@ -35,12 +37,13 @@
      * @param vlanId vlan id for the user
      */
     private VoltTenant(String humanReadableName, long id, long providerService,
-                       String serviceSpecificId, String vlanId) {
+                       String serviceSpecificId, String vlanId, ConnectPoint port) {
         this.humanReadableName = humanReadableName;
         this.id = id;
         this.providerService = providerService;
         this.serviceSpecificId = serviceSpecificId;
         this.vlanId = vlanId;
+        this.port = port;
     }
 
     /**
@@ -97,6 +100,10 @@
         return vlanId;
     }
 
+    public ConnectPoint port() {
+        return port;
+    }
+
     /**
      * Builder class to allow callers to assemble tenants.
      */
@@ -107,6 +114,7 @@
         private long providerService = -1;
         private String serviceSpecificId = "unknown";
         private String vlanId = "unknown";
+        private ConnectPoint port;
 
         /**
          * Sets the name string for the tenant.
@@ -163,6 +171,11 @@
             return this;
         }
 
+        public Builder withPort(ConnectPoint port) {
+            this.port = port;
+            return this;
+        }
+
         /**
          * Constructs a VoltTenant from the assembled data.
          *
@@ -170,7 +183,7 @@
          */
         public VoltTenant build() {
             return new VoltTenant(humanReadableName, id, providerService,
-                    serviceSpecificId, vlanId);
+                    serviceSpecificId, vlanId, port);
         }
     }
 
@@ -182,6 +195,7 @@
                 .add("providerService", providerService())
                 .add("serviceSpecificId", serviceSpecificId())
                 .add("vlanId", vlanId())
+                .add("port", port())
                 .toString();
     }
 
diff --git a/apps/xos-integration/src/main/java/org/onosproject/xosintegration/cli/VoltTenantsCreateCommand.java b/apps/xos-integration/src/main/java/org/onosproject/xosintegration/cli/VoltTenantsCreateCommand.java
index 611446d..3a5b094 100644
--- a/apps/xos-integration/src/main/java/org/onosproject/xosintegration/cli/VoltTenantsCreateCommand.java
+++ b/apps/xos-integration/src/main/java/org/onosproject/xosintegration/cli/VoltTenantsCreateCommand.java
@@ -18,6 +18,7 @@
 import org.apache.karaf.shell.commands.Argument;
 import org.apache.karaf.shell.commands.Command;
 import org.onosproject.cli.AbstractShellCommand;
+import org.onosproject.net.ConnectPoint;
 import org.onosproject.xosintegration.VoltTenant;
 import org.onosproject.xosintegration.VoltTenantService;
 
@@ -38,6 +39,11 @@
             required = true, multiValued = false)
     String vlanId;
 
+    @Argument(index = 2, name = "port",
+            description = "Port",
+            required = true, multiValued = false)
+    String port;
+
     @Override
     protected void execute() {
         VoltTenantService service = get(VoltTenantService.class);
@@ -45,7 +51,9 @@
         VoltTenant newTenant = VoltTenant.builder()
                 .withServiceSpecificId(serviceSpecificId)
                 .withVlanId(vlanId)
+                .withPort(ConnectPoint.deviceConnectPoint(port))
                 .build();
+
         service.addTenant(newTenant);
     }
 }
