         player.removeObserver(self, forKeyPath: "currentItem.loadedTimeRanges")
         player.removeObserver(self, forKeyPath: "currentItem.playbackLikelyToKeepUp")
         player.removeObserver(self, forKeyPath: "currentItem.playbackBufferEmpty")
+        player.removeObserver(self, forKeyPath: "rate")
         NSNotificationCenter.defaultCenter().removeObserver(self)
     }
 }
            options: .New, context: &kvoBufferingContext)
        player.addObserver(self, forKeyPath: "currentItem.playbackBufferEmpty",
            options: .New, context: &kvoBufferingContext)
        
        NSNotificationCenter.defaultCenter().addObserver(self, selector: "playbackDidEnd",
            name: AVPlayerItemDidPlayToEndTimeNotification, object: player.currentItem)

            default:
                break
            }
    }
    
    private func handleRateChangedEvent() {
        if isPlaying() {
            trigger(.Play)
        }
    }
    
    private func handleStatusChangedEvent() {
