diff --git a/TestON/tests/FUNC/FUNCipv6Intent/FUNCipv6Intent.py b/TestON/tests/FUNC/FUNCipv6Intent/FUNCipv6Intent.py
index 2d0e86d..4488458 100644
--- a/TestON/tests/FUNC/FUNCipv6Intent/FUNCipv6Intent.py
+++ b/TestON/tests/FUNC/FUNCipv6Intent/FUNCipv6Intent.py
@@ -1,5 +1,5 @@
 """
-Copyright 2015 Open Networking Foundation (ONF)
+Copyright 2015 Open Networking Foundation ( ONF )
 
 Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
 the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
@@ -8,7 +8,7 @@
     TestON is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
     the Free Software Foundation, either version 2 of the License, or
-    (at your option) any later version.
+    ( at your option ) any later version.
 
     TestON is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -18,7 +18,6 @@
     You should have received a copy of the GNU General Public License
     along with TestON.  If not, see <http://www.gnu.org/licenses/>.
 """
-
 # Testing the basic intent for ipv6 functionality of ONOS
 
 
@@ -103,9 +102,9 @@
 
         main.step( "Checking that ONOS is ready" )
 
-        ready =  utilities.retry( main.Cluster.command,
+        ready = utilities.retry( main.Cluster.command,
                                   False,
-                                  kwargs={ "function":"summary", "contentCheck":True },
+                                  kwargs={ "function": "summary", "contentCheck": True },
                                   sleep=30,
                                   attempts=3 )
         utilities.assert_equals( expect=True, actual=ready,
diff --git a/TestON/tests/FUNC/FUNCipv6Intent/dependencies/FUNCIpv6IntentFunction.py b/TestON/tests/FUNC/FUNCipv6Intent/dependencies/FUNCIpv6IntentFunction.py
index b45704e..afe8829 100644
--- a/TestON/tests/FUNC/FUNCipv6Intent/dependencies/FUNCIpv6IntentFunction.py
+++ b/TestON/tests/FUNC/FUNCipv6Intent/dependencies/FUNCIpv6IntentFunction.py
@@ -1,5 +1,5 @@
 """
-Copyright 2015 Open Networking Foundation (ONF)
+Copyright 2015 Open Networking Foundation ( ONF )
 
 Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
 the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
@@ -8,7 +8,7 @@
     TestON is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
     the Free Software Foundation, either version 2 of the License, or
-    (at your option) any later version.
+    ( at your option ) any later version.
 
     TestON is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -1884,7 +1884,7 @@
     main.log.info( itemName + ": Checking intents state" )
     # First check of intents
     stateResult = main.Cluster.command( "checkIntentState",
-                                         kwargs={ "intentsId":intentsId },
+                                         kwargs={ "intentsId": intentsId },
                                          returnBool=True, specificDriver=2 )
 
     expectedState = [ 'INSTALLED', 'INSTALLING' ]
@@ -1899,8 +1899,8 @@
         # Second check of intents since some of the intents may be in
         # INSTALLING state, they should be in INSTALLED at this time
         stateResult = main.Cluster.command( "checkIntentState",
-                                     kwargs={ "intentsId":intentsId },
-                                     returnBool=True, specificDriver=2 )
+                                            kwargs={ "intentsId": intentsId },
+                                            returnBool=True, specificDriver=2 )
         if stateResult:
             main.log.info( itemName + ": Intents are installed correctly" )
             intentResult = main.TRUE
diff --git a/TestON/tests/FUNC/FUNCipv6Intent/dependencies/newFuncTopo.py b/TestON/tests/FUNC/FUNCipv6Intent/dependencies/newFuncTopo.py
old mode 100755
new mode 100644
index 91b2fc5..03d2eae
--- a/TestON/tests/FUNC/FUNCipv6Intent/dependencies/newFuncTopo.py
+++ b/TestON/tests/FUNC/FUNCipv6Intent/dependencies/newFuncTopo.py
@@ -1,5 +1,6 @@
+# !/usr/bin/python
 """
-Copyright 2015 Open Networking Foundation (ONF)
+Copyright 2015 Open Networking Foundation ( ONF )
 
 Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
 the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
@@ -8,7 +9,7 @@
     TestON is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
     the Free Software Foundation, either version 2 of the License, or
-    (at your option) any later version.
+    ( at your option ) any later version.
 
     TestON is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -19,8 +20,6 @@
     along with TestON.  If not, see <http://www.gnu.org/licenses/>.
 """
 
-#!/usr/bin/python
-
 """
 Custom topology for Mininet
 """
@@ -35,20 +34,24 @@
 from mininet.util import dumpNodeConnections
 from mininet.node import ( UserSwitch, OVSSwitch, IVSSwitch )
 
+
 class VLANHost( Host ):
+
     def config( self, vlan=100, v6Addr='3000::1/64', **params ):
         r = super( Host, self ).config( **params )
         intf = self.defaultIntf()
         self.cmd( 'ifconfig %s inet 0' % intf )
         self.cmd( 'vconfig add %s %d' % ( intf, vlan ) )
-        self.cmd( 'ifconfig %s.%d inet %s' % ( intf, vlan, params['ip'] ) )
+        self.cmd( 'ifconfig %s.%d inet %s' % ( intf, vlan, params[ 'ip' ] ) )
         self.cmd( 'ip -6 addr add %s dev %s.%d' % ( v6Addr, intf, vlan ) )
         newName = '%s.%d' % ( intf, vlan )
         intf.name = newName
         self.nameToIntf[ newName ] = intf
         return r
 
+
 class IPv6Host( Host ):
+
     def config( self, v6Addr='1000::1/64', **params ):
         r = super( Host, self ).config( **params )
         intf = self.defaultIntf()
@@ -56,51 +59,54 @@
         self.cmd( 'ip -6 addr add %s dev %s' % ( v6Addr, intf ) )
         return r
 
+
 class dualStackHost( Host ):
+
     def config( self, v6Addr='2000:1/64', **params ):
         r = super( Host, self ).config( **params )
         intf = self.defaultIntf()
         self.cmd( 'ip -6 addr add %s dev %s' % ( v6Addr, intf ) )
         return r
 
+
 class MyTopo( Topo ):
 
     def __init__( self ):
         # Initialize topology
         Topo.__init__( self )
         # Switch S5 Hosts
-        host1=self.addHost( 'h1', cls=IPv6Host, v6Addr='10:1:0::1/64' )
-        host2=self.addHost( 'h2', cls=IPv6Host, v6Addr='1000::2/64' )
+        host1 = self.addHost( 'h1', cls=IPv6Host, v6Addr='10:1:0::1/64' )
+        host2 = self.addHost( 'h2', cls=IPv6Host, v6Addr='1000::2/64' )
         # Dual Stack Host
-        host3=self.addHost( 'h3', cls=dualStackHost, v6Addr='2000::2/64' )
-        host4=self.addHost( 'h4', cls=IPv6Host, v6Addr='3000::2/64' )
-        #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' )
-        host8=self.addHost( 'h8', cls=IPv6Host, v6Addr='10:1:0::4/64' )
+        host3 = self.addHost( 'h3', cls=dualStackHost, v6Addr='2000::2/64' )
+        host4 = self.addHost( 'h4', cls=IPv6Host, v6Addr='3000::2/64' )
+        # 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' )
+        host8 = self.addHost( 'h8', cls=IPv6Host, v6Addr='10:1:0::4/64' )
 
         # Switch S6 Hosts
-        host9=self.addHost( 'h9', cls=IPv6Host, v6Addr='10:1:0::5/64' )
-        host10=self.addHost( 'h10', cls=IPv6Host, v6Addr='1000::3/64' )
+        host9 = self.addHost( 'h9', cls=IPv6Host, v6Addr='10:1:0::5/64' )
+        host10 = self.addHost( 'h10', cls=IPv6Host, v6Addr='1000::3/64' )
         # Dual Stack Host
-        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' )
-        host14=self.addHost( 'h14', cls=IPv6Host, v6Addr='11:1:0::3/64' )
-        host15=self.addHost( 'h15', cls=IPv6Host, v6Addr='12:1:0::3/64' )
-        host16=self.addHost( 'h16', cls=IPv6Host, v6Addr='10:1:0::7/64' )
+        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' )
+        host14 = self.addHost( 'h14', cls=IPv6Host, v6Addr='11:1:0::3/64' )
+        host15 = self.addHost( 'h15', cls=IPv6Host, v6Addr='12:1:0::3/64' )
+        host16 = self.addHost( 'h16', cls=IPv6Host, v6Addr='10:1:0::7/64' )
 
         # Switch S7 Hosts
-        host17=self.addHost( 'h17', cls=IPv6Host, v6Addr='10:1:0::8/64' )
-        host18=self.addHost( 'h18', cls=IPv6Host, v6Addr='1000::4/64' )
-        host19=self.addHost( 'h19', cls=IPv6Host, v6Addr='10:1:0::9/64' )
-        host20=self.addHost( 'h20', cls=IPv6Host, v6Addr='100:1:0::4/64' )
-        host21=self.addHost( 'h21', cls=IPv6Host, v6Addr='200:1:0::4/64' )
-        host22=self.addHost( 'h22', cls=IPv6Host, v6Addr='11:1:0::4/64' )
-        host23=self.addHost( 'h23', cls=IPv6Host, v6Addr='12:1:0::4/64' )
-        # VLAN 
-        host24=self.addHost( 'h24', cls=VLANHost, v6Addr='4000::5/64' )
+        host17 = self.addHost( 'h17', cls=IPv6Host, v6Addr='10:1:0::8/64' )
+        host18 = self.addHost( 'h18', cls=IPv6Host, v6Addr='1000::4/64' )
+        host19 = self.addHost( 'h19', cls=IPv6Host, v6Addr='10:1:0::9/64' )
+        host20 = self.addHost( 'h20', cls=IPv6Host, v6Addr='100:1:0::4/64' )
+        host21 = self.addHost( 'h21', cls=IPv6Host, v6Addr='200:1:0::4/64' )
+        host22 = self.addHost( 'h22', cls=IPv6Host, v6Addr='11:1:0::4/64' )
+        host23 = self.addHost( 'h23', cls=IPv6Host, v6Addr='12:1:0::4/64' )
+        # VLAN
+        host24 = self.addHost( 'h24', cls=VLANHost, v6Addr='4000::5/64' )
 
         s1 = self.addSwitch( 's1' )
         s2 = self.addSwitch( 's2' )
@@ -110,56 +116,57 @@
         s6 = self.addSwitch( 's6' )
         s7 = self.addSwitch( 's7' )
 
-        self.addLink(s5,host1)
-        self.addLink(s5,host2)
-        self.addLink(s5,host3)
-        self.addLink(s5,host4)
-        self.addLink(s5,host5)
-        self.addLink(s5,host6)
-        self.addLink(s5,host7)
-        self.addLink(s5,host8)
+        self.addLink( s5, host1 )
+        self.addLink( s5, host2 )
+        self.addLink( s5, host3 )
+        self.addLink( s5, host4 )
+        self.addLink( s5, host5 )
+        self.addLink( s5, host6 )
+        self.addLink( s5, host7 )
+        self.addLink( s5, host8 )
 
-        self.addLink(s6,host9)
-        self.addLink(s6,host10)
-        self.addLink(s6,host11)
-        self.addLink(s6,host12)
-        self.addLink(s6,host13)
-        self.addLink(s6,host14)
-        self.addLink(s6,host15)
-        self.addLink(s6,host16)
+        self.addLink( s6, host9 )
+        self.addLink( s6, host10 )
+        self.addLink( s6, host11 )
+        self.addLink( s6, host12 )
+        self.addLink( s6, host13 )
+        self.addLink( s6, host14 )
+        self.addLink( s6, host15 )
+        self.addLink( s6, host16 )
 
-        self.addLink(s7,host17)
-        self.addLink(s7,host18)
-        self.addLink(s7,host19)
-        self.addLink(s7,host20)
-        self.addLink(s7,host21)
-        self.addLink(s7,host22)
-        self.addLink(s7,host23)
-        self.addLink(s7,host24)
+        self.addLink( s7, host17 )
+        self.addLink( s7, host18 )
+        self.addLink( s7, host19 )
+        self.addLink( s7, host20 )
+        self.addLink( s7, host21 )
+        self.addLink( s7, host22 )
+        self.addLink( s7, host23 )
+        self.addLink( s7, host24 )
 
-        self.addLink(s1,s2)
-        self.addLink(s1,s3)
-        self.addLink(s1,s4)
-        self.addLink(s1,s5)
-        self.addLink(s2,s3)
-        self.addLink(s2,s5)
-        self.addLink(s2,s6)
-        self.addLink(s3,s4)
-        self.addLink(s3,s6)
-        self.addLink(s4,s7)
+        self.addLink( s1, s2 )
+        self.addLink( s1, s3 )
+        self.addLink( s1, s4 )
+        self.addLink( s1, s5 )
+        self.addLink( s2, s3 )
+        self.addLink( s2, s5 )
+        self.addLink( s2, s6 )
+        self.addLink( s3, s4 )
+        self.addLink( s3, s6 )
+        self.addLink( s4, s7 )
         topos = { 'mytopo': ( lambda: MyTopo() ) }
 
 # HERE THE CODE DEFINITION OF THE TOPOLOGY ENDS
 
+
 def setupNetwork():
     "Create network"
     topo = MyTopo()
-    network = Mininet(topo=topo, autoSetMacs=True, controller=None)
+    network = Mininet( topo=topo, autoSetMacs=True, controller=None )
     network.start()
     CLI( network )
     network.stop()
 
 if __name__ == '__main__':
-    setLogLevel('info')
-    #setLogLevel('debug')
+    setLogLevel( 'info' )
+    # setLogLevel( 'debug' )
     setupNetwork()
