     }
 
     public func jumpToPreviousTrack() {
-        let previousIndex: Int = currentIndex - 1
+        let isFirstTrack: Bool = currentIndex == 0
+        let previousIndex: Int = isFirstTrack ? 0 : currentIndex - 1
 
-        if isValidIndex(previousIndex) {
-            setCurrentIndex(previousIndex)
-            play()
-            return
+        switch playMode {
+        case .RepeatPlayList, .NoRepeat:
+            if isFirstTrack {
+                seekToTrackBeginning()
+            } else {
+                setCurrentIndex(previousIndex)
+            }
+        case .RepeatItem:
+            seekToTrackBeginning()
         }
-
-        seekToTrackBeginning()
-        play()
     }
 
     //MARK: - private
 
     private func setupPlayerItem() {
-        if !hasPlayList() {
-            return
-        }
         if !isValidIndex(currentIndex) {
             return
         }

import AVFoundation

public class PlayListPlayer: PlayListPlayerType {
    public static let sharedInstance: PlayListPlayer = PlayListPlayer()

    public var didFinishPlayingTrack:(() -> Void)?
    public var didFinishPlayingPlayList:(() -> Void)?

    private let player: AVPlayer = AVPlayer()

    private(set) var playListURLs: [NSURL] = []
    private(set) var currentIndex: Int     = 0

    //MARK: - update PlayListPlayer properties


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

        if currentIndex == lastTrackIndex() {
            didFinishPlayingPlayList?()
        }

        skipToNextTrack()
    }
}
