diff --git a/indra/llui/llfloater.h b/indra/llui/llfloater.h
index a6a85fc7d154451736f3d55746e4af89b7e9ddfa..157b9b01133a8387a34c4fb6dc653dd107dc06ed 100644
--- a/indra/llui/llfloater.h
+++ b/indra/llui/llfloater.h
@@ -224,7 +224,7 @@ class LLFloater : public LLPanel, public LLInstanceTracker<LLFloater>
 	void			openFloater(const LLSD& key = LLSD());
 
 	// If allowed, close the floater cleanly, releasing focus.
-	void			closeFloater(bool app_quitting = false);
+	virtual void	closeFloater(bool app_quitting = false);
 
 	/*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE);
 	
diff --git a/indra/newview/llfloaterimcontainer.cpp b/indra/newview/llfloaterimcontainer.cpp
index c1959729d159a6f346c15a720420c6e9627fa2ed..86d205a9205084c42a56ddf51395b55fadbd91d4 100644
--- a/indra/newview/llfloaterimcontainer.cpp
+++ b/indra/newview/llfloaterimcontainer.cpp
@@ -1851,4 +1851,18 @@ void LLFloaterIMContainer::flashConversationItemWidget(const LLUUID& session_id,
 	}
 }
 
+void LLFloaterIMContainer::closeFloater(bool app_quitting/* = false*/)
+{
+	// Always unminimize before trying to close.
+	// Most of the time the user will never see this state.
+	setMinimized(FALSE);
+
+	S32 conv_pane_width = mConversationsPane->getRect().getWidth();
+
+	// Save the conversations pane width before collapsing it.
+	gSavedPerAccountSettings.setS32("ConversationsListPaneWidth", conv_pane_width);
+
+	LLFloater::closeFloater(app_quitting);
+}
+
 // EOF
diff --git a/indra/newview/llfloaterimcontainer.h b/indra/newview/llfloaterimcontainer.h
index 265ae8df4c5e3c55d9ea90619011122b80750503..569fa9faabca5a146d2a146cc98762b7f99070f6 100644
--- a/indra/newview/llfloaterimcontainer.h
+++ b/indra/newview/llfloaterimcontainer.h
@@ -109,6 +109,8 @@ class LLFloaterIMContainer
 
 	void assignResizeLimits();
 
+	/*virtual*/ void closeFloater(bool app_quitting = false);
+
 private:
 	typedef std::map<LLUUID,LLFloater*> avatarID_panel_map_t;
 	avatarID_panel_map_t mSessions;