diff --git a/indra/newview/llfloatergesture.cpp b/indra/newview/llfloatergesture.cpp
index 0f8e4c10d78f6e04a614afd8d5db9814068dd584..9d05d9de3497b6634b7c7d4085d910535696f09d 100644
--- a/indra/newview/llfloatergesture.cpp
+++ b/indra/newview/llfloatergesture.cpp
@@ -304,7 +304,7 @@ void LLFloaterGesture::addGesture(const LLUUID& item_id , LLMultiGesture* gestur
 		{
 			font_style = "BOLD";
 		}
-
+		item_name = gesture->mName;
 		element["columns"][0]["column"] = "trigger";
 		element["columns"][0]["value"] = gesture->mTrigger;
 		element["columns"][0]["font"]["name"] = "SANSSERIF";
diff --git a/indra/newview/llgesturemgr.cpp b/indra/newview/llgesturemgr.cpp
index 77a2cbcfcae8ebb8f7e858f17623429ebf5f8e45..18ff53c127d5cc13e2b3727d0d5c7dabfc3c1951 100644
--- a/indra/newview/llgesturemgr.cpp
+++ b/indra/newview/llgesturemgr.cpp
@@ -73,6 +73,7 @@ LLGestureManager::LLGestureManager()
 	mActive(),
 	mLoadingCount(0)
 {
+	mRetryIfMissing = true;
 	gInventory.addObserver(this);
 }
 
@@ -984,7 +985,9 @@ void LLGestureManager::onLoadComplete(LLVFS *vfs,
 			else
 			{
 				// Watch this item and set gesture name when item exists in inventory
-				self.watchItem(item_id);
+				item_ref_t ids;
+				ids.push_back(item_id);
+				self.fetchItems(ids);
 			}
 			self.mActive[item_id] = gesture;
 
@@ -1177,6 +1180,7 @@ void LLGestureManager::getItemIDs(std::vector<LLUUID>* ids)
 
 void LLGestureManager::done()
 {
+	bool notify = false;
 	for(item_map_t::iterator it = mActive.begin(); it != mActive.end(); ++it)
 	{
 		if(it->second && it->second->mName.empty())
@@ -1185,10 +1189,14 @@ void LLGestureManager::done()
 			if(item)
 			{
 				it->second->mName = item->getName();
+				notify = true;
 			}
 		}
 	}
-	notifyObservers();
+	if(notify)
+	{
+		notifyObservers();
+	}
 }
 
 // static
diff --git a/indra/newview/llgesturemgr.h b/indra/newview/llgesturemgr.h
index 094ca1379843e4a9f6e258c5e46860cb5dcd5f8e..e80eea9ae90accc48d0c310da5f828e979e68d41 100644
--- a/indra/newview/llgesturemgr.h
+++ b/indra/newview/llgesturemgr.h
@@ -54,7 +54,7 @@ class LLGestureManagerObserver
 	virtual void changed() = 0;
 };
 
-class LLGestureManager : public LLSingleton<LLGestureManager>, public LLInventoryCompletionObserver
+class LLGestureManager : public LLSingleton<LLGestureManager>, public LLInventoryFetchObserver
 {
 public:
 
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index e7fe85bdf0f72f1bae012a560d3f05d1f6256e55..db8bda008ebdb5b9c29a4d909eda88a6cd00273d 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -101,7 +101,6 @@
 #include "llfeaturemanager.h"
 #include "llfirstuse.h"
 #include "llfloaterchat.h"
-#include "llfloatergesture.h"
 #include "llfloaterhud.h"
 #include "llfloaterland.h"
 #include "llfloaterpreference.h"
@@ -299,23 +298,6 @@ namespace
 	};
 }
 
-class LLGestureInventoryFetchObserver : public LLInventoryFetchObserver
-{
-public:
-	LLGestureInventoryFetchObserver() {}
-	virtual void done()
-	{
-		// we've downloaded all the items, so repaint the dialog
-		LLFloaterGesture* floater = LLFloaterReg::findTypedInstance<LLFloaterGesture>("gestures");
-		if (floater)
-		{
-			floater->refreshAll();
-		}
-		gInventory.removeObserver(this);
-		delete this;
-	}
-};
-
 void update_texture_fetch()
 {
 	LLAppViewer::getTextureCache()->update(1); // unpauses the texture cache thread
@@ -1825,11 +1807,8 @@ bool idle_startup()
 						item_ids.push_back(item_id);
 					}
 				}
-
-				LLGestureInventoryFetchObserver* fetch = new LLGestureInventoryFetchObserver();
-				fetch->fetchItems(item_ids);
-				// deletes itself when done
-				gInventory.addObserver(fetch);
+				// no need to add gesture to inventory observer, it's already made in constructor 
+				LLGestureManager::instance().fetchItems(item_ids);
 			}
 		}
 		gDisplaySwapBuffers = TRUE;