diff --git a/doc/contributions.txt b/doc/contributions.txt
index 7f186c9f6d95a193a1999dc32932336391465206..db26e50d3fce9cf646ebdff8717ce0b11a0cf8b5 100755
--- a/doc/contributions.txt
+++ b/doc/contributions.txt
@@ -752,6 +752,7 @@ Jonathan Yap
 	STORM-2094
 	STORM-2099
 	STORM-2091
+	STORM-2092
 Kadah Coba
 	STORM-1060
     STORM-1843
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index 199c90c7057d681df8dde052d303a9202c692281..e6cd7b9f950ae2419e251b697b35fceb44f368f7 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -3092,6 +3092,10 @@ void LLFolderBridge::performAction(LLInventoryModel* model, std::string action)
 		LLAppearanceMgr::instance().takeOffOutfit( cat->getLinkedUUID() );
 		return;
 	}
+	else if ("copyoutfittoclipboard" == action)
+	{
+		copyOutfitToClipboard();
+	}
 	else if ("purge" == action)
 	{
 		purgeItem(model, mUUID);
@@ -3249,6 +3253,39 @@ void LLFolderBridge::gatherMessage(std::string& message, S32 depth, LLError::ELe
     }
 }
 
+void LLFolderBridge::copyOutfitToClipboard()
+{
+	std::string text;
+
+	LLInventoryModel::cat_array_t* cat_array;
+	LLInventoryModel::item_array_t* item_array;
+	gInventory.getDirectDescendentsOf(mUUID, cat_array, item_array);
+
+	S32 item_count(0);
+	if( item_array )
+	{			
+		item_count = item_array->size();
+	}
+
+	if (item_count)
+	{
+		for (S32 i = 0; i < item_count;)
+		{
+			LLSD uuid =item_array->at(i)->getUUID();
+			LLViewerInventoryItem* item = gInventory.getItem(uuid);
+
+			i++;
+			if (item != NULL)
+			{
+				// Append a newline to all but the last line
+				text += i != item_count ? item->getName() + "\n" : item->getName();
+			}
+		}
+	}
+
+	LLClipboard::instance().copyToClipboard(utf8str_to_wstring(text),0,text.size());
+}
+
 void LLFolderBridge::openItem()
 {
 	LL_DEBUGS() << "LLFolderBridge::openItem()" << LL_ENDL;
@@ -3847,6 +3884,11 @@ void LLFolderBridge::buildContextMenuOptions(U32 flags, menuentry_vec_t&   items
 			}
 		}
 
+		if (model->findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT) == mUUID)
+		{
+			items.push_back(std::string("Copy outfit list to clipboard"));
+		}
+
 		//Added by aura to force inventory pull on right-click to display folder options correctly. 07-17-06
 		mCallingCards = mWearables = FALSE;
 
diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h
index df25e01688a2be73c4d948435c096904d8c8ba21..b7d8c9d034a8f6918496c56f525d26ee78532832 100644
--- a/indra/newview/llinventorybridge.h
+++ b/indra/newview/llinventorybridge.h
@@ -344,6 +344,7 @@ class LLFolderBridge : public LLInvFVBridge
 	BOOL checkFolderForContentsOfType(LLInventoryModel* model, LLInventoryCollectFunctor& typeToCheck);
 
 	void modifyOutfit(BOOL append);
+	void copyOutfitToClipboard();
 	void determineFolderType();
 
 	void dropToFavorites(LLInventoryItem* inv_item);
diff --git a/indra/newview/skins/default/xui/en/menu_inventory.xml b/indra/newview/skins/default/xui/en/menu_inventory.xml
index 61002bf1b56c2dee33c6873f6f842040abfb4c2d..5b8a9413bf3f5e1defdba1228b08143137d51316 100644
--- a/indra/newview/skins/default/xui/en/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/en/menu_inventory.xml
@@ -457,6 +457,14 @@
          function="Inventory.DoToSelected"
          parameter="removefromoutfit" />
     </menu_item_call>
+    <menu_item_call
+     label="Copy outfit list to clipboard"
+     layout="topleft"
+     name="Copy outfit list to clipboard">
+        <menu_item_call.on_click
+         function="Inventory.DoToSelected"
+         parameter="copyoutfittoclipboard" />
+    </menu_item_call>
     <menu_item_separator
      layout="topleft"
      name="Outfit Separator" />