         // obtain original rows from paste board
         guard
             let data = info.draggingPasteboard().data(forType: PboardType.rows),
-            let sourceRows = NSKeyedUnarchiver.unarchiveObject(with: data) as? IndexSet,
-            let draggingItems = info.draggingPasteboard().propertyList(forType: PboardType.objects) as? [Any] else { return false }
+            let sourceRows = NSKeyedUnarchiver.unarchiveObject(with: data) as? IndexSet else { return false }
+        
+        let draggingItems = (self.arrangedObjects as AnyObject).objects(at: sourceRows)
         
         let destinationRow = row - sourceRows.count(in: 0...row)  // real insertion point after removing items to move
         let destinationRows = IndexSet(destinationRow..<(destinationRow + draggingItems.count))

    func tableView(_ tableView: NSTableView, writeRowsWith rowIndexes: IndexSet, to pboard: NSPasteboard) -> Bool {
        
        // register dragged type
        tableView.register(forDraggedTypes: [PboardType.rows, PboardType.objects])
        pboard.declareTypes([PboardType.rows, PboardType.objects], owner: self)
        
        // select rows to drag
        tableView.selectRowIndexes(rowIndexes, byExtendingSelection: false)

        // store row index info to pasteboard
        let rows = NSKeyedArchiver.archivedData(withRootObject: rowIndexes)
        pboard.setData(rows, forType: PboardType.rows)
        
        return true
    }
