     }
     
     func currentVideo() -> Video? {
+        print("currentVideo[\(currentIndex)]")
         return getVideoByIndex(currentIndex)
     }
     

        // Remove from queue first to avoid accessing nil videoList value by observed queue's index
        let videoID: String = queue.removeAtIndex(index)
        if let removedVideo: Video? = videoList.removeValueForKey(videoID) {
            return removedVideo
        } else {
            return nil
        }
    }
    
    func insertVideo(newVideo: Video, index: Int) -> Video? {
        if index <= queue.count {
            // Insert video to videoList first
            // to avoid accessing nil videoList value by observed queue's index
            videoList[newVideo.id] = newVideo
            queue.insert(newVideo.id, atIndex: index)
            return newVideo
        } else {
            return nil
        }
    }

    }
    
    func moveVideoByIndex(sourceIndex: Int, destinationIndex: Int) -> Video? {
        let originalIndex = currentIndex
        if let removedVideo = removeVideoByIndex(sourceIndex) {
            let video = insertVideo(removedVideo, index: destinationIndex)
            // Adjust playing video
            currentIndex = (originalIndex == sourceIndex) ? destinationIndex : currentIndex
            return video
        } else {
            return nil
        }
