diff --git a/TestON/tests/FUNCipv6Intent/Dependency/FUNCIpv6IntentFunction.py b/TestON/tests/FUNCipv6Intent/Dependency/FUNCIpv6IntentFunction.py
index ec1ae9c..6930ef3 100644
--- a/TestON/tests/FUNCipv6Intent/Dependency/FUNCIpv6IntentFunction.py
+++ b/TestON/tests/FUNCipv6Intent/Dependency/FUNCIpv6IntentFunction.py
@@ -117,11 +117,10 @@
         return main.FALSE
 
     # Discover hosts using arping incase pingall discovery failed
-    main.log.info( itemName + ": Discover host using arping" )
-    main.Mininet1.arping( srcHost=host1, dstHost=host2 )
-    main.Mininet1.arping( srcHost=host2, dstHost=host1 )
-    host1 = main.CLIs[ 0 ].getHost( mac=h1Mac )
-    host2 = main.CLIs[ 0 ].getHost( mac=h2Mac )
+    #main.log.info( itemName + ": Discover host using pingall" )
+    #main.Mininet1.pingall( protocol='IPv6' )
+    #host1 = main.CLIs[ 0 ].getHost( mac=h1Mac )
+    #host2 = main.CLIs[ 0 ].getHost( mac=h2Mac )
 
     # Check flows count in each node
     checkFlowsCount( main )
@@ -147,13 +146,14 @@
     checkFlowsState( main )
 
     # Ping hosts
-    firstPingResult = pingallHosts( main, hostNames )
+    #firstPingResult = ping6allHosts( main, hostNames )
+    firstPingResult = main.Mininet1.ping6pair(SRC=hostNames[0], TARGET=main.hostsData[ host2 ][ 'ipAddresses' ][ 0 ])
     if not firstPingResult:
         main.log.debug( "First ping failed, there must be" +
                        " something wrong with ONOS performance" )
 
     # Ping hosts again...
-    pingTemp = pingallHosts( main, hostNames )
+    pingTemp = main.Mininet1.ping6pair(SRC=hostNames[0], TARGET=main.hostsData[ host2 ][ 'ipAddresses' ][ 0 ])
     pingResult = pingResult and pingTemp
     if pingTemp:
         main.assertReturnString += 'Initial Pingall Passed\n'
@@ -405,7 +405,7 @@
     checkFlowsState( main )
 
     # Ping hosts
-    pingTemp = main.Mininet1.ping6pair(SRC=host1, TARGET='10:1:0::5')
+    pingTemp = main.Mininet1.ping6pair(SRC=host1, TARGET=main.hostsData[ host2 ][ 'ipAddresses' ][ 0 ])
     pingResult = pingResult and pingTemp
     if pingTemp:
         main.assertReturnString += 'Initial Ping6 pair Passed\n'
@@ -687,7 +687,7 @@
     checkFlowsState( main )
 
     # Run iperf to both host
-    iperfTemp = main.Mininet1.iperftcp( host1,host2,10 )
+    iperfTemp = main.Mininet1.iperftcp( host1,host2,timeout=10 )
     iperfResult = iperfResult and iperfTemp
     if iperfTemp:
         main.assertReturnString += 'Initial Iperf Passed\n'
@@ -717,7 +717,7 @@
             main.assertReturnString += 'Link Down Topology State Failed\n'
 
         # Run iperf to both host
-        iperfTemp = main.Mininet1.iperftcp( host1,host2,10 )
+        iperfTemp = main.Mininet1.iperftcp( host1,host2,timeout=10 )
         iperfResult = iperfResult and iperfTemp
         if iperfTemp:
             main.assertReturnString += 'Link Down Iperf Passed\n'
@@ -761,7 +761,7 @@
             main.assertReturnString += 'Link Up Topology State Failed\n'
 
         # Run iperf to both host
-        iperfTemp = main.Mininet1.iperftcp( host1,host2,10 )
+        iperfTemp = main.Mininet1.iperftcp( host1,host2,timeout=10 )
         iperfResult = iperfResult and iperfTemp
         if iperfTemp:
             main.assertReturnString += 'Link Up Iperf Passed\n'
@@ -1392,6 +1392,10 @@
     getDataResult = main.TRUE
     main.log.info( "Activating reactive forwarding app " )
     activateResult = main.CLIs[ 0 ].activateApp( "org.onosproject.fwd" )
+    main.CLIs[ 0 ].setCfg( "org.onosproject.fwd.ReactiveForwarding", "ipv6Forwarding", "true")
+    main.CLIs[ 0 ].setCfg( "org.onosproject.fwd.ReactiveForwarding", "matchIpv6Address", "true")
+    main.CLIs[ 0 ].setCfg( "org.onosproject.fwd.ReactiveForwarding", "ipv6Forwarding", "true")
+    main.CLIs[ 0 ].setCfg( "org.onosproject.fwd.ReactiveForwarding", "matchIpv6Address", "true")
     time.sleep( main.fwdSleep )
 
     for i in range( main.numCtrls ):
@@ -1400,7 +1404,7 @@
             main.log.warn( main.CLIs[ i ].apps() )
             main.log.warn( main.CLIs[ i ].appIDs() )
 
-    pingResult = main.Mininet1.pingall( timeout = 600 )
+    pingResult = main.Mininet1.pingall( protocol="IPv6", timeout = 600 )
     hostsJson = json.loads( main.CLIs[ 0 ].hosts() )
     hosts = main.Mininet1.getHosts().keys()
     # TODO: Make better use of new getHosts function
diff --git a/TestON/tests/FUNCipv6Intent/Dependency/newFuncTopo.py b/TestON/tests/FUNCipv6Intent/Dependency/newFuncTopo.py
index ff63bf9..d4731f3 100755
--- a/TestON/tests/FUNCipv6Intent/Dependency/newFuncTopo.py
+++ b/TestON/tests/FUNCipv6Intent/Dependency/newFuncTopo.py
@@ -48,52 +48,38 @@
         # Initialize topology
         Topo.__init__( self )
         # Switch S5 Hosts
-        # IPv4 only Host
         host1=self.addHost( 'h1', cls=IPv6Host, v6Addr='10:1:0::1/64' )
-        # IPv6 only Host
         host2=self.addHost( 'h2', cls=IPv6Host, v6Addr='1000::2/64' )
         # Dual Stack Host
-        host3=self.addHost( 'h3', cls=IPv6Host, v6Addr='2000::2/64' )
-        # VLAN hosts
+        host3=self.addHost( 'h3', cls=dualStackHost, v6Addr='2000::2/64' )
         host4=self.addHost( 'h4', cls=IPv6Host, v6Addr='3000::2/64' )
-        host5=self.addHost( 'h5', cls=IPv6Host,v6Addr='4000::2/64' )
-        # VPN-1 and VPN-2 Hosts
+        #VLAN
+        host5=self.addHost( 'h5', cls=VLANHost,v6Addr='4000::2/64' )
         host6=self.addHost( 'h6', cls=IPv6Host, v6Addr='11:1:0::2/64' )
         host7=self.addHost( 'h7', cls=IPv6Host, v6Addr='12:1:0::2/64' )
-        # Multicast Sender
         host8=self.addHost( 'h8', cls=IPv6Host, v6Addr='10:1:0::4/64' )
 
         # Switch S6 Hosts
-        # IPv4 only Host
         host9=self.addHost( 'h9', cls=IPv6Host, v6Addr='10:1:0::5/64' )
-        # IPv6 only Host
         host10=self.addHost( 'h10', cls=IPv6Host, v6Addr='1000::3/64' )
         # Dual Stack Host
-        host11=self.addHost( 'h11', cls=IPv6Host, v6Addr='2000::3/64' )
-        # VLAN hosts
+        host11=self.addHost( 'h11', cls=dualStackHost, v6Addr='2000::3/64' )
         host12=self.addHost( 'h12', cls=IPv6Host, v6Addr='3000::3/64' )
         host13=self.addHost( 'h13', cls=IPv6Host, v6Addr='4000::3/64' )
-        # VPN-1 and VPN-2 Hosts
         host14=self.addHost( 'h14', cls=IPv6Host, v6Addr='11:1:0::3/64' )
         host15=self.addHost( 'h15', cls=IPv6Host, v6Addr='12:1:0::3/64' )
-        # Multicast Receiver
         host16=self.addHost( 'h16', cls=IPv6Host, v6Addr='10:1:0::7/64' )
 
         # Switch S7 Hosts
-        # IPv4 only Host
         host17=self.addHost( 'h17', cls=IPv6Host, v6Addr='10:1:0::8/64' )
-        # IPv6 only Host
         host18=self.addHost( 'h18', cls=IPv6Host, v6Addr='1000::4/64' )
-        # Dual Stack Host
         host19=self.addHost( 'h19', cls=IPv6Host, v6Addr='10:1:0::9/64' )
-        # VLAN hosts
         host20=self.addHost( 'h20', cls=IPv6Host, v6Addr='100:1:0::4/64' )
         host21=self.addHost( 'h21', cls=IPv6Host, v6Addr='200:1:0::4/64' )
-        # VPN-1 and VPN-2 Hosts
         host22=self.addHost( 'h22', cls=IPv6Host, v6Addr='11:1:0::4/64' )
         host23=self.addHost( 'h23', cls=IPv6Host, v6Addr='12:1:0::4/64' )
-        # Multicast Receiver
-        host24=self.addHost( 'h24', cls=IPv6Host, v6Addr='10:1:0::10/64' )
+        # VLAN 
+        host24=self.addHost( 'h24', cls=VLANHost, v6Addr='4000::5/64' )
 
         s1 = self.addSwitch( 's1' )
         s2 = self.addSwitch( 's2' )
