diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp
index f434d15843f247aa2668f46bb8c70e0883b666ca..a23e42ea9e129cac0ef6e553ec82cce556d5e184 100644
--- a/indra/newview/llviewerinventory.cpp
+++ b/indra/newview/llviewerinventory.cpp
@@ -66,6 +66,40 @@
 #include "llcommandhandler.h"
 #include "llviewermessage.h"
 
+///----------------------------------------------------------------------------
+/// Helper class to store special inventory item names 
+///----------------------------------------------------------------------------
+class LLLocalizedInventoryItemsDictionary : public LLSingleton<LLLocalizedInventoryItemsDictionary>
+{
+public:
+	std::map<std::string, std::string> mInventoryItemsDict;
+
+	LLLocalizedInventoryItemsDictionary()
+	{
+		mInventoryItemsDict["New Shape"]		= LLTrans::getString("New Shape");
+		mInventoryItemsDict["New Skin"]			= LLTrans::getString("New Skin");
+		mInventoryItemsDict["New Hair"]			= LLTrans::getString("New Hair");
+		mInventoryItemsDict["New Eyes"]			= LLTrans::getString("New Eyes");
+		mInventoryItemsDict["New Shirt"]		= LLTrans::getString("New Shirt");
+		mInventoryItemsDict["New Pants"]		= LLTrans::getString("New Pants");
+		mInventoryItemsDict["New Shoes"]		= LLTrans::getString("New Shoes");
+		mInventoryItemsDict["New Socks"]		= LLTrans::getString("New Socks");
+		mInventoryItemsDict["New Jacket"]		= LLTrans::getString("New Jacket");
+		mInventoryItemsDict["New Gloves"]		= LLTrans::getString("New Gloves");
+		mInventoryItemsDict["New Undershirt"]	= LLTrans::getString("New Undershirt");
+		mInventoryItemsDict["New Undershirt"]	= LLTrans::getString("New Undershirt");
+		mInventoryItemsDict["New Skirt"]		= LLTrans::getString("New Skirt");
+		mInventoryItemsDict["New Alpha"]		= LLTrans::getString("New Alpha");
+		mInventoryItemsDict["New Tattoo"]		= LLTrans::getString("New Tattoo");
+		mInventoryItemsDict["Invalid Wearable"] = LLTrans::getString("Invalid Wearable");
+
+		mInventoryItemsDict["New Script"]		= LLTrans::getString("New Script");
+		mInventoryItemsDict["New Folder"]		= LLTrans::getString("New Folder");
+		mInventoryItemsDict["Contents"]			= LLTrans::getString("Contents");
+	}
+};
+
+
 ///----------------------------------------------------------------------------
 /// Local function declarations, constants, enums, and typedefs
 ///----------------------------------------------------------------------------
@@ -316,6 +350,18 @@ BOOL LLViewerInventoryItem::unpackMessage(LLSD item)
 BOOL LLViewerInventoryItem::unpackMessage(LLMessageSystem* msg, const char* block, S32 block_num)
 {
 	BOOL rv = LLInventoryItem::unpackMessage(msg, block, block_num);
+
+	std::string localized_str;
+
+	std::map<std::string, std::string>::const_iterator dictionary_iter;
+
+	dictionary_iter = LLLocalizedInventoryItemsDictionary::getInstance()->mInventoryItemsDict.find(mName);
+
+	if(dictionary_iter != LLLocalizedInventoryItemsDictionary::getInstance()->mInventoryItemsDict.end())
+	{
+		mName = dictionary_iter->second;
+	}
+
 	mIsComplete = TRUE;
 	return rv;
 }
@@ -867,6 +913,25 @@ void create_inventory_item(const LLUUID& agent_id, const LLUUID& session_id,
 						   U32 next_owner_perm,
 						   LLPointer<LLInventoryCallback> cb)
 {
+	//check if name is equal to one of special inventory items names
+	//EXT-5839
+	std::string server_name = name;
+
+	{
+		std::map<std::string, std::string>::const_iterator dictionary_iter;
+
+		for (dictionary_iter = LLLocalizedInventoryItemsDictionary::getInstance()->mInventoryItemsDict.begin();
+			 dictionary_iter != LLLocalizedInventoryItemsDictionary::getInstance()->mInventoryItemsDict.end();
+			 dictionary_iter++)
+		{
+			const std::string& localized_name = dictionary_iter->second;
+			if(localized_name == name)
+			{
+				server_name = dictionary_iter->first;
+			}
+		}
+	}
+
 	LLMessageSystem* msg = gMessageSystem;
 	msg->newMessageFast(_PREHASH_CreateInventoryItem);
 	msg->nextBlock(_PREHASH_AgentData);
@@ -880,7 +945,7 @@ void create_inventory_item(const LLUUID& agent_id, const LLUUID& session_id,
 	msg->addS8Fast(_PREHASH_Type, (S8)asset_type);
 	msg->addS8Fast(_PREHASH_InvType, (S8)inv_type);
 	msg->addU8Fast(_PREHASH_WearableType, (U8)wtype);
-	msg->addStringFast(_PREHASH_Name, name);
+	msg->addStringFast(_PREHASH_Name, server_name);
 	msg->addStringFast(_PREHASH_Description, desc);
 	
 	gAgent.sendReliableMessage();
diff --git a/indra/newview/llwearablelist.cpp b/indra/newview/llwearablelist.cpp
index b2de31218bec462f13ede57a24be35ccd9174964..20266706da830458fe94dfc9e049188eb1e9f9cc 100644
--- a/indra/newview/llwearablelist.cpp
+++ b/indra/newview/llwearablelist.cpp
@@ -235,9 +235,7 @@ LLWearable* LLWearableList::createNewWearable( EWearableType type )
 	LLWearable *wearable = generateNewWearable();
 	wearable->setType( type );
 	
-	LLSD item_name = LLSD().with("[WEARABLE_ITEM]", wearable->getTypeLabel());
-	std::string name = LLTrans::getString("NewWearable");
-	LLStringUtil::format(name, item_name);
+	std::string name = LLTrans::getString( LLWearableDictionary::getTypeDefaultNewName(wearable->getType()) );
 	wearable->setName( name );
 
 	LLPermissions perm;