diff --git a/TestON/tests/FUNC/FUNCbgpls/FUNCbgpls.py b/TestON/tests/FUNC/FUNCbgpls/FUNCbgpls.py
index f89e57d..bd35266 100644
--- a/TestON/tests/FUNC/FUNCbgpls/FUNCbgpls.py
+++ b/TestON/tests/FUNC/FUNCbgpls/FUNCbgpls.py
@@ -1,6 +1,5 @@
 """
-
-Copyright 2016 Open Networking Foundation (ONF)
+Copyright 2016 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>,
@@ -9,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
@@ -68,11 +67,11 @@
             main.cleanAndExit()
         main.testSetUp.envSetupDescription()
         try:
-            main.cellName = main.params['ENV']['cellName']
-            main.ipList = os.getenv(main.params['CTRL']['ip1'])
-            main.scapy_ip = os.getenv(main.params['SCAPY']['HOSTNAMES'])
+            main.cellName = main.params[ 'ENV' ][ 'cellName' ]
+            main.ipList = os.getenv( main.params[ 'CTRL' ][ 'ip1' ] )
+            main.scapy_ip = os.getenv( main.params[ 'SCAPY' ][ 'HOSTNAMES' ] )
 
-            main.apps = main.params['ENV']['cellApps']
+            main.apps = main.params[ 'ENV' ][ 'cellApps' ]
             stepResult = main.testSetUp.envSetup()
         except Exception as e:
             main.testSetUp.envSetupException( e )
diff --git a/TestON/tests/FUNC/FUNCbgpls/dependencies/Nbdata.py b/TestON/tests/FUNC/FUNCbgpls/dependencies/Nbdata.py
index b1f44e1..17d4df8 100644
--- a/TestON/tests/FUNC/FUNCbgpls/dependencies/Nbdata.py
+++ b/TestON/tests/FUNC/FUNCbgpls/dependencies/Nbdata.py
@@ -1,5 +1,5 @@
 """
-Copyright 2016 Open Networking Foundation (ONF)
+Copyright 2016 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/>.
 """
-
 "**** Scripted by Antony Silvester ****** "
 import json
 from urllib import addbase
diff --git a/TestON/tests/FUNC/FUNCbgpls/dependencies/Scapyfiles/Deletion_Node.py b/TestON/tests/FUNC/FUNCbgpls/dependencies/Scapyfiles/Deletion_Node.py
old mode 100755
new mode 100644
index d747a5a..37adcf8
--- a/TestON/tests/FUNC/FUNCbgpls/dependencies/Scapyfiles/Deletion_Node.py
+++ b/TestON/tests/FUNC/FUNCbgpls/dependencies/Scapyfiles/Deletion_Node.py
@@ -1,5 +1,6 @@
+# !/usr/bin/python           # This is server.py file
 """
-Copyright 2016 Open Networking Foundation (ONF)
+Copyright 2016 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
@@ -18,8 +19,6 @@
     You should have received a copy of the GNU General Public License
     along with TestON.  If not, see <http://www.gnu.org/licenses/>.
 """
-
-#!/usr/bin/python           # This is server.py file
 from scapy.all import *
 import socket               # Import socket module
 import time                 # Import Time module
@@ -27,47 +26,46 @@
 import os
 
 path = os.getcwd()
-sys.path.append('OnosSystemTest/TestON/tests/FUNC/FUNCbgpls/dependencies')   #Setting the path for BgpLS
+sys.path.append( 'OnosSystemTest/TestON/tests/FUNC/FUNCbgpls/dependencies' )  # Setting the path for BgpLS
 from Nbdata import BgpLs
 
 obj = BgpLs()
 returnlist = obj.Constants()
-peerIp = returnlist[0][0]
+peerIp = returnlist[ 0 ][ 0 ]
 
-load_contrib('bgp')
+load_contrib( 'bgp' )
 s = socket.socket()         # Create a socket object
-host = peerIp # Get local machine name
+host = peerIp  # Get local machine name
 port = 179                # Reserve a port for your service.
-s.bind((host, port))        # Bind to the port
-pkts = rdpcap(path + "/OnosSystemTest/TestON/tests/FUNC/FUNCbgpls/dependencies/Bgpls_packets/bgpls.pcap")
-time.sleep(15)
-pkts[759][BGPOpen].bgp_id = peerIp
+s.bind( ( host, port ) )        # Bind to the port
+pkts = rdpcap( path + "/OnosSystemTest/TestON/tests/FUNC/FUNCbgpls/dependencies/Bgpls_packets/bgpls.pcap" )
+time.sleep( 15 )
+pkts[ 759 ][ BGPOpen ].bgp_id = peerIp
 
-s.listen(5)                   # Now wait for client connection.
+s.listen( 5 )                   # Now wait for client connection.
 
-print("starting Connecting to ONOS peer")
+print( "starting Connecting to ONOS peer" )
 c, addr = s.accept()     # Establish connection with client.
 print 'Got connection from ONOS :', addr
-c.send(str(pkts[759][BGPHeader])) # OPEN MESSAGE
-c.recv(4096)
-c.send(str(pkts[765][BGPHeader]))# KEEPALIVE MESSAGE
-c.recv(4096)
-c.send(str(pkts[768][BGPHeader]))   # UPDATE MESSAGES
-c.send(str(pkts[771][BGPHeader]))
-c.send(str(pkts[773][BGPHeader]))
-c.send(str(pkts[775][BGPHeader]))
-c.send(str(pkts[778][BGPHeader]))
-c.send(str(pkts[765][BGPHeader]))
+c.send( str( pkts[ 759 ][ BGPHeader ] ) )  # OPEN MESSAGE
+c.recv( 4096 )
+c.send( str( pkts[ 765 ][ BGPHeader ] ) )  # KEEPALIVE MESSAGE
+c.recv( 4096 )
+c.send( str( pkts[ 768 ][ BGPHeader ] ) )   # UPDATE MESSAGES
+c.send( str( pkts[ 771 ][ BGPHeader ] ) )
+c.send( str( pkts[ 773 ][ BGPHeader ] ) )
+c.send( str( pkts[ 775 ][ BGPHeader ] ) )
+c.send( str( pkts[ 778 ][ BGPHeader ] ) )
+c.send( str( pkts[ 765 ][ BGPHeader ] ) )
 
-time.sleep(15)
-c.send(str(pkts[1168][BGPHeader]))
-c.send(str(pkts[1250][BGPHeader]))
-c.send(str(pkts[1354][BGPHeader]))
-print ("Node Delete msg sent")
+time.sleep( 15 )
+c.send( str( pkts[ 1168 ][ BGPHeader ] ) )
+c.send( str( pkts[ 1250 ][ BGPHeader ] ) )
+c.send( str( pkts[ 1354 ][ BGPHeader ] ) )
+print ( "Node Delete msg sent" )
 
 
 while True:
-    c.recv(4096)
-    c.send(str(pkts[765][BGPHeader]))
-
-  # c.close()                # Close the connection
+    c.recv( 4096 )
+    c.send( str( pkts[ 765 ][ BGPHeader ] ) )
+    # c.close()   # Close the connection
diff --git a/TestON/tests/FUNC/FUNCbgpls/dependencies/Scapyfiles/Link_Update_Node.py b/TestON/tests/FUNC/FUNCbgpls/dependencies/Scapyfiles/Link_Update_Node.py
old mode 100755
new mode 100644
index 15c5757..4bf1187
--- a/TestON/tests/FUNC/FUNCbgpls/dependencies/Scapyfiles/Link_Update_Node.py
+++ b/TestON/tests/FUNC/FUNCbgpls/dependencies/Scapyfiles/Link_Update_Node.py
@@ -1,5 +1,6 @@
+# !/usr/bin/python           # This is server.py file
 """
-Copyright 2016 Open Networking Foundation (ONF)
+Copyright 2016 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
@@ -18,8 +19,6 @@
     You should have received a copy of the GNU General Public License
     along with TestON.  If not, see <http://www.gnu.org/licenses/>.
 """
-
-#!/usr/bin/python           # This is server.py file
 from scapy.all import *
 import socket               # Import socket module
 import time                 # Import Time module
@@ -27,40 +26,39 @@
 import os
 
 path = os.getcwd()
-sys.path.append('OnosSystemTest/TestON/tests/FUNC/FUNCbgpls/dependencies')   #Setting the path for BgpLS
+sys.path.append( 'OnosSystemTest/TestON/tests/FUNC/FUNCbgpls/dependencies' )  # Setting the path for BgpLS
 from Nbdata import BgpLs
 
 obj = BgpLs()
 returnlist = obj.Constants()
-peerIp = returnlist[0][0]
+peerIp = returnlist[ 0 ][ 0 ]
 
-load_contrib('bgp')
+load_contrib( 'bgp' )
 s = socket.socket()         # Create a socket object
-host = peerIp # Get local machine name
+host = peerIp  # Get local machine name
 port = 179                # Reserve a port for your service.
-s.bind((host, port))        # Bind to the port
-pkts = rdpcap(path + "/OnosSystemTest/TestON/tests/FUNC/FUNCbgpls/dependencies/Bgpls_packets/bgpls.pcap")
-time.sleep(15)
-pkts[759][BGPOpen].bgp_id = peerIp
+s.bind( ( host, port ) )        # Bind to the port
+pkts = rdpcap( path + "/OnosSystemTest/TestON/tests/FUNC/FUNCbgpls/dependencies/Bgpls_packets/bgpls.pcap" )
+time.sleep( 15 )
+pkts[ 759 ][ BGPOpen ].bgp_id = peerIp
 
-s.listen(5)                   # Now wait for client connection.
+s.listen( 5 )                   # Now wait for client connection.
 
-print("starting Connecting to ONOS peer")
+print( "starting Connecting to ONOS peer" )
 c, addr = s.accept()     # Establish connection with client.
 print 'Got connection from ONOS :', addr
-c.send(str(pkts[759][BGPHeader])) # OPEN MESSAGE
-c.recv(4096)
-c.send(str(pkts[765][BGPHeader]))# KEEPALIVE MESSAGE
-c.recv(4096)
-c.send(str(pkts[768][BGPHeader]))   # UPDATE MESSAGES
-c.send(str(pkts[771][BGPHeader]))
-c.send(str(pkts[773][BGPHeader]))
-c.send(str(pkts[775][BGPHeader]))
-c.send(str(pkts[778][BGPHeader]))
-c.send(str(pkts[765][BGPHeader]))
+c.send( str( pkts[ 759 ][ BGPHeader ] ) )  # OPEN MESSAGE
+c.recv( 4096 )
+c.send( str( pkts[ 765 ][ BGPHeader ] ) )  # KEEPALIVE MESSAGE
+c.recv( 4096 )
+c.send( str( pkts[ 768 ][ BGPHeader ] ) )   # UPDATE MESSAGES
+c.send( str( pkts[ 771 ][ BGPHeader ] ) )
+c.send( str( pkts[ 773 ][ BGPHeader ] ) )
+c.send( str( pkts[ 775 ][ BGPHeader ] ) )
+c.send( str( pkts[ 778 ][ BGPHeader ] ) )
+c.send( str( pkts[ 765 ][ BGPHeader ] ) )
 
 while True:
-    c.recv(4096)
-    c.send(str(pkts[765][BGPHeader]))
-
-  # c.close()                # Close the connection
+    c.recv( 4096 )
+    c.send( str( pkts[ 765 ][ BGPHeader ] ) )
+    # c.close()                # Close the connection
diff --git a/TestON/tests/FUNC/FUNCbgpls/dependencies/Scapyfiles/Topo_discovery.py b/TestON/tests/FUNC/FUNCbgpls/dependencies/Scapyfiles/Topo_discovery.py
old mode 100755
new mode 100644
index 332a0ef..183388f
--- a/TestON/tests/FUNC/FUNCbgpls/dependencies/Scapyfiles/Topo_discovery.py
+++ b/TestON/tests/FUNC/FUNCbgpls/dependencies/Scapyfiles/Topo_discovery.py
@@ -1,5 +1,6 @@
+#!/usr/bin/python           # This is server.py file
 """
-Copyright 2016 Open Networking Foundation (ONF)
+Copyright 2016 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
@@ -18,8 +19,6 @@
     You should have received a copy of the GNU General Public License
     along with TestON.  If not, see <http://www.gnu.org/licenses/>.
 """
-
-#!/usr/bin/python           # This is server.py file
 from scapy.all import *
 import socket               # Import socket module
 import time                 # Import Time module
@@ -27,36 +26,35 @@
 import os
 
 path = os.getcwd()
-sys.path.append('OnosSystemTest/TestON/tests/FUNC/FUNCbgpls/dependencies')   #Setting the path for BgpLS
+sys.path.append( 'OnosSystemTest/TestON/tests/FUNC/FUNCbgpls/dependencies' )  # Setting the path for BgpLS
 from Nbdata import BgpLs
 
 obj = BgpLs()
 returnlist = obj.Constants()
-peerIp = returnlist[0][0]
+peerIp = returnlist[ 0 ][ 0 ]
 
-load_contrib('bgp')
+load_contrib( 'bgp' )
 s = socket.socket()         # Create a socket object
-host = peerIp # Get local machine name
+host = peerIp  # Get local machine name
 port = 179                # Reserve a port for your service.
-s.bind((host, port))        # Bind to the port
-pkts = rdpcap(path + "/OnosSystemTest/TestON/tests/FUNC/FUNCbgpls/dependencies/Bgpls_packets/bgpls_all.pcap")
-pkts[69][BGPOpen].bgp_id = peerIp
+s.bind( ( host, port ) )        # Bind to the port
+pkts = rdpcap( path + "/OnosSystemTest/TestON/tests/FUNC/FUNCbgpls/dependencies/Bgpls_packets/bgpls_all.pcap" )
+pkts[ 69 ][ BGPOpen ].bgp_id = peerIp
 
-s.listen(5)                 # Now wait for client connection.
+s.listen( 5 )                 # Now wait for client connection.
 
-print("starting Connecting to ONOS peer")
+print( "starting Connecting to ONOS peer" )
 c, addr = s.accept()     # Establish connection with client.
 print 'Got connection from ONOS :', addr
-c.send(str(pkts[69][BGPHeader])) # OPEN MESSAGE
-c.recv(4096)
-c.send(str(pkts[71][BGPHeader]))# KEEPALIVE MESSAGE
-c.recv(4096)
-c.send(str(pkts[72][BGPHeader]))   # UPDATE MESSAGES
-c.send(str(pkts[74][BGPHeader]))
-c.send(str(pkts[71][BGPHeader]))
+c.send( str( pkts[ 69 ][ BGPHeader ] ) )  # OPEN MESSAGE
+c.recv( 4096 )
+c.send( str( pkts[ 71 ][ BGPHeader ] ) )  # KEEPALIVE MESSAGE
+c.recv( 4096 )
+c.send( str( pkts[ 72 ][ BGPHeader ] ) )   # UPDATE MESSAGES
+c.send( str( pkts[ 74 ][ BGPHeader ] ) )
+c.send( str( pkts[ 71 ][ BGPHeader ] ) )
 
 while True:
-    c.recv(4096)
-    c.send(str(pkts[71][BGPHeader]))
-
-  # c.close()                # Close the connection
+    c.recv( 4096 )
+    c.send( str( pkts[ 71 ][ BGPHeader ] ) )
+    # c.close()                # Close the connection
diff --git a/TestON/tests/FUNC/FUNCbgpls/dependencies/Scapyfiles/Update_Node.py b/TestON/tests/FUNC/FUNCbgpls/dependencies/Scapyfiles/Update_Node.py
old mode 100755
new mode 100644
index 7feed1b..919898d
--- a/TestON/tests/FUNC/FUNCbgpls/dependencies/Scapyfiles/Update_Node.py
+++ b/TestON/tests/FUNC/FUNCbgpls/dependencies/Scapyfiles/Update_Node.py
@@ -1,5 +1,6 @@
+#!/usr/bin/python           # This is server.py file
 """
-Copyright 2016 Open Networking Foundation (ONF)
+Copyright 2016 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
@@ -18,8 +19,6 @@
     You should have received a copy of the GNU General Public License
     along with TestON.  If not, see <http://www.gnu.org/licenses/>.
 """
-
-#!/usr/bin/python           # This is server.py file
 from scapy.all import *
 import socket               # Import socket module
 import time                 # Import Time module
@@ -27,43 +26,42 @@
 import os
 
 path = os.getcwd()
-sys.path.append('OnosSystemTest/TestON/tests/FUNC/FUNCbgpls/dependencies')   #Setting the path for BgpLS
+sys.path.append( 'OnosSystemTest/TestON/tests/FUNC/FUNCbgpls/dependencies' )  # Setting the path for BgpLS
 from Nbdata import BgpLs
 
 obj = BgpLs()
 returnlist = obj.Constants()
-peerIp = returnlist[0][0]
+peerIp = returnlist[ 0 ][ 0 ]
 
-load_contrib('bgp')
+load_contrib( 'bgp' )
 s = socket.socket()         # Create a socket object
-host = peerIp # Get local machine name
+host = peerIp  # Get local machine name
 port = 179                # Reserve a port for your service.
-s.bind((host, port))        # Bind to the port
-pkts = rdpcap(path + "/OnosSystemTest/TestON/tests/FUNC/FUNCbgpls/dependencies/Bgpls_packets/bgpls_all.pcap")
-pkts[69][BGPOpen].bgp_id = peerIp
+s.bind( ( host, port ) )        # Bind to the port
+pkts = rdpcap( path + "/OnosSystemTest/TestON/tests/FUNC/FUNCbgpls/dependencies/Bgpls_packets/bgpls_all.pcap" )
+pkts[ 69 ][ BGPOpen ].bgp_id = peerIp
 
-s.listen(5)                 # Now wait for client connection.
+s.listen( 5 )                 # Now wait for client connection.
 
-print("starting Connecting to ONOS peer")
+print( "starting Connecting to ONOS peer" )
 c, addr = s.accept()     # Establish connection with client.
 print 'Got connection from ONOS :', addr
-c.send(str(pkts[69][BGPHeader])) # OPEN MESSAGE
-c.recv(4096)
-c.send(str(pkts[71][BGPHeader]))# KEEPALIVE MESSAGE
-c.recv(4096)
-c.send(str(pkts[72][BGPHeader]))   # UPDATE MESSAGES
-c.send(str(pkts[74][BGPHeader]))
-c.send(str(pkts[71][BGPHeader]))
+c.send( str( pkts[ 69 ][ BGPHeader ] ) )  # OPEN MESSAGE
+c.recv( 4096 )
+c.send( str( pkts[ 71 ][ BGPHeader ] ) )  # KEEPALIVE MESSAGE
+c.recv( 4096 )
+c.send( str( pkts[ 72 ][ BGPHeader ] ) )   # UPDATE MESSAGES
+c.send( str( pkts[ 74 ][ BGPHeader ] ) )
+c.send( str( pkts[ 71 ][ BGPHeader ] ) )
 
-time.sleep(10)               # Waiting for 120 seconds for update message.
+time.sleep( 10 )               # Waiting for 120 seconds for update message.
 
-c.send(str(pkts[298][BGPHeader]))
-c.send(str(pkts[860][BGPHeader]))   # UPDATE MESSAGES with new node
-c.send(str(pkts[865][BGPHeader]))
-print ("New Node update msg sent")
+c.send( str( pkts[ 298 ][ BGPHeader ] ) )
+c.send( str( pkts[ 860 ][ BGPHeader ] ) )   # UPDATE MESSAGES with new node
+c.send( str( pkts[ 865 ][ BGPHeader ] ) )
+print ( "New Node update msg sent" )
 
 while True:
-    c.recv(4096)
-    c.send(str(pkts[71][BGPHeader]))
-
-  # c.close()                # Close the connection
+    c.recv( 4096 )
+    c.send( str( pkts[ 71 ][ BGPHeader ] ) )
+    # c.close()                # Close the connection
diff --git a/TestON/tests/FUNC/FUNCflow/FUNCflow.py b/TestON/tests/FUNC/FUNCflow/FUNCflow.py
index 9b504ba..e900648 100644
--- a/TestON/tests/FUNC/FUNCflow/FUNCflow.py
+++ b/TestON/tests/FUNC/FUNCflow/FUNCflow.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/>.
 """
-
 class FUNCflow:
 
     def __init__( self ):
@@ -42,7 +41,6 @@
             - Checkout ONOS master branch
             - Pull latest ONOS code
         """
-
         main.testSetUp.envSetupDescription()
         stepResult = main.FALSE
         try:
@@ -71,7 +69,7 @@
                 main.checkingFlow = CheckingFlow()
             except ImportError as e:
                 print e
-                main.log.error("CheckingFlow not found exiting the test")
+                main.log.error( "CheckingFlow not found exiting the test" )
                 main.cleanAndExit()
             copyResult = main.ONOSbench.scp( main.Mininet1,
                                              main.dependencyPath + main.topology,
@@ -89,7 +87,6 @@
             main.testSetUp.envSetupException( e )
         main.testSetUp.evnSetupConclusion( stepResult )
 
-
     def CASE2( self, main ):
         """
         - Set up cell
@@ -788,7 +785,7 @@
         udpDst = main.params[ 'TEST' ][ 'udpDst' ]
 
         main.log.info( "Add a flow that connects host1 on port1 to host2 on port2" )
-        stepResult =ctrl.REST.addFlow( deviceId=main.swDPID,
+        stepResult = ctrl.REST.addFlow( deviceId=main.swDPID,
                                             egressPort=egress,
                                             ingressPort=ingress,
                                             ethType=ethType,
diff --git a/TestON/tests/FUNC/FUNCflow/dependencies/checkingFlow.py b/TestON/tests/FUNC/FUNCflow/dependencies/checkingFlow.py
index 4209947..37ae8b6 100644
--- a/TestON/tests/FUNC/FUNCflow/dependencies/checkingFlow.py
+++ b/TestON/tests/FUNC/FUNCflow/dependencies/checkingFlow.py
@@ -1,12 +1,14 @@
 import json
 import time
+
+
 class CheckingFlow:
 
     def __init__( self ):
         self.default = ''
 
     def checkFlow( self ):
-        main.step("Check flow is in the ADDED state")
+        main.step( "Check flow is in the ADDED state" )
         main.log.info( "Get the flows from ONOS" )
         try:
             flows = json.loads( main.Cluster.active( 0 ).REST.flows() )
diff --git a/TestON/tests/FUNC/FUNCflow/dependencies/mplsClass.py b/TestON/tests/FUNC/FUNCflow/dependencies/mplsClass.py
index 66d4664..ec9ebaa 100644
--- a/TestON/tests/FUNC/FUNCflow/dependencies/mplsClass.py
+++ b/TestON/tests/FUNC/FUNCflow/dependencies/mplsClass.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,14 +18,14 @@
     You should have received a copy of the GNU General Public License
     along with TestON.  If not, see <http://www.gnu.org/licenses/>.
 """
-
 import scapy
 
-class MPLS(Packet):
-        name = "MPLS"
-        fields_desc =  [
-                BitField("label", 3, 20),
-                BitField("experimental_bits", 0, 3),
-                BitField("bottom_of_label_stack", 1, 1), # Now we're at the bottom
-                ByteField("TTL", 255)
-        ]
+
+class MPLS( Packet ):
+    name = "MPLS"
+    fields_desc = [
+            BitField( "label", 3, 20 ),
+            BitField( "experimental_bits", 0, 3 ),
+            BitField( "bottom_of_label_stack", 1, 1 ),  # Now we're at the bottom
+            ByteField( "TTL", 255 )
+    ]
diff --git a/TestON/tests/FUNC/FUNCflow/dependencies/topo-flow.py b/TestON/tests/FUNC/FUNCflow/dependencies/topo-flow.py
old mode 100755
new mode 100644
index 8a5e402..0dbaa80
--- a/TestON/tests/FUNC/FUNCflow/dependencies/topo-flow.py
+++ b/TestON/tests/FUNC/FUNCflow/dependencies/topo-flow.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,19 +34,23 @@
 from mininet.util import dumpNodeConnections
 from mininet.node import ( UserSwitch, OVSSwitch, IVSSwitch )
 
+
 class VLANHost( Host ):
+
     def config( self, vlan=100, **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' ] ) )
         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()
@@ -55,45 +58,46 @@
         self.cmd( 'ip -6 addr add %s dev %s' % ( v6Addr, intf ) )
         return r
 
+
 class MyTopo( Topo ):
 
     def __init__( self, **opts ):
         # Initialize topology
-        Topo.__init__( self, **opts)
+        Topo.__init__( self, **opts )
 
         # IPv4 hosts
-        host1=self.addHost( 'h1', ip='10.0.0.1/24' )
-        host2=self.addHost( 'h2', ip='10.0.0.2/24' )
+        host1 = self.addHost( 'h1', ip='10.0.0.1/24' )
+        host2 = self.addHost( 'h2', ip='10.0.0.2/24' )
 
         # VLAN hosts
-        host3=self.addHost( 'h3', ip='10.0.0.3/24', cls=VLANHost, vlan=10 )
-        host4=self.addHost( 'h4', ip='10.0.0.4/24', cls=VLANHost, vlan=10 )
+        host3 = self.addHost( 'h3', ip='10.0.0.3/24', cls=VLANHost, vlan=10 )
+        host4 = self.addHost( 'h4', ip='10.0.0.4/24', cls=VLANHost, vlan=10 )
 
-        #IPv6 hosts
-        host5=self.addHost( 'h5', ip='10.0.0.5/24', cls=IPv6Host, v6Addr='1000::5/64')
-        host6=self.addHost( 'h6', ip='10.0.0.6/24', cls=IPv6Host, v6Addr='1000::6/64')
+        # IPv6 hosts
+        host5 = self.addHost( 'h5', ip='10.0.0.5/24', cls=IPv6Host, v6Addr='1000::5/64' )
+        host6 = self.addHost( 'h6', ip='10.0.0.6/24', cls=IPv6Host, v6Addr='1000::6/64' )
 
         s1 = self.addSwitch( 's1' )
 
-        self.addLink(s1, host1)
-        self.addLink(s1, host2)
-        self.addLink(s1, host3)
-        self.addLink(s1, host4)
-        self.addLink(s1, host5)
-        self.addLink(s1, host6)
-
+        self.addLink( s1, host1 )
+        self.addLink( s1, host2 )
+        self.addLink( s1, host3 )
+        self.addLink( s1, host4 )
+        self.addLink( s1, host5 )
+        self.addLink( s1, host6 )
 
         topos = { 'mytopo': ( lambda: MyTopo() ) }
 
+
 def setupNetwork():
     "Create network"
     topo = MyTopo()
-    network = Mininet(topo=topo, autoSetMacs=True, autoStaticArp=True, controller=None)
+    network = Mininet( topo=topo, autoSetMacs=True, autoStaticArp=True, controller=None )
     network.start()
     CLI( network )
     network.stop()
 
 if __name__ == '__main__':
-    setLogLevel('info')
-    #setLogLevel('debug')
+    setLogLevel( 'info' )
+    # setLogLevel( 'debug' )
     setupNetwork()
diff --git a/TestON/tests/FUNC/FUNCgroup/FUNCgroup.py b/TestON/tests/FUNC/FUNCgroup/FUNCgroup.py
index de50155..8e06747 100644
--- a/TestON/tests/FUNC/FUNCgroup/FUNCgroup.py
+++ b/TestON/tests/FUNC/FUNCgroup/FUNCgroup.py
@@ -1,5 +1,5 @@
 """
-Copyright 2016 Open Networking Foundation (ONF)
+Copyright 2016 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/>.
 """
-
 class FUNCgroup:
 
     def __init__( self ):
@@ -47,51 +46,51 @@
 
         try:
             # Test variables
-            main.cellName = main.params['ENV']['cellName']
-            main.apps = main.params['ENV']['cellApps']
-            main.ONOSport = main.params['CTRL']['port']
+            main.cellName = main.params[ 'ENV' ][ 'cellName' ]
+            main.apps = main.params[ 'ENV' ][ 'cellApps' ]
+            main.ONOSport = main.params[ 'CTRL' ][ 'port' ]
             main.dependencyPath = main.testOnDirectory + \
-                                  main.params['DEPENDENCY']['path']
-            wrapperFile1 = main.params['DEPENDENCY']['wrapper1']
-            wrapperFile2 = main.params['DEPENDENCY']['wrapper2']
-            main.topology = main.params['DEPENDENCY']['topology']
-            bucket = main.params['DEPENDENCY']['bucket']
-            main.startUpSleep = int(main.params['SLEEP']['startup'])
-            main.startMNSleep = int(main.params['SLEEP']['startMN'])
-            main.addFlowSleep = int(main.params['SLEEP']['addFlow'])
-            main.delFlowSleep = int(main.params['SLEEP']['delFlow'])
-            main.addGroupSleep = int(main.params['SLEEP']['addGroup'])
-            main.delGroupSleep = int(main.params['SLEEP']['delGroup'])
-            main.debug = main.params['DEBUG']
-            main.swDPID = main.params['TEST']['swDPID']
-            egressPort1 = main.params['TEST']['egressPort1']
-            egressPort2 = main.params['TEST']['egressPort2']
-            egressPort3 = main.params['TEST']['egressPort3']
-            ingressPort = main.params['TEST']['ingressPort']
-            appCookie = main.params['TEST']['appCookie']
-            type1 = main.params['TEST']['type1']
-            type2 = main.params['TEST']['type2']
-            groupId = main.params['TEST']['groupId']
-            priority = main.params['TEST']['priority']
-            deviceId = main.params['TEST']['swDPID']
+                                  main.params[ 'DEPENDENCY' ][ 'path' ]
+            wrapperFile1 = main.params[ 'DEPENDENCY' ][ 'wrapper1' ]
+            wrapperFile2 = main.params[ 'DEPENDENCY' ][ 'wrapper2' ]
+            main.topology = main.params[ 'DEPENDENCY' ][ 'topology' ]
+            bucket = main.params[ 'DEPENDENCY' ][ 'bucket' ]
+            main.startUpSleep = int( main.params[ 'SLEEP' ][ 'startup' ] )
+            main.startMNSleep = int( main.params[ 'SLEEP' ][ 'startMN' ] )
+            main.addFlowSleep = int( main.params[ 'SLEEP' ][ 'addFlow' ] )
+            main.delFlowSleep = int( main.params[ 'SLEEP' ][ 'delFlow' ] )
+            main.addGroupSleep = int( main.params[ 'SLEEP' ][ 'addGroup' ] )
+            main.delGroupSleep = int( main.params[ 'SLEEP' ][ 'delGroup' ] )
+            main.debug = main.params[ 'DEBUG' ]
+            main.swDPID = main.params[ 'TEST' ][ 'swDPID' ]
+            egressPort1 = main.params[ 'TEST' ][ 'egressPort1' ]
+            egressPort2 = main.params[ 'TEST' ][ 'egressPort2' ]
+            egressPort3 = main.params[ 'TEST' ][ 'egressPort3' ]
+            ingressPort = main.params[ 'TEST' ][ 'ingressPort' ]
+            appCookie = main.params[ 'TEST' ][ 'appCookie' ]
+            type1 = main.params[ 'TEST' ][ 'type1' ]
+            type2 = main.params[ 'TEST' ][ 'type2' ]
+            groupId = main.params[ 'TEST' ][ 'groupId' ]
+            priority = main.params[ 'TEST' ][ 'priority' ]
+            deviceId = main.params[ 'TEST' ][ 'swDPID' ]
 
             main.debug = True if "on" in main.debug else False
             # -- INIT SECTION, ONLY RUNS ONCE -- #
 
-            main.buckets = imp.load_source(bucket,
-                                           main.dependencyPath +
-                                           bucket +
-                                           ".py")
+            main.buckets = imp.load_source( bucket,
+                                            main.dependencyPath +
+                                            bucket +
+                                            ".py" )
 
-            copyResult = main.ONOSbench.scp(main.Mininet1,
-                                            main.dependencyPath + main.topology,
-                                            main.Mininet1.home + '/custom/',
-                                            direction="to")
+            copyResult = main.ONOSbench.scp( main.Mininet1,
+                                             main.dependencyPath + main.topology,
+                                             main.Mininet1.home + '/custom/',
+                                             direction="to" )
 
-            utilities.assert_equals(expect=main.TRUE,
-                                    actual=copyResult,
-                                    onpass="Successfully copy " + "test variables ",
-                                    onfail="Failed to copy test variables")
+            utilities.assert_equals( expect=main.TRUE,
+                                     actual=copyResult,
+                                     onpass="Successfully copy " + "test variables ",
+                                     onfail="Failed to copy test variables" )
             stepResult = main.testSetUp.envSetup()
 
         except Exception as e:
@@ -99,8 +98,6 @@
 
         main.testSetUp.evnSetupConclusion( stepResult )
 
-
-
     def CASE2( self, main ):
         """
         - Set up cell
@@ -381,7 +378,7 @@
         main.case( "Delete the Group and Flow added through Rest api " )
         main.step( "Deleting Group and Flows" )
         ctrl = main.Cluster.active( 0 )
-        #Get Flow ID
+        # Get Flow ID
         response = ctrl.REST.getFlows( deviceId=deviceId )
         responsejson = json.loads( response )
         for item in responsejson:
diff --git a/TestON/tests/FUNC/FUNCgroup/dependencies/group-bucket.py b/TestON/tests/FUNC/FUNCgroup/dependencies/group-bucket.py
index 7b8ded6..394d2df 100644
--- a/TestON/tests/FUNC/FUNCgroup/dependencies/group-bucket.py
+++ b/TestON/tests/FUNC/FUNCgroup/dependencies/group-bucket.py
@@ -1,5 +1,5 @@
 """
-Copyright 2016 Open Networking Foundation (ONF)
+Copyright 2016 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/>.
 """
-
 def addBucket( main, egressPort="" ):
     """
     Description:
diff --git a/TestON/tests/FUNC/FUNCgroup/dependencies/topo-group.py b/TestON/tests/FUNC/FUNCgroup/dependencies/topo-group.py
index 16a0a84..5e9f750 100644
--- a/TestON/tests/FUNC/FUNCgroup/dependencies/topo-group.py
+++ b/TestON/tests/FUNC/FUNCgroup/dependencies/topo-group.py
@@ -1,5 +1,6 @@
+# !/usr/bin/python
 """
-Copyright 2016 Open Networking Foundation (ONF)
+Copyright 2016 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,36 +34,38 @@
 from mininet.util import dumpNodeConnections
 from mininet.node import ( UserSwitch, OVSSwitch, IVSSwitch )
 
+
 class MyTopo( Topo ):
 
     def __init__( self, **opts ):
         # Initialize topology
-        Topo.__init__( self, **opts)
+        Topo.__init__( self, **opts )
 
         # IPv4 hosts
-        host1=self.addHost( 'h1', ip='10.0.0.1/24' )
-        host2=self.addHost( 'h2', ip='10.0.0.2/24' )
-        host3=self.addHost( 'h3', ip='10.0.0.3/24' )
-        host4=self.addHost( 'h4', ip='10.0.0.4/24' )
+        host1 = self.addHost( 'h1', ip='10.0.0.1/24' )
+        host2 = self.addHost( 'h2', ip='10.0.0.2/24' )
+        host3 = self.addHost( 'h3', ip='10.0.0.3/24' )
+        host4 = self.addHost( 'h4', ip='10.0.0.4/24' )
 
         s1 = self.addSwitch( 's1' )
 
-        self.addLink(s1, host1)
-        self.addLink(s1, host2)
-        self.addLink(s1, host3)
-        self.addLink(s1, host4)
+        self.addLink( s1, host1 )
+        self.addLink( s1, host2 )
+        self.addLink( s1, host3 )
+        self.addLink( s1, host4 )
 
         topos = { 'mytopo': ( lambda: MyTopo() ) }
 
+
 def setupNetwork():
     "Create network"
     topo = MyTopo()
-    network = Mininet(topo=topo, autoSetMacs=True, autoStaticArp=True, controller=None)
+    network = Mininet( topo=topo, autoSetMacs=True, autoStaticArp=True, controller=None )
     network.start()
     CLI( network )
     network.stop()
 
 if __name__ == '__main__':
-    setLogLevel('info')
-    #setLogLevel('debug')
+    setLogLevel( 'info' )
+    # setLogLevel( 'debug' )
     setupNetwork()
diff --git a/TestON/tests/FUNC/FUNCintent/FUNCintent.py b/TestON/tests/FUNC/FUNCintent/FUNCintent.py
index c0374f8..24d2f75 100644
--- a/TestON/tests/FUNC/FUNCintent/FUNCintent.py
+++ b/TestON/tests/FUNC/FUNCintent/FUNCintent.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 functionality of ONOS
 
 
@@ -39,7 +38,6 @@
             - Install ONOS package
             - Build ONOS package
         """
-
         try:
             from tests.dependencies.ONOSSetup import ONOSSetup
             main.testSetUp = ONOSSetup()
@@ -114,7 +112,6 @@
         - Install ONOS cluster
         - Connect to cli
         """
-
         main.flowCompiler = "Flow Rules"
         main.initialized = main.testSetUp.ONOSSetUp( main.Mininet1, main.Cluster, True )
         main.intents.report( main )
@@ -134,6 +131,7 @@
         except ( NameError, AttributeError ):
             main.topoRelated = Topology()
         main.topoRelated.compareTopos( main.Mininet1, main.checkTopoAttempts )
+
     def CASE10( self, main ):
         """
             Start Mininet topology with OF 1.0 switches
@@ -372,10 +370,10 @@
         cmd = "org.onosproject.net.intent.impl.compiler.IntentConfigurableRegistrator"
 
         stepResult = main.Cluster.active( 0 ).CLI.setCfg( component=cmd,
-                                            propName="useFlowObjectives", value="true" )
+                                                          propName="useFlowObjectives", value="true" )
         stepResult &= main.Cluster.active( 0 ).CLI.setCfg( component=cmd,
-                                             propName="defaultFlowObjectiveCompiler",
-                                             value='org.onosproject.net.intent.impl.compiler.LinkCollectionIntentObjectiveCompiler' )
+                                                           propName="defaultFlowObjectiveCompiler",
+                                                           value='org.onosproject.net.intent.impl.compiler.LinkCollectionIntentObjectiveCompiler' )
 
         utilities.assert_equals( expect=main.TRUE,
                                  actual=stepResult,
@@ -438,6 +436,7 @@
         except ( NameError, AttributeError ):
             main.Utils = Utils()
         main.Utils.copyKarafLog( "cycle" + str( main.cycle ) )
+
     def CASE1000( self, main ):
         """
             Add host intents between 2 host:
@@ -924,11 +923,11 @@
         main.assertReturnString = "Assertion Result for SDNIP-ICMP IPV4 using TCP point intents\n"
         senders = [
             { "name": "h1", "device": "of:0000000000000005/1", "mac": "00:00:00:00:00:01",
-              "ip":( main.h1.hostIp + "/24" ) }
+              "ip": ( main.h1.hostIp + "/24" ) }
         ]
         recipients = [
             { "name": "h9", "device": "of:0000000000000006/1", "mac": "00:00:00:00:00:09",
-              "ip":( main.h9.hostIp + "/24" ) }
+              "ip": ( main.h9.hostIp + "/24" ) }
         ]
         ipProto = main.params[ 'SDNIP' ][ 'ipPrototype' ]
         # Uneccessary, not including this in the selectors
@@ -1820,48 +1819,49 @@
                                  actual=testResult,
                                  onpass=main.assertReturnString,
                                  onfail=main.assertReturnString )
+        """
+        Testing MPLS would require kernel version of 4.1 or higher ( Current version is 3.13 )
+        main.step( "ENCAPSULATION: Add multi point to single point intents" )
+        main.assertReturnString = "Assertion results for MPLS Encapsulation multi to single point intent\n"
+        senders = [
+           { "name": "h16", "device": "of:0000000000000006/8" },
+           { "name": "h24", "device": "of:0000000000000007/8" }
+        ]
+        recipients = [
+           { "name": "h8", "device": "of:0000000000000005/8" }
+        ]
+        badSenders = [ { "name": "h17" } ]  # Senders that are not in the intent
+        badRecipients = [ { "name": "h9" } ]  # Recipients that are not in the intent
+        testResult = main.FALSE
+        installResult = main.intents.installMultiToSingleIntent(
+           main,
+           name="ENCAPSULATION",
+           senders=senders,
+           recipients=recipients,
+           sw1="s5",
+           sw2="s2",
+           encap="MPLS" )
 
-        #Testing MPLS would require kernel version of 4.1 or higher ( Current version is 3.13 )
-        #main.step( "ENCAPSULATION: Add multi point to single point intents" )
-        #main.assertReturnString = "Assertion results for MPLS Encapsulation multi to single point intent\n"
-        #senders = [
-        #    { "name": "h16", "device": "of:0000000000000006/8" },
-        #    { "name": "h24", "device": "of:0000000000000007/8" }
-        # ]
-        #recipients = [
-        #    { "name": "h8", "device": "of:0000000000000005/8" }
-        # ]
-        #badSenders = [ { "name": "h17" } ]  # Senders that are not in the intent
-        #badRecipients = [ { "name": "h9" } ]  # Recipients that are not in the intent
-        #testResult = main.FALSE
-        #installResult = main.intents.installMultiToSingleIntent(
-        #    main,
-        #    name="ENCAPSULATION",
-        #    senders=senders,
-        #    recipients=recipients,
-        #    sw1="s5",
-        #    sw2="s2",
-        #    encap="MPLS" )
-        #
-        #if installResult:
-        #    testResult = main.intents.testPointIntent(
-        #        main,
-        #        intentId=installResult,
-        #        name="ENCAPSULATION",
-        #        senders=senders,
-        #        recipients=recipients,
-        #        badSenders=badSenders,
-        #        badRecipients=badRecipients,
-        #        sw1="s5",
-        #        sw2="s2",
-        #        expectedLink=18 )
-        #else:
-        #    main.Cluster.active( 0 ).CLI.removeAllIntents( purge=True )
-        #
-        #utilities.assert_equals( expect=main.TRUE,
-        #                         actual=testResult,
-        #                         onpass=main.assertReturnString,
-        #                         onfail=main.assertReturnString )
+        if installResult:
+           testResult = main.intents.testPointIntent(
+               main,
+               intentId=installResult,
+               name="ENCAPSULATION",
+               senders=senders,
+               recipients=recipients,
+               badSenders=badSenders,
+               badRecipients=badRecipients,
+               sw1="s5",
+               sw2="s2",
+               expectedLink=18 )
+        else:
+           main.Cluster.active( 0 ).CLI.removeAllIntents( purge=True )
+
+        utilities.assert_equals( expect=main.TRUE,
+                                actual=testResult,
+                                onpass=main.assertReturnString,
+                                onfail=main.assertReturnString )
+        """
 
         main.intents.report( main )
 
diff --git a/TestON/tests/FUNC/FUNCintent/dependencies/FuncIntentFunction.py b/TestON/tests/FUNC/FUNCintent/dependencies/FuncIntentFunction.py
index bdd0e74..1a7002b 100644
--- a/TestON/tests/FUNC/FUNCintent/dependencies/FuncIntentFunction.py
+++ b/TestON/tests/FUNC/FUNCintent/dependencies/FuncIntentFunction.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
@@ -2077,8 +2077,8 @@
     """
     intentResult = main.TRUE
     stateCheckResults = main.Cluster.command( "checkIntentState",
-                                         kwargs={ "intentsId":intentsId },
-                                         returnBool=True, specificDriver=2 )
+                                              kwargs={ "intentsId": intentsId },
+                                              returnBool=True, specificDriver=2 )
     if stateCheckResults:
         main.log.info( itemName + ": Intents state check passed" )
     else:
@@ -2093,8 +2093,8 @@
         Returns main.TRUE or main.FALSE
     """
     stateCheckResults = main.Cluster.command( "compareBandwidthAllocations",
-                                         args=[ bandwidth ],
-                                         returnBool=True, specificDriver=2 )
+                                              args=[ bandwidth ],
+                                              returnBool=True, specificDriver=2 )
     if stateCheckResults:
         main.log.info( itemName + ": bandwidth check passed" )
         bandwidthResult = main.TRUE
@@ -2396,7 +2396,7 @@
         else failed
 
     """
-    main.log.info( "Checking encapsulated intent for " + tag + ".")
+    main.log.info( "Checking encapsulated intent for " + tag + "." )
     HostJson = []
     Jflows = main.Cluster.active( 0 ).CLI.flows( noCore=True )
     try:
@@ -2435,6 +2435,7 @@
         main.log.error( "Total " + PopTag + str( pop ) )
         return main.FALSE
 
+
 def ProtectedIntentCheck( main ):
     intent = main.Cluster.active( 0 ).CLI.intents( jsonFormat=False )
     if "Protection" in intent:
diff --git a/TestON/tests/FUNC/FUNCintent/dependencies/newFuncTopo.py b/TestON/tests/FUNC/FUNCintent/dependencies/newFuncTopo.py
old mode 100755
new mode 100644
index 6170025..9897d9c
--- a/TestON/tests/FUNC/FUNCintent/dependencies/newFuncTopo.py
+++ b/TestON/tests/FUNC/FUNCintent/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,13 +59,16 @@
         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 ):
@@ -70,51 +76,51 @@
         Topo.__init__( self )
         # Switch S5 Hosts
         # IPv4 only Host
-        host1=self.addHost( 'h1', ip='10.1.0.2/24' )
+        host1 = self.addHost( 'h1', ip='10.1.0.2/24' )
         # IPv6 only Host
-        host2=self.addHost( 'h2', cls=IPv6Host, v6Addr='1000::2/64' )
+        host2 = self.addHost( 'h2', cls=IPv6Host, v6Addr='1000::2/64' )
         # Dual Stack Host
-        host3=self.addHost( 'h3', ip='10.1.0.3/24', cls=dualStackHost, v6Addr='2000::2/64' )
+        host3 = self.addHost( 'h3', ip='10.1.0.3/24', cls=dualStackHost, v6Addr='2000::2/64' )
         # VLAN hosts
-        host4=self.addHost( 'h4', ip='100.1.0.2/24', cls=VLANHost, vlan=100, v6Addr='3000::2/64' )
-        host5=self.addHost( 'h5', ip='200.1.0.2/24', cls=VLANHost, vlan=200, v6Addr='4000::2/64' )
+        host4 = self.addHost( 'h4', ip='100.1.0.2/24', cls=VLANHost, vlan=100, v6Addr='3000::2/64' )
+        host5 = self.addHost( 'h5', ip='200.1.0.2/24', cls=VLANHost, vlan=200, v6Addr='4000::2/64' )
         # VPN-1 and VPN-2 Hosts
-        host6=self.addHost( 'h6', ip='11.1.0.2/24' )
-        host7=self.addHost( 'h7', ip='12.1.0.2/24' )
+        host6 = self.addHost( 'h6', ip='11.1.0.2/24' )
+        host7 = self.addHost( 'h7', ip='12.1.0.2/24' )
         # Multicast Sender
-        host8=self.addHost( 'h8', ip='10.1.0.4/24' )
+        host8 = self.addHost( 'h8', ip='10.1.0.4/24' )
 
         # Switch S6 Hosts
         # IPv4 only Host
-        host9=self.addHost( 'h9', ip='10.1.0.5/24' )
+        host9 = self.addHost( 'h9', ip='10.1.0.5/24' )
         # IPv6 only Host
-        host10=self.addHost( 'h10', cls=IPv6Host, v6Addr='1000::3/64' )
+        host10 = self.addHost( 'h10', cls=IPv6Host, v6Addr='1000::3/64' )
         # Dual Stack Host
-        host11=self.addHost( 'h11', ip='10.1.0.6/24', cls=dualStackHost, v6Addr='2000::3/64' )
+        host11 = self.addHost( 'h11', ip='10.1.0.6/24', cls=dualStackHost, v6Addr='2000::3/64' )
         # VLAN hosts
-        host12=self.addHost( 'h12', ip='100.1.0.3/24', cls=VLANHost, vlan=100, v6Addr='3000::3/64' )
-        host13=self.addHost( 'h13', ip='200.1.0.3/24', cls=VLANHost, vlan=200, v6Addr='4000::3/64' )
+        host12 = self.addHost( 'h12', ip='100.1.0.3/24', cls=VLANHost, vlan=100, v6Addr='3000::3/64' )
+        host13 = self.addHost( 'h13', ip='200.1.0.3/24', cls=VLANHost, vlan=200, v6Addr='4000::3/64' )
         # VPN-1 and VPN-2 Hosts
-        host14=self.addHost( 'h14', ip='11.1.0.3/24' )
-        host15=self.addHost( 'h15', ip='12.1.0.3/24' )
+        host14 = self.addHost( 'h14', ip='11.1.0.3/24' )
+        host15 = self.addHost( 'h15', ip='12.1.0.3/24' )
         # Multicast Receiver
-        host16=self.addHost( 'h16', ip='10.1.0.7/24' )
+        host16 = self.addHost( 'h16', ip='10.1.0.7/24' )
 
         # Switch S7 Hosts
         # IPv4 only Host
-        host17=self.addHost( 'h17', ip='10.1.0.8/24' )
+        host17 = self.addHost( 'h17', ip='10.1.0.8/24' )
         # IPv6 only Host
-        host18=self.addHost( 'h18', cls=IPv6Host, v6Addr='1000::4/64' )
+        host18 = self.addHost( 'h18', cls=IPv6Host, v6Addr='1000::4/64' )
         # Dual Stack Host
-        host19=self.addHost( 'h19', ip='10.1.0.9/24', cls=dualStackHost, v6Addr='2000::4/64' )
+        host19 = self.addHost( 'h19', ip='10.1.0.9/24', cls=dualStackHost, v6Addr='2000::4/64' )
         # VLAN hosts
-        host20=self.addHost( 'h20', ip='100.1.0.4/24', cls=VLANHost, vlan=100, v6Addr='3000::4/64' )
-        host21=self.addHost( 'h21', ip='200.1.0.4/24', cls=VLANHost, vlan=200, v6Addr='4000::4/64' )
+        host20 = self.addHost( 'h20', ip='100.1.0.4/24', cls=VLANHost, vlan=100, v6Addr='3000::4/64' )
+        host21 = self.addHost( 'h21', ip='200.1.0.4/24', cls=VLANHost, vlan=200, v6Addr='4000::4/64' )
         # VPN-1 and VPN-2 Hosts
-        host22=self.addHost( 'h22', ip='11.1.0.4/24' )
-        host23=self.addHost( 'h23', ip='12.1.0.4/24' )
+        host22 = self.addHost( 'h22', ip='11.1.0.4/24' )
+        host23 = self.addHost( 'h23', ip='12.1.0.4/24' )
         # Multicast Receiver
-        host24=self.addHost( 'h24', ip='10.1.0.10/24' )
+        host24 = self.addHost( 'h24', ip='10.1.0.10/24' )
 
         s1 = self.addSwitch( 's1' )
         s2 = self.addSwitch( 's2' )
@@ -124,56 +130,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()
diff --git a/TestON/tests/FUNC/FUNCintentRest/FUNCintentRest.py b/TestON/tests/FUNC/FUNCintentRest/FUNCintentRest.py
index 1872846..cbf1fea 100644
--- a/TestON/tests/FUNC/FUNCintentRest/FUNCintentRest.py
+++ b/TestON/tests/FUNC/FUNCintentRest/FUNCintentRest.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 functionality of ONOS
 # TODO: Replace the CLI calls with REST API equivalents as they become available.
 #           - May need to write functions in the onosrestdriver.py file to do this
@@ -97,7 +96,7 @@
                                               direction="to" )
             stepResult = main.testSetUp.envSetup()
         except Exception as e:
-            main.testSetUp.envSetupException(e)
+            main.testSetUp.envSetupException( e )
         main.testSetUp.evnSetupConclusion( stepResult )
 
     def CASE2( self, main ):
@@ -136,7 +135,7 @@
         main.ONOSbench.logReport( main.Cluster.active( 0 ).ipAddress,
                                   [ "INFO", "FOLLOWER", "WARN", "flow", "ERROR", "Except" ],
                                   "s" )
-        #main.ONOSbench.logReport( globalONOSip[ 1 ], [ "INFO" ], "d" )
+        # main.ONOSbench.logReport( globalONOSip[ 1 ], [ "INFO" ], "d" )
 
     def CASE10( self, main ):
         """
@@ -381,10 +380,10 @@
         cmd = "org.onosproject.net.intent.impl.compiler.IntentConfigurableRegistrator"
 
         stepResult = main.Cluster.active( 0 ).CLI.setCfg( component=cmd,
-                                            propName="useFlowObjectives", value="true" )
+                                                          propName="useFlowObjectives", value="true" )
         stepResult &= main.Cluster.active( 0 ).CLI.setCfg( component=cmd,
-                                             propName="defaultFlowObjectiveCompiler",
-                                             value='org.onosproject.net.intent.impl.compiler.LinkCollectionIntentObjectiveCompiler' )
+                                                           propName="defaultFlowObjectiveCompiler",
+                                                           value='org.onosproject.net.intent.impl.compiler.LinkCollectionIntentObjectiveCompiler' )
 
         utilities.assert_equals( expect=main.TRUE,
                                  actual=stepResult,
@@ -448,6 +447,7 @@
         except ( NameError, AttributeError ):
             main.Utils = Utils()
         main.Utils.copyKarafLog( "cycle" + str( main.cycle ) )
+
     def CASE1000( self, main ):
         """
             Add host intents between 2 host:
@@ -1246,7 +1246,7 @@
             recipients=recipients,
             sw1="s5",
             sw2="s2" )
-        #setVlan=100 )
+        # setVlan=100 )
 
         if installResult:
             testResult = main.intentFunction.testPointIntent(
diff --git a/TestON/tests/FUNC/FUNCintentRest/dependencies/FuncIntentFunction.py b/TestON/tests/FUNC/FUNCintentRest/dependencies/FuncIntentFunction.py
index f4743ee..6b4346c 100644
--- a/TestON/tests/FUNC/FUNCintentRest/dependencies/FuncIntentFunction.py
+++ b/TestON/tests/FUNC/FUNCintentRest/dependencies/FuncIntentFunction.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
@@ -1047,7 +1047,7 @@
                                                                 portEgressList=portEgressList,
                                                                 ethType=ethType,
                                                                 ethSrc=srcMac,
-                                                                #ethDst=dstMac, #Isn't working because of ONOS itself
+                                                                # ethDst=dstMac, #Isn't working because of ONOS itself
                                                                 bandwidth=bandwidth,
                                                                 lambdaAlloc=lambdaAlloc,
                                                                 ipProto=ipProto,
@@ -1159,15 +1159,15 @@
     if hostNames and devices:
         if len( hostNames ) != len( devices ):
             main.log.debug( "hosts and devices does not have the same length" )
-            #print "len hostNames = ", len( hostNames )
-            #print "len devices = ", len( devices )
+            # print "len hostNames = ", len( hostNames )
+            # print "len devices = ", len( devices )
             return main.FALSE
         if ports:
             if len( ports ) != len( devices ):
                 main.log.error( "Ports and devices does " +
                                 "not have the same length" )
-                #print "len devices = ", len( devices )
-                #print "len ports = ", len( ports )
+                # print "len devices = ", len( devices )
+                # print "len ports = ", len( ports )
                 return main.FALSE
         else:
             main.log.info( "Device Ports are not specified" )
@@ -1183,11 +1183,11 @@
                         main.hostsData.get( host ).get( 'mac' )
             ipDict[ main.hostsData.get( host ).get( 'location' ) ] = \
                         main.hostsData.get( host ).get( 'ipAddresses' )
-        #print main.hostsData
+        # print main.hostsData
 
-    #print 'host names = ', hostNames
-    #print 'devices = ', devices
-    #print "macsDict = ", macsDict
+    # print 'host names = ', hostNames
+    # print 'devices = ', devices
+    # print "macsDict = ", macsDict
 
     pingResult = main.TRUE
     intentResult = main.TRUE
@@ -1399,8 +1399,8 @@
     main.log.info( itemName + ": Checking intents state" )
     # First check of intents
     stateCheckResults = main.Cluster.command( "checkIntentState",
-                                         kwargs={ "intentsId":intentsId },
-                                         returnBool=True, specificDriver=3 )
+                                              kwargs={ "intentsId": intentsId },
+                                              returnBool=True, specificDriver=3 )
 
     expectedState = [ 'INSTALLED', 'INSTALLING' ]
 
@@ -1414,8 +1414,8 @@
         # Second check of intents since some of the intents may be in
         # INSTALLING state, they should be in INSTALLED at this time
         stateCheckResults = main.Cluster.command( "checkIntentState",
-                                         kwargs={ "intentsId":intentsId },
-                                         returnBool=True, specificDriver=3 )
+                                                  kwargs={ "intentsId": intentsId },
+                                                  returnBool=True, specificDriver=3 )
         if stateCheckResults:
             main.log.info( itemName + ": Intents are installed correctly" )
             intentResult = main.TRUE
@@ -1467,7 +1467,6 @@
     for ctrl in main.Cluster.active():
         flowsCount.append( len( json.loads( ctrl.REST.flows() ) ) )
 
-
     if flowsCount:
         if all( flows == flowsCount[ 0 ] for flows in flowsCount ):
             main.log.info( itemName + ": There are " + str( flowsCount[ 0 ] ) +
diff --git a/TestON/tests/FUNC/FUNCintentRest/dependencies/newFuncTopo.py b/TestON/tests/FUNC/FUNCintentRest/dependencies/newFuncTopo.py
old mode 100755
new mode 100644
index 870bc32..951e15c
--- a/TestON/tests/FUNC/FUNCintentRest/dependencies/newFuncTopo.py
+++ b/TestON/tests/FUNC/FUNCintentRest/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,19 +34,23 @@
 from mininet.util import dumpNodeConnections
 from mininet.node import ( UserSwitch, OVSSwitch, IVSSwitch )
 
+
 class VLANHost( Host ):
+
     def config( self, vlan=100, **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' ] ) )
         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()
@@ -55,56 +58,59 @@
         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', ip='10.1.0.2/24' )
-        host2=self.addHost( 'h2', cls=IPv6Host, v6Addr='1000::2/64' )
-        host3=self.addHost( 'h3', ip='10.1.0.3/24', cls=dualStackHost, v6Addr='2000::2/64' )
-        #VLAN hosts
-        host4=self.addHost( 'h4', ip='100.1.0.2/24', cls=VLANHost, vlan=100 )
-        host5=self.addHost( 'h5', ip='200.1.0.2/24', cls=VLANHost, vlan=200 )
-        #VPN-1 and VPN-2 Hosts
-        host6=self.addHost( 'h6', ip='11.1.0.2/24' )
-        host7=self.addHost( 'h7', ip='12.1.0.2/24' )
-        #Multicast Sender
-        host8=self.addHost( 'h8', ip='10.1.0.4/24' )
+        host1 = self.addHost( 'h1', ip='10.1.0.2/24' )
+        host2 = self.addHost( 'h2', cls=IPv6Host, v6Addr='1000::2/64' )
+        host3 = self.addHost( 'h3', ip='10.1.0.3/24', cls=dualStackHost, v6Addr='2000::2/64' )
+        # VLAN hosts
+        host4 = self.addHost( 'h4', ip='100.1.0.2/24', cls=VLANHost, vlan=100 )
+        host5 = self.addHost( 'h5', ip='200.1.0.2/24', cls=VLANHost, vlan=200 )
+        # VPN-1 and VPN-2 Hosts
+        host6 = self.addHost( 'h6', ip='11.1.0.2/24' )
+        host7 = self.addHost( 'h7', ip='12.1.0.2/24' )
+        # Multicast Sender
+        host8 = self.addHost( 'h8', ip='10.1.0.4/24' )
 
         # Switch S6 Hosts
-        host9=self.addHost( 'h9', ip='10.1.0.5/24' )
-        host10=self.addHost( 'h10', cls=IPv6Host, v6Addr='1000::3/64' )
-        host11=self.addHost( 'h11', ip='10.1.0.6/24', cls=dualStackHost, v6Addr='2000::3/64' )
-        #VLAN hosts
-        host12=self.addHost( 'h12', ip='100.1.0.3/24', cls=VLANHost, vlan=100 )
-        host13=self.addHost( 'h13', ip='200.1.0.3/24', cls=VLANHost, vlan=200 )
-        #VPN-1 and VPN-2 Hosts
-        host14=self.addHost( 'h14', ip='11.1.0.3/24' )
-        host15=self.addHost( 'h15', ip='12.1.0.3/24' )
-        #Multicast Receiver
-        host16=self.addHost( 'h16', ip='10.1.0.7/24' )
+        host9 = self.addHost( 'h9', ip='10.1.0.5/24' )
+        host10 = self.addHost( 'h10', cls=IPv6Host, v6Addr='1000::3/64' )
+        host11 = self.addHost( 'h11', ip='10.1.0.6/24', cls=dualStackHost, v6Addr='2000::3/64' )
+        # VLAN hosts
+        host12 = self.addHost( 'h12', ip='100.1.0.3/24', cls=VLANHost, vlan=100 )
+        host13 = self.addHost( 'h13', ip='200.1.0.3/24', cls=VLANHost, vlan=200 )
+        # VPN-1 and VPN-2 Hosts
+        host14 = self.addHost( 'h14', ip='11.1.0.3/24' )
+        host15 = self.addHost( 'h15', ip='12.1.0.3/24' )
+        # Multicast Receiver
+        host16 = self.addHost( 'h16', ip='10.1.0.7/24' )
 
         # Switch S7 Hosts
-        host17=self.addHost( 'h17', ip='10.1.0.8/24' )
-        host18=self.addHost( 'h18', cls=IPv6Host, v6Addr='1000::4/64' )
-        host19=self.addHost( 'h19', ip='10.1.0.9/24', cls=dualStackHost, v6Addr='2000::4/64' )
-        #VLAN hosts
-        host20=self.addHost( 'h20', ip='100.1.0.4/24', cls=VLANHost, vlan=100 )
-        host21=self.addHost( 'h21', ip='200.1.0.4/24', cls=VLANHost, vlan=200 )
-        #VPN-1 and VPN-2 Hosts
-        host22=self.addHost( 'h22', ip='11.1.0.4/24' )
-        host23=self.addHost( 'h23', ip='12.1.0.4/24' )
-        #Multicast Receiver
-        host24=self.addHost( 'h24', ip='10.1.0.10/24' )
+        host17 = self.addHost( 'h17', ip='10.1.0.8/24' )
+        host18 = self.addHost( 'h18', cls=IPv6Host, v6Addr='1000::4/64' )
+        host19 = self.addHost( 'h19', ip='10.1.0.9/24', cls=dualStackHost, v6Addr='2000::4/64' )
+        # VLAN hosts
+        host20 = self.addHost( 'h20', ip='100.1.0.4/24', cls=VLANHost, vlan=100 )
+        host21 = self.addHost( 'h21', ip='200.1.0.4/24', cls=VLANHost, vlan=200 )
+        # VPN-1 and VPN-2 Hosts
+        host22 = self.addHost( 'h22', ip='11.1.0.4/24' )
+        host23 = self.addHost( 'h23', ip='12.1.0.4/24' )
+        # Multicast Receiver
+        host24 = self.addHost( 'h24', ip='10.1.0.10/24' )
 
         s1 = self.addSwitch( 's1' )
         s2 = self.addSwitch( 's2' )
@@ -114,56 +120,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()
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()
diff --git a/TestON/tests/FUNC/FUNCnetCfg/FUNCnetCfg.py b/TestON/tests/FUNC/FUNCnetCfg/FUNCnetCfg.py
index ef5eb99..cb80126 100644
--- a/TestON/tests/FUNC/FUNCnetCfg/FUNCnetCfg.py
+++ b/TestON/tests/FUNC/FUNCnetCfg/FUNCnetCfg.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 functionality of ONOS
 
 
@@ -36,7 +35,6 @@
             - Checkout ONOS master branch
             - Pull latest ONOS code
         """
-
         try:
             from tests.dependencies.ONOSSetup import ONOSSetup
             main.testSetUp = ONOSSetup()
@@ -222,7 +220,6 @@
                                " not discovered yet. One device is allowed" +\
                                ", the other disallowed."
 
-
         pprint = main.Cluster.active( 0 ).REST.pprint
 
         main.step( "Add Net Cfg for switch1" )
@@ -241,14 +238,14 @@
                                                               subjectKey="of:0000000000000001",
                                                               configKey="basic" )
         s1Result = False
-        #Wait 5 secs after set up netCfg
+        # Wait 5 secs after set up netCfg
         time.sleep( main.SetNetCfgSleep )
         if setS1Allow:
             getS1 = utilities.retry( f=main.Cluster.active( 0 ).REST.getNetCfg,
                                      retValue=False,
-                                     kwargs={"subjectClass":"devices",
-                                             "subjectKey" : "of:0000000000000001",
-                                             "configKey" : "basic"},
+                                     kwargs={ "subjectClass": "devices",
+                                              "subjectKey": "of:0000000000000001",
+                                              "configKey": "basic" },
                                      attempts=main.retrytimes,
                                      sleep=main.retrysleep )
             onosCfg = pprint( getS1 )
@@ -290,9 +287,9 @@
             # Check what we set is what is in ONOS
             getS3 = utilities.retry( f=main.Cluster.active( 0 ).REST.getNetCfg,
                                      retValue=False,
-                                     kwargs={"subjectClass": "devices",
-                                            "subjectKey": "of:0000000000000003",
-                                            "configKey": "basic"},
+                                     kwargs={ "subjectClass": "devices",
+                                              "subjectKey": "of:0000000000000003",
+                                              "configKey": "basic" },
                                      attempts=main.retrytimes,
                                      sleep=main.retrysleep )
             onosCfg = pprint( getS3 )
@@ -400,9 +397,9 @@
             # Check what we set is what is in ONOS
             getS2 = utilities.retry( f=main.Cluster.active( 1 ).REST.getNetCfg,
                                      retValue=False,
-                                     kwargs={"subjectClass": "devices",
-                                            "subjectKey": "of:0000000000000002",
-                                            "configKey": "basic"},
+                                     kwargs={ "subjectClass": "devices",
+                                              "subjectKey": "of:0000000000000002",
+                                              "configKey": "basic" },
                                      attempts=main.retrytimes,
                                      sleep=main.retrysleep )
             onosCfg = pprint( getS2 )
@@ -432,17 +429,17 @@
         main.log.info( "s4Json:" + str( s4Json ) )
         main.s4Json = s4Json
         setS4Disallow = main.Cluster.active( 2 ).REST.setNetCfg( s4Json,
-                                                  subjectClass="devices",
-                                                  subjectKey="of:0000000000000004",
-                                                  configKey="basic" )
+                                                                 subjectClass="devices",
+                                                                 subjectKey="of:0000000000000004",
+                                                                 configKey="basic" )
         s4Result = False
         if setS4Disallow:
             # Check what we set is what is in ONOS
             getS4 = utilities.retry( f=main.Cluster.active( 2 ).REST.getNetCfg,
                                      retValue=False,
-                                     kwargs={"subjectClass": "devices",
-                                            "subjectKey": "of:0000000000000004",
-                                            "configKey": "basic"},
+                                     kwargs={ "subjectClass": "devices",
+                                              "subjectKey": "of:0000000000000004",
+                                              "configKey": "basic" },
                                      attempts=main.retrytimes,
                                      sleep=main.retrysleep )
 
@@ -511,8 +508,6 @@
                                  onpass="Configured devices' annotations are correct",
                                  onfail="Incorrect annotations for configured devices." )
 
-
-
     def CASE24( self, main ):
         """
         Testing removal of configurations
@@ -616,8 +611,8 @@
         main.step( "Assert the net config for devices is empty" )
 
         get = utilities.retry( f=main.Cluster.active( 2 ).REST.getNetCfg,
-                               retValue = False,
-                               kwargs={"subjectClass":"devices"},
+                               retValue=False,
+                               kwargs={ "subjectClass": "devices" },
                                sleep=main.retrysleep,
                                attempts=main.retrytimes )
 
@@ -746,9 +741,9 @@
         if setS6Disallow:
             getS6 = utilities.retry( f=main.Cluster.active( 0 ).REST.getNetCfg,
                                      retValue=False,
-                                     kwargs={"subjectClass":"devices",
-                                            "subjectKey" : "of:0000000000000006",
-                                            "configKey" : "basic"},
+                                     kwargs={ "subjectClass": "devices",
+                                              "subjectKey": "of:0000000000000006",
+                                              "configKey": "basic" },
                                      sleep=main.retrysleep,
                                      attempts=main.retrytimes )
             onosCfg = pprint( getS6 )
diff --git a/TestON/tests/FUNC/FUNCnetCfg/dependencies/netCfg.py b/TestON/tests/FUNC/FUNCnetCfg/dependencies/netCfg.py
index 0cc46e8..9523e81 100644
--- a/TestON/tests/FUNC/FUNCnetCfg/dependencies/netCfg.py
+++ b/TestON/tests/FUNC/FUNCnetCfg/dependencies/netCfg.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
@@ -35,19 +35,19 @@
     responses = []
     result = utilities.retry( f=checkNodeResponses,
                               retValue=False,
-                              kwargs={'main' : main,'responses' : responses},
-                              sleep = main.retrysleep,
-                              attempts = main.retrytimes )
+                              kwargs={ 'main': main, 'responses': responses },
+                              sleep=main.retrysleep,
+                              attempts=main.retrytimes )
     utilities.assert_equals( expect=True,
                              actual=result,
                              onpass="Net Cfg is the same on all nodes",
                              onfail="Check Net Cfg failed. Check above messages." )
 
 
-def checkNodeResponses ( main, responses ):
+def checkNodeResponses( main, responses ):
     numberOfFailedNodes = 0  # Tracks the number of nodes that failed to get net configuration
     for ctrl in main.Cluster.active():
-        response = ctrl.REST.getNetCfg( )
+        response = ctrl.REST.getNetCfg()
         responses.append( ctrl.REST.pprint( response ) )
         if response == main.FALSE:
             numberOfFailedNodes += 1
@@ -65,24 +65,25 @@
             main.log.debug( i )
     return False
 
+
 def checkDeviceAnnotations( main, jsonObj, sw ):
     id = str( sw.get( 'id' ) )
     keys = [ 'name', 'owner', 'rackAddress' ]
     correct = True
     for k in keys:
-        if str( sw.get( 'annotations', {} ).get( k ) ) != str( jsonObj[ k ] ) :
+        if str( sw.get( 'annotations', {} ).get( k ) ) != str( jsonObj[ k ] ):
             correct = False
             main.log.debug( "{} is wrong on switch: ".format( k ) + id )
     if not correct:
-        main.log.error( "Annotations for switch " + id  + " are incorrect: {}".format( sw ) )
+        main.log.error( "Annotations for switch " + id + " are incorrect: {}".format( sw ) )
     return correct
 
 
 def checkAllDeviceAnnotations( main, json ):
-    devices = main.Cluster.active( 0 ).REST.devices( )
+    devices = main.Cluster.active( 0 ).REST.devices()
     id = "of:0000000000000001"
     i = 1
-    result = [ ]
+    result = []
     try:
         for sw in json.loads( devices ):
             if id in sw.get( 'id' ):
diff --git a/TestON/tests/FUNC/FUNCnetconf/FUNCnetconf.py b/TestON/tests/FUNC/FUNCnetconf/FUNCnetconf.py
index d518c5a..ad2c4ba 100644
--- a/TestON/tests/FUNC/FUNCnetconf/FUNCnetconf.py
+++ b/TestON/tests/FUNC/FUNCnetconf/FUNCnetconf.py
@@ -1,5 +1,5 @@
 """
-Copyright 2016 Open Networking Foundation (ONF)
+Copyright 2016 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 NETCONF protocol within ONOS
 
 
@@ -94,7 +93,6 @@
             main.testSetUp.envSetupException( e )
         main.testSetUp.evnSetupConclusion( stepResult )
 
-
     def CASE2( self, main ):
         """
         - Set up cell
@@ -123,6 +121,7 @@
         except ( NameError, AttributeError ):
             main.Utils = Utils()
         main.Utils.copyKarafLog( "cycle" + str( main.cycle ) )
+
     def CASE100( self, main ):
         """
             Start NETCONF app and OFC-Server or make sure that they are already running
diff --git a/TestON/tests/FUNC/FUNCnetconf/dependencies/netconf.py b/TestON/tests/FUNC/FUNCnetconf/dependencies/netconf.py
index ce8620a..b8e7054 100644
--- a/TestON/tests/FUNC/FUNCnetconf/dependencies/netconf.py
+++ b/TestON/tests/FUNC/FUNCnetconf/dependencies/netconf.py
@@ -1,5 +1,5 @@
 """
-Copyright 2016 Open Networking Foundation (ONF)
+Copyright 2016 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
@@ -66,6 +66,7 @@
         main.log.error( self.name + ":    " + self.handle.before )
         main.cleanAndExit()
 
+
 def createConfig( main ):
     """
         This function writes a configuration file that can later be sent to the
diff --git a/TestON/tests/FUNC/FUNCoptical/FUNCoptical.py b/TestON/tests/FUNC/FUNCoptical/FUNCoptical.py
index 00d5cab..aa298ab 100644
--- a/TestON/tests/FUNC/FUNCoptical/FUNCoptical.py
+++ b/TestON/tests/FUNC/FUNCoptical/FUNCoptical.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 functionality of ONOS
 
 
@@ -90,16 +89,15 @@
         """
             Start Mininet opticalTest Topology
         """
-
         main.case( "Mininet with Linc-OE startup" )
         main.step( "Push TopoDDriver.json to ONOS through onos-netcfg" )
         topoResult = True
         for ctrl in main.Cluster.active():
             topoResult = topoResult and \
-                         main.ONOSbench.onosNetCfg(controllerIp=ctrl.ipAddress,
-                                                   path=main.dependencyPath,
-                                                   fileName="TopoDDriver.json")
-        #Exit if topology did not load properly
+                         main.ONOSbench.onosNetCfg( controllerIp=ctrl.ipAddress,
+                                                    path=main.dependencyPath,
+                                                    fileName="TopoDDriver.json" )
+        # Exit if topology did not load properly
         if not topoResult:
             main.cleanAndExit()
 
@@ -190,6 +188,7 @@
         except ( NameError, AttributeError ):
             main.Utils = Utils()
         main.Utils.copyKarafLog( "cycle" + str( main.cycle ) )
+
     def CASE21( self, main ):
         """
             Run pingall to discover all hosts
@@ -219,7 +218,7 @@
 
         arpingHostResults = main.TRUE
         for host in hosts:
-            if main.LincOE.arping( host, ethDevice=host+"-eth0" ):
+            if main.LincOE.arping( host, ethDevice=host + "-eth0" ):
                 main.log.info( "Successfully reached host {} with arping".format( host ) )
             else:
                 main.log.error( "Could not reach host {} with arping".format( host ) )
@@ -371,7 +370,6 @@
                                  onpass="ONOS correctly discovered the topology",
                                  onfail="ONOS incorrectly discovered the topology" )
 
-
     def CASE31( self, main ):
         import time
         """
@@ -404,8 +402,8 @@
                                                          intentsId=main.pIntentsId )
         time.sleep( 10 )
         checkStateResult = utilities.retry( f=main.Cluster.active( 0 ).CLI.checkIntentState,
-                                           retValue=main.FALSE, args=( main.pIntentsId, "INSTALLED" ),
-                                           sleep=main.checkIntentSleep, attempts=10 )
+                                            retValue=main.FALSE, args=( main.pIntentsId, "INSTALLED" ),
+                                            sleep=main.checkIntentSleep, attempts=10 )
         main.log.info( "Checking flows state" )
         checkFlowResult = main.Cluster.active( 0 ).CLI.checkFlowsState()
         # Sleep for 10 seconds to provide time for the intent state to change
@@ -453,11 +451,11 @@
                 time.sleep( 15 )
 
             for ctrl in main.Cluster.active():
-                if not any ( intent.get('state') == 'WITHDRAWING' for intent
-                         in json.loads( ctrl.CLI.intents() ) ):
-                        main.log.debug( json.loads( ctrl.CLI.intents() ) )
-                        removeResult = main.FALSE
-                        break
+                if not any( intent.get( 'state' ) == 'WITHDRAWING' for intent
+                            in json.loads( ctrl.CLI.intents() ) ):
+                    main.log.debug( json.loads( ctrl.CLI.intents() ) )
+                    removeResult = main.FALSE
+                    break
                 else:
                     removeResult = main.TRUE
         except ( TypeError, ValueError ):
@@ -547,11 +545,11 @@
             time.sleep( 15 )
 
             for ctrl in main.Cluster.active():
-                if not any ( intent.get('state') == 'WITHDRAWING' for intent
-                         in json.loads( ctrl.CLI.intents() ) ):
-                        main.log.debug( json.loads( ctrl.CLI.intents() ) )
-                        removeResult = main.FALSE
-                        break
+                if not any( intent.get( 'state' ) == 'WITHDRAWING' for intent
+                            in json.loads( ctrl.CLI.intents() ) ):
+                    main.log.debug( json.loads( ctrl.CLI.intents() ) )
+                    removeResult = main.FALSE
+                    break
                 else:
                     removeResult = main.TRUE
         except ( TypeError, ValueError ):
diff --git a/TestON/tests/FUNC/FUNCoptical/dependencies/ectopo.py b/TestON/tests/FUNC/FUNCoptical/dependencies/ectopo.py
index 576eb51..9413c98 100644
--- a/TestON/tests/FUNC/FUNCoptical/dependencies/ectopo.py
+++ b/TestON/tests/FUNC/FUNCoptical/dependencies/ectopo.py
@@ -1,5 +1,6 @@
+# !/usr/bin/env 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/env python
-
 from mininet.net import Mininet
 from mininet.topo import Topo
 from mininet.node import Host, RemoteController
@@ -29,9 +28,11 @@
 
 from opticalUtils import LINCSwitch, LINCLink
 
+
 class OpticalTopo( Topo ):
+
     """
-    A simple optical topology of three LINC nodes(OE*), two OVS switches(ps*), and two hosts:
+    A simple optical topology of three LINC nodes( OE* ), two OVS switches( ps* ), and two hosts:
 
               OE3
               /\
@@ -51,19 +52,19 @@
         # set up ROADMs, add them to oel[]
         oel = []
         an = { "durable": "true" }
-        for i in range (1,4):
+        for i in range( 1, 4 ):
             oean = { "optical.regens": 0 }
-            oel.append( self.addSwitch('OE%s' % i, dpid='0000ffffffffff0%s' % i, annotations=oean, cls=LINCSwitch) )
+            oel.append( self.addSwitch( 'OE%s' % i, dpid='0000ffffffffff0%s' % i, annotations=oean, cls=LINCSwitch ) )
 
         # ROADM port numbers are built as: OE1 <-> OE2 = 1200
         # leaving port number up to 100 open for use by Och port
-        self.addLink( oel[0], oel[1], port1=1200, port2=2100, annotations=an, cls=LINCLink )
-        self.addLink( oel[1], oel[2], port1=2300, port2=3200, annotations=an, cls=LINCLink )
-        self.addLink( oel[2], oel[0], port1=3100, port2=1300, annotations=an, cls=LINCLink )
+        self.addLink( oel[ 0 ], oel[ 1 ], port1=1200, port2=2100, annotations=an, cls=LINCLink )
+        self.addLink( oel[ 1 ], oel[ 2 ], port1=2300, port2=3200, annotations=an, cls=LINCLink )
+        self.addLink( oel[ 2 ], oel[ 0 ], port1=3100, port2=1300, annotations=an, cls=LINCLink )
 
         # cross-connects between OVSes and LINCs
-        self.addLink( s1, oel[0], port1=2, port2=1, annotations=an, cls=LINCLink )
-        self.addLink( s2, oel[1], port1=2, port2=1, annotations=an, cls=LINCLink )
+        self.addLink( s1, oel[ 0 ], port1=2, port2=1, annotations=an, cls=LINCLink )
+        self.addLink( s2, oel[ 1 ], port1=2, port2=1, annotations=an, cls=LINCLink )
 
 
 def setup( ctls ):
@@ -71,7 +72,7 @@
     i = 1
     for ctl in ctls:
         net.addController( RemoteController( 'c%d' % i, ip=ctl ) )
-        i+=1
+        i += 1
 
     net.start()
     LINCSwitch.bootOE( net )
@@ -80,11 +81,11 @@
     LINCSwitch.shutdownOE()
 
 
-if __name__ == "__main__" :
+if __name__ == "__main__":
     import sys
-    if len( sys.argv ) >= 2 :
+    if len( sys.argv ) >= 2:
         setLogLevel( 'info' )
         ctls = sys.argv[ 1: ]
         setup( ctls )
     else:
-        print('./ectopo.py [IP1] [IP2]...\n')
+        print( './ectopo.py [IP1] [IP2]...\n' )
diff --git a/TestON/tests/FUNC/FUNCovsdbtest/FUNCovsdbtest.py b/TestON/tests/FUNC/FUNCovsdbtest/FUNCovsdbtest.py
index ad55a9a..6b6ad93 100644
--- a/TestON/tests/FUNC/FUNCovsdbtest/FUNCovsdbtest.py
+++ b/TestON/tests/FUNC/FUNCovsdbtest/FUNCovsdbtest.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/>.
 """
-
 """
 Description: This test is to check onos set configuration and flows with ovsdb connection.
 
@@ -79,7 +78,6 @@
             main.testSetUp.envSetupException( e )
         main.testSetUp.evnSetupConclusion( stepResult )
 
-
         cliResults = main.testSetUp.ONOSSetUp( main.OVSDB1, main.Cluster,
                                                cellName=cellName, removeLog=True )
 
@@ -469,7 +467,7 @@
 
         main.step( "Post Network Data via HTTP(Post port need post network)" )
         Poststatus, result = main.Cluster.active( 0 ).REST.send( ctrlip, httpport, '', path + 'networks/',
-                                                 'POST', None, networkpostdata )
+                                                                 'POST', None, networkpostdata )
         utilities.assert_equals(
                 expect='200',
                 actual=Poststatus,
@@ -478,7 +476,7 @@
 
         main.step( "Post Subnet Data via HTTP(Post port need post subnet)" )
         Poststatus, result = main.Cluster.active( 0 ).REST.send( ctrlip, httpport, '', path + 'subnets/',
-                                                 'POST', None, subnetpostdata )
+                                                                 'POST', None, subnetpostdata )
         utilities.assert_equals(
                 expect='202',
                 actual=Poststatus,
@@ -487,7 +485,7 @@
 
         main.step( "Post Port1 Data via HTTP" )
         Poststatus, result = main.Cluster.active( 0 ).REST.send( ctrlip, httpport, '', path + 'ports/',
-                                                 'POST', None, port1postdata )
+                                                                 'POST', None, port1postdata )
         utilities.assert_equals(
                 expect='200',
                 actual=Poststatus,
@@ -496,7 +494,7 @@
 
         main.step( "Post Port2 Data via HTTP" )
         Poststatus, result = main.Cluster.active( 0 ).REST.send( ctrlip, httpport, '', path + 'ports/',
-                                                 'POST', None, port2postdata )
+                                                                 'POST', None, port2postdata )
         utilities.assert_equals(
                 expect='200',
                 actual=Poststatus,
diff --git a/TestON/tests/FUNC/FUNCovsdbtest/dependencies/Nbdata.py b/TestON/tests/FUNC/FUNCovsdbtest/dependencies/Nbdata.py
index d93756f..b00b183 100644
--- a/TestON/tests/FUNC/FUNCovsdbtest/dependencies/Nbdata.py
+++ b/TestON/tests/FUNC/FUNCovsdbtest/dependencies/Nbdata.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/>.
 """
-
 """
 This file provide the data
 lanqinglong@huawei.com
diff --git a/TestON/tests/FUNC/FUNCvirNetNB/FUNCvirNetNB.py b/TestON/tests/FUNC/FUNCvirNetNB/FUNCvirNetNB.py
index 5d471ad..73e7f4a 100644
--- a/TestON/tests/FUNC/FUNCvirNetNB/FUNCvirNetNB.py
+++ b/TestON/tests/FUNC/FUNCvirNetNB/FUNCvirNetNB.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
@@ -17,9 +17,7 @@
 
     You should have received a copy of the GNU General Public License
     along with TestON.  If not, see <http://www.gnu.org/licenses/>.
-"""
 
-"""
 Description: This test is to determine if North bound
     can handle the request
 
@@ -78,8 +76,8 @@
         main.testSetUp.envSetupDescription()
         stepResult = main.FALSE
         try:
-            main.apps = main.params['ENV']['cellApps']
-            cellName = main.params['ENV']['cellName']
+            main.apps = main.params[ 'ENV' ][ 'cellApps' ]
+            cellName = main.params[ 'ENV' ][ 'cellName' ]
             main.startUpSleep = int( main.params[ 'SLEEP' ][ 'startup' ] )
             stepResult = main.testSetUp.envSetup()
         except Exception as e:
@@ -126,8 +124,7 @@
 
         main.log.info( "ONOS Network Post test Start" )
         main.case( "Virtual Network NBI Test - Network" )
-        main.caseExplanation  = "Test Network Post NBI " +\
-                                "Verify Post Data same with Stored Data"
+        main.caseExplanation = "Test Network Post NBI Verify Post Data same with Stored Data"
 
         ctrlip = os.getenv( main.params[ 'CTRL' ][ 'ip1' ] )
         port = main.params[ 'HTTP' ][ 'port' ]
@@ -198,8 +195,7 @@
 
         main.log.info( "ONOS Network Update test Start" )
         main.case( "Virtual Network NBI Test - Network" )
-        main.caseExplanation  = "Test Network Update NBI " +\
-                                "Verify Update Data same with Stored Data"
+        main.caseExplanation = "Test Network Update NBI Verify Update Data same with Stored Data"
 
         ctrlip = os.getenv( main.params[ 'CTRL' ][ 'ip1' ] )
         port = main.params[ 'HTTP' ][ 'port' ]
@@ -449,10 +445,10 @@
         networkpostdata = network.DictoJson()
         subnetpostdata = subnet.DictoJson()
 
-        #Change allocation_poolsdata scope
+        # Change allocation_poolsdata scope
         subnet.start = "192.168.102.1"
         subnet.end = "192.168.102.255"
-        #end change
+        # end change
         newsubnetpostdata = subnet.DictoJson()
         ctrl = main.Cluster.active( 0 )
         main.step( "Post Network Data via HTTP(Post Subnet need post network)" )
@@ -740,10 +736,10 @@
         subnetpostdata = subnet.DictoJson()
         portpostdata = port.DictoJson()
 
-        #create update data
+        # create update data
         port.name = "onos-new"
         newportpostdata = port.DictoJson()
-        #end
+        # end
         ctrl = main.Cluster.active( 0 )
         main.step( "Post Network Data via HTTP(Post port need post network)" )
         Poststatus, result = ctrl.REST.send( ctrlip, httpport, '', path + 'networks/',
@@ -932,8 +928,7 @@
 
         main.log.info( "ONOS Post Error Json Create Network test Start" )
         main.case( "Virtual Network NBI Test - Network" )
-        main.caseExplanation  = "Test Network Post With Error json " +\
-                                "The wrong Json can't post network successfully"
+        main.caseExplanation = "Test Network Post With Error json The wrong Json can't post network successfully"
 
         ctrlip = os.getenv( main.params[ 'CTRL' ][ 'ip1' ] )
         port = main.params[ 'HTTP' ][ 'port' ]
@@ -943,11 +938,11 @@
         network = NetworkData()
         network.id = '030d6d3d-fa36-45bf-ae2b-4f4bc43a54dc'
         network.tenant_id = '26cd996094344a0598b0a1af1d525cdc'
-        #The network.admin_state_up should be True or False,when the admin_state_up is 'tttttttttt',the Json can't post.
+        # The network.admin_state_up should be True or False,when the admin_state_up is 'tttttttttt',the Json can't post.
         network.admin_state_up = 'tttttttttt'
-        #The network.routerExternal should be True or False,when the routerExternal is 'ffffffffffff',the Json can't post.
+        # The network.routerExternal should be True or False,when the routerExternal is 'ffffffffffff',the Json can't post.
         network.routerExternal = 'ffffffffffff'
-        #The network.shared should be True or False,when the shared is 'ffffffffffffff',the Json can't post.
+        # The network.shared should be True or False,when the shared is 'ffffffffffffff',the Json can't post.
         network.shared = 'ffffffffffffff'
         postdata = network.DictoJson()
 
@@ -990,9 +985,9 @@
         network.tenant_id = '26cd996094344a0598b0a1af1d525cdc'
         subnet = SubnetData()
         subnet.id = "e44bd655-e22c-4aeb-b1e9-ea1606875178"
-        #The subnet.enable_dhcp should be True or False,when the enable_dhcp is 'tttttttttttttt',the Json can't post.
+        # The subnet.enable_dhcp should be True or False,when the enable_dhcp is 'tttttttttttttt',the Json can't post.
         subnet.enable_dhcp = 'tttttttttttttt'
-        #The subnet.tenant_id should be True or False,when the tenant_id is ffffffffffffff',the Json can't post.
+        # The subnet.tenant_id should be True or False,when the tenant_id is ffffffffffffff',the Json can't post.
         subnet.shared = 'ffffffffffffff'
         subnet.tenant_id = network.tenant_id
         subnet.network_id = network.id
@@ -1055,7 +1050,7 @@
         port.subnet_id = subnet.id
         port.tenant_id = network.tenant_id
         port.network_id = network.id
-        #The port.adminStateUp should be True or False,when the adminStateUp is 'tttttttttttt',the Json can't post.
+        # The port.adminStateUp should be True or False,when the adminStateUp is 'tttttttttttt',the Json can't post.
         port.adminStateUp = 'tttttttttttt'
 
         networkpostdata = network.DictoJson()
diff --git a/TestON/tests/FUNC/FUNCvirNetNB/dependencies/Nbdata.py b/TestON/tests/FUNC/FUNCvirNetNB/dependencies/Nbdata.py
index 067991a..55a661b 100644
--- a/TestON/tests/FUNC/FUNCvirNetNB/dependencies/Nbdata.py
+++ b/TestON/tests/FUNC/FUNCvirNetNB/dependencies/Nbdata.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/xoMg>,
@@ -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/>.
 """
-
 """
 This file provide the data
 lanqinglong@huawei.com
