diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp
index bad0d8cd8f5dbaf959cb3c82579f83ce854ef7e2..1fa194ab1918b41bb8d9a1c01ff1c1113ef2bf8c 100644
--- a/indra/newview/llfolderview.cpp
+++ b/indra/newview/llfolderview.cpp
@@ -1059,19 +1059,7 @@ void LLFolderView::removeCutItems()
 		 iter != objects.end();
 		 ++iter)
 	{
-		const LLUUID& item_id = (*iter);
-		LLInventoryObject *obj = gInventory.getObject(item_id);
-		if (obj)
-		{
-			if (LLAssetType::AT_CATEGORY == obj->getType())
-			{
-				remove_category(&gInventory, item_id);
-			}
-			else
-			{
-				remove_item(&gInventory, item_id);
-			}
-		}
+		gInventory.removeObject(*iter);
 	}
 }
 
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index cae04ccb49cf08518adbda4c9b645bb671e17867..b86c453d617693bced1035bd28af8d9a3c0654ce 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -2948,7 +2948,7 @@ bool LLFolderBridge::removeItemResponse(const LLSD& notification, const LLSD& re
 	{
 		// move it to the trash
 		LLPreview::hide(mUUID);
-		remove_category(getInventoryModel(), mUUID);
+		getInventoryModel()->removeCategory(mUUID);
 		return TRUE;
 	}
 	return FALSE;
diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp
index 94d1b1972620c2f7a7918d4f1a3708ecf8bf1b54..ab5b08291568165e81d6cb38c35349c9d6f25630 100644
--- a/indra/newview/llinventoryfunctions.cpp
+++ b/indra/newview/llinventoryfunctions.cpp
@@ -108,64 +108,6 @@ void append_path(const LLUUID& id, std::string& path)
 	path.append(temp);
 }
 
-// Move the item to the trash. Works for folders and objects.
-// Caution: This method assumes that the item is removable!
-void remove_item(LLInventoryModel* model, const LLUUID& id)
-{
-	LLViewerInventoryItem* item = model->getItem(id);
-	if (!item)
-		return;
-	
-	if (item->getType() == LLAssetType::AT_CATEGORY)
-	{
-		// Call the general helper function to delete a folder
-		remove_category(model, id);
-	}
-	else
-	{
-		// Get the trash UUID
-		LLUUID trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH, false);
-		if (trash_id.notNull())
-		{
-			// Finally, move the item to the trash
-			model->changeItemParent(item, trash_id, true);
-		}
-	}
-}
-
-void remove_category(LLInventoryModel* model, const LLUUID& cat_id)
-{
-	if (!model || !get_is_category_removable(model, cat_id))
-	{
-		return;
-	}
-
-	// Look for any gestures and deactivate them
-	LLInventoryModel::cat_array_t	descendent_categories;
-	LLInventoryModel::item_array_t	descendent_items;
-	gInventory.collectDescendents(cat_id, descendent_categories, descendent_items, FALSE);
-
-	for (LLInventoryModel::item_array_t::const_iterator iter = descendent_items.begin();
-		 iter != descendent_items.end();
-		 ++iter)
-	{
-		const LLViewerInventoryItem* item = (*iter);
-		const LLUUID& item_id = item->getUUID();
-		if (item->getType() == LLAssetType::AT_GESTURE
-			&& LLGestureMgr::instance().isGestureActive(item_id))
-		{
-			LLGestureMgr::instance().deactivateGesture(item_id);
-		}
-	}
-
-	LLViewerInventoryCategory* cat = gInventory.getCategory(cat_id);
-	if (cat)
-	{
-		const LLUUID trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH);
-		model->changeCategoryParent(cat, trash_id, TRUE);
-	}
-}
-
 void rename_category(LLInventoryModel* model, const LLUUID& cat_id, const std::string& new_name)
 {
 	LLViewerInventoryCategory* cat;
@@ -610,7 +552,7 @@ void move_to_outbox_cb_action(const LLSD& payload)
 
 				if (cat_array->empty() && item_array->empty())
 				{
-					remove_category(&gInventory, parent);
+					gInventory.removeCategory(parent);
 				}
 
 				if (parent == top_level_folder)
diff --git a/indra/newview/llinventoryfunctions.h b/indra/newview/llinventoryfunctions.h
index 535d831e477f46f897f483d6cfba78873d68a9f6..5cf9c528b01057ad0095a48f032ee286a7beb0bf 100644
--- a/indra/newview/llinventoryfunctions.h
+++ b/indra/newview/llinventoryfunctions.h
@@ -57,10 +57,6 @@ void show_task_item_profile(const LLUUID& item_uuid, const LLUUID& object_id);
 
 void show_item_original(const LLUUID& item_uuid);
 
-void remove_item(LLInventoryModel* model, const LLUUID& id);
-
-void remove_category(LLInventoryModel* model, const LLUUID& cat_id);
-
 void rename_category(LLInventoryModel* model, const LLUUID& cat_id, const std::string& new_name);
 
 void copy_inventory_category(LLInventoryModel* model, LLViewerInventoryCategory* cat, const LLUUID& parent_id, const LLUUID& root_copy_id = LLUUID::null);
diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp
index 1ea4cb63f6dc047393dc208fb48ea2c192fd98ce..85ecb133d07eefea4624693663a7f92dc71a37e1 100644
--- a/indra/newview/llinventorymodel.cpp
+++ b/indra/newview/llinventorymodel.cpp
@@ -47,6 +47,7 @@
 #include "llviewerregion.h"
 #include "llcallbacklist.h"
 #include "llvoavatarself.h"
+#include "llgesturemgr.h"
 #include <typeinfo>
 
 //#define DIFF_INVENTORY_FILES
@@ -3032,23 +3033,47 @@ void LLInventoryModel::removeItem(const LLUUID& item_id)
 	else
 	{
 		const LLUUID new_parent = findCategoryUUIDForType(LLFolderType::FT_TRASH);
-		LL_INFOS("Inventory") << "Moving to Trash (" << new_parent << "):" << LL_ENDL;
-		changeItemParent(item, new_parent, TRUE);
+		if (new_parent.notNull())
+		{
+			LL_INFOS("Inventory") << "Moving to Trash (" << new_parent << "):" << LL_ENDL;
+			changeItemParent(item, new_parent, TRUE);
+		}
 	}
 }
 
 void LLInventoryModel::removeCategory(const LLUUID& category_id)
 {
-	LLViewerInventoryCategory* cat = getCategory(category_id);
-	if (! cat)
+	if (! get_is_category_removable(this, category_id))
 	{
-		LL_WARNS("Inventory") << "couldn't find inventory folder " << category_id << LL_ENDL;
+		return;
 	}
-	else
+
+	// Look for any gestures and deactivate them
+	LLInventoryModel::cat_array_t	descendent_categories;
+	LLInventoryModel::item_array_t	descendent_items;
+	collectDescendents(category_id, descendent_categories, descendent_items, FALSE);
+
+	for (LLInventoryModel::item_array_t::const_iterator iter = descendent_items.begin();
+		 iter != descendent_items.end();
+		 ++iter)
 	{
-		const LLUUID new_parent = findCategoryUUIDForType(LLFolderType::FT_TRASH);
-		LL_INFOS("Inventory") << "Moving to Trash (" << new_parent << "):" << LL_ENDL;
-		changeCategoryParent(cat, new_parent, TRUE);
+		const LLViewerInventoryItem* item = (*iter);
+		const LLUUID& item_id = item->getUUID();
+		if (item->getType() == LLAssetType::AT_GESTURE
+			&& LLGestureMgr::instance().isGestureActive(item_id))
+		{
+			LLGestureMgr::instance().deactivateGesture(item_id);
+		}
+	}
+
+	LLViewerInventoryCategory* cat = getCategory(category_id);
+	if (cat)
+	{
+		const LLUUID trash_id = findCategoryUUIDForType(LLFolderType::FT_TRASH);
+		if (trash_id.notNull())
+		{
+			changeCategoryParent(cat, trash_id, TRUE);
+		}
 	}
 }
 
diff --git a/indra/newview/lloutfitslist.cpp b/indra/newview/lloutfitslist.cpp
index 1dc4d796ab20d1af7f6953f6b5ffffdf24e2f41d..ef5ef2ddc82353bfc2e70d7d2ea8cfb60d574775 100644
--- a/indra/newview/lloutfitslist.cpp
+++ b/indra/newview/lloutfitslist.cpp
@@ -640,7 +640,7 @@ void LLOutfitsList::onOutfitsRemovalConfirmation(const LLSD& notification, const
 
 	if (mSelectedOutfitUUID.notNull())
 	{
-		remove_category(&gInventory, mSelectedOutfitUUID);
+		gInventory.removeCategory(mSelectedOutfitUUID);
 	}
 }