diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp
index 7cf01040755c6fac822ebe3e68fa7e4240e86a4b..1c5d7ae9b99797f5a08999e9885c4c0eeb257eaf 100644
--- a/indra/newview/llfolderview.cpp
+++ b/indra/newview/llfolderview.cpp
@@ -357,6 +357,16 @@ void LLFolderView::openFolder(const std::string& foldername)
 	}
 }
 
+void LLFolderView::openTopLevelFolders()
+{
+	for (folders_t::iterator iter = mFolders.begin();
+		 iter != mFolders.end();)
+	{
+		folders_t::iterator fit = iter++;
+		(*fit)->setOpen(TRUE);
+	}
+}
+
 void LLFolderView::setOpenArrangeRecursively(BOOL openitem, ERecurseType recurse)
 {
 	// call base class to do proper recursion
diff --git a/indra/newview/llfolderview.h b/indra/newview/llfolderview.h
index 4adf6c2fbf90ef38335d46eebc1f445a7d9dc0b0..d18ba385d82d6caf88e95f33e1bb966dd26a5b32 100644
--- a/indra/newview/llfolderview.h
+++ b/indra/newview/llfolderview.h
@@ -127,6 +127,7 @@ class LLFolderView : public LLFolderViewFolder, public LLEditMenuHandler
 	// Close all folders in the view
 	void closeAllFolders();
 	void openFolder(const std::string& foldername);
+	void openTopLevelFolders();
 
 	virtual void toggleOpen() {};
 	virtual void setOpenArrangeRecursively(BOOL openitem, ERecurseType recurse);
diff --git a/indra/newview/llinventorypanel.h b/indra/newview/llinventorypanel.h
index cbbd433c1dbf4cc4623f9a112bb49182bf0eb865..4f7f0a79f64a919d7ce60088cc24fdc68c5cb7b4 100644
--- a/indra/newview/llinventorypanel.h
+++ b/indra/newview/llinventorypanel.h
@@ -192,6 +192,7 @@ class LLInventoryPanel : public LLPanel
 public:
 	BOOL 				getIsViewsInitialized() const { return mViewsInitialized; }
 	const LLUUID&		getStartFolderID() const { return mStartFolderID; }
+	const std::string&  getStartFolderString() { return mStartFolderString; }
 protected:
 	// Builds the UI.  Call this once the inventory is usable.
 	void 				initializeViews();
diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp
index 975219458f01dce8804170acac014b400116ca2f..c85fab20921006a01ab0854f84034fcfe2ae38e0 100644
--- a/indra/newview/llpanellandmarks.cpp
+++ b/indra/newview/llpanellandmarks.cpp
@@ -389,10 +389,6 @@ void LLLandmarksPanel::initLandmarksPanel(LLInventorySubTreePanel* inventory_lis
 	}
 
 	root_folder->setParentLandmarksPanel(this);
-
-	// save initial folder state to avoid incorrect work while switching between Landmarks & Teleport History tabs
-	// See EXT-1609.
-	inventory_list->saveFolderState();
 }
 
 void LLLandmarksPanel::initAccordion(const std::string& accordion_tab_name, LLInventorySubTreePanel* inventory_list)
@@ -995,12 +991,13 @@ void LLLandmarksPanel::doCreatePick(LLLandmark* landmark)
 //////////////////////////////////////////////////////////////////////////
 static void filter_list(LLInventorySubTreePanel* inventory_list, const std::string& string)
 {
+	// Open the immediate children of the root folder, since those
+	// are invisible in the UI and thus must always be open.
+	inventory_list->getRootFolder()->openTopLevelFolders();
+
 	if (string == "")
 	{
 		inventory_list->setFilterSubString(LLStringUtil::null);
-
-		// re-open folders that were initially open
-		inventory_list->restoreFolderState();
 	}
 
 	if (inventory_list->getFilterSubString().empty() && string.empty())
@@ -1009,13 +1006,8 @@ static void filter_list(LLInventorySubTreePanel* inventory_list, const std::stri
 		return;
 	}
 
-	// save current folder open state if no filter currently applied
-	if (inventory_list->getRootFolder()->getFilterSubString().empty())
-	{
-		inventory_list->saveFolderState();
-	}
-
-	// set new filter string
+	// Set new filter string
 	inventory_list->setFilterSubString(string);
+
 }
 // EOF