diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp
index cc676550abe65783b024ef45b9fd0f5155cc51bb..e7e85467cdf7ba59b6970515dfde850b05a56d03 100644
--- a/indra/newview/llappearancemgr.cpp
+++ b/indra/newview/llappearancemgr.cpp
@@ -27,6 +27,7 @@
 #include "llviewerprecompiledheaders.h"
 
 #include <boost/lexical_cast.hpp>
+#include <boost/foreach.hpp>
 #include "llaccordionctrltab.h"
 #include "llagent.h"
 #include "llagentcamera.h"
@@ -1515,6 +1516,26 @@ void LLAppearanceMgr::replaceCurrentOutfit(const LLUUID& new_outfit)
 	wearInventoryCategory(cat, false, false);
 }
 
+// Remove existing photo link from outfit folder.
+void LLAppearanceMgr::removeOutfitPhoto(const LLUUID& outfit_id)
+{
+    LLInventoryModel::cat_array_t sub_cat_array;
+    LLInventoryModel::item_array_t outfit_item_array;
+    gInventory.collectDescendents(
+        outfit_id,
+        sub_cat_array,
+        outfit_item_array,
+        LLInventoryModel::EXCLUDE_TRASH);
+    BOOST_FOREACH(LLViewerInventoryItem* outfit_item, outfit_item_array)
+    {
+        LLViewerInventoryItem* linked_item = outfit_item->getLinkedItem();
+        if (linked_item != NULL && linked_item->getActualType() == LLAssetType::AT_TEXTURE)
+        {
+            gInventory.removeItem(outfit_item->getUUID());
+        }
+    }
+}
+
 // Open outfit renaming dialog.
 void LLAppearanceMgr::renameOutfit(const LLUUID& outfit_id)
 {
diff --git a/indra/newview/llappearancemgr.h b/indra/newview/llappearancemgr.h
index bf181cb4add27777af9581ec8a2e0dd31ba76b4f..3646f245c1b8c3e2dd5879823165e1745e5f70e1 100644
--- a/indra/newview/llappearancemgr.h
+++ b/indra/newview/llappearancemgr.h
@@ -61,6 +61,7 @@ class LLAppearanceMgr: public LLSingleton<LLAppearanceMgr>
 	void changeOutfit(bool proceed, const LLUUID& category, bool append);
 	void replaceCurrentOutfit(const LLUUID& new_outfit);
 	void renameOutfit(const LLUUID& outfit_id);
+	void removeOutfitPhoto(const LLUUID& outfit_id);
 	void takeOffOutfit(const LLUUID& cat_id);
 	void addCategoryToCurrentOutfit(const LLUUID& cat_id);
 	S32 findExcessOrDuplicateItems(const LLUUID& cat_id,
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index 86cc6dfae1051accc42e92d65b29f0b7e9925814..9f0b35fc8cc1296e3cafbb8939874094c64c7936 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -4358,12 +4358,14 @@ bool move_task_inventory_callback(const LLSD& notification, const LLSD& response
 // Returns true if the item can be moved to Current Outfit or any outfit folder.
 static BOOL can_move_to_outfit(LLInventoryItem* inv_item, BOOL move_is_into_current_outfit)
 {
-	if ((inv_item->getInventoryType() != LLInventoryType::IT_WEARABLE) &&
-		(inv_item->getInventoryType() != LLInventoryType::IT_GESTURE) &&
-		(inv_item->getInventoryType() != LLInventoryType::IT_ATTACHMENT) &&
-        (inv_item->getInventoryType() != LLInventoryType::IT_OBJECT) &&
-        (inv_item->getInventoryType() != LLInventoryType::IT_TEXTURE))
-    {
+	LLInventoryType::EType inv_type = inv_item->getInventoryType();
+	if ((inv_type != LLInventoryType::IT_WEARABLE) &&
+		(inv_type != LLInventoryType::IT_GESTURE) &&
+		(inv_type != LLInventoryType::IT_ATTACHMENT) &&
+		(inv_type != LLInventoryType::IT_OBJECT) &&
+		(inv_type != LLInventoryType::IT_SNAPSHOT) &&
+		(inv_type != LLInventoryType::IT_TEXTURE))
+	{
 		return FALSE;
 	}
 
@@ -4373,6 +4375,11 @@ static BOOL can_move_to_outfit(LLInventoryItem* inv_item, BOOL move_is_into_curr
 		return FALSE;
 	}
 
+	if((inv_type == LLInventoryType::IT_TEXTURE) || (inv_type == LLInventoryType::IT_SNAPSHOT))
+	{
+		return TRUE;
+	}
+
 	if (move_is_into_current_outfit && get_is_item_worn(inv_item->getUUID()))
 	{
 		return FALSE;
@@ -4423,6 +4430,14 @@ void LLFolderBridge::dropToFavorites(LLInventoryItem* inv_item)
 
 void LLFolderBridge::dropToOutfit(LLInventoryItem* inv_item, BOOL move_is_into_current_outfit)
 {
+	if((inv_item->getInventoryType() == LLInventoryType::IT_TEXTURE) || (inv_item->getInventoryType() == LLInventoryType::IT_SNAPSHOT))
+	{
+		LLAppearanceMgr::instance().removeOutfitPhoto(mUUID);
+		LLPointer<LLInventoryCallback> cb = NULL;
+		link_inventory_object(mUUID, LLConstPointer<LLInventoryObject>(inv_item), cb);
+		return;
+	}
+
 	// BAP - should skip if dup.
 	if (move_is_into_current_outfit)
 	{
diff --git a/indra/newview/lloutfitgallery.cpp b/indra/newview/lloutfitgallery.cpp
index f414179f9c531e4f53b664b4e5988b2baed96684..dcc4d70a2c253804827be3e5fc25e5a33f49b6b0 100644
--- a/indra/newview/lloutfitgallery.cpp
+++ b/indra/newview/lloutfitgallery.cpp
@@ -1073,22 +1073,7 @@ void LLOutfitGallery::linkPhotoToOutfit(LLUUID photo_id, LLUUID outfit_id)
 
 bool LLOutfitGallery::checkRemovePhoto(LLUUID outfit_id)
 {
-    //remove existing photo link from outfit folder
-    LLInventoryModel::cat_array_t sub_cat_array;
-    LLInventoryModel::item_array_t outfit_item_array;
-    gInventory.collectDescendents(
-        outfit_id,
-        sub_cat_array,
-        outfit_item_array,
-        LLInventoryModel::EXCLUDE_TRASH);
-    BOOST_FOREACH(LLViewerInventoryItem* outfit_item, outfit_item_array)
-    {
-        LLViewerInventoryItem* linked_item = outfit_item->getLinkedItem();
-        if (linked_item != NULL && linked_item->getActualType() == LLAssetType::AT_TEXTURE)
-        {
-            gInventory.removeItem(outfit_item->getUUID());
-        }
-    }
+    LLAppearanceMgr::instance().removeOutfitPhoto(outfit_id);
     return true;
 }