diff --git a/indra/llcharacter/llmultigesture.cpp b/indra/llcharacter/llmultigesture.cpp
index 05d1bc0cd96ad43336c2c48f615f5a27d16aedb7..ee60430d97ac93ea16e2c404f15893901bf11dca 100644
--- a/indra/llcharacter/llmultigesture.cpp
+++ b/indra/llcharacter/llmultigesture.cpp
@@ -498,6 +498,10 @@ std::vector<std::string> LLGestureStepWait::getLabel() const
 		strings.push_back("until animations are done");
 	//	label += "until animations are done";
 	}
+	else
+	{
+		strings.push_back("");
+	}
 
 	return strings;
 }
diff --git a/indra/newview/llpanelobjectinventory.cpp b/indra/newview/llpanelobjectinventory.cpp
index f683cbc8d0c0f771585f3142ffbb054f68507d35..ca1361c84b0b1be1a41d6cd8042d65ff4bda9cb5 100644
--- a/indra/newview/llpanelobjectinventory.cpp
+++ b/indra/newview/llpanelobjectinventory.cpp
@@ -114,6 +114,7 @@ class LLTaskInvFVBridge : public LLFolderViewEventListener
 	virtual time_t getCreationDate() const;
 	virtual LLUIImagePtr getIcon() const;
 	virtual void openItem();
+	virtual BOOL canOpenItem() const { return FALSE; }
 	virtual void closeItem() {}
 	virtual void previewItem();
 	virtual void selectItem() {}
@@ -667,7 +668,7 @@ void LLTaskInvFVBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 			}
 		}
 	}
-	else
+	else if (canOpenItem())
 	{
 		items.push_back(std::string("Task Open"));
 		if (!isItemCopyable())
@@ -713,6 +714,8 @@ class LLTaskCategoryBridge : public LLTaskInvFVBridge
 	virtual BOOL dragOrDrop(MASK mask, BOOL drop,
 							EDragAndDropType cargo_type,
 							void* cargo_data);
+	virtual BOOL canOpenItem() const { return TRUE; }
+	virtual void openItem();
 };
 
 LLTaskCategoryBridge::LLTaskCategoryBridge(
@@ -747,7 +750,8 @@ void LLTaskCategoryBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 {
 	std::vector<std::string> items;
 	std::vector<std::string> disabled_items;
-	items.push_back(std::string("Task Open"));
+	items.push_back(std::string("--no options--"));
+	disabled_items.push_back(std::string("--no options--"));
 	hide_context_entries(menu, items, disabled_items);
 }
 
@@ -758,6 +762,10 @@ BOOL LLTaskCategoryBridge::hasChildren() const
 	return FALSE;
 }
 
+void LLTaskCategoryBridge::openItem()
+{
+}
+
 BOOL LLTaskCategoryBridge::startDrag(EDragAndDropType* type, LLUUID* id) const
 {
 	//llinfos << "LLTaskInvFVBridge::startDrag()" << llendl;
@@ -864,6 +872,7 @@ class LLTaskTextureBridge : public LLTaskInvFVBridge
 						const std::string& name) :
 		LLTaskInvFVBridge(panel, uuid, name) {}
 
+	virtual BOOL canOpenItem() const { return TRUE; }
 	virtual void openItem();
 };
 
@@ -890,6 +899,7 @@ class LLTaskSoundBridge : public LLTaskInvFVBridge
 					  const std::string& name) :
 		LLTaskInvFVBridge(panel, uuid, name) {}
 
+	virtual BOOL canOpenItem() const { return TRUE; }
 	virtual void openItem();
 	virtual void performAction(LLInventoryModel* model, std::string action);
 	virtual void buildContextMenu(LLMenuGL& menu, U32 flags);
@@ -966,9 +976,8 @@ void LLTaskSoundBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 			}
 		}
 	}
-	else
+	else if (canOpenItem())
 	{
-		items.push_back(std::string("Task Open")); 
 		if (!isItemCopyable())
 		{
 			disabled_items.push_back(std::string("Task Open"));
@@ -1053,6 +1062,7 @@ class LLTaskLSLBridge : public LLTaskScriptBridge
 					const std::string& name) :
 		LLTaskScriptBridge(panel, uuid, name) {}
 
+	virtual BOOL canOpenItem() const { return TRUE; }
 	virtual void openItem();
 	virtual BOOL removeItem();
 	//virtual void buildContextMenu(LLMenuGL& menu);
@@ -1114,6 +1124,7 @@ class LLTaskNotecardBridge : public LLTaskInvFVBridge
 						 const std::string& name) :
 		LLTaskInvFVBridge(panel, uuid, name) {}
 
+	virtual BOOL canOpenItem() const { return TRUE; }
 	virtual void openItem();
 	virtual BOOL removeItem();
 };
@@ -1153,6 +1164,7 @@ class LLTaskGestureBridge : public LLTaskInvFVBridge
 						const std::string& name) :
 	LLTaskInvFVBridge(panel, uuid, name) {}
 
+	virtual BOOL canOpenItem() const { return TRUE; }
 	virtual void openItem();
 	virtual BOOL removeItem();
 };
@@ -1186,6 +1198,7 @@ class LLTaskAnimationBridge : public LLTaskInvFVBridge
 						  const std::string& name) :
 		LLTaskInvFVBridge(panel, uuid, name) {}
 
+	virtual BOOL canOpenItem() const { return TRUE; }
 	virtual void openItem();
 	virtual BOOL removeItem();
 };
diff --git a/indra/newview/llpreviewgesture.cpp b/indra/newview/llpreviewgesture.cpp
index 2e061b235dcdab397ab8e4bef8d2fc32448faa13..ff315d3c53c13db0de0f3ff6390f76c75c809ba8 100644
--- a/indra/newview/llpreviewgesture.cpp
+++ b/indra/newview/llpreviewgesture.cpp
@@ -31,55 +31,31 @@
  */
 
 #include "llviewerprecompiledheaders.h"
-
 #include "llpreviewgesture.h"
 
-#include <algorithm>
-
-// libraries
-#include "lldatapacker.h"
-#include "lldarray.h"
-#include "llstring.h"
-#include "lldir.h"
+#include "llagent.h"
+#include "llanimstatelabels.h"
+#include "llanimationstates.h"
+#include "llappviewer.h"			// gVFS
+#include "llassetuploadresponders.h"
+#include "llcheckboxctrl.h"
+#include "llcombobox.h"
+#include "lldelayedgestureerror.h"
 #include "llfloaterreg.h"
+#include "llgesturemgr.h"
 #include "llinventorydefines.h"
 #include "llinventoryfunctions.h"
 #include "llinventorymodel.h"
 #include "llinventorymodelbackgroundfetch.h"
 #include "llmultigesture.h"
 #include "llnotificationsutil.h"
-#include "llvfile.h"
-
-// newview
-#include "llagent.h"		// todo: remove
-#include "llanimationstates.h"
-#include "llassetuploadresponders.h"
-#include "llbutton.h"
-#include "llcheckboxctrl.h"
-#include "llcombobox.h"
-#include "lldelayedgestureerror.h"
-#include "llfloatergesture.h" // for some label constants
-#include "llgesturemgr.h"
-#include "llkeyboard.h"
-#include "lllineeditor.h"
 #include "llradiogroup.h"
-#include "llscrolllistctrl.h"
-#include "llscrolllistitem.h"
-#include "llscrolllistcell.h"
-#include "lltextbox.h"
-#include "lluictrlfactory.h"
-#include "llviewerinventory.h"
-#include "llviewerobject.h"
+#include "llresmgr.h"
+#include "lltrans.h"
+#include "llvfile.h"
 #include "llviewerobjectlist.h"
 #include "llviewerregion.h"
 #include "llviewerstats.h"
-#include "llviewerwindow.h"		// busycount
-#include "llvoavatarself.h"
-#include "llappviewer.h"			// gVFS
-#include "llanimstatelabels.h"
-#include "llresmgr.h"
-#include "lltrans.h"
-
 
 std::string NONE_LABEL;
 std::string SHIFT_LABEL;
@@ -832,7 +808,9 @@ void LLPreviewGesture::loadAsset()
 	const LLInventoryItem* item = getItem();
 	if (!item) 
 	{
-		mAssetStatus = PREVIEW_ASSET_ERROR;
+		// Don't set asset status here; we may not have set the item id yet
+		// (e.g. when this gets called initially)
+		//mAssetStatus = PREVIEW_ASSET_ERROR;
 		return;
 	}
 
diff --git a/indra/newview/llpreviewgesture.h b/indra/newview/llpreviewgesture.h
index 5968e936ef828b02afbd1bc4caf6a14d2330e693..1814f0d403721dbd96d6ee1514896d57603572ef 100644
--- a/indra/newview/llpreviewgesture.h
+++ b/indra/newview/llpreviewgesture.h
@@ -34,7 +34,6 @@
 #define LL_LLPREVIEWGESTURE_H
 
 #include "llassettype.h"
-#include "llmultigesture.h"
 #include "llpreview.h"
 
 class LLMultiGesture;
@@ -45,7 +44,6 @@ class LLComboBox;
 class LLScrollListCtrl;
 class LLScrollListItem;
 class LLButton;
-class LLGestureStep;
 class LLRadioGroup;
 class LLVFS;
 
@@ -140,7 +138,7 @@ class LLPreviewGesture : public LLPreview
 
 	static void onDonePreview(LLMultiGesture* gesture, void* data);
 
-protected:
+private:
 	// LLPreview contains mDescEditor
 	LLLineEditor*	mTriggerEditor;
 	LLTextBox*		mReplaceText;
@@ -173,4 +171,4 @@ class LLPreviewGesture : public LLPreview
 	BOOL mDirty;
 };
 
-#endif
+#endif // LL_LLPREVIEWGESTURE_H
diff --git a/indra/newview/skins/default/xui/en/floater_preview_gesture.xml b/indra/newview/skins/default/xui/en/floater_preview_gesture.xml
index f766fe5a5d245eb32a30e35405f99ccf3ddde4f0..6281bc52725e8dc4b3554fcc7708cad5203cfe10 100644
--- a/indra/newview/skins/default/xui/en/floater_preview_gesture.xml
+++ b/indra/newview/skins/default/xui/en/floater_preview_gesture.xml
@@ -39,28 +39,6 @@
      name="Title">
         Gesture: [NAME]
     </floater.string>
-  <text
-   type="string"
-   length="1"
-   follows="top|left"
-   font="SansSerifSmall"
-   height="10"
-   layout="topleft"
-   left="10"
-   name="name_text"
-   top="20"
-   font.style="BOLD"
-   width="100">
-    Name:
-  </text>
-  <line_editor
-   follows="left|top"
-   height="20"
-   layout="topleft"
-   left_delta="84"
-   name="name"
-   top_delta="-4"
-   width="180" />
     <text
      type="string"
      length="1"
@@ -70,7 +48,7 @@
      layout="topleft"
      left="10"
      name="desc_label"
-     top_pad="10"
+     top_pad="25"
      font.style="BOLD"
      width="100">
         Description:
@@ -79,10 +57,10 @@
      follows="left|top"
      height="20"
      layout="topleft"
-     left_delta="84"
+     left_delta="89"
      name="desc"
      top_delta="-4"
-     width="180" />
+     width="175" />
     <text
      type="string"
      length="1"
@@ -101,11 +79,11 @@
      follows="left|top"
      height="20"
      layout="topleft"
-     left_delta="84"
+     left_delta="89"
      max_length="31"
      name="trigger_editor"
      top_delta="-4"
-     width="180" />
+     width="175" />
     <text
      type="string"
      length="1"
@@ -125,12 +103,12 @@
      follows="left|top"
      height="20"
      layout="topleft"
-     left_delta="84"
+     left_delta="89"
      max_length="31"
      name="replace_editor"
      tool_tip="Replace the trigger word(s) with these words. For example, trigger &apos;hello&apos; replace with &apos;howdy&apos; will turn the chat &apos;I wanted to say hello&apos; into &apos;I wanted to say howdy&apos; as well as playing the gesture"
      top_delta="-4"
-     width="180" />
+     width="175" />
     <text
      type="string"
      length="1"
@@ -149,7 +127,7 @@
      height="20"
      label="None"
      layout="topleft"
-     left_delta="84"
+     left_delta="89"
      name="modifier_combo"
      top_delta="-4"
      width="75" />
@@ -171,7 +149,7 @@
      left="10"
      font.style="BOLD"
      name="library_label"
-     top="135"
+     top_delta="25"
      width="100">
         Library:
     </text>
@@ -181,7 +159,7 @@
      layout="topleft"
      left="10"
      name="library_list"
-     top="150"
+     top_delta="15"
      width="180">
         <scroll_list.rows
          value="Animation" />
@@ -199,7 +177,7 @@
      layout="topleft"
      left_pad="10"
      name="add_btn"
-     top_delta="0"
+     top_delta="-1"
      width="70" />
     <text
      type="string"
@@ -230,7 +208,7 @@
      layout="topleft"
      left_pad="10"
      name="up_btn"
-     top_delta="0"
+     top_delta="-1"
      width="70" />
     <button
      follows="top|left"
@@ -256,23 +234,25 @@
      layout="topleft"
      left="15"
      name="options_text"
-     top="330"
-     width="205" />
+     top="315"
+     width="205">
+	 (options)
+	 </text>
     <combo_box
      follows="top|left"
      height="20"
      layout="topleft"
      left_delta="15"
      name="animation_list"
-     top="345"
-     width="100" />
+     top="330"
+     width="100"/>
     <combo_box
      follows="top|left"
      height="20"
      layout="topleft"
      left_delta="0"
      name="sound_list"
-     top_delta="0"
+     top="330"
      width="100" />
     <line_editor
      follows="top|left"
@@ -281,7 +261,7 @@
      left_delta="0"
      max_length="127"
      name="chat_editor"
-     top_delta="0"
+     top="330"
      width="100" />
     <radio_group
      draw_border="false"
@@ -290,7 +270,7 @@
      layout="topleft"
      left_pad="8"
      name="animation_trigger_type"
-     top_delta="0"
+     top="330"
      width="80">
         <radio_item
          height="16"
@@ -298,7 +278,7 @@
          layout="topleft"
          left="3"
          name="start"
-         top="-51"
+         top_delta="45"
          width="80" />
         <radio_item
          height="16"
@@ -306,7 +286,7 @@
          layout="topleft"
          left_delta="0"
          name="stop"
-         top_pad="10"
+         top_pad="3"
          width="80" />
     </radio_group>
     <check_box
@@ -314,14 +294,14 @@
      height="20"
      label="until animations are done"
      layout="topleft"
-     left="16"
+     left="28"
      name="wait_anim_check"
-     top="340"
+     top="330"
      width="100" />
     <check_box
      follows="top|left"
      height="20"
-     label="time in seconds"
+     label="time in seconds:"
      layout="topleft"
      left_delta="0"
      name="wait_time_check"
@@ -331,10 +311,10 @@
      follows="top|left"
      height="20"
      layout="topleft"
-     left_pad="5"
+     left_pad="10"
      max_length="15"
      name="wait_time_editor"
-     top_delta="0"
+     top_delta="1"
      width="50" />
     <text
      type="string"