 
     /// 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

            //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
                }

                case "currentItem.playbackLikelyToKeepUp":
                    if let playbackLikelyToKeepUp = player.currentItem?.playbackLikelyToKeepUp where playbackLikelyToKeepUp {
                        //There is enough data in the buffer
                        if shouldResumePlaying {
                            stateBeforeBuffering = nil
                            state = .Playing
                            player.rate = rate
