diff --git a/TestON/tests/SAMP/SAMPstartTemplate_3node/SAMPstartTemplate_3node.py b/TestON/tests/SAMP/SAMPstartTemplate_3node/SAMPstartTemplate_3node.py
index 553fa8e..cb5019c 100644
--- a/TestON/tests/SAMP/SAMPstartTemplate_3node/SAMPstartTemplate_3node.py
+++ b/TestON/tests/SAMP/SAMPstartTemplate_3node/SAMPstartTemplate_3node.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,23 +18,22 @@
     You should have received a copy of the GNU General Public License
     along with TestON.  If not, see <http://www.gnu.org/licenses/>.
 """
-
 # This is a sample template that starts up ONOS cluster, this template
 # can be use as a base script for ONOS System Testing.
 
+
 class SAMPstartTemplate_3node:
 
     def __init__( self ):
         self.default = ''
 
-
-    def CASE0(self, main):
-        '''
+    def CASE0( self, main ):
+        """
             Pull specific ONOS branch, then Build ONOS on ONOS Bench.
             This step is usually skipped. Because in a Jenkins driven automated
             test env. We want Jenkins jobs to pull&build for flexibility to handle
             different versions of ONOS.
-        '''
+        """
         try:
             from tests.dependencies.ONOSSetup import ONOSSetup
         except ImportError:
@@ -47,13 +46,12 @@
 
         main.testSetUp.gitPulling()
 
-
     def CASE1( self, main ):
-        '''
+        """
             Set up global test variables;
             Uninstall all running cells in test env defined in .topo file
 
-        '''
+        """
         try:
             from tests.dependencies.ONOSSetup import ONOSSetup
         except ImportError:
@@ -67,23 +65,21 @@
         main.testSetUp.envSetupDescription()
         stepResult = main.FALSE
         try:
-            main.onosStartupSleep = float(main.params['CASE1']['SleepTimers']['onosStartup'])
-            main.onosCfgSleep = float(main.params['CASE1']['SleepTimers']['onosCfg'])
-            main.mnStartupSleep = float(main.params['CASE1']['SleepTimers']['mnStartup'])
-            main.mnCfgSleep = float(main.params['CASE1']['SleepTimers']['mnCfg'])
+            main.onosStartupSleep = float( main.params[ 'CASE1' ][ 'SleepTimers' ][ 'onosStartup' ] )
+            main.onosCfgSleep = float( main.params[ 'CASE1' ][ 'SleepTimers' ][ 'onosCfg' ] )
+            main.mnStartupSleep = float( main.params[ 'CASE1' ][ 'SleepTimers' ][ 'mnStartup' ] )
+            main.mnCfgSleep = float( main.params[ 'CASE1' ][ 'SleepTimers' ][ 'mnCfg' ] )
             stepResult = main.testSetUp.envSetup( includeGitPull=False )
         except Exception as e:
             main.testSetUp.envSetupException( e )
         main.testSetUp.evnSetupConclusion( stepResult )
 
-
-
     def CASE2( self, main ):
-        '''
+        """
             Report errors/warnings/exceptions
-        '''
-        main.log.info("Error report: \n" )
-        main.ONOSbench.logReport( main.Cluster.runningNodes[0].ipAddress,
+        """
+        main.log.info( "Error report: \n" )
+        main.ONOSbench.logReport( main.Cluster.runningNodes[ 0 ].ipAddress,
                                   [ "INFO",
                                     "FOLLOWER",
                                     "WARN",
@@ -94,10 +90,10 @@
 
     def CASE10( self, main ):
         """
-        Start ONOS cluster (3 nodes in this example) in three steps:
-        1) start a basic cluster with drivers app via ONOSDriver;
-        2) activate apps via ONOSCliDriver;
-        3) configure onos via ONOSCliDriver;
+        Start ONOS cluster ( 3 nodes in this example ) in three steps:
+        1 ) start a basic cluster with drivers app via ONOSDriver;
+        2 ) activate apps via ONOSCliDriver;
+        3 ) configure onos via ONOSCliDriver;
         """
         try:
             from tests.dependencies.ONOSSetup import ONOSSetup
@@ -113,9 +109,9 @@
 
         main.case( "Start up " + str( main.Cluster.numCtrls ) + "-node onos cluster." )
 
-        main.step( "Start ONOS cluster with basic (drivers) app.")
+        main.step( "Start ONOS cluster with basic (drivers) app." )
         stepResult = main.ONOSbench.startBasicONOS( nodeList=main.Cluster.getIps(), opSleep=200,
-                                               onosUser=main.ONOScell.karafUser )
+                                                    onosUser=main.ONOScell.karafUser )
         utilities.assert_equals( expect=main.TRUE,
                                  actual=stepResult,
                                  onpass="Successfully started basic ONOS cluster ",
@@ -123,13 +119,13 @@
 
         main.testSetUp.startOnosClis()
 
-        main.step( "Activate onos apps.")
-        main.apps = main.params['CASE10'].get( 'Apps' )
+        main.step( "Activate onos apps." )
+        main.apps = main.params[ 'CASE10' ].get( 'Apps' )
         if main.apps:
             main.log.info( "Apps to activate: " + main.apps )
             activateResult = main.TRUE
-            for a in main.apps.split(","):
-                activateResult = activateResult & main.Cluster.active( 0 ).CLI.activateApp(a)
+            for a in main.apps.split( "," ):
+                activateResult = activateResult & main.Cluster.active( 0 ).CLI.activateApp( a )
             # TODO: check this worked
             time.sleep( main.onosCfgSleep )  # wait for apps to activate
         else:
@@ -140,14 +136,14 @@
                                  onfail="Failed to set config" )
 
         main.step( "Set ONOS configurations" )
-        config = main.params['CASE10'].get( 'ONOS_Configuration' )
+        config = main.params[ 'CASE10' ].get( 'ONOS_Configuration' )
         if config:
             main.log.debug( config )
             checkResult = main.TRUE
             for component in config:
-                for setting in config[component]:
-                    value = config[component][setting]
-                    check = main.Cluster.runningNodes[0].setCfg( component, setting, value )
+                for setting in config[ component ]:
+                    value = config[ component ][ setting ]
+                    check = main.Cluster.runningNodes[ 0 ].setCfg( component, setting, value )
                     main.log.info( "Value was changed? {}".format( main.TRUE == check ) )
                     checkResult = check and checkResult
             utilities.assert_equals( expect=main.TRUE,
@@ -163,12 +159,12 @@
         """
         import time
 
-        topology = main.params['CASE11']['topo']
+        topology = main.params[ 'CASE11' ][ 'topo' ]
         main.log.report( "Start Mininet topology" )
         main.case( "Start Mininet topology" )
 
         main.step( "Starting Mininet Topology" )
-        topoResult = main.Mininet1.startNet(mnCmd=topology )
+        topoResult = main.Mininet1.startNet( mnCmd=topology )
         stepResult = topoResult
         utilities.assert_equals( expect=main.TRUE,
                                  actual=stepResult,
@@ -178,25 +174,23 @@
         if not topoResult:
             main.cleanAndExit()
 
-        main.step( "Assign switches to controllers.")
+        main.step( "Assign switches to controllers." )
         assignResult = main.TRUE
-        for i in range(1, 8):
+        for i in range( 1, 8 ):
             assignResult = assignResult & main.Mininet1.assignSwController( sw="s" + str( i ),
                                                                             ip=main.Cluster.getIps(),
                                                                             port='6653' )
-        time.sleep(main.mnCfgSleep)
+        time.sleep( main.mnCfgSleep )
         utilities.assert_equals( expect=main.TRUE,
                                  actual=stepResult,
                                  onpass="Successfully assign switches to controllers",
                                  onfail="Failed to assign switches to controllers" )
 
-
     def CASE12( self, main ):
         """
             Tests using through ONOS CLI handles
         """
-
-        main.case( "Test some onos commands through CLI. ")
+        main.case( "Test some onos commands through CLI. " )
         main.log.debug( main.Cluster.active( 0 ).CLI.sendline( "summary" ) )
         main.log.debug( main.Cluster.active( 1 ).CLI.sendline( "devices" ) )
 
@@ -204,8 +198,7 @@
         """
             Tests using ONOS REST API handles
         """
-
-        main.case( " Sample tests using ONOS REST API handles. ")
+        main.case( " Sample tests using ONOS REST API handles. " )
         main.log.debug( main.Cluster.active( 0 ).REST.send( "/devices" ) )
         main.log.debug( main.Cluster.active( 2 ).REST.apps() )
 
@@ -221,17 +214,17 @@
         installResults = main.Cluster.active( 0 ).CLI.activateApp( "org.onosproject.fwd" )
         utilities.assert_equals( expect=main.TRUE,
                                  actual=installResults,
-                                 onpass= "Configure fwd successful",
-                                 onfail= "Configure fwd failed" )
+                                 onpass="Configure fwd successful",
+                                 onfail="Configure fwd failed" )
         main.step( "Run pingall to check connectivity. " )
         pingResult = main.FALSE
         passMsg = "Reactive Pingall test passed"
         pingResult = main.Mininet1.pingall()
         if not pingResult:
-           main.log.warn("First pingall failed. Trying again...")
-           pingResult = main.Mininet1.pingall()
-           passMsg += "on the second try"
+            main.log.warn( "First pingall failed. Trying again..." )
+            pingResult = main.Mininet1.pingall()
+            passMsg += "on the second try"
         utilities.assert_equals( expect=main.TRUE,
                                  actual=pingResult,
                                  onpass=passMsg,
-                                 onfail= "Reactive Pingall failed, " + "one or more ping pairs failed" )
+                                 onfail="Reactive Pingall failed, " + "one or more ping pairs failed" )
