diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index 4a82cb5eac516a90c01257254a678309e98039b8..521eefe58355ad25bc4d7682ba19bb0b15fe0802 100755
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -203,7 +203,6 @@ const std::string& LLInvFVBridge::getDisplayName() const
 	{
 		buildDisplayName();
 	}
-
 	return mDisplayName;
 }
 
@@ -4292,6 +4291,14 @@ void LLFolderBridge::modifyOutfit(BOOL append)
 // +=================================================+
 
 // LLMarketplaceFolderBridge is a specialized LLFolderBridge for use in Marketplace Inventory panels
+LLMarketplaceFolderBridge::LLMarketplaceFolderBridge(LLInventoryPanel* inventory,
+                          LLFolderView* root,
+                          const LLUUID& uuid) :
+LLFolderBridge(inventory, root, uuid)
+{
+    m_depth = depth_nesting_in_marketplace(mUUID);
+    m_stockCountCache = COMPUTE_STOCK_NOT_EVALUATED;
+}
 
 LLUIImagePtr LLMarketplaceFolderBridge::getIcon() const
 {
@@ -4306,8 +4313,12 @@ LLUIImagePtr LLMarketplaceFolderBridge::getIconOpen() const
 LLUIImagePtr LLMarketplaceFolderBridge::getMarketplaceFolderIcon(BOOL is_open) const
 {
 	LLFolderType::EType preferred_type = getPreferredType();
-    S32 depth = depth_nesting_in_marketplace(mUUID);
-    if ((preferred_type == LLFolderType::FT_NONE) && (depth == 2))
+    if (!LLMarketplaceData::instance().isUpdating(getUUID()))
+    {
+        // Skip computation (expensive) if we're waiting for updates. Use the old value in that case.
+        m_depth = depth_nesting_in_marketplace(mUUID);
+    }
+    if ((preferred_type == LLFolderType::FT_NONE) && (m_depth == 2))
     {
         // We override the type when in the marketplace listings folder and only for version folder
         preferred_type = LLFolderType::FT_MARKETPLACE_VERSION;
@@ -4345,12 +4356,16 @@ std::string LLMarketplaceFolderBridge::getLabelSuffix() const
         suffix += " (" +  LLTrans::getString("MarketplaceActive") + ")";
     }
     // Add stock amount
-    S32 stock_count = compute_stock_count(getUUID());
-    if (stock_count == 0)
+    if (!LLMarketplaceData::instance().isUpdating(getUUID()))
+    {
+        // Skip computation (expensive) if we're waiting for update anyway. Use the old value in that case.
+        m_stockCountCache = compute_stock_count(getUUID());
+    }
+    if (m_stockCountCache == 0)
     {
         suffix += " (" +  LLTrans::getString("MarketplaceNoStock") + ")";
     }
-    else if (stock_count != COMPUTE_STOCK_INFINITE)
+    else if (m_stockCountCache != COMPUTE_STOCK_INFINITE)
     {
         if (getPreferredType() == LLFolderType::FT_MARKETPLACE_STOCK)
         {
@@ -4360,13 +4375,13 @@ std::string LLMarketplaceFolderBridge::getLabelSuffix() const
         {
             suffix += " (" +  LLTrans::getString("MarketplaceMax");
         }
-        if (stock_count == COMPUTE_STOCK_NOT_EVALUATED)
+        if (m_stockCountCache == COMPUTE_STOCK_NOT_EVALUATED)
         {
             suffix += "=" + LLTrans::getString("MarketplaceUpdating") + ")";
         }
         else
         {
-            suffix +=  "=" + llformat("%d", stock_count) + ")";
+            suffix +=  "=" + llformat("%d", m_stockCountCache) + ")";
         }
     }
     // Add updating suffix
diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h
index 6d027ae1156d6e28ac61124f77e07814469d19cc..26f8dd37b4c5facd690d6b88d0f1659984e13906 100755
--- a/indra/newview/llinventorybridge.h
+++ b/indra/newview/llinventorybridge.h
@@ -697,8 +697,7 @@ class LLMarketplaceFolderBridge : public LLFolderBridge
     // Overloads some display related methods specific to folders in a marketplace floater context
 	LLMarketplaceFolderBridge(LLInventoryPanel* inventory,
 							  LLFolderView* root,
-							  const LLUUID& uuid) :
-    LLFolderBridge(inventory, root, uuid) { }
+                              const LLUUID& uuid);
     
 	virtual LLUIImagePtr getIcon() const;
 	virtual LLUIImagePtr getIconOpen() const;
@@ -707,6 +706,9 @@ class LLMarketplaceFolderBridge : public LLFolderBridge
     
 private:
     LLUIImagePtr getMarketplaceFolderIcon(BOOL is_open) const;
+    // Those members are mutable because they are cached variablse to speed up display, not a state variables
+    mutable S32 m_depth;
+    mutable S32 m_stockCountCache;
 };
 
 
diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp
index 4feb697af90cdbdcdd21da76fd6a6c10daddb67d..e245fd2d59a989ae10d54851d3d53add310306ff 100755
--- a/indra/newview/llinventoryfunctions.cpp
+++ b/indra/newview/llinventoryfunctions.cpp
@@ -2576,6 +2576,7 @@ void LLInventoryAction::buildMarketplaceFolders(LLFolderView* root)
     // containing folder will need to be updated as well as their initially containing folder. For
     // instance, moving a stock folder from a listed folder to another will require an update of the
     // target listing *and* the original listing. So we need to keep track of both.
+    // Note: do not however put the marketplace listings root itself in this list or the whole marketplace data will be rebuilt.
     sMarketplaceFolders.clear();
     const LLUUID &marketplacelistings_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_MARKETPLACE_LISTINGS, false);
     std::set<LLFolderViewItem*> selected_items = root->getSelectionList();
@@ -2586,8 +2587,16 @@ void LLInventoryAction::buildMarketplaceFolders(LLFolderView* root)
         viewModel = dynamic_cast<LLFolderViewModelItemInventory *>((*set_iter)->getViewModelItem());
         if (viewModel && gInventory.isObjectDescendentOf(viewModel->getInventoryObject()->getParentUUID(), marketplacelistings_id))
         {
-            sMarketplaceFolders.push_back(viewModel->getInventoryObject()->getParentUUID());
-            sMarketplaceFolders.push_back(viewModel->getInventoryObject()->getUUID());
+            const LLUUID &parent_id = viewModel->getInventoryObject()->getParentUUID();
+            if (parent_id != marketplacelistings_id)
+            {
+                sMarketplaceFolders.push_back(parent_id);
+            }
+            const LLUUID &curr_id = viewModel->getInventoryObject()->getUUID();
+            if (curr_id != marketplacelistings_id)
+            {
+                sMarketplaceFolders.push_back(curr_id);
+            }
         }
     }
     // Suppress dupes in the list so we won't update listings twice