diff --git a/TestON/tests/USECASE/SegmentRouting/dependencies/cord_fabric.py b/TestON/tests/USECASE/SegmentRouting/dependencies/cord_fabric.py
index c890177..4f52689 100755
--- a/TestON/tests/USECASE/SegmentRouting/dependencies/cord_fabric.py
+++ b/TestON/tests/USECASE/SegmentRouting/dependencies/cord_fabric.py
@@ -5,7 +5,7 @@
 
 from mininet.net import Mininet
 from mininet.topo import Topo
-from mininet.node import RemoteController, UserSwitch, Host
+from mininet.node import RemoteController, UserSwitch, Host, OVSBridge
 from mininet.link import TCLink
 from mininet.log import setLogLevel
 from mininet.cli import CLI
@@ -23,7 +23,6 @@
                        help='number of hosts per leaf switch, default=2' )
     parser.add_option( '--onos', dest='onos', type='int', default=0,
                        help='number of ONOS Instances, default=0, 0 means localhost, 1 will use OC1 and so on' )
-
     (options, args) = parser.parse_args( )
     return options, args
 
@@ -34,32 +33,42 @@
 class LeafAndSpine( Topo ):
     def __init__( self, spine=2, leaf=2, fanout=2, **opts ):
         "Create Leaf and Spine Topo."
-
         Topo.__init__( self, **opts )
-
         # Add spine switches
         spines = { }
+        leafs = { }
         for s in range( spine ):
             spines[ s ] = self.addSwitch( 'spine10%s' % (s + 1),
                                           dpid="00000000010%s" % (s + 1) )
         # Set link speeds to 100Mb/s
         linkopts = dict( bw=100 )
-
         # Add Leaf switches
         for ls in range( leaf ):
-            leafSwitch = self.addSwitch( 'leaf%s' % (ls + 1),
-                                         dpid="00000000000%s" % (1 + ls) )
+            leafs[ ls ] = self.addSwitch( 'leaf%s' % (ls + 1),
+                                          dpid="00000000000%s" % (1 + ls) )
             # Connect leaf to all spines
             for s in range( spine ):
                 switch = spines[ s ]
-                self.addLink( leafSwitch, switch, **linkopts )
+                self.addLink( leafs[ ls ], switch, **linkopts )
             # Add hosts under a leaf, fanout hosts per leaf switch
             for f in range( fanout ):
                 host = self.addHost( 'h%s' % (ls * fanout + f + 1),
                                      cls=IpHost,
                                      ip='10.0.%s.%s/24' % ((ls + 1), (f + 1)),
                                      gateway='10.0.%s.254' % (ls + 1) )
-                self.addLink( host, leafSwitch, **linkopts )
+                self.addLink( host, leafs[ ls ], **linkopts )
+                # Add Xconnect simulation
+        br1 = self.addSwitch( 'br1', cls=OVSBridge )
+        self.addLink( br1, leafs[ 0 ], **linkopts )
+        for vid in [ 5, 10 ]:
+            olt = self.addHost( 'olt%s' % vid, cls=VLANHost, vlan=vid,
+                                ip="10.%s.0.1/24" % vid
+                                , mac="00:00:%02d:00:00:01" % vid )
+            vsg = self.addHost( 'vsg%s' % vid, cls=VLANHost, vlan=vid,
+                                ip="10.%s.0.2/24" % vid
+                                , mac="00:00:%02d:00:00:02" % vid )
+            self.addLink( olt, leafs[ 0 ], **linkopts )
+            self.addLink( vsg, br1, **linkopts )
 
 
 class IpHost( Host ):
@@ -74,6 +83,29 @@
         self.cmd( 'ip route add default via %s' % self.gateway )
 
 
+class VLANHost( Host ):
+    "Host connected to VLAN interface"
+
+    def config( self, vlan=100, **params ):
+        """Configure VLANHost according to (optional) parameters:
+           vlan: VLAN ID for default interface"""
+        r = super( VLANHost, self ).config( **params )
+        intf = self.defaultIntf( )
+        # remove IP from default, "physical" interface
+        self.cmd( 'ifconfig %s inet 0' % intf )
+        intf = self.defaultIntf( )
+        # create VLAN interface
+        self.cmd( 'vconfig add %s %d' % (intf, vlan) )
+        self.cmd( 'ifconfig %s.%d %s' % (intf, vlan, params[ 'ip' ]) )
+        # update the intf name and host's intf map
+        self.cmd( 'ifconfig %s.%d mtu 1480' % (intf, vlan) )
+        newName = '%s.%d' % (intf, vlan)
+        # update the (Mininet) interface to refer to VLAN interface name
+        intf.name = newName
+        # add VLAN interface to host's name to intf map
+        self.nameToIntf[ newName ] = intf
+
+
 def config( opts ):
     spine = opts.spine
     leaf = opts.leaf
@@ -83,9 +115,7 @@
         '127.0.0.1' ]
     topo = LeafAndSpine( spine=spine, leaf=leaf, fanout=fanout )
     net = Mininet( topo=topo, link=TCLink, build=False,
-                   switch=UserSwitch,
-                   controller=None,
-                   autoSetMacs=True )
+                   switch=UserSwitch, controller=None, autoSetMacs=True )
     i = 0
     for ip in controllers:
         net.addController( "c%s" % (i), controller=RemoteController, ip=ip )
