diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp
index 6ee8f26b9fa6b2887d45bf11cfd9087686920f61..14a25086971b002982a88f2bf1df3917d810f5eb 100755
--- a/indra/newview/llagent.cpp
+++ b/indra/newview/llagent.cpp
@@ -976,11 +976,15 @@ LLHost LLAgent::getRegionHost() const
 	}
 }
 
-boost::signals2::connection LLAgent::addRegionChangedCallback(region_changed_callback_t cb)
+boost::signals2::connection LLAgent::addRegionChangedCallback(const region_changed_signal_t::slot_type& cb)
 {
 	return mRegionChangedSignal.connect(cb);
 }
 
+void LLAgent::removeRegionChangedCallback(boost::signals2::connection callback)
+{
+	mRegionChangedSignal.disconnect(callback);
+}
 
 //-----------------------------------------------------------------------------
 // inPrelude()
diff --git a/indra/newview/llagent.h b/indra/newview/llagent.h
index 0662be897a3c807d1ac414af4f46f674f210081e..0766407494efd06637d9024a9e34fa92045a2deb 100755
--- a/indra/newview/llagent.h
+++ b/indra/newview/llagent.h
@@ -271,12 +271,13 @@ class LLAgent : public LLOldEvents::LLObservable
 	 *       // you may or may not want to remove that callback
 	 * 	 }
 	 */
-	typedef boost::function<void()> region_changed_callback_t;
-	boost::signals2::connection     addRegionChangedCallback(region_changed_callback_t);
+	typedef boost::signals2::signal<void()> region_changed_signal_t;
+
+	boost::signals2::connection     addRegionChangedCallback(const region_changed_signal_t::slot_type& cb);
+	void                            removeRegionChangedCallback(boost::signals2::connection callback);
 
   private:
 	LLViewerRegion	*mRegionp;
-	typedef boost::signals2::signal<void()> region_changed_signal_t;
 	region_changed_signal_t		            mRegionChangedSignal;
 
 	//--------------------------------------------------------------------