diff --git a/doc/contributions.txt b/doc/contributions.txt
index 67683204e29555941a3d594feefd1feae5f91b23..780fa0e3c88b46235ef3ae5ec7bcc2be266f4f17 100644
--- a/doc/contributions.txt
+++ b/doc/contributions.txt
@@ -372,6 +372,7 @@ Khyota Wulluf
 	VWR-9966
 Kitty Barnett
 	VWR-19699
+	STORM-288
 Kunnis Basiat
 	VWR-82
 	VWR-102
@@ -774,10 +775,12 @@ WolfPup Lowenhar
 	STORM-143
 	STORM-255
 	STORM-256
+	STORM-288
 	STORM-535
 	STORM-544
 	STORM-654
 	STORM-674
+	STORM-776
 	VWR-20741
 	VWR-20933
 Zai Lynch
diff --git a/indra/newview/llsidepaneliteminfo.cpp b/indra/newview/llsidepaneliteminfo.cpp
index be797ea937defcb084cf596abd66b6d21797f707..c8c6858b81d2f829a4a996fa8b1f4b19a3174350 100644
--- a/indra/newview/llsidepaneliteminfo.cpp
+++ b/indra/newview/llsidepaneliteminfo.cpp
@@ -71,12 +71,12 @@ void LLItemPropertiesObserver::changed(U32 mask)
 	const std::set<LLUUID>& mChangedItemIDs = gInventory.getChangedIDs();
 	std::set<LLUUID>::const_iterator it;
 
-	const LLUUID& object_id = mFloater->getObjectID();
+	const LLUUID& item_id = mFloater->getItemID();
 
 	for (it = mChangedItemIDs.begin(); it != mChangedItemIDs.end(); it++)
 	{
 		// set dirty for 'item profile panel' only if changed item is the item for which 'item profile panel' is shown (STORM-288)
-		if (*it == object_id)
+		if (*it == item_id)
 		{
 			// if there's a change we're interested in.
 			if((mask & (LLInventoryObserver::LABEL | LLInventoryObserver::INTERNAL | LLInventoryObserver::REMOVE)) != 0)
@@ -196,6 +196,11 @@ const LLUUID& LLSidepanelItemInfo::getObjectID() const
 	return mObjectID;
 }
 
+const LLUUID& LLSidepanelItemInfo::getItemID() const
+{
+	return mItemID;
+}
+
 void LLSidepanelItemInfo::reset()
 {
 	LLSidepanelInventorySubpanel::reset();
diff --git a/indra/newview/llsidepaneliteminfo.h b/indra/newview/llsidepaneliteminfo.h
index 6416e2cfe40342b9a1922cd01e8c465d58139d73..25be145f64dd1e8154519830d048a1a6f726a714 100644
--- a/indra/newview/llsidepaneliteminfo.h
+++ b/indra/newview/llsidepaneliteminfo.h
@@ -55,6 +55,7 @@ class LLSidepanelItemInfo : public LLSidepanelInventorySubpanel
 	void setEditMode(BOOL edit);
 
 	const LLUUID& getObjectID() const;
+	const LLUUID& getItemID() const;
 
 protected:
 	/*virtual*/ void refresh();
diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index 907f68dc06e6d4c8e008131fc9902d0cee2b7c15..3b1ebc64ab33a67d09a0df62efbcc360ea04fdaa 100644
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -976,6 +976,29 @@
                  parameter="perm_prefs" />
             </menu_item_call>
         </menu>
+        <menu_item_separator/>
+        <menu_item_call
+         enabled="false"
+         label="Undo"
+         name="Undo"
+         shortcut="control|Z">
+            <on_click
+             function="Edit.Undo"
+             userdata="" />
+            <on_enable
+             function="Edit.EnableUndo" />
+        </menu_item_call>
+        <menu_item_call
+         enabled="false"
+         label="Redo"
+         name="Redo"
+         shortcut="control|Y">
+            <on_click
+             function="Edit.Redo"
+             userdata="" />
+            <on_enable
+             function="Edit.EnableRedo" />
+        </menu_item_call>        
     </menu>
     <menu
      create_jump_keys="true"