                 case "currentItem.playbackLikelyToKeepUp":
                     if let playbackLikelyToKeepUp = player.currentItem?.playbackLikelyToKeepUp where playbackLikelyToKeepUp {
                         //There is enough data in the buffer
-                        if !pausedForInterruption && state != .Paused && (stateWhenConnectionLost == nil || stateWhenConnectionLost != .Paused) && (stateBeforeBuffering == nil || stateBeforeBuffering != .Paused) {
+                        if shouldResumePlaying {
                             stateBeforeBuffering = nil
                             state = .Playing
                             player.rate = rate

            //If the current progression is updated, it means we are playing. This fixes the behavior where sometimes
            //the `playbackLikelyToKeepUp` isn't changed even though it's playing (the first play).
            if state != .Playing {
                if !pausedForInterruption && state != .Paused && (stateWhenConnectionLost == nil || stateWhenConnectionLost != .Paused) {
                    state = .Playing
                    player?.rate = rate
                }


    /// Reachability for network connection
    private let reachability = Reachability.reachabilityForInternetConnection()

    /// Boolean value indicating whether the player should resume playing (after buffering)
    private var shouldResumePlaying: Bool {
        return !pausedForInterruption &&
            state != .Paused &&
            (stateWhenConnectionLost == nil || stateWhenConnectionLost != .Paused) &&
            (stateBeforeBuffering == nil || stateBeforeBuffering != .Paused)
    }


    // MARK: Readonly properties
