     
     ///
     public func qualityOfServiceTest(test: QualityOfServiceTest, didFetchTestTypes testTypes: [QOSTestType]) {
-
+        //logger.debug("QOS: DID FETCH TYPES: \(time)")
     }
     
     ///
     public func qualityOfServiceTest(test: QualityOfServiceTest, didFinishTestType testType: QOSTestType) {
-
-    }
-    
-    ///
-    public func qualityOfServiceTest(test: QualityOfServiceTest, didProgressToValue: Float) {
-
-    }
-    
-}
+        //logger.debug("QOS: DID FINISH TYPE: \(time)")
+    }
+    
+    ///
+    public func qualityOfServiceTest(test: QualityOfServiceTest, didProgressToValue progress: Float) {
+        delegate?.qosMeasurementDidUpdateProgress(self, progress: progress)
+    }
+    
+}

    
    ///
    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))
            }
        }
    }
    
    ///
    public func testRunnerDidCompleteWithResult(result: RMBTHistoryResult) {
        // TODO: stop hardware timer
        
        //startQosMeasurement() // TODO
        delegate?.measurementDidComplete(self)
    }
    
    ///
    public func testRunnerDidCancelTestWithReason(cancelReason: RMBTTestRunnerCancelReason) {
        // TODO: stop hardware timer
        
        let reason = RMBTClientCancelReason.mapFromSpeedMesurementCancelReason(cancelReason)
        


    ///
    public func stopMeasurement() {
        testRunner?.cancel()
        qualityOfServiceTestRunner?.stop()
    }
    
    ///
    private func startSpeedMeasurement() {
        testRunner = RMBTTestRunner(delegate: self)
        testRunner?.start()
        
        startHardwareUsageTimer() // start cpu and memory usage timer
    }
    
    ///
