diff --git a/indra/newview/lltooldraganddrop.cpp b/indra/newview/lltooldraganddrop.cpp
index 4f4eef0f3d5421dc8cec30ffbccebc1e7a816e63..c69999981ce66c46e3ea2aed366558d21cdeb3bf 100644
--- a/indra/newview/lltooldraganddrop.cpp
+++ b/indra/newview/lltooldraganddrop.cpp
@@ -1007,7 +1007,14 @@ BOOL LLToolDragAndDrop::handleDropTextureProtections(LLViewerObject* hit_obj,
 			}
 		}
 		// Add the texture item to the target object's inventory.
-		hit_obj->updateInventory(new_item, TASK_INVENTORY_ITEM_KEY, true);
+		if (LLAssetType::AT_TEXTURE == new_item->getType())
+		{
+			hit_obj->updateTextureInventory(new_item, TASK_INVENTORY_ITEM_KEY, true);
+		}
+		else
+		{
+			hit_obj->updateInventory(new_item, TASK_INVENTORY_ITEM_KEY, true);
+		}
  		// TODO: Check to see if adding the item was successful; if not, then
 		// we should return false here.
 	}
@@ -1022,7 +1029,14 @@ BOOL LLToolDragAndDrop::handleDropTextureProtections(LLViewerObject* hit_obj,
 		// *FIX: may want to make sure agent can paint hit_obj.
 
 		// Add the texture item to the target object's inventory.
-		hit_obj->updateInventory(new_item, TASK_INVENTORY_ITEM_KEY, true);
+		if (LLAssetType::AT_TEXTURE == new_item->getType())
+		{
+			hit_obj->updateTextureInventory(new_item, TASK_INVENTORY_ITEM_KEY, true);
+		}
+		else
+		{
+			hit_obj->updateInventory(new_item, TASK_INVENTORY_ITEM_KEY, true);
+		}
 		// Force the object to update its refetch its inventory so it has this texture.
 		hit_obj->fetchInventoryFromServer();
  		// TODO: Check to see if adding the item was successful; if not, then
diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp
index 72fd3c1a4a2f06042976e286d2566b8a916c623a..67c87a6c63b20d78df7fbf53eb08d2bb25679c80 100644
--- a/indra/newview/llviewerobject.cpp
+++ b/indra/newview/llviewerobject.cpp
@@ -2924,27 +2924,39 @@ void LLViewerObject::removeInventory(const LLUUID& item_id)
 	++mInventorySerialNum;
 }
 
-void LLViewerObject::updateInventory(
-	LLViewerInventoryItem* item,
-	U8 key,
-	bool is_new)
+bool LLViewerObject::isTextureInInventory(LLViewerInventoryItem* item)
 {
-	LLMemType mt(LLMemType::MTYPE_OBJECT);
+	bool result = false;
 
-	std::list<LLUUID>::iterator begin = mPendingInventoryItemsIDs.begin();
-	std::list<LLUUID>::iterator end = mPendingInventoryItemsIDs.end();
+	if (item && LLAssetType::AT_TEXTURE == item->getType())
+	{
+		std::list<LLUUID>::iterator begin = mPendingInventoryItemsIDs.begin();
+		std::list<LLUUID>::iterator end = mPendingInventoryItemsIDs.end();
 
-	bool is_fetching = std::find(begin, end, item->getAssetUUID()) != end;
-	bool is_fetched = getInventoryItemByAsset(item->getAssetUUID()) != NULL;
+		bool is_fetching = std::find(begin, end, item->getAssetUUID()) != end;
+		bool is_fetched = getInventoryItemByAsset(item->getAssetUUID()) != NULL;
 
-	if (is_fetched || is_fetching)
-	{
-		return;
+		result = is_fetched || is_fetching;
 	}
-	else
+
+	return result;
+}
+
+void LLViewerObject::updateTextureInventory(LLViewerInventoryItem* item, U8 key, bool is_new)
+{
+	if (item && !isTextureInInventory(item))
 	{
 		mPendingInventoryItemsIDs.push_back(item->getAssetUUID());
+		updateInventory(item, key, is_new);
 	}
+}
+
+void LLViewerObject::updateInventory(
+	LLViewerInventoryItem* item,
+	U8 key,
+	bool is_new)
+{
+	LLMemType mt(LLMemType::MTYPE_OBJECT);
 
 	// This slices the object into what we're concerned about on the
 	// viewer. The simulator will take the permissions and transfer
diff --git a/indra/newview/llviewerobject.h b/indra/newview/llviewerobject.h
index dc102b666fa4d6a9f7fad5606b7ccae96522f77b..409108266eb841228609e3e8792e7d9c30397e2a 100644
--- a/indra/newview/llviewerobject.h
+++ b/indra/newview/llviewerobject.h
@@ -432,12 +432,15 @@ class LLViewerObject : public LLPrimitive, public LLRefCount, public LLGLUpdate
 	// manager until we have better iterators.
 	void updateInventory(LLViewerInventoryItem* item, U8 key, bool is_new);
 	void updateInventoryLocal(LLInventoryItem* item, U8 key); // Update without messaging.
+	void updateTextureInventory(LLViewerInventoryItem* item, U8 key, bool is_new);
 	LLInventoryObject* getInventoryObject(const LLUUID& item_id);
 	void getInventoryContents(LLInventoryObject::object_list_t& objects);
 	LLInventoryObject* getInventoryRoot();
 	LLViewerInventoryItem* getInventoryItemByAsset(const LLUUID& asset_id);
 	S16 getInventorySerial() const { return mInventorySerialNum; }
 
+	bool isTextureInInventory(LLViewerInventoryItem* item);
+
 	// These functions does viewer-side only object inventory modifications
 	void updateViewerInventoryAsset(
 		const LLViewerInventoryItem* item,