diff --git a/indra/llui/llfolderviewitem.cpp b/indra/llui/llfolderviewitem.cpp
index 0093f4c17cbec4490b4a2dbced9b9b8ffafd5887..38a1a9a1ab74bcff6da0d5095f229837c3fc381a 100644
--- a/indra/llui/llfolderviewitem.cpp
+++ b/indra/llui/llfolderviewitem.cpp
@@ -32,6 +32,7 @@
 #include "llfolderview.h"
 #include "llfolderviewmodel.h"
 #include "llpanel.h"
+#include "llcallbacklist.h"
 #include "llcriticaldamp.h"
 #include "llclipboard.h"
 #include "llfocusmgr.h"		// gFocusMgr
@@ -1844,7 +1845,12 @@ void LLFolderViewFolder::setOpen(BOOL openitem)
 {
     if(mSingleFolderMode)
     {
-        getViewModelItem()->navigateToFolder();
+        // navigateToFolder can destroy this view
+        // delay it in case setOpen was called from click or key processing
+        doOnIdleOneTime([this]()
+                        {
+                            getViewModelItem()->navigateToFolder();
+                        });
     }
     else
     {
@@ -2074,7 +2080,19 @@ BOOL LLFolderViewFolder::handleDoubleClick( S32 x, S32 y, MASK mask )
     if(mSingleFolderMode)
     {
         static LLUICachedControl<bool> double_click_new_window("SingleModeDoubleClickOpenWindow", false);
-        getViewModelItem()->navigateToFolder(double_click_new_window);
+        if (double_click_new_window)
+        {
+            getViewModelItem()->navigateToFolder(true);
+        }
+        else
+        {
+            // navigating is going to destroy views and change children
+            // delay it untill handleDoubleClick processing is complete
+            doOnIdleOneTime([this]()
+                            {
+                                getViewModelItem()->navigateToFolder(false);
+                            });
+        }
         return TRUE;
     }
 
diff --git a/indra/newview/llinventorygallery.cpp b/indra/newview/llinventorygallery.cpp
index 0801b71e34b2249ab4929d36fb8694e183cfb716..eb603f0ac3919e16f0d85e5d0ff737a34d710f39 100644
--- a/indra/newview/llinventorygallery.cpp
+++ b/indra/newview/llinventorygallery.cpp
@@ -2449,7 +2449,19 @@ BOOL LLInventoryGalleryItem::handleDoubleClick(S32 x, S32 y, MASK mask)
 {
     if (mIsFolder && mGallery)
     {
-        mGallery->setRootFolder(mUUID);
+        // setRootFolder can destroy this item.
+        // Delay it until handleDoubleClick processing is complete
+        // or make gallery handle doubleclicks.
+        LLHandle<LLPanel> handle = mGallery->getHandle();
+        LLUUID navigate_to = mUUID;
+        doOnIdleOneTime([handle, navigate_to]()
+                        {
+                            LLInventoryGallery* gallery = (LLInventoryGallery*)handle.get();
+                            if (gallery)
+                            {
+                                gallery->setRootFolder(navigate_to);
+                            }
+                        });
     }
     else
     {