diff --git a/indra/newview/llmoveview.cpp b/indra/newview/llmoveview.cpp
index 0ee883e221a5fdbd0acda0e25f85dfa63db44909..93db33705316c110bcc0ffd94082bd83de5e3746 100644
--- a/indra/newview/llmoveview.cpp
+++ b/indra/newview/llmoveview.cpp
@@ -83,11 +83,6 @@ LLFloaterMove::LLFloaterMove(const LLSD& key)
 {
 }
 
-LLFloaterMove::~LLFloaterMove()
-{
-	LLPanelStandStopFlying::getInstance()->reparent(NULL);
-}
-
 // virtual
 BOOL LLFloaterMove::postBuild()
 {
@@ -161,6 +156,31 @@ void LLFloaterMove::setEnabled(BOOL enabled)
 	showModeButtons(enabled);
 }
 
+// *NOTE: we assume that setVisible() is called on floater close.
+// virtual
+void LLFloaterMove::setVisible(BOOL visible)
+{
+	// Ignore excessive calls of this method (from LLTransientFloaterMgr?).
+	if (getVisible() == visible)
+		return;
+
+	if (visible)
+	{
+		// Attach the Stand/Stop Flying panel.
+		LLPanelStandStopFlying* ssf_panel = LLPanelStandStopFlying::getInstance();
+		ssf_panel->reparent(this);
+		const LLRect& mode_actions_rect = mModeActionsPanel->getRect();
+		ssf_panel->setOrigin(mode_actions_rect.mLeft, mode_actions_rect.mBottom);
+	}
+	else
+	{
+		// Detach the Stand/Stop Flying panel.
+		LLPanelStandStopFlying::getInstance()->reparent(NULL);
+	}
+
+	LLTransientDockableFloater::setVisible(visible);
+}
+
 // static 
 F32 LLFloaterMove::getYawRate( F32 time )
 {
@@ -429,16 +449,6 @@ void LLFloaterMove::showModeButtons(BOOL bShow)
 	if (NULL == mModeActionsPanel || mModeActionsPanel->getVisible() == bShow)
 		return;
 	mModeActionsPanel->setVisible(bShow);
-
-	if (bShow)
-		LLPanelStandStopFlying::getInstance()->reparent(NULL);
-	else
-	{
-		LLPanelStandStopFlying* ssf_panel = LLPanelStandStopFlying::getInstance();
-		ssf_panel->reparent(this);
-		const LLRect& mode_actions_rect = mModeActionsPanel->getRect();
-		ssf_panel->setOrigin(mode_actions_rect.mLeft, mode_actions_rect.mBottom);
-	}
 }
 
 //static
diff --git a/indra/newview/llmoveview.h b/indra/newview/llmoveview.h
index 2664fe6e401a3b116b678d7c01696c32af74aaca..06463f02af2debede64dc2792a2d8100e2fce95f 100644
--- a/indra/newview/llmoveview.h
+++ b/indra/newview/llmoveview.h
@@ -51,11 +51,12 @@ class LLFloaterMove
 
 private:
 	LLFloaterMove(const LLSD& key);
-	~LLFloaterMove();
+	~LLFloaterMove() {}
 public:
 
 	/*virtual*/	BOOL	postBuild();
 	/*virtual*/ void	setEnabled(BOOL enabled);
+	/*virtual*/ void	setVisible(BOOL visible);
 	static F32	getYawRate(F32 time);
 	static void setFlyingMode(BOOL fly);
 	void setFlyingModeImpl(BOOL fly);