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()
