diff --git a/indra/llcommon/llallocator_heap_profile.cpp b/indra/llcommon/llallocator_heap_profile.cpp
index 6dd399e1e3565acb2803673ed77caa4ac389396c..c6d9542b428238848bbb8f94157c31b8621ff1f9 100644
--- a/indra/llcommon/llallocator_heap_profile.cpp
+++ b/indra/llcommon/llallocator_heap_profile.cpp
@@ -130,7 +130,6 @@ void LLAllocatorHeapProfile::parse(std::string const & prof_text)
 
 void LLAllocatorHeapProfile::dump(std::ostream & out) const
 {
-    lines_t::const_iterator i;
 	for (const LLAllocatorHeapProfile::line& line : mLines)
     {
         out << line.mLiveCount << ": " << line.mLiveSize << '[' << line.mTotalCount << ": " << line.mTotalSize << "] @";
diff --git a/indra/llui/llfolderview.cpp b/indra/llui/llfolderview.cpp
index ea2ca68e47a7968f33c37da46bd767b335a4c2d2..5391222b67d4ddf669c9d412714a1ddf5570d153 100644
--- a/indra/llui/llfolderview.cpp
+++ b/indra/llui/llfolderview.cpp
@@ -1646,7 +1646,8 @@ void LLFolderView::update()
     
 	// Clear the modified setting on the filter only if the filter finished after running the filter process
 	// Note: if the filter count has timed out, that means the filter halted before completing the entire set of items
-    if (filter_object.isModified() && (!filter_object.isTimedOut()))
+    bool filter_modified = filter_object.isModified();
+    if (filter_modified && (!filter_object.isTimedOut()))
 	{
 		filter_object.clearModified();
 	}
@@ -1680,7 +1681,7 @@ void LLFolderView::update()
 	BOOL filter_finished = mViewModel->contentsReady()
 							&& (getViewModelItem()->passedFilter()
 								|| ( getViewModelItem()->getLastFilterGeneration() >= filter_object.getFirstSuccessGeneration()
-									&& !filter_object.isModified()));
+									&& !filter_modified));
 	if (filter_finished 
 		|| gFocusMgr.childHasKeyboardFocus(mParentPanel.get())
 		|| gFocusMgr.childHasMouseCapture(mParentPanel.get()))
@@ -1768,13 +1769,26 @@ void LLFolderView::update()
 
 	if (mSelectedItems.size() && mNeedsScroll)
 	{
-		scrollToShowItem(mSelectedItems.back(), constraint_rect);
+        LLFolderViewItem* scroll_to_item = mSelectedItems.back();
+		scrollToShowItem(scroll_to_item, constraint_rect);
 		// continue scrolling until animated layout change is done
-		if (filter_finished
-			&& (!needsArrange() || !is_visible))
-		{
-			mNeedsScroll = FALSE;
-		}
+        bool selected_filter_finished = true;
+        if (scroll_to_item && scroll_to_item->getViewModelItem())
+        {
+            selected_filter_finished = scroll_to_item->getViewModelItem()->getLastFilterGeneration() >= filter_object.getFirstSuccessGeneration();
+        }
+        if (filter_finished && selected_filter_finished)
+        {
+            bool needs_arrange = needsArrange();
+            if (mParentFolder)
+            {
+                needs_arrange |= (bool)mParentFolder->needsArrange();
+            }
+            if (!needs_arrange || !is_visible)
+            {
+                mNeedsScroll = FALSE;
+            }
+        }
 	}
 
 	if (mSignalSelectCallback)
diff --git a/indra/llui/llfolderviewitem.h b/indra/llui/llfolderviewitem.h
index ee20d048fdbd99a592e09190ad2f3d72e42611c0..a5157266c5b133a13d02bfb60234e9954da590f6 100644
--- a/indra/llui/llfolderviewitem.h
+++ b/indra/llui/llfolderviewitem.h
@@ -335,7 +335,6 @@ class LLFolderViewFolder : public LLFolderViewItem
 	F32			mAutoOpenCountdown;
 	S32			mLastArrangeGeneration;
 	S32			mLastCalculatedWidth;
-	bool		mNeedsSort;
 	bool		mIsFolderComplete; // indicates that some children were not loaded/added yet
 	bool		mAreChildrenInited; // indicates that no children were initialized
 
diff --git a/indra/newview/lleventpoll.cpp b/indra/newview/lleventpoll.cpp
index 6f3f6e9166b14369cb717b19e25d599c191745d7..26782e53f0d0466424f2dbd4eb54dd31042d3557 100644
--- a/indra/newview/lleventpoll.cpp
+++ b/indra/newview/lleventpoll.cpp
@@ -247,8 +247,9 @@ namespace Details
             errorCount = 0;
 
             if (!result.isMap() ||
-                !result.get("events") ||
-                !result.get("id"))
+                !result.has("events") ||
+                !result["events"].isArray() ||
+                !result.has("id"))
             {
                 LL_WARNS("LLEventPollImpl") << " <" << counter << "> received event poll with no events or id key: " << result << LL_ENDL;
                 continue;
diff --git a/indra/newview/llfolderviewmodelinventory.cpp b/indra/newview/llfolderviewmodelinventory.cpp
index b6d856e31ba3b3655c802ce71a9bc78dfa1b615c..241aa96bc83ba3d977ecec627194a0943b031d40 100644
--- a/indra/newview/llfolderviewmodelinventory.cpp
+++ b/indra/newview/llfolderviewmodelinventory.cpp
@@ -182,11 +182,15 @@ void LLFolderViewModelItemInventory::setPassedFilter(bool passed, S32 filter_gen
 	bool generation_skip = mMarkedDirtyGeneration >= 0
 		&& mPrevPassedAllFilters
 		&& mMarkedDirtyGeneration < mRootViewModel.getFilter().getFirstSuccessGeneration();
+    S32 last_generation = mLastFilterGeneration;
 	LLFolderViewModelItemCommon::setPassedFilter(passed, filter_generation, string_offset, string_size);
 	bool before = mPrevPassedAllFilters;
 	mPrevPassedAllFilters = passedFilter(filter_generation);
 
-	if (before != mPrevPassedAllFilters || generation_skip)
+	if (before != mPrevPassedAllFilters // Change of state
+        || generation_skip // Was marked dirty
+        // Potential change from being in-progress and invisible to visible)
+        || (mPrevPassedAllFilters && last_generation < mRootViewModel.getFilter().getFirstRequiredGeneration()))
 	{
 		// Need to rearrange the folder if the filtered state of the item changed,
 		// previously passed item skipped filter generation changes while being dirty
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 1dd5c5cbe57ee54cd9efd4063b5a14ca485d4e2c..10293a90c85f266bdefaef6a89ff429ecb3ce64e 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -324,6 +324,8 @@ void set_flags_and_update_appearance()
 {
 	LLAppearanceMgr::instance().setAttachmentInvLinkEnable(true);
 	LLAppearanceMgr::instance().updateAppearanceFromCOF(true, true, no_op);
+
+    LLInventoryModelBackgroundFetch::instance().start();
 }
 
 // Returns false to skip other idle processing. Should only return