diff --git a/TestON/tests/TopoPerfNextBM/TopoPerfNextBM.params b/TestON/tests/TopoPerfNextBM/TopoPerfNextBM.params
index 24588e0..b898149 100644
--- a/TestON/tests/TopoPerfNextBM/TopoPerfNextBM.params
+++ b/TestON/tests/TopoPerfNextBM/TopoPerfNextBM.params
@@ -3,7 +3,7 @@
 
     <ENV>
         <cellName>topo_perf_test</cellName>
-        <cellFeatures>"webconsole,onos-core,onos-api,onos-cli,onos-app-metrics,onos-app-gui,onos-openflow"</cellFeatures>
+        <cellFeatures>"org.onosproject.metrics,org.onosproject.openflow"</cellFeatures>
     </ENV>
 
     <GIT>
@@ -37,11 +37,14 @@
     </BENCH>
 
     <TSHARK>
+        # What to 'grep' for tshark outputs
+
         <ofpPortStatus>OF 1.3 146</ofpPortStatus>
         <ofpRoleReply>OF 1.3 90 of_role_reply</ofpRoleReply>
         <featureReply>OF 1.3 98 of_features_reply</featureReply>
         <roleRequest>OF 1.3 90 of_role_request</roleRequest>
         <tcpSynAck>TCP 74 6633</tcpSynAck>
+        <finAckSequence>FIN</finAckSequence>
     </TSHARK>
 
     <TEST>
@@ -61,17 +64,17 @@
         </topoConfigName>
 
         #Number of times to iterate each case
-        <numIter>35</numIter>
+        <numIter>25</numIter>
         <numSwitch>2</numSwitch>
         #Number of iterations to ignore initially
         <iterIgnore>2</iterIgnore>
 
-        <singleSwThreshold>0,1000</singleSwThreshold>
-        <portUpThreshold>0,1000</portUpThreshold>
-        <portDownThreshold>0,1000</portDownThreshold>
-        <linkUpThreshold>0,10000</linkUpThreshold>
-        <linkDownThreshold>0,10000</linkDownThreshold>
-        <swDisc100Threshold>0,10000</swDisc100Threshold>
+        <singleSwThreshold>0.0,1000</singleSwThreshold>
+        <portUpThreshold>0.0,1000</portUpThreshold>
+        <portDownThreshold>0.0,1000</portDownThreshold>
+        <linkUpThreshold>0.0,10000</linkUpThreshold>
+        <linkDownThreshold>0.0,10000</linkDownThreshold>
+        <swDisc100Threshold>0.0,10000</swDisc100Threshold>
     
         <tabletFile>tablets_3node.json</tabletFile>
    </TEST>
diff --git a/TestON/tests/TopoPerfNextBM/TopoPerfNextBM.py b/TestON/tests/TopoPerfNextBM/TopoPerfNextBM.py
index 8a9591d..6c07d6b 100644
--- a/TestON/tests/TopoPerfNextBM/TopoPerfNextBM.py
+++ b/TestON/tests/TopoPerfNextBM/TopoPerfNextBM.py
@@ -17,6 +17,7 @@
         global clusterCount
         global timeToPost
         global runNum
+
         import time
         clusterCount = 1
         timeToPost = time.strftime('%Y-%m-%d %H:%M:%S')
@@ -24,17 +25,21 @@
         cellName = main.params['ENV']['cellName']
         gitPull = main.params['GIT']['autoPull']
         checkoutBranch = main.params['GIT']['checkout']
-        
-        ONOS1Ip = main.params['CTRL']['ip1']
-        ONOS2Ip = main.params['CTRL']['ip2']
-        ONOS3Ip = main.params['CTRL']['ip3']
-        ONOS4Ip = main.params['CTRL']['ip4']
-        ONOS5Ip = main.params['CTRL']['ip5']
-        ONOS6Ip = main.params['CTRL']['ip6']
-        ONOS7Ip = main.params['CTRL']['ip7']
+       
+        global CLIs
+        CLIs = []
+        global nodes
+        nodes = []
+        global nodeIpList
+        nodeIpList = []
+        for i in range( 1, 8 ):
+            CLIs.append( getattr( main, 'ONOS' + str( i ) + 'cli' ) )
+            nodes.append( getattr( main, 'ONOS' + str( i ) ) )
+            nodeIpList.append( main.params[ 'CTRL' ][ 'ip'+str(i) ] )
+
         MN1Ip = main.params['MN']['ip1']
         BENCHIp = main.params['BENCH']['ip']
-        
+        cellFeatures = main.params['ENV']['cellFeatures']
         topoCfgFile = main.params['TEST']['topoConfigFile']
         topoCfgName = main.params['TEST']['topoConfigName']
         portEventResultPath = main.params['DB']['portEventResultPath']
@@ -42,12 +47,14 @@
         mvnCleanInstall = main.params['TEST']['mci']
         
         main.case('Setting up test environment')
-        main.log.info('Copying topology event accumulator config' +
-                ' to ONOS /package/etc')
-        main.ONOSbench.handle.sendline('cp ~/' +
-                topoCfgFile + ' ~/ONOS/tools/package/etc/' +
-                topoCfgName)
-        main.ONOSbench.handle.expect('\\$')
+
+        # NOTE: Below is deprecated after new way to install features
+        #main.log.info('Copying topology event accumulator config' +
+        #        ' to ONOS /package/etc')
+        #main.ONOSbench.handle.sendline('cp ~/' +
+        #        topoCfgFile + ' ~/ONOS/tools/package/etc/' +
+        #        topoCfgName)
+        #main.ONOSbench.handle.expect('\\$')
         
         main.log.report('Setting up test environment')
         
@@ -55,12 +62,9 @@
         main.Mininet1.startNet()
         
         main.step('Cleaning previously installed ONOS if any')
-        main.ONOSbench.onosUninstall(nodeIp=ONOS2Ip)
-        main.ONOSbench.onosUninstall(nodeIp=ONOS3Ip)
-        main.ONOSbench.onosUninstall(nodeIp=ONOS4Ip)
-        main.ONOSbench.onosUninstall(nodeIp=ONOS5Ip)
-        main.ONOSbench.onosUninstall(nodeIp=ONOS6Ip)
-        main.ONOSbench.onosUninstall(nodeIp=ONOS7Ip)
+        # Nodes 2 ~ 7
+        for i in range( 1, 7 ):
+            main.ONOSbench.onosUninstall(nodeIp=nodeIpList[i])
         
         main.step('Clearing previous DB log file')
         
@@ -71,12 +75,9 @@
         fSwitchLog.write('')
         fSwitchLog.close()
         
-        cellStr = 'webconsole,onos-core,onos-api,onos-app-metrics,' +\
-                'onos-app-gui,onos-cli,onos-openflow'
-        
         main.step('Creating cell file')
         cellFileResult = main.ONOSbench.createCellFile(
-                BENCHIp, cellName, MN1Ip, cellStr, ONOS1Ip)
+                BENCHIp, cellName, MN1Ip, cellFeatures, nodeIpList[0])
         
         main.step('Applying cell file to environment')
         cellApplyResult = main.ONOSbench.setCell(cellName)
@@ -100,18 +101,32 @@
             main.log.info('mci turned off by settings')
             mvnResult = main.TRUE
         main.step('Set cell for ONOS cli env')
-        main.ONOS1cli.setCell(cellName)
+        CLIs[0].setCell(cellName)
         
         main.step('Creating ONOS package')
         packageResult = main.ONOSbench.onosPackage()
         
         main.step('Installing ONOS package')
-        install1Result = main.ONOSbench.onosInstall(node=ONOS1Ip)
+        install1Result = main.ONOSbench.onosInstall(node=nodeIpList[0])
         
         time.sleep(10)
         
         main.step('Start onos cli')
-        cli1 = main.ONOS1cli.startOnosCli(ONOS1Ip)
+        cli1 = CLIs[0].startOnosCli(nodeIpList[0])
+        
+        main.step( 'activating essential applications' )
+        CLIs[0].activateApp( 'org.onosproject.metrics' )
+        CLIs[0].activateApp( 'org.onosproject.openflow' )
+
+        main.step( 'Configuring application parameters' )
+        configName = 'org.onosproject.net.topology.impl.DefaultTopologyProvider'
+        configParam = 'maxEvents 1'
+        main.ONOSbench.onosCfgSet( nodeIpList[0], configName, configParam )
+        configParam = 'maxBatchMs 0'
+        main.ONOSbench.onosCfgSet( nodeIpList[0], configName, configParam )
+        configParam = 'maxIdleMs 0'
+        main.ONOSbench.onosCfgSet( nodeIpList[0], configName, configParam )
+        
         utilities.assert_equals(expect=main.TRUE,
                 actual=cellFileResult and cellApplyResult and\
                         verifyCellResult and checkoutResult and\
@@ -144,29 +159,21 @@
         import os
         import numpy
         
-        ONOS1Ip = main.params['CTRL']['ip1']
-        ONOS2Ip = main.params['CTRL']['ip2']
-        ONOS3Ip = main.params['CTRL']['ip3']
-        ONOS4Ip = main.params['CTRL']['ip4']
-        ONOS5Ip = main.params['CTRL']['ip5']
-        ONOS6Ip = main.params['CTRL']['ip6']
-        ONOS7Ip = main.params['CTRL']['ip7']
-        
         ONOSUser = main.params['CTRL']['user']
         defaultSwPort = main.params['CTRL']['port1']
         numIter = main.params['TEST']['numIter']
         iterIgnore = int(main.params['TEST']['iterIgnore'])
         
-        deviceTimestamp = main.params['JSON']['deviceTimestamp']
-        graphTimestamp = main.params['JSON']['graphTimestamp']
+        deviceTimestampKey = main.params['JSON']['deviceTimestamp']
+        graphTimestampKey = main.params['JSON']['graphTimestamp']
 
         debugMode = main.params['TEST']['debugMode']
         onosLog = main.params['TEST']['onosLogFile']
         resultPath = main.params['DB']['switchEventResultPath']
         thresholdStr = main.params['TEST']['singleSwThreshold']
         thresholdObj = thresholdStr.split(',')
-        thresholdMin = int(thresholdObj[0])
-        thresholdMax = int(thresholdObj[1])
+        thresholdMin = float(thresholdObj[0])
+        thresholdMax = float(thresholdObj[1])
        
         # Look for 'role-request' messages,
         # which replaces the 'vendor' messages previously seen
@@ -175,11 +182,40 @@
         tsharkFeatureReply = main.params[ 'TSHARK' ][ 'featureReply' ]
         tsharkRoleRequest = main.params[ 'TSHARK' ][ 'roleRequest' ]
         tsharkOfString = main.params[ 'TSHARK' ][ 'ofpRoleReply' ]
+        tsharkFinAckSequence = main.params[ 'TSHARK' ][ 'finAckSequence' ]
 
         tsharkOfOutput = '/tmp/tshark_of_topo.txt'
         tsharkTcpOutput = '/tmp/tshark_tcp_topo.txt'
         tsharkRoleOutput = '/tmp/tshark_role_request.txt'
         tsharkFeatureOutput = '/tmp/tshark_feature_reply.txt'
+        tsharkFinAckOutput = '/tmp/tshark_fin_ack.txt'
+
+        # Switch connect measurement list
+        # TCP Syn/Ack -> Feature Reply latency collection for each node
+        tcpToFeatureLatNodeIter = numpy.zeros((clusterCount, int(numIter)))
+        # Feature Reply -> Role Request latency collection for each node
+        featureToRoleRequestLatNodeIter = numpy.zeros((clusterCount, 
+            int(numIter)))
+        # Role Request -> Role Reply latency collection for each node
+        roleRequestToRoleReplyLatNodeIter = numpy.zeros((clusterCount,
+            int(numIter)))
+        # Role Reply -> Device Update latency collection for each node
+        roleReplyToDeviceLatNodeIter = numpy.zeros((clusterCount,
+            int(numIter)))
+        # Device Update -> Graph Update latency collection for each node
+        deviceToGraphLatNodeIter = numpy.zeros((clusterCount,
+            int(numIter)))
+        
+        # Switch disconnect measurement lists
+        # Mininet Fin / Ack -> Mininet Ack
+        finAckTransactionLatNodeIter = numpy.zeros((clusterCount,
+            int(numIter)))
+        # Mininet Ack -> Device Event
+        ackToDeviceLatNodeIter = numpy.zeros((clusterCount,
+            int(numIter)))
+        # Device event -> Graph event
+        deviceToGraphDiscLatNodeIter = numpy.zeros((clusterCount,
+            int(numIter)))
 
         endToEndLatNodeIter = numpy.zeros((clusterCount, int(numIter)))
         ofpToGraphLatNodeIter = numpy.zeros((clusterCount, int(numIter)))
@@ -214,7 +250,7 @@
            
             main.log.info('Assigning s3 to controller')
             main.Mininet1.assignSwController(sw='3',
-                    ip1=ONOS1Ip, port1=defaultSwPort)
+                    ip1=nodeIpList[0], port1=defaultSwPort)
             
             time.sleep(10)
             
@@ -222,14 +258,14 @@
             main.ONOS1.tsharkStop()
             
             main.log.info('Copying over tshark files')
-            os.system('scp ' + ONOSUser + '@' + ONOS1Ip +
+            os.system('scp ' + ONOSUser + '@' + nodeIpList[0] +
                     ':' + tsharkTcpOutput + ' /tmp/')
-            os.system('scp ' + ONOSUser + '@' + ONOS1Ip +
+            os.system('scp ' + ONOSUser + '@' + nodeIpList[0] +
                     ':' + tsharkRoleOutput + ' /tmp/')
-            os.system('scp ' + ONOSUser + '@' + ONOS1Ip +
+            os.system('scp ' + ONOSUser + '@' + nodeIpList[0] +
                     ':' + tsharkFeatureOutput + ' /tmp/')
             os.system('scp ' + ONOSUser + '@' +
-                      ONOS1Ip + ':' + tsharkOfOutput + ' /tmp/')
+                      nodeIpList[0] + ':' + tsharkOfOutput + ' /tmp/')
            
             # Get tcp syn / ack output
             time.sleep(5)
@@ -303,279 +339,96 @@
             # TODO: calculate feature reply, role request times
             # stack measurements correctly and report
 
-            """
             #TODO: Refactor in progress
 
             for node in range(0, clusterCount):
                 nodeNum = node+1
-                exec "metricsSwUp = main.ONOS%scli.topologyEventsMetrics"%str(nodeNum) 
+                metricsSwUp = CLIs[node].topologyEventsMetrics
                 jsonStr = metricsSwUp()
                 jsonObj = json.loads(jsonStr)
-                graphTimestamp = jsonObj[graphTimestamp]['value']
-                deviceTimestamp = jsonObj[deviceTimestamp]['value']
-               
-                deltaGraphTcp = int(graphTimestamp) - int(t0Tcp)
-                deltaDeviceTcp = int(deviceTimestamp) - int(t0Tcp)
-                deltaGraphOfp = int(graphTimestamp) - int(t0Ofp)
-                deltaDeviceOfp = int(deviceTimestamp) - int(t0Ofp)
-                deltaRoleTcp = int(roleTimestamp) - int(t0Tcp) 
-                deltaFeatureTcp = int(featureTimestamp) - int(t0Tcp)
-                deltaOfpTcp = int(t0Ofp) - int(t0Tcp)
-
-                if deltaGraphTcp > thresholdMin and\
-                   deltaGraphTcp < thresholdMax and i >= iterIgnore:
-                    endToEndLatNodeIter[node][i] = deltaGraphTcp
-                    main.log.info("ONOS "+str(nodeNum)+ " tcp-to-graph: "+
-                            str(deltaGraphTcp) + " ms")
+                if jsonObj:
+                    graphTimestamp = jsonObj[graphTimestampKey]['value']
+                    deviceTimestamp = jsonObj[deviceTimestampKey]['value']
                 else:
-                    main.log.info("ONOS "+str(nodeNum)+ " tcp-to-graph "+
+                    main.log.error( "Unexpected JSON object" )
+                    # If we could not obtain the JSON object, 
+                    # set the timestamps to 0, which will be
+                    # excluded from the measurement later on
+                    # (realized as invalid)
+                    graphTimestamp = 0
+                    deviceTimestamp = 0
+                
+                endToEnd = int(graphTimestamp) - int(t0Tcp)
+                
+                # Below are measurement breakdowns of the end-to-end
+                # measurement. 
+                tcpToFeature = int(featureTimestamp) - int(t0Tcp)
+                featureToRole = int(roleTimestamp) - int(featureTimestamp)
+                roleToOfp = int(t0Ofp) - int(roleTimestamp)
+                ofpToDevice = int(deviceTimestamp) - int(t0Ofp)
+                deviceToGraph = float(graphTimestamp) - float(deviceTimestamp)
+                
+                if endToEnd > thresholdMin and\
+                   endToEnd < thresholdMax and i >= iterIgnore:
+                    endToEndLatNodeIter[node][i] = endToEnd 
+                    main.log.info("ONOS "+str(nodeNum)+ " end-to-end: "+
+                            str(endToEnd) + " ms")
+                else:
+                    main.log.info("ONOS "+str(nodeNum)+ " end-to-end "+
                             "measurement ignored due to excess in "+
                             "threshold or premature iteration")
 
-                if deltaGraphOfp > thresholdMin and\
-                   deltaGraphOfp < thresholdMax and i >= iterIgnore:
-                    ofpToGraphLatNodeIter[node][i] = deltaGraphOfp
-                    main.log.info("ONOS "+str(nodeNum)+ " ofp-to-graph: "+
-                            str(deltaGraphOfp) + " ms")
+                if tcpToFeature > thresholdMin and\
+                   tcpToFeature < thresholdMax and i >= iterIgnore:
+                    tcpToFeatureLatNodeIter[node][i] = tcpToFeature 
+                    main.log.info("ONOS "+str(nodeNum)+ " tcp-to-feature: "+
+                            str(tcpToFeature) + " ms")
                 else:
-                    main.log.info("ONOS "+str(nodeNum)+ " ofp-to-graph: "+
+                    main.log.info("ONOS "+str(nodeNum)+ " tcp-to-feature "+
                             "measurement ignored due to excess in "+
                             "threshold or premature iteration")
 
-                if deltaDeviceOfp > thresholdMin and\
-                   deltaDeviceOfp < thresholdMax and i >= iterIgnore:
-                    ofpToDeviceLatNodeIter[node][i] = deltaDeviceOfp
-                    main.log.info("ONOS "+str(nodeNum)+ " ofp-to-device: "+
-                            str(deltaDeviceOfp) + " ms")
+                if featureToRole > thresholdMin and\
+                   featureToRole < thresholdMax and i >= iterIgnore:
+                    featureToRoleRequestLatNodeIter[node][i] = featureToRole 
+                    main.log.info("ONOS "+str(nodeNum)+ " feature-to-role: "+
+                            str(featureToRole) + " ms")
                 else:
-                    main.log.info("ONOS "+str(nodeNum)+ " ofp-to-device: "+
+                    main.log.info("ONOS "+str(nodeNum)+ " feature-to-role "+
                             "measurement ignored due to excess in "+
                             "threshold or premature iteration")
 
+                if roleToOfp > thresholdMin and\
+                   roleToOfp < thresholdMax and i >= iterIgnore:
+                    roleRequestToRoleReplyLatNodeIter[node][i] = roleToOfp
+                    main.log.info("ONOS "+str(nodeNum)+ " role-to-reply: "+
+                            str(roleToOfp) + " ms")
+                else:
+                    main.log.info("ONOS "+str(nodeNum)+ " role-to-reply "+
+                            "measurement ignored due to excess in "+
+                            "threshold or premature iteration")
+                
+                if ofpToDevice > thresholdMin and\
+                   ofpToDevice < thresholdMax and i >= iterIgnore:
+                    roleReplyToDeviceLatNodeIter[node][i] = ofpToDevice 
+                    main.log.info("ONOS "+str(nodeNum)+ " reply-to-device: "+
+                            str(ofpToDevice) + " ms")
+                else:
+                    main.log.info("ONOS "+str(nodeNum)+ " role-to-reply "+
+                            "measurement ignored due to excess in "+
+                            "threshold or premature iteration")
 
+                if deviceToGraph > thresholdMin and\
+                   deviceToGraph < thresholdMax and i >= iterIgnore:
+                    deviceToGraphLatNodeIter[node][i] = deviceToGraph
+                    main.log.info("ONOS "+str(nodeNum)+ " device-to-graph: "+
+                            str(deviceToGraph) + " ms")
+                else:
+                    main.log.info("ONOS "+str(nodeNum)+ " device=to-graph "+
+                            "measurement ignored due to excess in "+
+                            "threshold or premature iteration")
+                                
             # ********************
-            """
-            jsonStr1 = main.ONOS1cli.topologyEventsMetrics()
-            jsonStr2 = ''
-            jsonStr3 = ''
-            jsonStr4 = ''
-            jsonStr5 = ''
-            jsonStr6 = ''
-            jsonStr7 = ''
-            
-            jsonObj1 = json.loads(jsonStr1)
-            jsonObj2 = ''
-            jsonObj3 = ''
-            jsonObj4 = ''
-            jsonObj5 = ''
-            jsonObj6 = ''
-            jsonObj7 = ''
-
-
-            graphTimestamp1 = jsonObj1[graphTimestamp]['value']
-            deviceTimestamp1 = jsonObj1[deviceTimestamp]['value']
-            
-            main.log.info(' GraphTimestamp: ' + str(graphTimestamp1))
-            main.log.info(' DeviceTimestamp: ' + str(deviceTimestamp1))
-            
-            deltaDevice1 = int(deviceTimestamp1) - int(t0Tcp)
-            deltaGraph1 = int(graphTimestamp1) - int(t0Tcp)
-            deltaOfpGraph1 = int(graphTimestamp1) - int(t0Ofp)
-            deltaOfpDevice1 = int(deviceTimestamp1) - int(t0Ofp)
-            # Tshark timestamps 
-            deltaTcpOfp1 = int(t0Ofp) - int(t0Tcp)
-            deltaRoleTcp1 = int(roleTimestamp) - int(t0Tcp) 
-            deltaFeatureTcp1 = int(featureTimestamp) - int(t0Tcp)
-            deltaOfpTcp1 = int(t0Ofp) - int(t0Tcp)
-            
-            if deltaTcpOfp1 > thresholdMin and\
-               deltaTcpOfp1 < thresholdMax and i >= iterIgnore:
-                tcpToOfpLatIter.append(deltaTcpOfp1)
-            main.log.info('ONOS1 iter' + str(i) +
-                              ' tcp-to-ofp: ' +
-                              str(deltaTcpOfp1) + ' ms')
-            if deltaFeatureTcp1 > thresholdMin and\
-               deltaFeatureTcp1 < thresholdMax and i >= iterIgnore:
-                tcpToFeatureLatIter.append(deltaFeatureTcp1)
-            main.log.info('ONOS1 iter' + str(i) +
-                            ' tcp-to-feature-reply: ' +
-                            str(deltaFeatureTcp1) + ' ms')
-            if deltaRoleTcp1 > thresholdMin and\
-               deltaRoleTcp1 < thresholdMax and i >= iterIgnore:
-                tcpToRoleLatIter.append(deltaRoleTcp1)
-            main.log.info('ONOS1 iter' + str(i) +
-                            ' tcp-to-role-request: ' +
-                            str(deltaRoleTcp1) + ' ms')
-            if deltaGraph1 > thresholdMin and\
-               deltaGraph1 < thresholdMax and i >= iterIgnore:
-                endToEndLatNodeIter[0][i] = deltaGraph1
-            main.log.info('ONOS1 iter' + str(i) +
-                              ' end-to-end: ' +
-                              str(deltaGraph1) + ' ms')
-            if deltaOfpGraph1 > thresholdMin and \
-               deltaOfpGraph1 < thresholdMax and i >= iterIgnore:
-                ofpToGraphLatNodeIter[0][i] = deltaOfpGraph1
-            main.log.info('ONOS1 iter' + str(i) +
-                        ' ofp-to-graph: ' +
-                        str(deltaOfpGraph1) + ' ms')
-            if deltaOfpDevice1 > thresholdMin and\
-               deltaOfpDevice1 < thresholdMax and i >= iterIgnore:
-                ofpToDeviceLatNodeIter[0][i] = deltaOfpDevice1
-            main.log.info('ONOS1 iter' + str(i) +
-                        ' ofp-to-device: ' +
-                        str(deltaOfpDevice1))
-            
-            if clusterCount >= 3:
-                jsonStr2 = main.ONOS2cli.topologyEventsMetrics()
-                jsonStr3 = main.ONOS3cli.topologyEventsMetrics()
-                jsonObj2 = json.loads(jsonStr2)
-                jsonObj3 = json.loads(jsonStr3)
-                graphTimestamp2 = jsonObj2[graphTimestamp]['value']
-                graphTimestamp3 = jsonObj3[graphTimestamp]['value']
-                deviceTimestamp2 = jsonObj2[deviceTimestamp]['value']
-                deviceTimestamp3 = jsonObj3[deviceTimestamp]['value']
-                deltaDevice2 = int(deviceTimestamp2) - int(t0Tcp)
-                deltaDevice3 = int(deviceTimestamp3) - int(t0Tcp)
-                deltaGraph2 = int(graphTimestamp2) - int(t0Tcp)
-                deltaGraph3 = int(graphTimestamp3) - int(t0Tcp)
-                deltaOfpGraph2 = int(graphTimestamp2) - int(t0Ofp)
-                deltaOfpGraph3 = int(graphTimestamp3) - int(t0Ofp)
-                deltaOfpDevice2 = int(deviceTimestamp2) - int(t0Ofp)
-                deltaOfpDevice3 = int(deviceTimestamp3) - int(t0Ofp)
-                if deltaGraph2 > thresholdMin and\
-                   deltaGraph2 < thresholdMax and i >= iterIgnore:
-                    endToEndLatNodeIter[1][i] = deltaGraph2
-                main.log.info('ONOS2 iter' + str(i) +
-                            ' end-to-end: ' +
-                            str(deltaGraph2) + ' ms')
-                if deltaOfpGraph2 > thresholdMin and\
-                   deltaOfpGraph2 < thresholdMax and i >= iterIgnore:
-                    ofpToGraphLatNodeIter[1][i] = deltaOfpGraph2
-                main.log.info('ONOS2 iter' + str(i) +
-                            ' ofp-to-graph: ' +
-                            str(deltaOfpGraph2) + ' ms')
-                if deltaOfpDevice2 > thresholdMin and\
-                   deltaOfpDevice2 < thresholdMax and i >= iterIgnore:
-                    ofpToDeviceLatNodeIter[1][i] = deltaOfpDevice2
-                main.log.info('ONOS2 iter' + str(i) +
-                            ' ofp-to-device: ' +
-                            str(deltaOfpDevice2)+ ' ms')
-                if deltaGraph3 > thresholdMin and\
-                   deltaGraph3 < thresholdMax and i >= iterIgnore:
-                    endToEndLatNodeIter[2][i] = deltaGraph3
-                main.log.info('ONOS3 iter' + str(i) +
-                            ' end-to-end: ' + str(deltaGraph3) + ' ms')
-                if deltaOfpGraph3 > thresholdMin and\
-                   deltaOfpGraph3 < thresholdMax and i >= iterIgnore:
-                    ofpToGraphLatNodeIter[2][i] = deltaOfpGraph3
-                main.log.info('ONOS3 iter' + str(i) +
-                            ' ofp-to-graph: ' +
-                            str(deltaOfpGraph3) + ' ms')
-                if deltaOfpDevice3 > thresholdMin and\
-                   deltaOfpDevice3 < thresholdMax and i >= iterIgnore:
-                    ofpToDeviceLatNodeIter[2][i] = deltaOfpDevice3
-                main.log.info('ONOS3 iter' + str(i) +
-                            ' ofp-to-device: ' + str(deltaOfpDevice3))
-            if clusterCount >= 5:
-                jsonStr4 = main.ONOS4cli.topologyEventsMetrics()
-                jsonStr5 = main.ONOS5cli.topologyEventsMetrics()
-                jsonObj4 = json.loads(jsonStr4)
-                jsonObj5 = json.loads(jsonStr5)
-                graphTimestamp4 = jsonObj4[graphTimestamp]['value']
-                graphTimestamp5 = jsonObj5[graphTimestamp]['value']
-                deviceTimestamp4 = jsonObj4[deviceTimestamp]['value']
-                deviceTimestamp5 = jsonObj5[deviceTimestamp]['value']
-                deltaDevice4 = int(deviceTimestamp4) - int(t0Tcp)
-                deltaDevice5 = int(deviceTimestamp5) - int(t0Tcp)
-                deltaGraph4 = int(graphTimestamp4) - int(t0Tcp)
-                deltaGraph5 = int(graphTimestamp5) - int(t0Tcp)
-                deltaOfpGraph4 = int(graphTimestamp4) - int(t0Ofp)
-                deltaOfpGraph5 = int(graphTimestamp5) - int(t0Ofp)
-                deltaOfpDevice4 = int(deviceTimestamp4) - int(t0Ofp)
-                deltaOfpDevice5 = int(deviceTimestamp5) - int(t0Ofp)
-                if deltaGraph4 > thresholdMin and \
-                   deltaGraph4 < thresholdMax and i >= iterIgnore:
-                    endToEndLatNodeIter[3][i] = deltaGraph4
-                main.log.info('ONOS4 iter' + str(i) +
-                            ' end-to-end: ' + str(deltaGraph4) + ' ms')
-                if deltaOfpDevice4 > thresholdMin and \
-                   deltaOfpDevice4 < thresholdMax and i >= iterIgnore:
-                    ofpToDeviceLatNodeIter[3][i] = deltaOfpDevice4
-                main.log.info('ONOS4 iter' + str(i) +
-                            ' ofp-to-device: ' + str(deltaOfpDevice4))
-                if deltaOfpGraph4 > thresholdMin and \
-                        deltaOfpGraph4 < thresholdMax and i >= iterIgnore:
-                    ofpToGraphLatNodeIter[3][i] = deltaOfpGraph4
-                main.log.info('ONOS4 iter' + str(i) +
-                            ' ofp-to-graph: ' + str(deltaOfpGraph4) + ' ms')
-                if deltaGraph5 > thresholdMin and\
-                        deltaGraph5 < thresholdMax and i >= iterIgnore:
-                    endToEndLatNodeIter[4][i] = deltaGraph5
-                main.log.info('ONOS5 iter' + str(i) +
-                            ' end-to-end: ' + str(deltaGraph5) + ' ms')
-                if deltaOfpDevice5 > thresholdMin and\
-                        deltaOfpDevice5 < thresholdMax and i >= iterIgnore:
-                    ofpToDeviceLatNodeIter[4][i] = deltaOfpDevice5
-                main.log.info('ONOS5 iter' + str(i) +
-                            ' ofp-to-device: ' + str(deltaOfpDevice5))
-                if deltaOfpGraph5 > thresholdMin and\
-                        deltaOfpGraph5 < thresholdMax and i >= iterIgnore:
-                    ofpToGraphLatNodeIter[4][i] = deltaOfpGraph5
-                main.log.info('ONOS5 iter' + str(i) +
-                            ' ofp-to-graph: ' +
-                            str(deltaOfpGraph5) + ' ms')
-            if clusterCount >= 7:
-                jsonStr6 = main.ONOS6cli.topologyEventsMetrics()
-                jsonStr7 = main.ONOS7cli.topologyEventsMetrics()
-                jsonObj6 = json.loads(jsonStr6)
-                jsonObj7 = json.loads(jsonStr7)
-                graphTimestamp6 = jsonObj6[graphTimestamp]['value']
-                graphTimestamp7 = jsonObj7[graphTimestamp]['value']
-                deviceTimestamp6 = jsonObj6[deviceTimestamp]['value']
-                deviceTimestamp7 = jsonObj7[deviceTimestamp]['value']
-                deltaDevice6 = int(deviceTimestamp6) - int(t0Tcp)
-                deltaDevice7 = int(deviceTimestamp7) - int(t0Tcp)
-                deltaGraph6 = int(graphTimestamp6) - int(t0Tcp)
-                deltaGraph7 = int(graphTimestamp7) - int(t0Tcp)
-                deltaOfpGraph6 = int(graphTimestamp6) - int(t0Ofp)
-                deltaOfpGraph7 = int(graphTimestamp7) - int(t0Ofp)
-                deltaOfpDevice6 = int(deviceTimestamp6) - int(t0Ofp)
-                deltaOfpDevice7 = int(deviceTimestamp7) - int(t0Ofp)
-                if deltaGraph6 > thresholdMin and \
-                   deltaGraph6 < thresholdMax and i >= iterIgnore:
-                    endToEndLatNodeIter[5][i] = deltaGraph6
-                main.log.info('ONOS6 iter' + str(i) +
-                            ' end-to-end: ' + str(deltaGraph6) + ' ms')
-                if deltaOfpDevice6 > thresholdMin and\
-                   deltaOfpDevice6 < thresholdMax and i >= iterIgnore:
-                    ofpToDeviceLatNodeIter[5][i] = deltaOfpDevice6
-                main.log.info('ONOS6 iter' + str(i) +
-                            ' ofp-to-device: ' + str(deltaOfpDevice6))
-                if deltaOfpGraph6 > thresholdMin and\
-                   deltaOfpGraph6 < thresholdMax and i >= iterIgnore:
-                    ofpToGraphLatNodeIter[5][i] = deltaOfpGraph6
-                main.log.info('ONOS6 iter' + str(i) +
-                            ' ofp-to-graph: ' +
-                            str(deltaOfpGraph6) + ' ms')
-                if deltaGraph7 > thresholdMin and \
-                   deltaGraph7 < thresholdMax and i >= iterIgnore:
-                    endToEndLatNodeIter[6][i] = deltaGraph7
-                main.log.info('ONOS7 iter' + str(i) +
-                            ' end-to-end: ' + 
-                            str(deltaGraph7) + ' ms')
-                if deltaOfpDevice7 > thresholdMin and\
-                        deltaOfpDevice7 < thresholdMax and i >= iterIgnore:
-                    ofpToDeviceLatNodeIter[6][i] = deltaOfpDevice7
-                main.log.info('ONOS7 iter' + str(i) +
-                            ' ofp-to-device: ' +
-                            str(deltaOfpDevice7))
-                if deltaOfpGraph7 > thresholdMin and \
-                        deltaOfpGraph7 < thresholdMax and i >= iterIgnore:
-                    ofpToGraphLatNodeIter[6][i] = deltaOfpGraph7
-                main.log.info('ONOS7 iter' + str(i) +
-                            ' ofp-to-graph: ' +
-                            str(deltaOfpGraph7) + ' ms')
-
             time.sleep(5)
         
             # Get device id to remove
@@ -587,18 +440,124 @@
             deviceList = []
             for device in deviceId:
                 deviceList.append(device['id'])
-            
+           
+            # TODO: Measure switch down metrics 
+            # TCP FIN/ACK -> TCP FIN
+            # TCP FIN -> Device Event
+            # Device Event -> Graph Event
+           
+            # Capture switch down FIN / ACK packets
+
+            main.ONOS1.tsharkGrep( tsharkFinAckSequence, tsharkFinAckOutput, 
+                    grepOptions = '-A 1' )
+           
+            time.sleep( 5 )
+
             main.step('Remove switch from controller')
             main.Mininet1.deleteSwController('s3')
-            
             #firstDevice = deviceList[0] 
             firstDevice = "of:0000000000000003"
             main.log.info( "Removing device " +str(firstDevice)+
                     " from ONOS" )
             #if deviceId:
             main.ONOS1cli.deviceRemove(firstDevice)
+           
+            time.sleep( 5 )
+            main.ONOS1.tsharkStop()
+
+            main.log.info('Copying over tshark files')
+            os.system('scp ' + ONOSUser + '@' + nodeIpList[0] +
+                    ':' + tsharkFinAckOutput + ' /tmp/')
+           
+            time.sleep( 10 )
+            finAckOutputList = []
+            with open(tsharkFinAckOutput, 'r') as f:
+                tempLine = f.readlines()
+                main.log.info('Object read in from FinAck capture: ' +
+                    str(tempLine))
+                
+                index = 1
+                for line in tempLine:
+                    obj = line.split(' ')
             
+                    if len(obj) > 1:
+                        if index == 1:
+                            tFinAck = float(obj[1]) * 1000.0
+                            print "*** fin ack time :"+str(tFinAck)
+                        elif index == 3:
+                            tAck = float(obj[1]) * 1000.0
+                            print "*** Ack time: "+str(tAck)
+                    else:
+                        main.log.error('Tshark output file for OFP' +
+                            ' returned unexpected results')
+                        tFinAck = 0
+                        tAck = 0
+                        assertion = main.FALSE
+                    
+                    index = index+1
+
+            # with open() as f takes care of closing file
+
             time.sleep(5)
+            
+            for node in range(0, clusterCount):
+                nodeNum = node+1
+                metricsSwDown = CLIs[node].topologyEventsMetrics
+                jsonStr = metricsSwDown()
+                jsonObj = json.loads(jsonStr)
+                if jsonObj:
+                    graphTimestamp = jsonObj[graphTimestampKey]['value']
+                    deviceTimestamp = jsonObj[deviceTimestampKey]['value']
+                    main.log.info("Graph timestamp: "+str(graphTimestamp))
+                    main.log.info("Device timestamp: "+str(deviceTimestamp))
+                else:
+                    main.log.error( "Unexpected JSON object" )
+                    # If we could not obtain the JSON object, 
+                    # set the timestamps to 0, which will be
+                    # excluded from the measurement later on
+                    # (realized as invalid)
+                    graphTimestamp = 0
+                    deviceTimestamp = 0
+               
+                finAckTransaction = int(tAck) - int(tFinAck)
+                ackToDevice = int(deviceTimestamp) - int(tAck)
+                deviceToGraph = int(graphTimestamp) - int(deviceTimestamp)
+                
+                if finAckTransaction > thresholdMin and\
+                   finAckTransaction < thresholdMax and i >= iterIgnore:
+                    finAckTransactionLatNodeIter[node][i] = finAckTransaction 
+                    main.log.info("ONOS "+str(nodeNum)+
+                            " fin/ack transaction: "+
+                            str(finAckTransaction) + " ms")
+                else:
+                    main.log.info("ONOS "+str(nodeNum)+
+                            " fin/ack transaction "+
+                            "measurement ignored due to excess in "+
+                            "threshold or premature iteration")
+                
+                if ackToDevice > thresholdMin and\
+                   ackToDevice < thresholdMax and i >= iterIgnore:
+                    ackToDeviceLatNodeIter[node][i] = ackToDevice
+                    main.log.info("ONOS "+str(nodeNum)+
+                            " ack-to-device: "+
+                            str(ackToDevice) + " ms")
+                else:
+                    main.log.info("ONOS "+str(nodeNum)+
+                            " ack-to-device "+
+                            "measurement ignored due to excess in "+
+                            "threshold or premature iteration")
+                
+                if deviceToGraph > thresholdMin and\
+                   deviceToGraph < thresholdMax and i >= iterIgnore:
+                    deviceToGraphDiscLatNodeIter[node][i] = deviceToGraph
+                    main.log.info("ONOS "+str(nodeNum)+
+                            " device-to-graph disconnect: "+
+                            str(deviceToGraph) + " ms")
+                else:
+                    main.log.info("ONOS "+str(nodeNum)+
+                            " device-to-graph disconnect "+
+                            "measurement ignored due to excess in "+
+                            "threshold or premature iteration")
 
         endToEndAvg = 0
         ofpToGraphAvg = 0
@@ -606,67 +565,137 @@
         for node in range(0, clusterCount):
             # List of latency for each node
             endToEndList = []
-            ofpToGraphList = []
-            ofpToDeviceList = []
-            tcpToOfpList = []
+            
             tcpToFeatureList = []
-            tcpToRoleList = []
+            featureToRoleList = []
+            roleToOfpList = []
+            ofpToDeviceList = []
+            deviceToGraphList = []
+            finAckTransactionList = []
+            ackToDeviceList = []
+            deviceToGraphDiscList = []
 
             # LatNodeIter 2d arrays contain all iteration latency
             # for each node of the current scale cluster size
-
+            
+            # Switch connection measurements
             for item in endToEndLatNodeIter[node]:
                 if item > 0.0:
                     endToEndList.append(item)
 
-            for item in ofpToGraphLatNodeIter[node]:
-                if item > 0.0:
-                    ofpToGraphList.append(item)
-
-            for item in ofpToDeviceLatNodeIter[node]:
-                if item > 0.0:
-                    ofpToDeviceList.append(item)
-
-            for item in tcpToOfpLatIter:
-                if item > 0.0:
-                    tcpToOfpList.append(item)
-
-            for item in tcpToFeatureLatIter:
+            for item in tcpToFeatureLatNodeIter[node]:
                 if item > 0.0:
                     tcpToFeatureList.append(item)
 
-            for item in tcpToRoleLatIter:
+            for item in featureToRoleRequestLatNodeIter[node]:
                 if item > 0.0:
-                    tcpToRoleList.append(item)
+                    featureToRoleList.append(item)
+
+            for item in roleRequestToRoleReplyLatNodeIter[node]:
+                if item > 0.0:
+                    roleToOfpList.append(item)
+
+            for item in roleReplyToDeviceLatNodeIter[node]:
+                if item > 0.0:
+                    ofpToDeviceList.append(item)
+
+            for item in deviceToGraphLatNodeIter[node]:
+                if item > 0.0:
+                    deviceToGraphList.append(item)
+
+            # Switch disconnect measurements
+            for item in finAckTransactionLatNodeIter[node]:
+                if item > 0.0:
+                    finAckTransactionList.append(item)
+
+            for item in ackToDeviceLatNodeIter[node]:
+                if item > 0.0:
+                    ackToDeviceList.append(item)
+
+            for item in deviceToGraphDiscLatNodeIter[node]:
+                if item > 0.0:
+                    deviceToGraphDiscList.append(item)
 
             endToEndAvg = round(numpy.mean(endToEndList), 2)
-            tcpToOfpAvg = round(numpy.mean(tcpToOfpList), 2)
+            endToEndStdDev = round(numpy.std(endToEndList), 2)
+
             tcpToFeatureAvg = round(numpy.mean(tcpToFeatureList), 2)
-            tcpToRoleAvg = round(numpy.mean(tcpToRoleList), 2)
-            ofpToGraphAvg = round(numpy.mean(ofpToGraphList), 2)
-            endToEndStd = round(numpy.std(endToEndList), 2)
-            ofpToGraphStd = round(numpy.std(ofpToGraphList), 2)
+            tcpToFeatureStdDev = round(numpy.std(tcpToFeatureList), 2)
+
+            featureToRoleAvg = round(numpy.mean(featureToRoleList), 2)
+            featureToRoleStdDev = round(numpy.std(featureToRoleList), 2)
+            
+            roleToOfpAvg = round(numpy.mean(roleToOfpList), 2)
+            roleToOfpStdDev = round(numpy.std(roleToOfpList), 2)
+
             ofpToDeviceAvg = round(numpy.mean(ofpToDeviceList), 2)
-            ofpToDeviceStd = round(numpy.std(ofpToDeviceList), 2)
+            ofpToDeviceStdDev = round(numpy.std(ofpToDeviceList), 2)
+            
+            deviceToGraphAvg = round(numpy.mean(deviceToGraphList), 2)
+            deviceToGraphStdDev = round(numpy.std(deviceToGraphList), 2)
+
+            finAckAvg = round(numpy.mean(finAckTransactionList), 2)
+            finAckStdDev = round(numpy.std(finAckTransactionList), 2)
+            
+            ackToDeviceAvg = round(numpy.mean(ackToDeviceList), 2)
+            ackToDeviceStdDev = round(numpy.std(ackToDeviceList), 2)
+            
+            deviceToGraphDiscAvg = round(numpy.mean(deviceToGraphDiscList), 2)
+            deviceToGraphDiscStdDev = round(numpy.std(deviceToGraphDiscList), 2)
+
             main.log.report(' - Node ' + str(node + 1) + ' Summary - ')
+            main.log.report(' - Switch Connection Statistics - ')
+            
             main.log.report(' End-to-end Avg: ' + str(endToEndAvg) +
                     ' ms' + ' End-to-end Std dev: ' +
-                    str(endToEndStd) + ' ms')
-            main.log.report(' Tcp-to-role-reply : ' + str(tcpToOfpAvg) + ' ms')
-            main.log.report(' Tcp-to-feature-reply : ' + str(tcpToFeatureAvg) + ' ms')
-            main.log.report(' Tcp-to-role-request : ' + str(tcpToRoleAvg) + ' ms')
-            main.log.report(' Ofp-to-graph Avg: ' + str(ofpToGraphAvg) +
-                    ' ms' + ' Ofp-to-graph Std dev: ' +
-                    str(ofpToGraphStd) + ' ms')
-            main.log.report(' Ofp-to-device Avg: ' + str(ofpToDeviceAvg) +
-                    ' ms' + ' Ofp-to-device Std dev: ' +
-                    str(ofpToDeviceStd) + ' ms')
+                    str(endToEndStdDev) + ' ms')
+            
+            main.log.report(' Tcp-to-feature-reply Avg: ' +
+                    str(tcpToFeatureAvg) + ' ms')
+            main.log.report(' Tcp-to-feature-reply Std dev: '+
+                    str(tcpToFeatureStdDev) + ' ms')
+            
+            main.log.report(' Feature-reply-to-role-request Avg: ' +
+                    str(featureToRoleAvg) + ' ms')
+            main.log.report(' Feature-reply-to-role-request Std Dev: ' +
+                    str(featureToRoleStdDev) + ' ms')
+            
+            main.log.report(' Role-request-to-role-reply Avg: ' +
+                    str(roleToOfpAvg) +' ms')
+            main.log.report(' Role-request-to-role-reply Std dev: ' +
+                    str(roleToOfpStdDev) + ' ms')
+            
+            main.log.report(' Role-reply-to-device Avg: ' +
+                    str(ofpToDeviceAvg) +' ms')
+            main.log.report(' Role-reply-to-device Std dev: ' +
+                    str(ofpToDeviceStdDev) + ' ms')
+            
+            main.log.report(' Device-to-graph Avg: ' +
+                    str(deviceToGraphAvg) + ' ms')
+            main.log.report( 'Device-to-graph Std dev: ' +
+                    str(deviceToGraphStdDev) + ' ms')
+            
+            main.log.report(' - Switch Disconnection Statistics - ')
+            main.log.report(' Fin/Ack-to-Ack Avg: ' + str(finAckAvg) + ' ms')
+            main.log.report(' Fin/Ack-to-Ack Std dev: ' +
+                    str(finAckStdDev) + ' ms')
+            
+            main.log.report(' Ack-to-device Avg: ' + str(ackToDeviceAvg) + 
+                    ' ms')
+            main.log.report(' Ack-to-device Std dev: ' + str(ackToDeviceStdDev) +
+                    ' ms')
+
+            main.log.report(' Device-to-graph (disconnect) Avg: ' +
+                    str(deviceToGraphDiscAvg) + ' ms')
+            main.log.report(' Device-to-graph (disconnect) Std dev: ' +
+                    str(deviceToGraphDiscStdDev) + ' ms')
+
             dbCmdList.append(
                     "INSERT INTO switch_latency_tests VALUES('" +
                     timeToPost + "','switch_latency_results'," +
                     runNum + ',' + str(clusterCount) + ",'baremetal" + 
                     str(node + 1) + "'," + str(endToEndAvg) + ',' +
-                    str(endToEndStd) + ',0,0);')
+                    str(endToEndStdDev) + ',0,0);')
 
         if debugMode == 'on':
             main.ONOS1.cpLogsToDir('/opt/onos/log/karaf.log',
@@ -788,19 +817,22 @@
                 timestampBeginPtDown = 0
             fPortDown.close()
           
-            """
-            # TODO: Refactor in progress
-
             for node in range(0, clusterCount):
                 nodeNum = node+1
-                exec "metricsDown = main.ONOS%scli.topologyEventsMetrics"%str(nodeNum) 
+                metricsDown = CLIs[node].topologyEventsMetrics
                 jsonStrDown = metricsDown()
                 jsonObj = json.loads(jsonStrDown)
                 
-                graphTimestamp = jsonObj[graphTimestamp]['value']
-                deviceTimestamp = jsonObj[deviceTimestamp]['value']
-                linkTimestamp = jsonObj[linkTimestamp]['value']
-                
+                if jsonObj:
+                    graphTimestamp = jsonObj[graphTimestamp]['value']
+                    deviceTimestamp = jsonObj[deviceTimestamp]['value']
+                    linkTimestamp = jsonObj[linkTimestamp]['value']
+                else:
+                    main.log.error( "Unexpected json object" )
+                    graphTimestamp = 0
+                    deviceTimestamp = 0
+                    linkTimestamp = 0
+
                 ptDownGraphToOfp = int(graphTimestamp) - int(timestampBeginPtDown)
                 ptDownDeviceToOfp = int(deviceTimestamp) - int(timestampBeginPtDown)
                 ptDownLinkToOfp = int(linkTimestamp) - int(timestampBeginPtDown)
@@ -837,199 +869,6 @@
                     main.log.info("ONOS "+str(nodeNum)+
                             " port down link-to-ofp ignored"+
                             " due to excess in threshold or premature iteration")
-            """
-            # *************************
-
-            main.step('Obtain t1 by metrics call')
-            
-            jsonStrUp1 = main.ONOS1cli.topologyEventsMetrics()
-            jsonObj1 = json.loads(jsonStrUp1)
-            graphTimestamp1 = jsonObj1[graphTimestamp]['value']
-            deviceTimestamp1 = jsonObj1[deviceTimestamp]['value']
-            linkTimestamp1 = jsonObj1[linkTimestamp]['value']
-            ptDownGraphToOfp1 = int(graphTimestamp1) - int(timestampBeginPtDown)
-            ptDownDeviceToOfp1 = int(deviceTimestamp1) - int(timestampBeginPtDown)
-            ptDownLinkToOfp1 = int(linkTimestamp1) - int(timestampBeginPtDown)
-           
-            if ptDownGraphToOfp1 > downThresholdMin and\
-               ptDownGraphToOfp1 < downThresholdMax and i > iterIgnore:
-                portDownGraphNodeIter[0][i] = ptDownGraphToOfp1
-                main.log.info('ONOS1 iter' + str(i) +
-                        ' port down graph-to-ofp: ' +
-                        str(ptDownGraphToOfp1) + ' ms')
-            
-            if ptDownDeviceToOfp1 > downThresholdMin and \
-               ptDownDeviceToOfp1 < downThresholdMax and i > iterIgnore:
-                portDownDevNodeIter[0][i] = ptDownDeviceToOfp1
-                main.log.info('ONOS1 iter' + str(i) + 
-                        ' port down device-to-ofp: ' +
-                        str(ptDownDeviceToOfp1) + ' ms')
-            if ptDownLinkToOfp1 > downThresholdMin and\
-               ptDownLinkToOfp1 < downThresholdMax and i > iterIgnore:
-                portDownLinkNodeIter[0][i] = ptDownLinkToOfp1
-                main.log.info('ONOS1 iter' + str(i) +
-                        ' port down link-to-ofp: ' +
-                        str(ptDownLinkToOfp1) + ' ms')
-            
-            if clusterCount >= 3:
-                jsonStrUp2 = main.ONOS2cli.topologyEventsMetrics()
-                jsonStrUp3 = main.ONOS3cli.topologyEventsMetrics()
-                jsonObj2 = json.loads(jsonStrUp2)
-                jsonObj3 = json.loads(jsonStrUp3)
-                graphTimestamp2 = jsonObj2[graphTimestamp]['value']
-                graphTimestamp3 = jsonObj3[graphTimestamp]['value']
-                deviceTimestamp2 = jsonObj2[deviceTimestamp]['value']
-                deviceTimestamp3 = jsonObj3[deviceTimestamp]['value']
-                linkTimestamp2 = jsonObj2[linkTimestamp]['value']
-                linkTimestamp3 = jsonObj3[linkTimestamp]['value']
-                ptDownGraphToOfp2 = int(graphTimestamp2) - int(timestampBeginPtDown)
-                ptDownGraphToOfp3 = int(graphTimestamp3) - int(timestampBeginPtDown)
-                ptDownDeviceToOfp2 = int(deviceTimestamp2) - int(timestampBeginPtDown)
-                ptDownDeviceToOfp3 = int(deviceTimestamp3) - int(timestampBeginPtDown)
-                ptDownLinkToOfp2 = int(linkTimestamp2) - int(timestampBeginPtDown)
-                ptDownLinkToOfp3 = int(linkTimestamp3) - int(timestampBeginPtDown)
-                if ptDownGraphToOfp2 > downThresholdMin and\
-                   ptDownGraphToOfp2 < downThresholdMax and i > iterIgnore:
-                    portDownGraphNodeIter[1][i] = ptDownGraphToOfp2
-                    main.log.info('ONOS2 iter' + str(i) +
-                            ' graph-to-ofp: ' +
-                            str(ptDownGraphToOfp2) + ' ms')
-                if ptDownDeviceToOfp2 > downThresholdMin and \
-                   ptDownDeviceToOfp2 < downThresholdMax and i > iterIgnore:
-                    portDownDevNodeIter[1][i] = ptDownDeviceToOfp2
-                    main.log.info('ONOS2 iter' + str(i) +
-                            ' device-to-ofp: ' +
-                            str(ptDownDeviceToOfp2) + ' ms')
-                if ptDownLinkToOfp2 > downThresholdMin and\
-                   ptDownLinkToOfp2 < downThresholdMax and i > iterIgnore:
-                    portDownLinkNodeIter[1][i] = ptDownLinkToOfp2
-                    main.log.info('ONOS2 iter' + str(i) +
-                            ' link-to-ofp: ' +
-                            str(ptDownLinkToOfp2) + ' ms')
-                if ptDownGraphToOfp3 > downThresholdMin and\
-                   ptDownGraphToOfp3 < downThresholdMax and i > iterIgnore:
-                    portDownGraphNodeIter[2][i] = ptDownGraphToOfp3
-                    main.log.info('ONOS3 iter' + str(i) +
-                            ' graph-to-ofp: ' +
-                            str(ptDownGraphToOfp3) + ' ms')
-                if ptDownDeviceToOfp3 > downThresholdMin and\
-                   ptDownDeviceToOfp3 < downThresholdMax and i > iterIgnore:
-                    portDownDevNodeIter[2][i] = ptDownDeviceToOfp3
-                    main.log.info('ONOS3 iter' + str(i) +
-                            ' device-to-ofp: ' +
-                            str(ptDownDeviceToOfp3) + ' ms')
-                if ptDownLinkToOfp3 > downThresholdMin and\
-                   ptDownLinkToOfp3 < downThresholdMax and i > iterIgnore:
-                    portDownLinkNodeIter[2][i] = ptDownLinkToOfp3
-                    main.log.info('ONOS3 iter' + str(i) +
-                            ' link-to-ofp: ' +
-                            str(ptDownLinkToOfp3) + ' ms')
-            if clusterCount >= 5:
-                jsonStrUp4 = main.ONOS4cli.topologyEventsMetrics()
-                jsonStrUp5 = main.ONOS5cli.topologyEventsMetrics()
-                jsonObj4 = json.loads(jsonStrUp4)
-                jsonObj5 = json.loads(jsonStrUp5)
-                graphTimestamp4 = jsonObj4[graphTimestamp]['value']
-                graphTimestamp5 = jsonObj5[graphTimestamp]['value']
-                deviceTimestamp4 = jsonObj4[deviceTimestamp]['value']
-                deviceTimestamp5 = jsonObj5[deviceTimestamp]['value']
-                linkTimestamp4 = jsonObj4[linkTimestamp]['value']
-                linkTimestamp5 = jsonObj5[linkTimestamp]['value']
-                ptDownGraphToOfp4 = int(graphTimestamp4) - int(timestampBeginPtDown)
-                ptDownGraphToOfp5 = int(graphTimestamp5) - int(timestampBeginPtDown)
-                ptDownDeviceToOfp4 = int(deviceTimestamp4) - int(timestampBeginPtDown)
-                ptDownDeviceToOfp5 = int(deviceTimestamp5) - int(timestampBeginPtDown)
-                ptDownLinkToOfp4 = int(linkTimestamp4) - int(timestampBeginPtDown)
-                ptDownLinkToOfp5 = int(linkTimestamp5) - int(timestampBeginPtDown)
-                if ptDownGraphToOfp4 > downThresholdMin and \
-                   ptDownGraphToOfp4 < downThresholdMax and i > iterIgnore:
-                    portDownGraphNodeIter[3][i] = ptDownGraphToOfp4
-                    main.log.info('ONOS4 iter' + str(i) +
-                            ' graph-to-ofp: ' +
-                            str(ptDownGraphToOfp4) + ' ms')
-                if ptDownDeviceToOfp4 > downThresholdMin and\
-                   ptDownDeviceToOfp4 < downThresholdMax and i > iterIgnore:
-                    portDownDevNodeIter[3][i] = ptDownDeviceToOfp4
-                    main.log.info('ONOS4 iter' + str(i) +
-                            ' device-to-ofp: ' +
-                            str(ptDownDeviceToOfp4) + ' ms')
-                if ptDownLinkToOfp4 > downThresholdMin and\
-                   ptDownLinkToOfp4 < downThresholdMax and i > iterIgnore:
-                    portDownLinkNodeIter[3][i] = ptDownLinkToOfp4
-                    main.log.info('ONOS4 iter' + str(i) +
-                            ' link-to-ofp: ' +
-                            str(ptDownLinkToOfp4) + ' ms')
-                if ptDownGraphToOfp5 > downThresholdMin and\
-                   ptDownGraphToOfp5 < downThresholdMax and i > iterIgnore:
-                    portDownGraphNodeIter[4][i] = ptDownGraphToOfp5
-                    main.log.info('ONOS5 iter' + str(i) +
-                            ' graph-to-ofp: ' +
-                            str(ptDownGraphToOfp5) + ' ms')
-                if ptDownDeviceToOfp5 > downThresholdMin and\
-                   ptDownDeviceToOfp5 < downThresholdMax and i > iterIgnore:
-                    portDownDevNodeIter[4][i] = ptDownDeviceToOfp5
-                    main.log.info('ONOS5 iter' + str(i) +
-                            ' device-to-ofp: ' +
-                            str(ptDownDeviceToOfp5) + ' ms')
-                if ptDownLinkToOfp5 > downThresholdMin and\
-                   ptDownLinkToOfp5 < downThresholdMax and i > iterIgnore:
-                    portDownLinkNodeIter[4][i] = ptDownLinkToOfp5
-                    main.log.info('ONOS5 iter' + str(i) +
-                            ' link-to-ofp: ' +
-                            str(ptDownLinkToOfp5) + ' ms')
-            if clusterCount >= 7:
-                jsonStrUp6 = main.ONOS6cli.topologyEventsMetrics()
-                jsonStrUp7 = main.ONOS7cli.topologyEventsMetrics()
-                jsonObj6 = json.loads(jsonStrUp6)
-                jsonObj7 = json.loads(jsonStrUp7)
-                graphTimestamp6 = jsonObj6[graphTimestamp]['value']
-                graphTimestamp7 = jsonObj7[graphTimestamp]['value']
-                deviceTimestamp6 = jsonObj6[deviceTimestamp]['value']
-                deviceTimestamp7 = jsonObj7[deviceTimestamp]['value']
-                linkTimestamp6 = jsonObj6[linkTimestamp]['value']
-                linkTimestamp7 = jsonObj7[linkTimestamp]['value']
-                ptDownGraphToOfp6 = int(graphTimestamp6) - int(timestampBeginPtDown)
-                ptDownGraphToOfp7 = int(graphTimestamp7) - int(timestampBeginPtDown)
-                ptDownDeviceToOfp6 = int(deviceTimestamp6) - int(timestampBeginPtDown)
-                ptDownDeviceToOfp7 = int(deviceTimestamp7) - int(timestampBeginPtDown)
-                ptDownLinkToOfp6 = int(linkTimestamp6) - int(timestampBeginPtDown)
-                ptDownLinkToOfp7 = int(linkTimestamp7) - int(timestampBeginPtDown)
-                if ptDownGraphToOfp6 > downThresholdMin and\
-                   ptDownGraphToOfp6 < downThresholdMax and i > iterIgnore:
-                    portDownGraphNodeIter[5][i] = ptDownGraphToOfp6
-                    main.log.info('ONOS6 iter' + str(i) +
-                            ' graph-to-ofp: ' +
-                            str(ptDownGraphToOfp6) + ' ms')
-                if ptDownDeviceToOfp6 > downThresholdMin and\
-                   ptDownDeviceToOfp6 < downThresholdMax and i > iterIgnore:
-                    portDownDevNodeIter[5][i] = ptDownDeviceToOfp6
-                    main.log.info('ONOS6 iter' + str(i) +
-                            ' device-to-ofp: ' +
-                            str(ptDownDeviceToOfp6) + ' ms')
-                if ptDownLinkToOfp6 > downThresholdMin and\
-                   ptDownLinkToOfp6 < downThresholdMax and i > iterIgnore:
-                    portDownLinkNodeIter[5][i] = ptDownLinkToOfp6
-                    main.log.info('ONOS6 iter' + str(i) +
-                            ' link-to-ofp: ' +
-                            str(ptDownLinkToOfp6) + ' ms')
-                if ptDownGraphToOfp7 > downThresholdMin and\
-                   ptDownGraphToOfp7 < downThresholdMax and i > iterIgnore:
-                    portDownGraphNodeIter[6][i] = ptDownGraphToOfp7
-                    main.log.info('ONOS7 iter' + str(i) +
-                            ' graph-to-ofp: ' +
-                            str(ptDownGraphToOfp7) + ' ms')
-                if ptDownDeviceToOfp7 > downThresholdMin and\
-                   ptDownDeviceToOfp7 < downThresholdMax and i > iterIgnore:
-                    portDownDevNodeIter[6][i] = ptDownDeviceToOfp7
-                    main.log.info('ONOS7 iter' + str(i) +
-                            ' device-to-ofp: ' + 
-                            str(ptDownDeviceToOfp7) + ' ms')
-                if ptDownLinkToOfp7 > downThresholdMin and\
-                   ptDownLinkToOfp7 < downThresholdMax and i > iterIgnore:
-                    portDownLinkNodeIter[6][i] = ptDownLinkToOfp7
-                    main.log.info('ONOS7 iter' + str(i) +
-                            ' link-to-ofp: ' +
-                            str(ptDownLinkToOfp7) + ' ms')
 
             time.sleep(3)
             
@@ -1060,21 +899,23 @@
                 main.log.info('Tshark output file returned unexpected' + ' results.')
                 timestampBeginPtUp = 0
             fPortUp.close()
-            """ 
-            # TODO: Refactoring in progress
             
             for node in range(0, clusterCount):
                 nodeNum = node+1
-                exec "metricsUp = main.ONOS%scli.topologyEventsMetrics"%str(nodeNum) 
+                metricsUp = CLIs[node].topologyEventsMetrics
                 jsonStrUp = metricsUp()
                 jsonObj = json.loads(jsonStrUp)
-                
-                print jsonObj
+               
+                if jsonObj:
+                    graphTimestamp = jsonObj[graphTimestamp]['value']
+                    deviceTimestamp = jsonObj[deviceTimestamp]['value']
+                    linkTimestamp = jsonObj[linkTimestamp]['value']
+                else:
+                    main.log.error( "Unexpected json object" )
+                    graphTimestamp = 0
+                    deviceTimestamp = 0
+                    linkTimestamp = 0
 
-                graphTimestamp = jsonObj[graphTimestamp]['value']
-                deviceTimestamp = jsonObj[deviceTimestamp]['value']
-                linkTimestamp = jsonObj[linkTimestamp]['value']
-                
                 ptUpGraphToOfp = int(graphTimestamp) - int(timestampBeginPtUp)
                 ptUpDeviceToOfp = int(deviceTimestamp) - int(timestampBeginPtUp)
                 ptUpLinkToOfp = int(linkTimestamp) - int(timestampBeginPtUp)
@@ -1112,198 +953,6 @@
                             " port up link-to-ofp ignored"+
                             " due to excess in threshold or premature iteration")
 
-            """
-
-            # *****************************
-            
-            main.step('Obtain t1 by REST call')
-            jsonStrUp1 = main.ONOS1cli.topologyEventsMetrics()
-            jsonObj1 = json.loads(jsonStrUp1)
-            graphTimestamp1 = jsonObj1[graphTimestamp]['value']
-            deviceTimestamp1 = jsonObj1[deviceTimestamp]['value']
-            linkTimestamp1 = jsonObj1[linkTimestamp]['value']
-            ptUpGraphToOfp1 = int(graphTimestamp1) - int(timestampBeginPtUp)
-            ptUpDeviceToOfp1 = int(deviceTimestamp1) - int(timestampBeginPtUp)
-            ptUpLinkToOfp1 = int(linkTimestamp1) - int(timestampBeginPtUp)
-            if ptUpGraphToOfp1 > upThresholdMin and\
-               ptUpGraphToOfp1 < upThresholdMax and i > iterIgnore:
-                portUpGraphNodeIter[0][i] = ptUpGraphToOfp1
-                main.log.info('ONOS1 iter' + str(i) +
-                        ' port up graph-to-ofp: ' +
-                        str(ptUpGraphToOfp1) + ' ms')
-            if ptUpDeviceToOfp1 > upThresholdMin and \
-               ptUpDeviceToOfp1 < upThresholdMax and i > iterIgnore:
-                portUpDevNodeIter[0][i] = ptUpDeviceToOfp1
-                main.log.info('ONOS1 iter' + str(i) +
-                        ' port up device-to-ofp: ' +
-                        str(ptUpDeviceToOfp1) + ' ms')
-            if ptUpLinkToOfp1 > downThresholdMin and\
-               ptUpLinkToOfp1 < downThresholdMax and i > iterIgnore:
-                portUpLinkNodeIter[0][i] = ptUpLinkToOfp1
-                main.log.info('ONOS1 iter' + str(i) +
-                        ' link-to-ofp: ' +
-                        str(ptUpLinkToOfp1) + ' ms')
-            if clusterCount >= 3:
-                jsonStrUp2 = main.ONOS2cli.topologyEventsMetrics()
-                jsonStrUp3 = main.ONOS3cli.topologyEventsMetrics()
-                jsonObj2 = json.loads(jsonStrUp2)
-                jsonObj3 = json.loads(jsonStrUp3)
-                graphTimestamp2 = jsonObj2[graphTimestamp]['value']
-                graphTimestamp3 = jsonObj3[graphTimestamp]['value']
-                deviceTimestamp2 = jsonObj2[deviceTimestamp]['value']
-                deviceTimestamp3 = jsonObj3[deviceTimestamp]['value']
-                linkTimestamp2 = jsonObj2[linkTimestamp]['value']
-                linkTimestamp3 = jsonObj3[linkTimestamp]['value']
-                ptUpGraphToOfp2 = int(graphTimestamp2) - int(timestampBeginPtUp)
-                ptUpGraphToOfp3 = int(graphTimestamp3) - int(timestampBeginPtUp)
-                ptUpDeviceToOfp2 = int(deviceTimestamp2) - int(timestampBeginPtUp)
-                ptUpDeviceToOfp3 = int(deviceTimestamp3) - int(timestampBeginPtUp)
-                ptUpLinkToOfp2 = int(linkTimestamp2) - int(timestampBeginPtUp)
-                ptUpLinkToOfp3 = int(linkTimestamp3) - int(timestampBeginPtUp)
-                if ptUpGraphToOfp2 > upThresholdMin and\
-                   ptUpGraphToOfp2 < upThresholdMax and i > iterIgnore:
-                    portUpGraphNodeIter[1][i] = ptUpGraphToOfp2
-                    main.log.info('ONOS2 iter' + str(i) +
-                            ' port up graph-to-ofp: ' +
-                            str(ptUpGraphToOfp2) + ' ms')
-                if ptUpDeviceToOfp2 > upThresholdMin and\
-                   ptUpDeviceToOfp2 < upThresholdMax and i > iterIgnore:
-                    portUpDevNodeIter[1][i] = ptUpDeviceToOfp2
-                    main.log.info('ONOS2 iter' + str(i) +
-                            ' port up device-to-ofp: ' +
-                            str(ptUpDeviceToOfp2) + ' ms')
-                if ptUpLinkToOfp2 > downThresholdMin and\
-                   ptUpLinkToOfp2 < downThresholdMax and i > iterIgnore:
-                    portUpLinkNodeIter[1][i] = ptUpLinkToOfp2
-                    main.log.info('ONOS2 iter' + str(i) +
-                            ' port up link-to-ofp: ' +
-                            str(ptUpLinkToOfp2) + ' ms')
-                if ptUpGraphToOfp3 > upThresholdMin and\
-                   ptUpGraphToOfp3 < upThresholdMax and i > iterIgnore:
-                    portUpGraphNodeIter[2][i] = ptUpGraphToOfp3
-                    main.log.info('ONOS3 iter' + str(i) +
-                            ' port up graph-to-ofp: ' +
-                            str(ptUpGraphToOfp3) + ' ms')
-                if ptUpDeviceToOfp3 > upThresholdMin and\
-                   ptUpDeviceToOfp3 < upThresholdMax and i > iterIgnore:
-                    portUpDevNodeIter[2][i] = ptUpDeviceToOfp3
-                    main.log.info('ONOS3 iter' + str(i) +
-                            ' port up device-to-ofp: ' +
-                            str(ptUpDeviceToOfp3) + ' ms')
-                if ptUpLinkToOfp3 > downThresholdMin and\
-                   ptUpLinkToOfp3 < downThresholdMax and i > iterIgnore:
-                    portUpLinkNodeIter[2][i] = ptUpLinkToOfp3
-                    main.log.info('ONOS3 iter' + str(i) +
-                            ' port up link-to-ofp: ' +
-                            str(ptUpLinkToOfp3) + ' ms')
-            if clusterCount >= 5:
-                jsonStrUp4 = main.ONOS4cli.topologyEventsMetrics()
-                jsonStrUp5 = main.ONOS5cli.topologyEventsMetrics()
-                jsonObj4 = json.loads(jsonStrUp4)
-                jsonObj5 = json.loads(jsonStrUp5)
-                graphTimestamp4 = jsonObj4[graphTimestamp]['value']
-                graphTimestamp5 = jsonObj5[graphTimestamp]['value']
-                deviceTimestamp4 = jsonObj4[deviceTimestamp]['value']
-                deviceTimestamp5 = jsonObj5[deviceTimestamp]['value']
-                linkTimestamp4 = jsonObj4[linkTimestamp]['value']
-                linkTimestamp5 = jsonObj5[linkTimestamp]['value']
-                ptUpGraphToOfp4 = int(graphTimestamp4) - int(timestampBeginPtUp)
-                ptUpGraphToOfp5 = int(graphTimestamp5) - int(timestampBeginPtUp)
-                ptUpDeviceToOfp4 = int(deviceTimestamp4) - int(timestampBeginPtUp)
-                ptUpDeviceToOfp5 = int(deviceTimestamp5) - int(timestampBeginPtUp)
-                ptUpLinkToOfp4 = int(linkTimestamp4) - int(timestampBeginPtUp)
-                ptUpLinkToOfp5 = int(linkTimestamp5) - int(timestampBeginPtUp)
-                if ptUpGraphToOfp4 > upThresholdMin and\
-                   ptUpGraphToOfp4 < upThresholdMax and i > iterIgnore:
-                    portUpGraphNodeIter[3][i] = ptUpGraphToOfp4
-                    main.log.info('ONOS4 iter' + str(i) +
-                            ' port up graph-to-ofp: ' +
-                            str(ptUpGraphToOfp4) + ' ms')
-                if ptUpDeviceToOfp4 > upThresholdMin and\
-                   ptUpDeviceToOfp4 < upThresholdMax and i > iterIgnore:
-                    portUpDevNodeIter[3][i] = ptUpDeviceToOfp4
-                    main.log.info('ONOS4 iter' + str(i) +
-                            ' port up device-to-ofp: ' +
-                            str(ptUpDeviceToOfp4) + ' ms')
-                if ptUpLinkToOfp4 > downThresholdMin and\
-                   ptUpLinkToOfp4 < downThresholdMax and i > iterIgnore:
-                    portUpLinkNodeIter[3][i] = ptUpLinkToOfp4
-                    main.log.info('ONOS4 iter' + str(i) +
-                            ' port up link-to-ofp: ' +
-                            str(ptUpLinkToOfp4) + ' ms')
-                if ptUpGraphToOfp5 > upThresholdMin and\
-                    ptUpGraphToOfp5 < upThresholdMax and i > iterIgnore:
-                    portUpGraphNodeIter[4][i] = ptUpGraphToOfp5
-                    main.log.info('ONOS5 iter' + str(i) +
-                            ' port up graph-to-ofp: ' +
-                            str(ptUpGraphToOfp5) + ' ms')
-                if ptUpDeviceToOfp5 > upThresholdMin and \
-                   ptUpDeviceToOfp5 < upThresholdMax and i > iterIgnore:
-                    portUpDevNodeIter[4][i] = ptUpDeviceToOfp5
-                    main.log.info('ONOS5 iter' + str(i) +
-                            ' port up device-to-ofp: ' +
-                            str(ptUpDeviceToOfp5) + ' ms')
-                if ptUpLinkToOfp5 > downThresholdMin and\
-                   ptUpLinkToOfp5 < downThresholdMax and i > iterIgnore:
-                    portUpLinkNodeIter[4][i] = ptUpLinkToOfp5
-                    main.log.info('ONOS5 iter' + str(i) +
-                            ' port up link-to-ofp: ' +
-                            str(ptUpLinkToOfp5) + ' ms')
-            
-            if clusterCount >= 7:
-                jsonStrUp6 = main.ONOS6cli.topologyEventsMetrics()
-                jsonStrUp7 = main.ONOS7cli.topologyEventsMetrics()
-                jsonObj6 = json.loads(jsonStrUp6)
-                jsonObj7 = json.loads(jsonStrUp7)
-                graphTimestamp6 = jsonObj6[graphTimestamp]['value']
-                graphTimestamp7 = jsonObj7[graphTimestamp]['value']
-                deviceTimestamp6 = jsonObj6[deviceTimestamp]['value']
-                deviceTimestamp7 = jsonObj7[deviceTimestamp]['value']
-                linkTimestamp6 = jsonObj6[linkTimestamp]['value']
-                linkTimestamp7 = jsonObj7[linkTimestamp]['value']
-                ptUpGraphToOfp6 = int(graphTimestamp6) - int(timestampBeginPtUp)
-                ptUpGraphToOfp7 = int(graphTimestamp7) - int(timestampBeginPtUp)
-                ptUpDeviceToOfp6 = int(deviceTimestamp6) - int(timestampBeginPtUp)
-                ptUpDeviceToOfp7 = int(deviceTimestamp7) - int(timestampBeginPtUp)
-                ptUpLinkToOfp6 = int(linkTimestamp6) - int(timestampBeginPtUp)
-                ptUpLinkToOfp7 = int(linkTimestamp7) - int(timestampBeginPtUp)
-                if ptUpGraphToOfp6 > upThresholdMin and\
-                   ptUpGraphToOfp6 < upThresholdMax and i > iterIgnore:
-                    portUpGraphNodeIter[5][i] = ptUpGraphToOfp6
-                    main.log.info('ONOS6 iter' + str(i) +
-                            ' port up graph-to-ofp: ' +
-                            str(ptUpGraphToOfp6) + ' ms')
-                if ptUpDeviceToOfp6 > upThresholdMin and\
-                   ptUpDeviceToOfp6 < upThresholdMax and i > iterIgnore:
-                    portUpDevNodeIter[5][i] = ptUpDeviceToOfp6
-                    main.log.info('ONOS6 iter' + str(i) +
-                            ' port up device-to-ofp: ' + 
-                            str(ptUpDeviceToOfp6) + ' ms')
-                if ptUpLinkToOfp6 > downThresholdMin and\
-                   ptUpLinkToOfp6 < downThresholdMax and i > iterIgnore:
-                    portUpLinkNodeIter[5][i] = ptUpLinkToOfp6
-                    main.log.info('ONOS6 iter' + str(i) +
-                            ' port up link-to-ofp: ' +
-                            str(ptUpLinkToOfp6) + ' ms')
-                if ptUpGraphToOfp7 > upThresholdMin and \
-                   ptUpGraphToOfp7 < upThresholdMax and i > iterIgnore:
-                    portUpGraphNodeIter[6][i] = ptUpGraphToOfp7
-                    main.log.info('ONOS7 iter' + str(i) +
-                            ' port up graph-to-ofp: ' + 
-                            str(ptUpGraphToOfp7) + ' ms')
-                if ptUpDeviceToOfp7 > upThresholdMin and\
-                   ptUpDeviceToOfp7 < upThresholdMax and i > iterIgnore:
-                    portUpDevNodeIter[6][i] = ptUpDeviceToOfp7
-                    main.log.info('ONOS7 iter' + str(i) +
-                            ' port up device-to-ofp: ' +
-                            str(ptUpDeviceToOfp7) + ' ms')
-                if ptUpLinkToOfp7 > downThresholdMin and\
-                   ptUpLinkToOfp7 < downThresholdMax and i > iterIgnore:
-                    portUpLinkNodeIter[6][i] = ptUpLinkToOfp7
-                    main.log.info('ONOS7 iter' + str(i) +
-                            ' port up link-to-ofp: ' +
-                            str(ptUpLinkToOfp7) + ' ms')
-
         dbCmdList = []
         for node in range(0, clusterCount):
             portUpDevList = []
@@ -1455,6 +1104,9 @@
                 main.log.error( "ONOS "+str(node) + " did not start" )
 
         for node in range( 1, clusterCount + 1):
-            exec "a = main.ONOS%scli.startOnosCli" %str(node)
-            a(main.params[ 'CTRL' ][ 'ip'+str(node) ])
+            CLIs[node-1].startOnosCli
+            
+            main.step( 'activating essential applications' )
+            CLIs[node-1].activateApp( 'org.onosproject.metrics' )
+            CLIs[node-1].activateApp( 'org.onosproject.openflow' )
 
