diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp
index 6bc89cdbca3050c8c250b9856112227267299ed0..10677db094377c1c49c76f2acdc1da0f0653eb63 100644
--- a/indra/newview/llfolderview.cpp
+++ b/indra/newview/llfolderview.cpp
@@ -27,25 +27,18 @@
 #include "llviewerprecompiledheaders.h"
 
 #include "llfolderview.h"
-
+#include "llfolderviewmodel.h"
 #include "llclipboard.h" // *TODO: remove this once hack below gone.
 #include "llkeyboard.h"
 #include "lllineeditor.h"
 #include "llmenugl.h"
 #include "llpanel.h"
 #include "llscrollcontainer.h" // hack to allow scrolling
+#include "lltextbox.h"
 #include "lltrans.h"
 #include "llui.h"
 #include "lluictrlfactory.h"
 
-// TODO RN: kill these
-// newview includes
-#include "llcallbacklist.h"			// per-frame on-idle
-#include "llfloaterproperties.h"	// showProperties
-#include "llviewerwindow.h"			// renamer popup handling
-#include "llpreview.h"				// openSelectedItems
-#include "llinventorypanel.h"		// idle loop for filtering, sort order declarations, etc.
-
 // Linden library includes
 #include "lldbstrings.h"
 #include "llfocusmgr.h"
@@ -172,7 +165,6 @@ LLFolderView::LLFolderView(const Params& p)
 	mNeedsAutoSelect( FALSE ),
 	mAutoSelectOverride(FALSE),
 	mNeedsAutoRename(FALSE),
-	mSortOrder(LLInventoryFilter::SO_FOLDERS_BY_NAME),	// This gets overridden by a pref immediately
 	mShowSelectionContext(FALSE),
 	mShowSingleSelection(FALSE),
 	mArrangeGeneration(0),
@@ -199,7 +191,6 @@ LLFolderView::LLFolderView(const Params& p)
 	mAutoOpenTimer.stop();
 	mKeyboardSelection = FALSE;
 	mIndentation = p.folder_indentation;
-	gIdleCallbacks.addFunction(idle, this);
 
 	//clear label
 	// go ahead and render root folder as usual
@@ -269,7 +260,6 @@ LLFolderView::~LLFolderView( void )
 	mStatusTextBox = NULL;
 
 	mAutoOpenItems.removeAllNodes();
-	gIdleCallbacks.deleteFunction(idle, this);
 
 	if (mPopupMenuHandle.get()) mPopupMenuHandle.get()->die();
 
@@ -291,16 +281,16 @@ BOOL LLFolderView::addFolder( LLFolderViewFolder* folder)
 {
 	LLFolderViewFolder::addFolder(folder);
 
-	mFolders.remove(folder);
-	// enforce sort order of My Inventory followed by Library
-	if (((LLFolderViewModelItemInventory*)folder->getViewModelItem())->getUUID() == gInventory.getLibraryRootFolderID())
-	{
-		mFolders.push_back(folder);
-	}
-	else
-	{
-		mFolders.insert(mFolders.begin(), folder);
-	}
+	// TODO RN: enforce sort order of My Inventory followed by Library
+	//mFolders.remove(folder);
+	//if (((LLFolderViewModelItemInventory*)folder->getViewModelItem())->getUUID() == gInventory.getLibraryRootFolderID())
+	//{
+	//	mFolders.push_back(folder);
+	//}
+	//else
+	//{
+	//	mFolders.insert(mFolders.begin(), folder);
+	//}
 
 	return TRUE;
 }
@@ -754,7 +744,7 @@ void LLFolderView::closeRenamer( void )
 	if (mRenamer && mRenamer->getVisible())
 	{
 		// Triggers onRenamerLost() that actually closes the renamer.
-		gViewerWindow->removePopup(mRenamer);
+		LLUI::removePopup(mRenamer);
 	}
 }
 
@@ -785,24 +775,6 @@ bool isDescendantOfASelectedItem(LLFolderViewItem* item, const std::vector<LLFol
 	return false;
 }
 
-// static
-void LLFolderView::removeCutItems()
-{
-	// There's no item in "cut" mode on the clipboard -> exit
-	if (!LLClipboard::instance().isCutMode())
-		return;
-
-	// Get the list of clipboard item uuids and iterate through them
-	LLDynamicArray<LLUUID> objects;
-	LLClipboard::instance().pasteFromClipboard(objects);
-	for (LLDynamicArray<LLUUID>::const_iterator iter = objects.begin();
-		 iter != objects.end();
-		 ++iter)
-	{
-		gInventory.removeObject(*iter);
-	}
-}
-
 void LLFolderView::removeSelectedItems()
 {
 	if(getVisible() && getEnabled())
@@ -1126,9 +1098,9 @@ void LLFolderView::cut()
 			if(listener)
 			{
 				listener->cutToClipboard();
+				listener->removeItem();
 			}
 		}
-		LLFolderView::removeCutItems();
 	}
 	mSearchString.clear();
 }
@@ -1222,7 +1194,7 @@ void LLFolderView::startRenamingSelectedItem( void )
 		// set focus will fail unless item is visible
 		mRenamer->setFocus( TRUE );
 		mRenamer->setTopLostCallback(boost::bind(&LLFolderView::onRenamerLost, this));
-		gViewerWindow->addPopup(mRenamer);
+		LLUI::addPopup(mRenamer);
 	}
 }
 
@@ -1808,16 +1780,10 @@ static LLFastTimer::DeclareTimer FTM_AUTO_SELECT("Open and Select");
 static LLFastTimer::DeclareTimer FTM_INVENTORY("Inventory");
 
 // Main idle routine
-void LLFolderView::doIdle()
+void LLFolderView::update()
 {
 	// If this is associated with the user's inventory, don't do anything
 	// until that inventory is loaded up.
-	const LLInventoryPanel *inventory_panel = dynamic_cast<LLInventoryPanel*>(mParentPanel);
-	if (inventory_panel && !inventory_panel->getIsViewsInitialized())
-	{
-		return;
-	}
-	
 	LLFastTimer t2(FTM_INVENTORY);
 
 	if (getFolderViewModel()->getFilter()->isModified() && getFolderViewModel()->getFilter()->isNotDefault())
@@ -1859,8 +1825,8 @@ void LLFolderView::doIdle()
 	BOOL filter_finished = getViewModelItem()->passedFilter()
 						&& mViewModel->contentsReady();
 	if (filter_finished 
-		|| gFocusMgr.childHasKeyboardFocus(inventory_panel) 
-		|| gFocusMgr.childHasMouseCapture(inventory_panel))
+		|| gFocusMgr.childHasKeyboardFocus(getParent()) // assume we are inside a scroll container
+		|| gFocusMgr.childHasMouseCapture(getParent()))
 	{
 		// finishing the filter process, giving focus to the folder view, or dragging the scrollbar all stop the auto select process
 		mNeedsAutoSelect = FALSE;
@@ -1919,7 +1885,6 @@ void LLFolderView::doIdle()
 		constraint_rect.setOriginAndSize(0, 0, content_rect.getWidth(), content_rect.getHeight());
 	}
 
-
 	BOOL is_visible = isInVisibleChain();
 
 	if ( is_visible )
@@ -1954,17 +1919,6 @@ void LLFolderView::doIdle()
 	mSignalSelectCallback = FALSE;
 }
 
-
-//static
-void LLFolderView::idle(void* user_data)
-{
-	LLFolderView* self = (LLFolderView*)user_data;
-	if ( self )
-	{	// Do the real idle 
-		self->doIdle();
-	}
-}
-
 void LLFolderView::dumpSelectionInformation()
 {
 	llinfos << "LLFolderView::dumpSelectionInformation()" << llendl;
@@ -1988,7 +1942,7 @@ void LLFolderView::updateRenamerPosition()
 		screenPointToLocal( x, y, &x, &y );
 		mRenamer->setOrigin( x, y );
 
-		LLRect scroller_rect(0, 0, gViewerWindow->getWindowWidthScaled(), 0);
+		LLRect scroller_rect(0, 0, LLUI::getWindowSize().mV[VX], 0);
 		if (mScrollContainer)
 		{
 			scroller_rect = mScrollContainer->getContentWindowRect();
diff --git a/indra/newview/llfolderview.h b/indra/newview/llfolderview.h
index e098119293c645acea331a1bf18b17ec6e536498..78f1d8aff226471f26b9f4eb4347b293dd181432 100644
--- a/indra/newview/llfolderview.h
+++ b/indra/newview/llfolderview.h
@@ -165,7 +165,6 @@ class LLFolderView : public LLFolderViewFolder, public LLEditMenuHandler
 
 	// Deletion functionality
  	void removeSelectedItems();
- 	static void removeCutItems();
 
 	// Open the selected item
 	void openSelectedItems( void );
@@ -223,8 +222,7 @@ class LLFolderView : public LLFolderViewFolder, public LLEditMenuHandler
 	F32  getSelectionFadeElapsedTime() { return mMultiSelectionFadeTimer.getElapsedTimeF32(); }
 	bool getUseEllipses() { return mUseEllipses; }
 
-	void	doIdle();						// Real idle routine
-	static void idle(void* user_data);		// static glue to doIdle()
+	void	update();						// needs to be called periodically (e.g. once per frame)
 
 	BOOL needsAutoSelect() { return mNeedsAutoSelect && !mAutoSelectOverride; }
 	BOOL needsAutoRename() { return mNeedsAutoRename; }
@@ -288,7 +286,6 @@ class LLFolderView : public LLFolderViewFolder, public LLEditMenuHandler
 	bool							mUseLabelSuffix;
 	bool							mShowItemLinkOverlays;
 	
-	U32								mSortOrder;
 	LLDepthStack<LLFolderViewFolder>	mAutoOpenItems;
 	LLFolderViewFolder*				mAutoOpenCandidate;
 	LLFrameTimer					mAutoOpenTimer;
diff --git a/indra/newview/llfolderviewitem.cpp b/indra/newview/llfolderviewitem.cpp
index 3937d4332b165274432d056c770aeb535f5a1fbd..dee3fe72188cd666b4a088e65f7c31df7e7d53d0 100644
--- a/indra/newview/llfolderviewitem.cpp
+++ b/indra/newview/llfolderviewitem.cpp
@@ -1798,16 +1798,6 @@ BOOL LLFolderViewFolder::handleMouseDown( S32 x, S32 y, MASK mask )
 
 BOOL LLFolderViewFolder::handleDoubleClick( S32 x, S32 y, MASK mask )
 {
-	/* Disable outfit double click to wear
-	const LLUUID &cat_uuid = getViewModelItem()->getUUID();
-	const LLViewerInventoryCategory *cat = gInventory.getCategory(cat_uuid);
-	if (cat && cat->getPreferredType() == LLFolderType::FT_OUTFIT)
-	{
-		getViewModelItem()->performAction(NULL, NULL,"replaceoutfit");
-		return TRUE;
-	}
-	*/
-
 	BOOL handled = FALSE;
 	if( isOpen() )
 	{
diff --git a/indra/newview/llfolderviewmodel.cpp b/indra/newview/llfolderviewmodel.cpp
index 92db84156e5507530d292c29d90a506cc23d54c2..ca6225aca769d5e03d70440520a84134bd07ee46 100644
--- a/indra/newview/llfolderviewmodel.cpp
+++ b/indra/newview/llfolderviewmodel.cpp
@@ -28,7 +28,6 @@
 
 #include "llfolderviewmodel.h"
 #include "lltrans.h"
-#include "llviewercontrol.h"
 
 bool LLFolderViewModelCommon::needsSort(LLFolderViewModelItem* item)
 {
@@ -49,6 +48,6 @@ std::string LLFolderViewModelCommon::getStatusText()
 
 void LLFolderViewModelCommon::filter()
 {
-	getFilter()->setFilterCount(llclamp(gSavedSettings.getS32("FilterItemsPerFrame"), 1, 5000));
+	getFilter()->setFilterCount(llclamp(LLUI::sSettingGroups["config"]->getS32("FilterItemsPerFrame"), 1, 5000));
 	mFolderView->getViewModelItem()->filter(*getFilter());
 }
diff --git a/indra/newview/llfolderviewmodel.h b/indra/newview/llfolderviewmodel.h
index 98b7255137f1db57c806d558ad4fc733510c5734..079409c2a42fa7741f3ab3cb83bf893277fd7016 100644
--- a/indra/newview/llfolderviewmodel.h
+++ b/indra/newview/llfolderviewmodel.h
@@ -27,7 +27,6 @@
 
 #include "llfontgl.h"	// just for StyleFlags enum
 #include "llfolderview.h"
-#include "lltooldraganddrop.h"
 
 // These are grouping of inventory types.
 // Order matters when sorting system folders to the top.
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index 002278601ac6cb5a02ba9007558858bc504b81d2..d17c25d9f31d1d36fa00f795f30e1fd7d50e0789 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -1400,7 +1400,7 @@ void LLItemBridge::performAction(LLInventoryModel* model, std::string action)
 	else if ("cut" == action)
 	{
 		cutToClipboard();
-		LLFolderView::removeCutItems();
+		gInventory.removeObject(mUUID);
 		return;
 	}
 	else if ("copy" == action)
@@ -1680,14 +1680,12 @@ BOOL LLItemBridge::renameItem(const std::string& new_name)
 	return FALSE;
 }
 
-
 BOOL LLItemBridge::removeItem()
 {
 	if(!isItemRemovable())
 	{
 		return FALSE;
 	}
-
 	
 	// move it to the trash
 	LLPreview::hide(mUUID, TRUE);
@@ -2870,7 +2868,7 @@ void LLFolderBridge::performAction(LLInventoryModel* model, std::string action)
 	else if ("cut" == action)
 	{
 		cutToClipboard();
-		LLFolderView::removeCutItems();
+		gInventory.removeObject(mUUID);
 		return;
 	}
 	else if ("copy" == action)
diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp
index c1ffe8918455359865823127b5d48e5352b6947a..fed98931582f08b143f18ac0e1f28214736aaa0f 100644
--- a/indra/newview/llinventorypanel.cpp
+++ b/indra/newview/llinventorypanel.cpp
@@ -258,6 +258,8 @@ void LLInventoryPanel::initFromParams(const LLInventoryPanel::Params& params)
 
 LLInventoryPanel::~LLInventoryPanel()
 {
+	gIdleCallbacks.deleteFunction(idle, this);
+
 	U32 sort_order = getFolderViewModel()->getSorter().getSortOrder();
 	if (mSortOrderSetting != INHERIT_SORT_ORDER)
 	{
@@ -566,12 +568,21 @@ void LLInventoryPanel::onIdle(void *userdata)
 	}
 }
 
+void LLInventoryPanel::idle(void* user_data)
+{
+	LLInventoryPanel* panel = (LLInventoryPanel*)user_data;
+	panel->mFolderRoot->doIdle();
+}
+
+
 void LLInventoryPanel::initializeViews()
 {
 	if (!gInventory.isInventoryUsable()) return;
 
 	rebuildViewsFor(gInventory.getRootFolderID());
 
+	gIdleCallbacks.addFunction(idle, this);
+
 	mViewsInitialized = true;
 	
 	openStartFolderOrMyInventory();
diff --git a/indra/newview/llinventorypanel.h b/indra/newview/llinventorypanel.h
index 1061f125759111e9fc6877b558fe6185fa8a688c..465ccdd582c49a41c6344ead6fb1e6a904432f1d 100644
--- a/indra/newview/llinventorypanel.h
+++ b/indra/newview/llinventorypanel.h
@@ -45,82 +45,6 @@ class LLInventoryFVBridgeBuilder;
 class LLInvPanelComplObserver;
 class LLFolderViewModelInventory;
 
-class LLFolderViewModelItemInventory
-	:	public LLFolderViewModelItemCommon
-{
-public:
-	LLFolderViewModelItemInventory()
-	:	mRootViewModel(NULL)
-	{}
-	void setRootViewModel(LLFolderViewModelInventory* root_view_model)
-	{
-		mRootViewModel = root_view_model;
-	}
-	virtual const LLUUID& getUUID() const = 0;
-	virtual time_t getCreationDate() const = 0;	// UTC seconds
-	virtual void setCreationDate(time_t creation_date_utc) = 0;
-	virtual PermissionMask getPermissionMask() const = 0;
-	virtual LLFolderType::EType getPreferredType() const = 0;
-	virtual void showProperties(void) = 0;
-	virtual BOOL isItemInTrash( void) const { return FALSE; } // TODO: make   into pure virtual.
-	virtual BOOL isUpToDate() const = 0;
-	virtual bool hasChildren() const = 0;
-	virtual LLInventoryType::EType getInventoryType() const = 0;
-	virtual void performAction(LLInventoryModel* model, std::string action)   = 0;
-	virtual LLWearableType::EType getWearableType() const = 0;
-	virtual EInventorySortGroup getSortGroup() const = 0;
-	virtual LLInventoryObject* getInventoryObject() const = 0;
-	virtual void requestSort();
-	virtual bool potentiallyVisible();
-	virtual bool passedFilter(S32 filter_generation = -1);
-	virtual bool descendantsPassedFilter(S32 filter_generation = -1);
-	virtual void setPassedFilter(bool filtered, bool filtered_folder, S32 filter_generation);
-	virtual bool filter( LLFolderViewFilter& filter);
-	virtual bool filterChildItem( LLFolderViewModelItem* item, LLFolderViewFilter& filter);
-protected:
-	LLFolderViewModelInventory* mRootViewModel;
-};
-
-class LLInventorySort
-{
-public:
-	LLInventorySort(U32 order = 0)
-	:	mSortOrder(order),
-		mByDate(false),
-		mSystemToTop(false),
-		mFoldersByName(false)
-	{
-		mByDate = (order & LLInventoryFilter::SO_DATE);
-		mSystemToTop = (order & LLInventoryFilter::SO_SYSTEM_FOLDERS_TO_TOP);
-		mFoldersByName = (order & LLInventoryFilter::SO_FOLDERS_BY_NAME);
-	}
-
-	bool isByDate() const { return mByDate; }
-	U32 getSortOrder() const { return mSortOrder; }
-
-	bool operator()(const LLFolderViewModelItemInventory* const& a, const LLFolderViewModelItemInventory* const& b) const;
-private:
-	U32  mSortOrder;
-	bool mByDate;
-	bool mSystemToTop;
-	bool mFoldersByName;
-};
-
-class LLFolderViewModelInventory
-	:	public LLFolderViewModel<LLInventorySort,   LLFolderViewModelItemInventory, LLFolderViewModelItemInventory,   LLInventoryFilter>
-{
-public:
-	typedef LLFolderViewModel<LLInventorySort,   LLFolderViewModelItemInventory, LLFolderViewModelItemInventory,   LLInventoryFilter> base_t;
-
-	virtual ~LLFolderViewModelInventory() {}
-
-	void sort(LLFolderViewFolder* folder);
-
-	bool contentsReady();
-
-};
-
-
 class LLInventoryPanel : public LLPanel
 {
 	//--------------------------------------------------------------------
@@ -232,7 +156,8 @@ class LLInventoryPanel : public LLPanel
 	void doCreate(const LLSD& userdata);
 	bool beginIMSession();
 	bool attachObject(const LLSD& userdata);
-	
+	static void idle(void* user_data);
+
 	// DEBUG ONLY:
 	static void dumpSelectionInformation(void* user_data);