diff --git a/.hgtags b/.hgtags
index dbddc4905e9a27f6d17a357ac4b664e3b364f4b4..40d37d5b8f92d7e3683de2e0e983662347a3741f 100644
--- a/.hgtags
+++ b/.hgtags
@@ -354,3 +354,4 @@ a8b3eca451a9eaab59987efb0ab1c4217e3f2dcc DRTVWR-182
 81f6b745ef27f5915fd07f988fdec9944f2bb73e DRTVWR-186
 cc953f00956be52cc64c30637bbeec310eea603f DRTVWR-181
 9ee9387789701d597130f879d9011a4958753862 DRTVWR-189
+421126293dcbde918e0da027ca0ab9deb5b4fbf2 DRTVWR-192
diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp
index 7d047ec67ec25fe045c283d46cb92561ba35a08b..d4080ab3f7f29574a9b517b38426fbd2beceaf7f 100644
--- a/indra/newview/llfolderview.cpp
+++ b/indra/newview/llfolderview.cpp
@@ -2235,14 +2235,9 @@ void LLFolderView::doIdle()
 		arrangeAll();
 	}
 
-	mNeedsAutoSelect = mFilter->hasFilterString() &&
-							!(gFocusMgr.childHasKeyboardFocus(this) || gFocusMgr.getMouseCapture());
-
-		
-	if (mFilter->isModified() && mFilter->isNotDefault())
-	{
-		mNeedsAutoSelect = TRUE;
-	}
+	BOOL filter_modified_and_active = mFilter->isModified() && mFilter->isNotDefault();
+	mNeedsAutoSelect = filter_modified_and_active &&
+						!(gFocusMgr.childHasKeyboardFocus(this) || gFocusMgr.getMouseCapture());
 	mFilter->clearModified();
 			
 	// filter to determine visibility before arranging
@@ -2254,7 +2249,7 @@ void LLFolderView::doIdle()
 		LLFastTimer t3(FTM_AUTO_SELECT);
 		// select new item only if a filtered item not currently selected
 		LLFolderViewItem* selected_itemp = mSelectedItems.empty() ? NULL : mSelectedItems.back();
-		if (!mAutoSelectOverride && (!selected_itemp || !selected_itemp->potentiallyFiltered()))
+		if (!mAutoSelectOverride && (!selected_itemp || !selected_itemp->potentiallyVisible()))
 		{
 			// these are named variables to get around gcc not binding non-const references to rvalues
 			// and functor application is inherently non-const to allow for stateful functors
@@ -2264,7 +2259,7 @@ void LLFolderView::doIdle()
 
 		// Open filtered folders for folder views with mAutoSelectOverride=TRUE.
 		// Used by LLPlacesFolderView.
-		if (mAutoSelectOverride && !mFilter->getFilterSubString().empty())
+		if (!mFilter->getFilterSubString().empty())
 		{
 			// these are named variables to get around gcc not binding non-const references to rvalues
 			// and functor application is inherently non-const to allow for stateful functors
@@ -2556,6 +2551,25 @@ void LLFolderView::onRenamerLost()
 	}
 }
 
+LLFolderViewItem* LLFolderView::getNextUnselectedItem()
+{
+	LLFolderViewItem* last_item = *mSelectedItems.rbegin();
+	LLFolderViewItem* new_selection = last_item->getNextOpenNode(FALSE);
+	while(new_selection && new_selection->isSelected())
+	{
+		new_selection = new_selection->getNextOpenNode(FALSE);
+	}
+	if (!new_selection)
+	{
+		new_selection = last_item->getPreviousOpenNode(FALSE);
+		while (new_selection && (new_selection->isInSelection()))
+		{
+			new_selection = new_selection->getPreviousOpenNode(FALSE);
+		}
+	}
+	return new_selection;
+}
+
 LLInventoryFilter* LLFolderView::getFilter()
 {
 	return mFilter;
diff --git a/indra/newview/llfolderview.h b/indra/newview/llfolderview.h
index da8bb15f8ef9397c45efad6f36d346caf8491f4e..3f78312a98553c51091d798b07bf45582630d4bb 100644
--- a/indra/newview/llfolderview.h
+++ b/indra/newview/llfolderview.h
@@ -207,6 +207,8 @@ class LLFolderView : public LLFolderViewFolder, public LLEditMenuHandler
 	virtual void	doDelete();
 	virtual BOOL	canDoDelete() const;
 
+	LLFolderViewItem* getNextUnselectedItem();
+	
 	// Public rename functionality - can only start the process
 	void startRenamingSelectedItem( void );
 
diff --git a/indra/newview/llfolderviewitem.cpp b/indra/newview/llfolderviewitem.cpp
index 515e544452b0bd57df69fd5c1ba40acc33acb287..3aa16b4413453ce5690e5ff39a492ff9cf9ac836 100644
--- a/indra/newview/llfolderviewitem.cpp
+++ b/indra/newview/llfolderviewitem.cpp
@@ -1098,6 +1098,10 @@ void LLFolderViewItem::draw()
 	}
 }
 
+bool LLFolderViewItem::isInSelection() const
+{
+	return mIsSelected || (mParentFolder && mParentFolder->isInSelection());
+}
 
 ///----------------------------------------------------------------------------
 /// Class LLFolderViewFolder
diff --git a/indra/newview/llfolderviewitem.h b/indra/newview/llfolderviewitem.h
index 3c7592046a15dc0d589f586af2e573363503e38f..577b6b54a26a4918f79292d50a6a93431fb1d93a 100644
--- a/indra/newview/llfolderviewitem.h
+++ b/indra/newview/llfolderviewitem.h
@@ -243,6 +243,7 @@ class LLFolderViewItem : public LLView
 	virtual void destroyView();
 
 	BOOL isSelected() const { return mIsSelected; }
+	bool isInSelection() const;
 
 	void setUnselected() { mIsSelected = FALSE; }
 
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index b86c453d617693bced1035bd28af8d9a3c0654ce..b819100b9bbdba0efc8a877396705c5569cc7358 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -1355,7 +1355,10 @@ void LLItemBridge::performAction(LLInventoryModel* model, std::string action)
 	else if ("cut" == action)
 	{
 		cutToClipboard();
+		// MAINT-1197: This is temp code to work around a deselection/reselection bug. Please discard when merging CHUI.
+		LLFolderViewItem* item_to_select = mRoot->getNextUnselectedItem();
 		LLFolderView::removeCutItems();
+		mRoot->setSelection(item_to_select, item_to_select ? item_to_select->isOpen() : false, false);
 		return;
 	}
 	else if ("copy" == action)
@@ -2743,7 +2746,10 @@ void LLFolderBridge::performAction(LLInventoryModel* model, std::string action)
 	else if ("cut" == action)
 	{
 		cutToClipboard();
+		// MAINT-1197: This is temp code to work around a deselection/reselection bug. Please discard when merging CHUI.
+		LLFolderViewItem* item_to_select = mRoot->getNextUnselectedItem();
 		LLFolderView::removeCutItems();
+		mRoot->setSelection(item_to_select, item_to_select ? item_to_select->isOpen() : false, false);
 		return;
 	}
 	else if ("copy" == action)