         }
 
         //Reset state
-        resetState()
+        retryCount = 0
+
+        //Creates a new timer for next retry
+        timer = NSTimer.scheduledTimerWithTimeInterval(
+            retryTimeout, target: self, selector: .timerTicked, userInfo: nil, repeats: false)
 
         //Saving that we're currently listening
         listening = true

    private var listening = false

    /// Interruption counter. It will be used to determine whether the quality should change.
    var retryCount = 0 {
        didSet {
            checkRetryCount()
        }
    }

    /// The maximum number of interruption before generating an event. Default value is 10.
    var maximumRetryCount = 10 {
        didSet {
            //TODO:
        }
    }

    /// The delay to wait before cancelling last retry and retrying. Default value is 10 seconds.
    var retryTimeout = NSTimeInterval(10) {
        didSet {
            //TODO:
        }
    }


    /**

    /**
     `RetryEvent` is a list of event that can be generated by `RetryEventProducer`.

     - RetryAvailable: A retry is available.
     - RetryFailed:    Retrying is no longer an option.
     */
    enum RetryEvent: Event {
        case RetryAvailable
        case RetryFailed
    }

    /// The timer used to adjust quality
