         self.tableView?.reloadRowsAtIndexPaths(indexPaths, withRowAnimation: self.rowAnimation)
     }
     
+    private func moveItemAtIndexPath(fromIndex:Int, toIndex: Int) {
+        let fromIndexPath = NSIndexPath(forItem: fromIndex, inSection: 0)
+        let toIndexPath = NSIndexPath(forItem: toIndex, inSection: 0)
+        self.collectionView?.moveItemAtIndexPath(fromIndexPath, toIndexPath: toIndexPath)
+        self.tableView?.moveRowAtIndexPath(fromIndexPath, toIndexPath: toIndexPath)
+    }
+    
     private func removeItemsAtIndexPaths(indexes:[Int]) {
         let indexPaths = self.indexPathsForIndexes(indexes)
         self.collectionView?.deleteItemsAtIndexPaths(indexPaths)

    }
    
    func insertItem(item:AnyObject, atIndex index: Int) {
        serialOperation {
            if index == 0 || index < self.items.count {
                self.mainThread {
                    self.items.insert(item, atIndex: index)
                    self.insertItemsAtIndexPaths([index])
                }
            } else {
                NSLog("index out of bounds: %d", index)
            }

        }
    }

    func removeItem(item:AnyObject) {
        mainThread {
            if let index = self.indexForItem(item) {
