 
 	func outlineView(_ outlineView: NSOutlineView, pasteboardWriterForItem item: Any) -> NSPasteboardWriting? {
 		let node = nodeForItem(item as AnyObject?)
-
-		guard !(node.representedObject is PseudoFeed) else {
-			// We don’t allow the built-in smart feeds to be dragged.
-			// This will have to be revisited later when there are user-created smart feeds that *can* be dragged.
+		guard nodeRepresentsDraggableItem(node) else {
 			return nil
 		}
-
 		return (node.representedObject as? PasteboardWriterOwner)?.pasteboardWriter
 	}
 
 	// MARK: - Drag and Drop
 
 	func outlineView(_ outlineView: NSOutlineView, validateDrop info: NSDraggingInfo, proposedItem item: Any?, proposedChildIndex index: Int) -> NSDragOperation {
-//		let draggingSourceOutlineView = info.draggingSource() as? NSOutlineView
-//		let isLocalDrop = draggingSourceOutlineView == outlineView
-		return NSDragOperation(rawValue: 0)
+		let draggingSourceOutlineView = info.draggingSource() as? NSOutlineView
+		let isLocalDrop = draggingSourceOutlineView == outlineView
+		if isLocalDrop {
+			return validateLocalDrop(info, proposedItem: item, proposedChildIndex: index)
+		}
+		return SidebarOutlineDataSource.dragOperationNone
 	}
 
 	func outlineView(_ outlineView: NSOutlineView, acceptDrop info: NSDraggingInfo, item: Any?, childIndex index: Int) -> Bool {

		}
		return item as! Node
	}
}

import RSTree
import Articles
import RSCore
import Account

@objc final class SidebarOutlineDataSource: NSObject, NSOutlineViewDataSource {

	let treeController: TreeController
	static let dragOperationNone = NSDragOperation(rawValue: 0)

	init(treeController: TreeController) {
		self.treeController = treeController
