     }
 
     public func skipToNextTrack() {
-        let nextIndex: Int = currentIndex + 1
+        let isLastTrack: Bool = currentIndex == lastTrackIndex()
+        let nextIndex: Int    = isLastTrack ? 0 : currentIndex + 1
 
-        if isValidIndex(nextIndex) {
+        switch playMode {
+        case .RepeatPlayList:
             setCurrentIndex(nextIndex)
-            player.play()
-            return
+            play()
+        case .RepeatItem:
+            seekToTrackBeginning()
+        case .NoRepeat:
+            setCurrentIndex(nextIndex)
+            if isLastTrack {
+                pause()
+            }
         }
-
-        player.pause()
-        seekToTrackBeginning()
     }
 
     public func beginRewinding() {

    private func playerDidFinishTrackPlaying(notification: NSNotification) {
        didFinishPlayingTrack?()

        if currentIndex == playListURLs.count - 1 {
            didFinishPlayingPlayList?()
        }
    }
}

    }

    private func isValidIndex(index: Int) -> Bool {
        return hasPlayList() && 0 <= index && index <= lastTrackIndex()
    }

    private func lastTrackIndex() -> Int {
        return playListURLs.count == 0 ? 0 : playListURLs.count - 1
    }

    private func resetPlayerRate() {
