     
     ///
     public func testRunnerDidMeasureThroughputs(throughputs: NSArray, inPhase phase: RMBTTestRunnerPhase) {
-        
         // TODO: use same logic as in android app? (RMBTClient.java:646)
         
-        if let throughputs = throughputs as? [RMBTThroughput] {
-            if let throughput = throughputs.last { // last?
-                let kbps = throughput.kilobitsPerSecond()
-                delegate?.speedMeasurementDidMeasureSpeed(Int(kbps), inPhase: SpeedMeasurementPhase.mapFromRmbtRunnerPhase(phase))
-            }
+        if let throughputs = throughputs as? [RMBTThroughput], throughput = throughputs.last { // last?
+            let kbps = throughput.kilobitsPerSecond()
+            delegate?.speedMeasurementDidMeasureSpeed(Int(kbps), inPhase: SpeedMeasurementPhase.mapFromRmbtRunnerPhase(phase))
         }
     }
     
     ///
     public func testRunnerDidCompleteWithResult(result: RMBTHistoryResult) {
-        // TODO: stop hardware timer
-        
-        //startQosMeasurement() // TODO
-        delegate?.measurementDidComplete(self)
+        stopHardwareUsageTimer() // stop cpu and memory usage timer
+        
+        startQosMeasurement() // continue with qos measurement
     }
     
     ///
     public func testRunnerDidCancelTestWithReason(cancelReason: RMBTTestRunnerCancelReason) {
-        // TODO: stop hardware timer
+        stopHardwareUsageTimer() // stop cpu and memory usage timer
         
         let reason = RMBTClientCancelReason.mapFromSpeedMesurementCancelReason(cancelReason)
         

    
    ///
    public var delegate: RMBTClientDelegate?
    
    ///
    public init() {

    
    ///
    public func qualityOfServiceTestDidStart(test: QualityOfServiceTest) {
        delegate?.qosMeasurementDidStart(self)
    }
    
    ///
