     }
     
     func tableView(_ tableView: NSTableView, validateDrop info: NSDraggingInfo, proposedRow row: Int, proposedDropOperation dropOperation: NSTableViewDropOperation) -> NSDragOperation {
-
+        let sourceTableView = info.draggingSource() as? NSTableView
+
+        if sourceTableView == tableView {
+            Swift.print("drag same")
+        }
+        else
+        if sourceTableView == playlistTableView {
+            Swift.print("drag from playlist")
+        }
+        else
+        if sourceTableView == playitemTableView {
+            Swift.print("drag from playitem")
+        }
         if dropOperation == .above {
             let pboard = info.draggingPasteboard();
             let options = [NSPasteboardURLReadingFileURLsOnlyKey : true,

        //    Save or go
        switch (sender! as AnyObject).tag == 0 {
            case true:
                break
            case false:
                //    Restore from cache
                playlists = playCache
        }
    }
    
    // MARK:- Drag-n-Drop

        let pasteboard = info.draggingPasteboard()
        let options = [NSPasteboardURLReadingFileURLsOnlyKey : true,
                       NSPasteboardURLReadingContentsConformToTypesKey : [kUTTypeMovie as String]] as [String : Any]
        let sourceTableView = info.draggingSource() as? NSTableView
        var oldIndexes = [Int]()
        var oldIndexOffset = 0
        var newIndexOffset = 0

        // We have intra tableView drag-n-drop ?
        if tableView == sourceTableView {
            Swift.print("same \(String(describing: tableView.identifier))")
            info.enumerateDraggingItems(options: [], for: tableView, classes: [NSPasteboardItem.self], searchOptions: [:]) {
                tableView.beginUpdates()

