diff --git a/TestON/tests/FuncPlatform/Dependency/App.py b/TestON/tests/FuncPlatform/Dependency/App.py
index 3e205d6..5410c32 100644
--- a/TestON/tests/FuncPlatform/Dependency/App.py
+++ b/TestON/tests/FuncPlatform/Dependency/App.py
@@ -43,6 +43,10 @@
             main.log.error( 'There was an error with the key '+
                     str(app) + '. Check the appList dictionary' )
             return main.FALSE
+        except Exception:
+            main.log.error( 'Uncaught exception error while ' +
+                    'activating applications: ' + str(app) )
+            return main.FALSE
 
     return main.TRUE
 
diff --git a/TestON/tests/FuncPlatform/Dependency/Startup.py b/TestON/tests/FuncPlatform/Dependency/Startup.py
index 97b4dd7..f3f90a9 100644
--- a/TestON/tests/FuncPlatform/Dependency/Startup.py
+++ b/TestON/tests/FuncPlatform/Dependency/Startup.py
@@ -199,9 +199,15 @@
                     'onos-service server command ' + 
                     str( main.ONOSnode[node].handle.before ) )
             return main.FALSE
+    
+    iu = main.TRUE
+    for node in nodeIps:
+        iu = iu and main.ONOSbench.isup( node )
 
-    # TODO: Check for startup (isup)
-    return main.TRUE
+    if iu == main.TRUE: 
+        return main.TRUE
+    else:
+        return main.FALSE
     
 def addAndStartOnosNode( nodeIps ):
     """
diff --git a/TestON/tests/FuncPlatform/FuncPlatform.py b/TestON/tests/FuncPlatform/FuncPlatform.py
index 375c83f..60b1aa0 100644
--- a/TestON/tests/FuncPlatform/FuncPlatform.py
+++ b/TestON/tests/FuncPlatform/FuncPlatform.py
@@ -36,6 +36,8 @@
         Main scope initialization case
         Must include to run any other test cases
         """   
+        import imp 
+
         # NOTE: Hardcoded application name subject to change
         #       closely monitor and make changes when necessary
         #       (or implement ways to dynamically get names)
@@ -54,7 +56,15 @@
             'mobility' : 'org.onosproject.mobility',
             'netconf' : 'org.onosproject.netconf', 
             'null' : 'org.onosproject.null',
-            'optical' : 'org.onosproject.optical'
+            'optical' : 'org.onosproject.optical',
+            'pcep' : 'org.onosproject.pcep',
+            'proxyarp' : 'org.onosproject.proxyarp',
+            'reactive.routing' : 'org.onosproject.reactive.routing',
+            'sdnip' : 'org.onosproject.sdnip',
+            'segmentrouting' : 'org.onosproject.segmentrouting',
+            'tunnel' : 'org.onosproject.tunnel',
+            'virtualbng' : 'org.onosproject.virtualbng',
+            'xosintegration' : 'org.onosproject.xosintegration'
             } 
         # List of ONOS ip's specififed in params
         main.ONOSips = [] 
@@ -67,13 +77,38 @@
                     getattr( main, 'ONOS' + str(node+1) + 'cli' ) )
             main.ONOSnode.append(
                     getattr( main, 'ONOS' + str(node+1) ) )
+       
+        # Application source and name definitions
+        startupSrc = main.params['DEP']['startupSrc']
+        startupClassName = main.params['DEP']['startupClassName']
+        
+        appClassName = main.params['DEP']['appClassName']
+        appSrc = main.params['DEP']['appSrc']
+
+        logClassName = main.params['DEP']['logClassName']
+        logSrc = main.params['DEP']['logSrc']
+
+        shutdownClassName = main.params['DEP']['shutdownClassName']
+        shutdownSrc = main.params['DEP']['shutdownSrc']
+
+        # Importing dependency class(es)
+        # Refer to source files in Dependency folder to
+        # make changes to its respective methods
+        # Be weary of naming collisions
+        try:
+            main.startup = imp.load_source( startupClassName, startupSrc )
+            main.app = imp.load_source( appClassName, appSrc )
+            main.onosLog = imp.load_source( logClassName, logSrc )
+            main.shutdown = imp.load_source( shutdownClassName, shutdownSrc )
+        except ImportError:
+            main.log.error( 'Error importing class file(s). Please ' +
+                    'check file location' )
+            main.cleanup()
+            main.exit()
 
     def CASE2( self, main ):
         import time
-        import imp
 
-        startupSrc = main.params['DEP']['startupSrc']
-        startupClassName = main.params['DEP']['startupClassName']
         cellName = main.params['CELL']['name']
         appStr = main.params['CELL']['appStr']
         benchIp = main.params['BENCH']['ip']
@@ -81,21 +116,10 @@
         gitPull = main.params['GIT']['pull']
         mnIp = main.params['MN']['ip']
 
-        # importing dependency class(es)
-        # Refer to source files in Dependency folder to
-        # make changes to its respective methods
-        try:
-            startup = imp.load_source( startupClassName, startupSrc )
-        except ImportError:
-            main.log.error( "Error importing class " +
-                    str(startupClassName) + " from " + str(startupSrc) )
-            main.cleanup()
-            main.exit()
-
         main.case( 'Setup environment and install ONOS' )
         if gitPull == 'on': 
             main.step( 'Git pull and clean install' )
-            gitPullResult = startup.gitPullAndMci( branchName )
+            gitPullResult = main.startup.gitPullAndMci( branchName )
             utilities.assert_equals( expect=main.TRUE,
                         actual=gitPullResult,
                         onpass='Git pull and install successful',
@@ -103,7 +127,7 @@
                             str(gitPullResult) )
         
         main.step( 'Initiate ONOS startup sequence' )    
-        startupResult = startup.initOnosStartupSequence(
+        startupResult = main.startup.initOnosStartupSequence(
                 cellName, appStr, benchIp, mnIp, main.ONOSips )
         utilities.assert_equals( expect=main.TRUE,
                         actual=startupResult,
@@ -113,26 +137,8 @@
         
     def CASE3( self, main ):
         import time
-        import imp
 
         main.case( 'Activate applications and check installation' )
-        # Activate applications and check consistency 
-        # across clusters
-        appClassName = main.params['DEP']['appClassName']
-        appSrc = main.params['DEP']['appSrc']
-
-        logClassName = main.params['DEP']['logClassName']
-        logSrc = main.params['DEP']['logSrc']
-
-        # Import application file to use its methods
-        try:
-            app = imp.load_source( appClassName, appSrc )
-            onosLog = imp.load_source( logClassName, logSrc )
-        except ImportError:
-            main.log.error( "Error importing class " +
-                    str(startupClassName) + " from " + str(startupSrc) )
-            main.cleanup()
-            main.exit()
        
         # NOTE: Test only
         # Unceremoniously kill onos 2 
@@ -141,14 +147,18 @@
         time.sleep( 30 )
 
         main.step( 'Sample Onos log check' )
-        logResult = onosLog.checkOnosLog( main.ONOSips[0] )
+        logResult = main.onosLog.checkOnosLog( main.ONOSips[0] )
         main.log.info( logResult )
-        # TODO: Define assertion pass / fail criteria
+        # TODO: Define pass criteria
+        utilities.assert_equals( expect=main.TRUE,
+                actual=main.TRUE,
+                onpass= 'Logging successful',
+                onfail= 'Logging failed ' )
 
         # Sample app activation
         main.step( 'Activating applications metrics and fwd' ) 
         appList = ['metrics', 'fwd']
-        appResult = app.activate( appList ) 
+        appResult = main.app.activate( appList ) 
         utilities.assert_equals( expect=main.TRUE,
                 actual=appResult,
                 onpass= 'App activation of ' + str(appList) + ' successful',
@@ -165,39 +175,20 @@
         targz = main.params['DEP']['targz']
         clusterCount = main.params['CTRL']['num']
        
-        startClassName = main.params['DEP']['startupClassName']
-        startSrc = main.params['DEP']['startupSrc']
-
-        shutdownClassName = main.params['DEP']['shutdownClassName']
-        shutdownSrc = main.params['DEP']['shutdownSrc']
-
-        # Import files to use its methods
-        try:
-            startup = imp.load_source( startClassName, startSrc )
-            shutdown = imp.load_source( shutdownClassName, shutdownSrc )
-        except ImportError:
-            main.log.error( "Error importing class " +
-                    str(startupClassName) + " from " + str(startupSrc) )
-            main.cleanup()
-            main.exit()
-
         main.case( 'Install ONOS from onos.tar.gz file' )
 
         main.step( 'Killing all ONOS instances previous started' )
-        killResult = shutdown.killOnosNodes( main.ONOSips )
+        killResult = main.shutdown.killOnosNodes( main.ONOSips )
         utilities.assert_equals( expect=main.TRUE,
                 actual = killResult,
                 onpass = 'All Onos nodes successfully killed',
                 onfail = 'Onos nodes were not successfully killed' )
 
         main.step( 'Starting ONOS using tar.gz on all nodes' )
-        installResult = startup.installOnosFromTar( targz, main.ONOSips )
+        installResult = main.startup.installOnosFromTar( targz, main.ONOSips )
         utilities.assert_equals( expect=main.TRUE,
                 actual = installResult,
                 onpass= 'Onos tar.gz installation successful',
                 onfail= 'Onos tar.gz installation failed' )
 
 
-
-
-
