diff --git a/.hgignore b/.hgignore
index e390f591e576abb75b643a4862d097e1ca33ca68..4d98acf5d974d722bab5b39ecb8d9400a519a8d5 100644
--- a/.hgignore
+++ b/.hgignore
@@ -29,7 +29,6 @@ indra/newview/fmod.dll
 indra/newview/mozilla-theme
 indra/newview/mozilla-universal-darwin.tgz
 indra/newview/res-sdl
-indra/newview/skins
 indra/newview/vivox-runtime
 indra/server-linux-*
 indra/test/linden_file.dat
diff --git a/indra/llui/llconsole.cpp b/indra/llui/llconsole.cpp
index e0053b4cc70ce0a5a64ec4d4eb057c759e1c5ec3..48c76cf105ca61d2d57fbad25589e38a9301858b 100644
--- a/indra/llui/llconsole.cpp
+++ b/indra/llui/llconsole.cpp
@@ -60,6 +60,8 @@ LLConsole* gConsole = NULL;  // Created and destroyed in LLViewerWindow.
 const F32 FADE_DURATION = 2.f;
 const S32 MIN_CONSOLE_WIDTH = 200;
  
+static LLDefaultChildRegistry::Register<LLConsole> r("console");
+
 LLConsole::LLConsole(const LLConsole::Params& p) 
 :	LLUICtrl(p),
 	LLFixedBuffer(p.max_lines),
diff --git a/indra/llui/lllayoutstack.cpp b/indra/llui/lllayoutstack.cpp
index bac54919432a83f44339977e72615f78a907a67e..596b3a3e70adb040bb90c6986c28fa3b515d9ec1 100644
--- a/indra/llui/lllayoutstack.cpp
+++ b/indra/llui/lllayoutstack.cpp
@@ -137,6 +137,7 @@ LLLayoutStack::LLLayoutStack(const LLLayoutStack::Params& p)
 	mPanelSpacing(p.border_size),
 	mOrientation((p.orientation() == "vertical") ? VERTICAL : HORIZONTAL),
 	mAnimate(p.animate),
+	mAnimatedThisFrame(false),
 	mClip(p.clip)
 {}
 
@@ -172,6 +173,7 @@ void LLLayoutStack::draw()
 		// only force drawing invisible children if visible amount is non-zero
 		drawChild(panelp, 0, 0, !clip_rect.isEmpty());
 	}
+	mAnimatedThisFrame = false;
 }
 
 void LLLayoutStack::removeChild(LLView* view)
@@ -411,8 +413,10 @@ void LLLayoutStack::updatePanelAutoResize(const std::string& panel_name, BOOL au
 	}
 }
 
+static LLFastTimer::DeclareTimer FTM_UPDATE_LAYOUT("Update LayoutStacks");
 void LLLayoutStack::updateLayout(BOOL force_resize)
 {
+	LLFastTimer ft(FTM_UPDATE_LAYOUT);
 	static LLUICachedControl<S32> resize_bar_overlap ("UIResizeBarOverlap", 0);
 	calcMinExtents();
 
@@ -431,10 +435,13 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
 		{
 			if (mAnimate)
 			{
-				(*panel_it)->mVisibleAmt = lerp((*panel_it)->mVisibleAmt, 1.f, LLCriticalDamp::getInterpolant(ANIM_OPEN_TIME));
-				if ((*panel_it)->mVisibleAmt > 0.99f)
+				if (!mAnimatedThisFrame)
 				{
-					(*panel_it)->mVisibleAmt = 1.f;
+					(*panel_it)->mVisibleAmt = lerp((*panel_it)->mVisibleAmt, 1.f, LLCriticalDamp::getInterpolant(ANIM_OPEN_TIME));
+					if ((*panel_it)->mVisibleAmt > 0.99f)
+					{
+						(*panel_it)->mVisibleAmt = 1.f;
+					}
 				}
 			}
 			else
@@ -446,10 +453,13 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
 		{
 			if (mAnimate)
 			{
-				(*panel_it)->mVisibleAmt = lerp((*panel_it)->mVisibleAmt, 0.f, LLCriticalDamp::getInterpolant(ANIM_CLOSE_TIME));
-				if ((*panel_it)->mVisibleAmt < 0.001f)
+				if (!mAnimatedThisFrame)
 				{
-					(*panel_it)->mVisibleAmt = 0.f;
+					(*panel_it)->mVisibleAmt = lerp((*panel_it)->mVisibleAmt, 0.f, LLCriticalDamp::getInterpolant(ANIM_CLOSE_TIME));
+					if ((*panel_it)->mVisibleAmt < 0.001f)
+					{
+						(*panel_it)->mVisibleAmt = 0.f;
+					}
 				}
 			}
 			else
@@ -631,10 +641,10 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
 		// adjust running headroom count based on new sizes
 		shrink_headroom_total += delta_size;
 
-		panelp->reshape(new_width, new_height);
-		panelp->setOrigin(cur_x, cur_y - new_height);
+		LLRect panel_rect;
+		panel_rect.setLeftTopAndSize(cur_x, cur_y, new_width, new_height);
+		panelp->setShape(panel_rect);
 
-		LLRect panel_rect = panelp->getRect();
 		LLRect resize_bar_rect = panel_rect;
 		if (mOrientation == HORIZONTAL)
 		{
@@ -705,6 +715,8 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
 		llassert_always(force_resize == FALSE);
 		updateLayout(TRUE);
 	}
+
+	 mAnimatedThisFrame = true;
 } // end LLLayoutStack::updateLayout
 
 
@@ -772,3 +784,16 @@ void LLLayoutStack::calcMinExtents()
 		}
 	}
 }
+
+// update layout stack animations, etc. once per frame
+// NOTE: we use this to size world view based on animating UI, *before* we draw the UI
+// we might still need to call updateLayout during UI draw phase, in case UI elements
+// are resizing themselves dynamically
+//static 
+void LLLayoutStack::idle()
+{
+	for (LLInstanceTracker::instance_iter it = beginInstances(); it != endInstances(); ++it)
+	{
+		(*it)->updateLayout();
+	}
+}
diff --git a/indra/llui/lllayoutstack.h b/indra/llui/lllayoutstack.h
index 9ded48ef6a19c0629aded4bd1878a144a6efe4f8..11d604b7ec7ab6d19d981bbc3f1514839d7aeff3 100644
--- a/indra/llui/lllayoutstack.h
+++ b/indra/llui/lllayoutstack.h
@@ -38,7 +38,7 @@
 
 class LLPanel;
 
-class LLLayoutStack : public LLView
+class LLLayoutStack : public LLView, LLInstanceTracker<LLLayoutStack>
 {
 public:
 	struct Params : public LLInitParam::Block<Params, LLView::Params>
@@ -81,6 +81,10 @@ class LLLayoutStack : public LLView
 	S32 getNumPanels() { return mPanels.size(); }
 
 	void updatePanelAutoResize(const std::string& panel_name, BOOL auto_resize);
+
+
+	static void idle();
+
 protected:
 	LLLayoutStack(const Params&);
 	friend class LLUICtrlFactory;
@@ -105,6 +109,8 @@ class LLLayoutStack : public LLView
 	S32 mMinHeight;  // calculated by calcMinExtents
 	S32 mPanelSpacing;
 
+	// true if we already applied animation this frame
+	bool mAnimatedThisFrame;
 	bool mAnimate;
 	bool mClip;
 }; // end class LLLayoutStack
diff --git a/indra/llui/lluictrlfactory.h b/indra/llui/lluictrlfactory.h
index 17e32dc7a99ba5be6d937c48ba59735bd090f789..0ccd3047f6c84d56fdcb3993a2d7927fbde4f90f 100644
--- a/indra/llui/lluictrlfactory.h
+++ b/indra/llui/lluictrlfactory.h
@@ -188,7 +188,7 @@ class LLUICtrlFactory : public LLSingleton<LLUICtrlFactory>
 		T* widget = new T(params);
 		widget->initFromParams(params);
 		if (parent)
-			widget->setParent(parent);
+			parent->addChild(widget);
 		return widget;
 	}
 
diff --git a/indra/llui/llview.cpp b/indra/llui/llview.cpp
index fe7fd59de80e3a4c32288bfc022bf5ae84d22484..da564befa9bf623f598373b3f3c03f4449e8ff47 100644
--- a/indra/llui/llview.cpp
+++ b/indra/llui/llview.cpp
@@ -1698,8 +1698,11 @@ LLView* LLView::getChildView(const std::string& name, BOOL recurse) const
 	return child;
 }
 
+static LLFastTimer::DeclareTimer FTM_FIND_VIEWS("Find Widgets");
+
 LLView* LLView::findChildView(const std::string& name, BOOL recurse) const
 {
+	LLFastTimer ft(FTM_FIND_VIEWS);
 	//richard: should we allow empty names?
 	//if(name.empty())
 	//	return NULL;
diff --git a/indra/llui/llview.h b/indra/llui/llview.h
index c3b442e0224383803325c76ab3658da33d70892e..2607120e17cbd54ea9d1390694936849e3377625 100644
--- a/indra/llui/llview.h
+++ b/indra/llui/llview.h
@@ -267,9 +267,6 @@ class LLView : public LLMouseHandler, public LLMortician, public LLFocusableElem
 	// remove the specified child from the view, and set it's parent to NULL.
 	virtual void	removeChild(LLView* view);
 
-	// helper function for lluictrlfactory.h create<> template
-	void setParent(LLView* parent) { if (parent) parent->addChild(this); }
-
 	virtual BOOL	postBuild() { return TRUE; }
 
 	child_tab_order_t getCtrlOrder() const		{ return mCtrlOrder; }
diff --git a/indra/newview/llfasttimerview.cpp b/indra/newview/llfasttimerview.cpp
index 2ab17d622005815fadde7d52321d089ffde26ada..71265fdd2f81f011b8018331ef7ce0a0331e5eb8 100644
--- a/indra/newview/llfasttimerview.cpp
+++ b/indra/newview/llfasttimerview.cpp
@@ -256,7 +256,8 @@ BOOL LLFastTimerView::handleToolTip(S32 x, S32 y, MASK mask)
 
 			LLToolTipMgr::instance().show(LLToolTip::Params()
 				.message(mHoverTimer->getToolTip(LLFastTimer::NamedTimer::HISTORY_NUM - mScrollIndex - mHoverBarIndex))
-				.sticky_rect(screen_rect));
+				.sticky_rect(screen_rect)
+				.delay_time(0.f));
 
 			return TRUE;
 		}
diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp
index 347cc3a58e4096621292b2e607cf01780f8f8189..e570072803016deff8f1398ccaed0274d29e4566 100644
--- a/indra/newview/llfloatersnapshot.cpp
+++ b/indra/newview/llfloatersnapshot.cpp
@@ -2044,10 +2044,12 @@ BOOL LLFloaterSnapshot::postBuild()
 	LLSnapshotLivePreview::Params p;
 	p.rect(full_screen_rect);
 	LLSnapshotLivePreview* previewp = new LLSnapshotLivePreview(p);
-	getRootView()->removeChild(gSnapshotFloaterView);
+	LLView* parent_view = gSnapshotFloaterView->getParent();
+	
+	parent_view->removeChild(gSnapshotFloaterView);
 	// make sure preview is below snapshot floater
-	getRootView()->addChild(previewp);
-	getRootView()->addChild(gSnapshotFloaterView);
+	parent_view->addChild(previewp);
+	parent_view->addChild(gSnapshotFloaterView);
 	
 	//move snapshot floater to special purpose snapshotfloaterview
 	gFloaterView->removeChild(this);
diff --git a/indra/newview/llmoveview.cpp b/indra/newview/llmoveview.cpp
index b0520874752bdbfb3521f9a8cb3dd6367719decd..e3ba1b8e4adb3b17a3297a9dc64f17ca691e029a 100644
--- a/indra/newview/llmoveview.cpp
+++ b/indra/newview/llmoveview.cpp
@@ -677,7 +677,7 @@ void LLPanelStandStopFlying::updatePosition()
 	//align centers of a button and a floater
 	S32 x = movement_btn->calcScreenRect().getCenterX() - getRect().getWidth()/2;
 
-	S32 y = tray->getRect().getHeight();
+	S32 y = 0;
 
 	LLFloater *move_floater = LLFloaterReg::findInstance("moveview");
 	if (move_floater)
diff --git a/indra/newview/llnavigationbar.cpp b/indra/newview/llnavigationbar.cpp
index 4f145891ea63777cdc2979aaece6f816aaff23bc..d37236aadf7bf3c19782fee3cef6173e00bd08bb 100644
--- a/indra/newview/llnavigationbar.cpp
+++ b/indra/newview/llnavigationbar.cpp
@@ -587,6 +587,8 @@ void LLNavigationBar::showNavigationPanel(BOOL visible)
 			// this is duplicated in 'else' section because it should be called BEFORE fb->reshape
 			reshape(nbRect.getWidth(), nbRect.getHeight());
 			setRect(nbRect);
+			// propagate size to parent container
+			getParent()->reshape(nbRect.getWidth(), nbRect.getHeight());
 
 			fb->reshape(fbRect.getWidth(), fbRect.getHeight());
 			fb->setRect(fbRect);
@@ -600,6 +602,7 @@ void LLNavigationBar::showNavigationPanel(BOOL visible)
 
 			reshape(nbRect.getWidth(), nbRect.getHeight());
 			setRect(nbRect);
+			getParent()->reshape(nbRect.getWidth(), nbRect.getHeight());
 		}
 	}
 	else
@@ -614,6 +617,7 @@ void LLNavigationBar::showNavigationPanel(BOOL visible)
 			// this is duplicated in 'else' section because it should be called BEFORE fb->reshape
 			reshape(nbRect.getWidth(), nbRect.getHeight());
 			setRect(nbRect);
+			getParent()->reshape(nbRect.getWidth(), nbRect.getHeight());
 
 			fb->reshape(fbRect.getWidth(), fbRect.getHeight());
 			fb->setRect(fbRect);
@@ -626,16 +630,12 @@ void LLNavigationBar::showNavigationPanel(BOOL visible)
 
 			reshape(nbRect.getWidth(), nbRect.getHeight());
 			setRect(nbRect);
+			getParent()->reshape(nbRect.getWidth(), nbRect.getHeight());
 		}
 	}
 
 	childSetVisible("bg_icon", fpVisible);
 	childSetVisible("bg_icon_no_fav", !fpVisible);
-
-	if(LLSideTray::instanceCreated())
-	{
-		LLSideTray::getInstance()->resetPanelRect();
-	}
 }
 
 void LLNavigationBar::showFavoritesPanel(BOOL visible)
@@ -670,6 +670,7 @@ void LLNavigationBar::showFavoritesPanel(BOOL visible)
 
 		reshape(nbRect.getWidth(), nbRect.getHeight());
 		setRect(nbRect);
+		getParent()->reshape(nbRect.getWidth(), nbRect.getHeight());
 
 		fb->reshape(fbRect.getWidth(), fbRect.getHeight());
 		fb->setRect(fbRect);
@@ -694,14 +695,11 @@ void LLNavigationBar::showFavoritesPanel(BOOL visible)
 
 		reshape(nbRect.getWidth(), nbRect.getHeight());
 		setRect(nbRect);
+		getParent()->reshape(nbRect.getWidth(), nbRect.getHeight());
 	}
 
 	childSetVisible("bg_icon", visible);
 	childSetVisible("bg_icon_no_fav", !visible);
 
 	fb->setVisible(visible);
-	if(LLSideTray::instanceCreated())
-	{
-		LLSideTray::getInstance()->resetPanelRect();
-	}
 }
diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp
index 65a7b5322b503e3e6d97a2c73ded18c91d316fdc..e0b0b0f1e20d2371d632e79dca73a576debe7247 100644
--- a/indra/newview/llpanelpeople.cpp
+++ b/indra/newview/llpanelpeople.cpp
@@ -198,7 +198,8 @@ class LLFriendListUpdater : public LLAvatarListUpdater, public LLFriendObserver
 
 	~LLFriendListUpdater()
 	{
-		delete mInvObserver;
+		// will be deleted by ~LLInventoryModel
+		//delete mInvObserver;
 		LLVoiceClient::getInstance()->removeObserver(this);
 		LLAvatarTracker::instance().removeObserver(this);
 	}
diff --git a/indra/newview/llpanelpeoplemenus.cpp b/indra/newview/llpanelpeoplemenus.cpp
index aaf6849fe94128f50226b54307259a3c14adb4c9..7dea5eaf6758539380d33b2aa694c8a98a103f20 100644
--- a/indra/newview/llpanelpeoplemenus.cpp
+++ b/indra/newview/llpanelpeoplemenus.cpp
@@ -64,7 +64,6 @@ void ContextMenu::show(LLView* spawning_view, const std::vector<LLUUID>& uuids,
 		if (parent)
 		{
 			parent->removeChild(mMenu);
-			mMenu->setParent(NULL);
 		}
 		delete mMenu;
 		mMenu = NULL;
diff --git a/indra/newview/llpanelprimmediacontrols.cpp b/indra/newview/llpanelprimmediacontrols.cpp
index 0b2a7e8756bd161f13d6deb9ffcd8b0cc25c540d..f82593822d79bf5171a548aa3532f96797d09f19 100644
--- a/indra/newview/llpanelprimmediacontrols.cpp
+++ b/indra/newview/llpanelprimmediacontrols.cpp
@@ -694,6 +694,7 @@ bool LLPanelPrimMediaControls::isMouseOver()
 		LLView* controls_view = NULL;
 		controls_view = getChild<LLView>("media_controls");
 		
+		//FIXME: rewrite as LLViewQuery or get hover set from LLViewerWindow?
 		if(controls_view && controls_view->getVisible())
 		{
 			controls_view->screenPointToLocal(cursor_pos_gl.mX, cursor_pos_gl.mY, &x, &y);
diff --git a/indra/newview/llpanelteleporthistory.cpp b/indra/newview/llpanelteleporthistory.cpp
index a34f029095b6f2be6297b6aaffe0bbed8884616c..d094f22ae134f985c2f7c396632b78c88ba8fa69 100644
--- a/indra/newview/llpanelteleporthistory.cpp
+++ b/indra/newview/llpanelteleporthistory.cpp
@@ -163,7 +163,6 @@ void LLTeleportHistoryPanel::ContextMenu::show(LLView* spawning_view, S32 index,
 		if (parent)
 		{
 			parent->removeChild(mMenu);
-			mMenu->setParent(NULL);
 		}
 		delete mMenu;
 	}
@@ -645,7 +644,6 @@ void LLTeleportHistoryPanel::onAccordionTabRightClick(LLView *view, S32 x, S32 y
 		if (parent)
 		{
 			parent->removeChild(mAccordionTabMenu);
-			mAccordionTabMenu->setParent(NULL);
 		}
 		delete mAccordionTabMenu;
 	}
diff --git a/indra/newview/llsidetray.cpp b/indra/newview/llsidetray.cpp
index a11ee05532fe8e920607409696d943de7861e618..f0e782d44d82636960b81cc87588d0b2e030ffb7 100644
--- a/indra/newview/llsidetray.cpp
+++ b/indra/newview/llsidetray.cpp
@@ -100,7 +100,7 @@ LLSideTray* LLSideTray::getInstance()
 {
 	if (!sInstance)
 	{
-		sInstance = LLUICtrlFactory::createFromFile<LLSideTray>("panel_side_tray.xml",gViewerWindow->getRootView(), LLRootView::child_registry_t::instance());
+		sInstance = LLUICtrlFactory::createFromFile<LLSideTray>("panel_side_tray.xml",NULL, LLRootView::child_registry_t::instance());
 	}
 
 	return sInstance;
@@ -148,7 +148,6 @@ class LLSideTrayTab: public LLPanel
 	/*virtual*/ bool	addChild	(LLView* view, S32 tab_group);
 	
 	
-	void			arrange		(S32 width, S32 height);
 	void			reshape		(S32 width, S32 height, BOOL called_from_parent = TRUE);
 	
 	static LLSideTrayTab*  createInstance	();
@@ -156,8 +155,6 @@ class LLSideTrayTab: public LLPanel
 	const std::string& getDescription () const { return mDescription;}
 	const std::string& getTabTitle() const { return mTabTitle;}
 	
-	void draw();
-	
 	void			onOpen		(const LLSD& key);
 	
 private:
@@ -209,60 +206,24 @@ BOOL LLSideTrayTab::postBuild()
 
 static const S32 splitter_margin = 1;
 
-//virtual 
-void	LLSideTrayTab::arrange(S32 width, S32 height )
-{
-	if(!mMainPanel)
-		return;
-	
-	S32 offset = 0;
-
-	LLView* title_panel = findChildView(TAB_PANEL_CAPTION_NAME, true);
-
-	if(title_panel)
-	{
-		title_panel->setOrigin( 0, height - title_panel->getRect().getHeight() );
-		offset = title_panel->getRect().getHeight();
-	}
-
-	LLRect sRect = mMainPanel->getRect();
-	sRect.setLeftTopAndSize( splitter_margin, height - offset - splitter_margin, width - 2*splitter_margin, height - offset - 2*splitter_margin);
-	mMainPanel->reshape(sRect.getWidth(),sRect.getHeight());
-	mMainPanel->setRect(sRect);
-	
-
-	
-}
-
 void LLSideTrayTab::reshape		(S32 width, S32 height, BOOL called_from_parent )
 {
-	if(!mMainPanel)
-		return;
-	S32 offset = 0;
-
+	LLPanel::reshape(width, height, called_from_parent);
 	LLView* title_panel = findChildView(TAB_PANEL_CAPTION_NAME, true);
-
-	if(title_panel)
+	if (!title_panel)
 	{
-		title_panel->setOrigin( 0, height - title_panel->getRect().getHeight() );
-		title_panel->reshape(width,title_panel->getRect().getHeight());
-		offset = title_panel->getRect().getHeight();
+		// not fully constructed yet
+		return;
 	}
 
-	
-
-	LLRect sRect = mMainPanel->getRect();
-	sRect.setLeftTopAndSize( splitter_margin, height - offset - splitter_margin, width - 2*splitter_margin, height - offset - 2*splitter_margin);
-	//mMainPanel->setMaxWidth(sRect.getWidth());
-	mMainPanel->reshape(sRect.getWidth(), sRect.getHeight());
-	
-	mMainPanel->setRect(sRect);
-
-}
+	S32 title_height = title_panel->getRect().getHeight();
+	title_panel->setOrigin( 0, height - title_height );
+	title_panel->reshape(width,title_height);
 
-void LLSideTrayTab::draw()
-{
-	LLPanel::draw();
+	LLRect sRect;
+	sRect.setLeftTopAndSize( splitter_margin, height - title_height - splitter_margin, 
+							width - 2*splitter_margin, height - title_height - 2*splitter_margin);
+	mMainPanel->setShape(sRect);
 }
 
 void	LLSideTrayTab::onOpen		(const LLSD& key)
@@ -300,17 +261,20 @@ LLSideTray::LLSideTray(Params& params)
 	    ,mActiveTab(0)
 		,mCollapsed(false)
 		,mCollapseButton(0)
-	    ,mMaxBarWidth(params.rect.width)
 {
 	mCollapsed=params.collapsed;
 
-
 	LLUICtrl::CommitCallbackRegistry::Registrar& commit = LLUICtrl::CommitCallbackRegistry::currentRegistrar();
 
 	// register handler function to process data from the xml. 
 	// panel_name should be specified via "parameter" attribute.
 	commit.add("SideTray.ShowPanel", boost::bind(&LLSideTray::showPanel, this, _2, LLUUID::null));
 	LLTransientFloaterMgr::getInstance()->addControlView(this);
+
+	LLPanel::Params p;
+	p.name = "buttons_panel";
+	p.mouse_opaque = false;
+	mButtonsPanel = LLUICtrlFactory::create<LLPanel>(p);
 }
 
 
@@ -399,7 +363,7 @@ LLButton* LLSideTray::createButton	(const std::string& name,const std::string& i
 	rect.setOriginAndSize(0, 0, sidetray_params.default_button_width, sidetray_params.default_button_height); 
 
 	bparams.name(name);
-	bparams.follows.flags (FOLLOWS_LEFT | FOLLOWS_BOTTOM);
+	bparams.follows.flags (FOLLOWS_LEFT | FOLLOWS_TOP);
 	bparams.rect (rect);
 	bparams.tab_stop(false);
 	bparams.image_unselected.name(sidetray_params.tab_btn_image_normal);
@@ -416,7 +380,7 @@ LLButton* LLSideTray::createButton	(const std::string& name,const std::string& i
 		button->setImageOverlay(image);
 	}
 
-	addChildInBack(button);
+	mButtonsPanel->addChildInBack(button);
 
 	return button;
 }
@@ -500,23 +464,24 @@ void LLSideTray::reflectCollapseChange()
 	}
 	else
 	{
-		gFloaterView->setSnapOffsetRight(mMaxBarWidth);
+		gFloaterView->setSnapOffsetRight(getRect().getWidth());
 		setFocus(TRUE);
 	}
 
 	gFloaterView->refresh();
 }
 
-void LLSideTray::arrange			()
+void LLSideTray::arrange()
 {
 	static LLSideTray::Params sidetray_params(LLUICtrlFactory::getDefaultParams<LLSideTray>());	
 
 	setPanelRect();
 	
 	LLRect ctrl_rect;
-	ctrl_rect.setLeftTopAndSize(0,getRect().getHeight()-sidetray_params.default_button_width
-							,sidetray_params.default_button_width
-							,sidetray_params.default_button_height);
+	ctrl_rect.setLeftTopAndSize(0,
+								mButtonsPanel->getRect().getHeight() - sidetray_params.default_button_width,
+								sidetray_params.default_button_width,
+								sidetray_params.default_button_height);
 
 	mCollapseButton->setRect(ctrl_rect);
 
@@ -528,9 +493,10 @@ void LLSideTray::arrange			()
 	{
 		LLSideTrayTab* sidebar_tab = *child_it;
 		
-		ctrl_rect.setLeftTopAndSize(0,getRect().getHeight()-offset
-								,sidetray_params.default_button_width
-								,sidetray_params.default_button_height);
+		ctrl_rect.setLeftTopAndSize(0,
+									mButtonsPanel->getRect().getHeight()-offset,
+									sidetray_params.default_button_width,
+									sidetray_params.default_button_height);
 
 		if(mTabButtons.find(sidebar_tab->getName()) == mTabButtons.end())
 			continue;
@@ -544,14 +510,11 @@ void LLSideTray::arrange			()
 		btn->setVisible(ctrl_rect.mBottom > 0);
 	}
 
-	ctrl_rect.setLeftTopAndSize(sidetray_params.default_button_width,getRect().getHeight(),mMaxBarWidth,getRect().getHeight());
-
 	//arrange tabs
-	for ( child_it = mTabs.begin(); child_it != mTabs.end(); ++child_it)
+	for ( child_vector_t::iterator child_it = mTabs.begin(); child_it != mTabs.end(); ++child_it)
 	{
 		LLSideTrayTab* sidebar_tab = *child_it;
-		sidebar_tab->setRect(ctrl_rect);
-		sidebar_tab->arrange(mMaxBarWidth,getRect().getHeight());
+		sidebar_tab->setShape(getLocalRect());
 	}
 }
 
@@ -580,7 +543,7 @@ void LLSideTray::collapseSideBar()
 	{
 		mCollapseButton->setImageOverlay( home_tab->mImage );
 	}
-	mActiveTab->setVisible(FALSE);
+	//mActiveTab->setVisible(FALSE);
 	reflectCollapseChange();
 	setFocus( FALSE );
 
@@ -596,7 +559,6 @@ void LLSideTray::expandSideBar()
 	}
 	LLSD key;//empty
 	mActiveTab->onOpen(key);
-	mActiveTab->setVisible(TRUE);
 
 	reflectCollapseChange();
 }
@@ -612,15 +574,6 @@ void LLSideTray::highlightFocused()
 	*/
 }
 
-BOOL	LLSideTray::handleScrollWheel(S32 x, S32 y, S32 mask)
-{
-	BOOL ret = LLPanel::handleScrollWheel(x,y,mask);
-
-	if(!ret && childFromPoint(x,y) != 0 )
-		return TRUE;//mouse wheel over sidetray buttons, eat mouse wheel
-	return ret;
-}
-
 //virtual
 BOOL		LLSideTray::handleMouseDown	(S32 x, S32 y, MASK mask)
 {
@@ -630,58 +583,13 @@ BOOL		LLSideTray::handleMouseDown	(S32 x, S32 y, MASK mask)
 	return ret;
 }
 
-void LLSideTray::reshape			(S32 width, S32 height, BOOL called_from_parent)
+void LLSideTray::reshape(S32 width, S32 height, BOOL called_from_parent)
 {
-	
 	LLPanel::reshape(width, height, called_from_parent);
 	if(!mActiveTab)
 		return;
 	
-	static LLSideTray::Params sidetray_params(LLUICtrlFactory::getDefaultParams<LLSideTray>());	
-
-	setPanelRect();
-
-	LLRect ctrl_rect;
-	ctrl_rect.setLeftTopAndSize(0
-							,getRect().getHeight()-sidetray_params.default_button_width
-							,sidetray_params.default_button_width
-							,sidetray_params.default_button_height);
-	
-	mCollapseButton->setRect(ctrl_rect);
-
-	//arrange tab buttons
-	child_vector_const_iter_t child_it;
-	int offset = (sidetray_params.default_button_height+sidetray_params.default_button_margin)*2;
-	for ( child_it = mTabs.begin(); child_it != mTabs.end(); ++child_it)	
-	{
-		LLSideTrayTab* sidebar_tab = *child_it;
-		
-		ctrl_rect.setLeftTopAndSize(0,getRect().getHeight()-offset
-								,sidetray_params.default_button_width
-								,sidetray_params.default_button_height);
-
-		if(mTabButtons.find(sidebar_tab->getName()) == mTabButtons.end())
-			continue;
-
-		LLButton* btn = mTabButtons[sidebar_tab->getName()];
-
-		btn->setRect(ctrl_rect);
-		offset+=sidetray_params.default_button_height;
-		offset+=sidetray_params.default_button_margin;
-
-		btn->setVisible(ctrl_rect.mBottom > 0);
-	}
-
-	//arrange tabs
-	
-	for ( child_it = mTabs.begin(); child_it != mTabs.end(); ++child_it)
-	{
-		LLSideTrayTab* sidebar_tab = *child_it;
-		sidebar_tab->reshape(mMaxBarWidth,getRect().getHeight());
-		ctrl_rect.setLeftTopAndSize(sidetray_params.default_button_width,getRect().getHeight(),mMaxBarWidth,getRect().getHeight());
-		sidebar_tab->setRect(ctrl_rect);
-		
-	}
+	arrange();
 }
 
 /**
@@ -729,42 +637,12 @@ LLPanel*	LLSideTray::showPanel		(const std::string& panel_name, const LLSD& para
 static const S32	fake_offset = 132;
 static const S32	fake_top_offset = 18;
 
-void LLSideTray::resetPanelRect	()
-{
-	const LLRect& parent_rect = gViewerWindow->getRootView()->getRect();
-
-	static LLSideTray::Params sidetray_params(LLUICtrlFactory::getDefaultParams<LLSideTray>());	
-
-	S32 panel_width = sidetray_params.default_button_width;
-	panel_width += mCollapsed ? 0 : mMaxBarWidth;
-
-	S32 panel_height = parent_rect.getHeight()-fake_top_offset;
-
-	reshape(panel_width,panel_height);
-}
-
 void	LLSideTray::setPanelRect	()
 {
-	LLNavigationBar* nav_bar = LLNavigationBar::getInstance();
-	LLRect nav_rect = nav_bar->getRect();
-	
-	static LLSideTray::Params sidetray_params(LLUICtrlFactory::getDefaultParams<LLSideTray>());	
-
-	const LLRect& parent_rect = gViewerWindow->getRootView()->getRect();
-
-	S32 panel_width = sidetray_params.default_button_width;
-	panel_width += mCollapsed ? 0 : mMaxBarWidth;
-
-	S32 panel_height = parent_rect.getHeight()-fake_top_offset - nav_rect.getHeight();
-	S32 panel_top = parent_rect.mTop-fake_top_offset - nav_rect.getHeight();
-
-	LLRect panel_rect;
-	panel_rect.setLeftTopAndSize( parent_rect.mRight-panel_width, panel_top, panel_width, panel_height);
-	setRect(panel_rect);
+	// set visibility of parent container based on collapsed state
+	if (getParent())
+	{
+		getParent()->setVisible(!mCollapsed);
+	}
 }
 
-S32	LLSideTray::getTrayWidth()
-{
-	static LLSideTray::Params sidetray_params(LLUICtrlFactory::getDefaultParams<LLSideTray>());	
-	return getRect().getWidth() - (sidetray_params.default_button_width + sidetray_params.default_button_margin);
-}
diff --git a/indra/newview/llsidetray.h b/indra/newview/llsidetray.h
index b49251ec79b5535435d3311eedc8a71c4ec9a9b1..72a9465baa09fec285b3d7a3e9e1905cb4c009c5 100644
--- a/indra/newview/llsidetray.h
+++ b/indra/newview/llsidetray.h
@@ -118,6 +118,8 @@ class LLSideTray : public LLPanel, private LLDestroyClass<LLSideTray>
 		LLPanel::setVisible(visible);
 	}
 
+	LLPanel*	getButtonsPanel() { return mButtonsPanel; }
+
 public:
 	virtual ~LLSideTray(){};
 
@@ -129,10 +131,8 @@ class LLSideTray : public LLPanel, private LLDestroyClass<LLSideTray>
 	bool		addChild		(LLView* view, S32 tab_group);
 
 	BOOL		handleMouseDown	(S32 x, S32 y, MASK mask);
-	BOOL		handleScrollWheel(S32 x, S32 y, S32 mask);
 	
 	void		reshape			(S32 width, S32 height, BOOL called_from_parent = TRUE);
-	S32			getTrayWidth();
 
 	void		resetPanelRect	();
 	
@@ -163,15 +163,15 @@ class LLSideTray : public LLPanel, private LLDestroyClass<LLSideTray>
 
 private:
 
-	std::map<std::string,LLButton*>	mTabButtons;
+	LLPanel*						mButtonsPanel;
+	typedef std::map<std::string,LLButton*> button_map_t;
+	button_map_t					mTabButtons;
 	child_vector_t					mTabs;
 	LLSideTrayTab*					mActiveTab;	
 	
 	LLButton*						mCollapseButton;
 	bool							mCollapsed;
 	
-	S32								mMaxBarWidth;
-
 	static LLSideTray*				sInstance;
 };
 
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 86303699717d97823d77f633a4fd55100617c5ca..b15019f830f8fa945b431f42ee5718db0d9b0c10 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -1405,6 +1405,9 @@ void LLViewerWindow::initBase()
 	main_view->setShape(full_window);
 	getRootView()->addChild(main_view);
 
+	// placeholder widget that controls where "world" is rendered
+	mWorldViewPlaceholder = main_view->getChildView("world_view_rect");
+
 	// Constrain floaters to inside the menu and status bar regions.
 	gFloaterView = getRootView()->getChild<LLFloaterView>("Floater View");
 	gSnapshotFloaterView = getRootView()->getChild<LLSnapshotFloaterView>("Snapshot Floater View");
@@ -1458,9 +1461,6 @@ void LLViewerWindow::initWorldUI()
 
 	gIMMgr = LLIMMgr::getInstance();
 
-	// side tray
-	//getRootView()->addChild(LLSideTray::getInstance());
-
 	getRootView()->sendChildToFront(gFloaterView);
 	getRootView()->sendChildToFront(gSnapshotFloaterView);
 
@@ -1468,7 +1468,7 @@ void LLViewerWindow::initWorldUI()
 	LLPanel* bottom_tray_container = getRootView()->getChild<LLPanel>("bottom_tray_container");
 	LLBottomTray* bottom_tray = LLBottomTray::getInstance();
 	bottom_tray->setShape(bottom_tray_container->getLocalRect());
-	bottom_tray->setFollows(FOLLOWS_ALL);
+	bottom_tray->setFollowsAll();
 	bottom_tray_container->addChild(bottom_tray);
 	bottom_tray_container->setVisible(TRUE);
 
@@ -1498,7 +1498,8 @@ void LLViewerWindow::initWorldUI()
 	// Status bar
 	LLPanel* status_bar_container = getRootView()->getChild<LLPanel>("status_bar_container");
 	gStatusBar = new LLStatusBar(status_bar_container->getLocalRect());
-	gStatusBar->setFollows(FOLLOWS_ALL);
+	gStatusBar->setFollowsAll();
+	gStatusBar->setShape(status_bar_container->getLocalRect());
 	// sync bg color with menu bar
 	gStatusBar->setBackgroundColor( gMenuBarView->getBackgroundColor().get() );
 	status_bar_container->addChild(gStatusBar);
@@ -1559,10 +1560,24 @@ void LLViewerWindow::initWorldUI()
 	LLPanel* panel_ssf_container = getRootView()->getChild<LLPanel>("stand_stop_flying_container");
 	LLPanelStandStopFlying* panel_stand_stop_flying	= LLPanelStandStopFlying::getInstance();
 	panel_stand_stop_flying->setShape(panel_ssf_container->getLocalRect());
-	panel_stand_stop_flying->setFollows(FOLLOWS_ALL);
+	panel_stand_stop_flying->setFollowsAll();
 	panel_ssf_container->addChild(panel_stand_stop_flying);
 	panel_ssf_container->setVisible(TRUE);
 
+	// put sidetray in container
+	LLPanel* side_tray_container = getRootView()->getChild<LLPanel>("side_tray_container");
+	LLSideTray* sidetrayp = LLSideTray::getInstance();
+	sidetrayp->setShape(side_tray_container->getLocalRect());
+	sidetrayp->setFollowsAll();
+	side_tray_container->addChild(sidetrayp);
+	side_tray_container->setVisible(FALSE);
+	
+	// put sidetray buttons in their own panel
+	LLPanel* buttons_panel = sidetrayp->getButtonsPanel();
+	LLPanel* buttons_panel_container = getRootView()->getChild<LLPanel>("side_bar_tabs");
+	buttons_panel->setShape(buttons_panel_container->getLocalRect());
+	buttons_panel->setFollowsAll();
+	buttons_panel_container->addChild(buttons_panel);
 }
 
 // Destroy the UI
@@ -2272,29 +2287,6 @@ void LLViewerWindow::moveCursorToCenter()
 	LLUI::setMousePositionScreen(x, y);	
 }
 
-void LLViewerWindow::updateBottomTrayRect()
-{
-	//if(LLBottomTray::instanceExists() && LLSideTray::instanceCreated())
-	//{
-	//	S32 side_tray_width = 0;
-	//	if(LLSideTray::getInstance()->getVisible())
-	//	{
-	//		side_tray_width = LLSideTray::getInstance()->getTrayWidth();
-	//	}
-
-	//	LLBottomTray* bottom_tray = LLBottomTray::getInstance();
-	//	S32 right = llround((F32)mWindowRect.mRight / mDisplayScale.mV[VX]) - side_tray_width;
-
-	//	LLRect rc = bottom_tray->getRect();
-	//	if (right != rc.mRight)
-	//	{
-	//		rc.mRight = right;
-	//		bottom_tray->reshape(rc.getWidth(), rc.getHeight(), FALSE);
-	//		bottom_tray->setRect(rc);
-	//		mOnBottomTrayWidthChanged();
-	//	}
-	//}
-}
 
 //////////////////////////////////////////////////////////////////////
 //
@@ -2336,9 +2328,10 @@ void LLViewerWindow::updateUI()
 {
 	static std::string last_handle_msg;
 
-	updateWorldViewRect();
+	// animate layout stacks so we have up to date rect for world view
+	LLLayoutStack::idle();
 
-	updateBottomTrayRect();
+	updateWorldViewRect();
 
 	LLView::sMouseHandlerMessage.clear();
 
@@ -2838,32 +2831,20 @@ void LLViewerWindow::updateKeyboardFocus()
 		LLSideTray::getInstance()->highlightFocused();
 }
 
+static LLFastTimer::DeclareTimer FTM_UPDATE_WORLD_VIEW("Update World View");
 void LLViewerWindow::updateWorldViewRect(bool use_full_window)
 {
-	if (!LLSideTray::instanceCreated()) return;
+	LLFastTimer ft(FTM_UPDATE_WORLD_VIEW);
 
 	// start off using whole window to render world
 	LLRect new_world_rect = mWindowRect;
 
 	if (use_full_window == false)
 	{
-		// pull in right side of world view based on sidetray
-		LLSideTray* sidetray = LLSideTray::getInstance();
-		if (sidetray->getVisible())
-		{
-			new_world_rect.mRight -= llround((F32)sidetray->getTrayWidth() * mDisplayScale.mV[VX]);
-		}
-
-		// push top of world view below nav bar
-		if (LLNavigationBar::getInstance()->getVisible())
-		{
-			LLNavigationBar* barp = LLNavigationBar::getInstance();
-			LLRect nav_bar_rect;
-			if(barp->localRectToOtherView(barp->getLocalRect(), &nav_bar_rect, mRootView))
-			{
-				new_world_rect.mTop = llround((F32)LLNavigationBar::getInstance()->getRect().mBottom * mDisplayScale.mV[VY]);
-			}
-		}
+		new_world_rect = mWorldViewPlaceholder->calcScreenRect();
+		// clamp to at least a 1x1 rect so we don't try to allocate zero width gl buffers
+		new_world_rect.mTop = llmax(new_world_rect.mTop, new_world_rect.mBottom + 1);
+		new_world_rect.mRight = llmax(new_world_rect.mRight, new_world_rect.mLeft + 1);
 	}
 
 	if (mWorldViewRect != new_world_rect)
diff --git a/indra/newview/llviewerwindow.h b/indra/newview/llviewerwindow.h
index d7c403739e492047131fa101ea03da2db3aad9e9..31a458a15b57bfe26f8dfed54c2998e68d66d026 100644
--- a/indra/newview/llviewerwindow.h
+++ b/indra/newview/llviewerwindow.h
@@ -294,7 +294,6 @@ class LLViewerWindow : public LLWindowCallbacks
 	void				updateKeyboardFocus();		
 
 	void			updateWorldViewRect(bool use_full_window=false);
-	void			updateBottomTrayRect();
 
 	BOOL			handleKey(KEY key, MASK mask);
 	void			handleScrollWheel	(S32 clicks);
@@ -451,6 +450,8 @@ class LLViewerWindow : public LLWindowCallbacks
 	BOOL			mIgnoreActivate;
 
 	std::string		mInitAlert;			// Window / GL initialization requires an alert
+
+	LLView*			mWorldViewPlaceholder;	// widget that spans the portion of screen dedicated to rendering the 3d world
 	
 	class LLDebugText* mDebugText; // Internal class for debug text
 	
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index 0dc1a88ee8912ffe0b8dd8e623e2302a235f878f..eac83c0bdc03cee615abeebbe8884e6153576757 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -506,8 +506,10 @@ void LLPipeline::destroyGL()
 	}
 }
 
+static LLFastTimer::DeclareTimer FTM_RESIZE_SCREEN_TEXTURE("Resize Screen Texture");
 void LLPipeline::resizeScreenTexture()
 {
+	LLFastTimer ft(FTM_RESIZE_SCREEN_TEXTURE);
 	if (gPipeline.canUseVertexShaders() && assertInitialized())
 	{
 		GLuint resX = gViewerWindow->getWorldViewWidth();
diff --git a/indra/newview/skins/default/xui/en/main_view.xml b/indra/newview/skins/default/xui/en/main_view.xml
index 2d69465b5806996ca6c9c70c82070b664e68dcd4..08f7ee456e4361b269bf0cb965bd6e3ef82ba9b4 100644
--- a/indra/newview/skins/default/xui/en/main_view.xml
+++ b/indra/newview/skins/default/xui/en/main_view.xml
@@ -1,119 +1,130 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <panel
  follows="left|right|top|bottom"
- height="768" 
+ height="768"
  layout="topleft"
  left="0"
  mouse_opaque="false"
- name="screen"
+ name="main_view"
  width="1024">
   <layout_stack border_size="0"
                 follows="all"
-                height="768" 
-                mouse_opaque="false" 
+                mouse_opaque="false"
+                height="772"
                 name="menu_stack"
-                orientation="vertical">
-    <!-- filename="panel_status_bar.xml"-->
+                orientation="vertical"
+                top="0">
     <layout_panel auto_resize="false"
+                  min_height="19"
                   mouse_opaque="false"
                   name="status_bar_container"
+                  height="19"
                   width="1024"
                   visible="false"/>
-    <!--filename="panel_navigation_bar.xml"-->
     <layout_panel auto_resize="false"
-                  height="65" 
-                  mouse_opaque="false" 
+                  height="65"
+                  mouse_opaque="false"
                   name="nav_bar_container"
                   width="1024"
                   visible="false"/>
-    <layout_stack auto_resize="true" 
-                  border_size="0" 
-                  follows="all" 
-                  height="500" 
+    <panel        auto_resize="true"
+                  follows="all"
+                  height="500"
+                  layout="topleft"
                   mouse_opaque="false"
-                  name="hud_stack" 
-                  orientation="horizontal" 
+                  name="hud"
                   width="1024">
-      <panel auto_resize="true" 
-             follows="all" 
-             height="500" 
-             layout="topleft" 
-             mouse_opaque="false"
-             name="main_view" 
-             user_resize="true" 
-             width="500">
-        <layout_stack bottom="500" 
-                      follows="all" 
-                      height="500"
-                      mouse_opaque="false"
-                      name="hud_stack" 
-                      orientation="vertical">
-          <panel auto_resize="true" 
-                 follows="all" 
-                 height="500" 
-                 layout="topleft" 
-                 mouse_opaque="false"
-                 name="hud container" 
-                 width="500">
-            <debug_view follows="all"
-                        left="0" 
-                        top="0"
-                        mouse_opaque="false" 
+      <layout_stack border_size="0"
+                    follows="all"
+                    height="500"
+                    left="0"
+                    mouse_opaque="false"
+                    name="hud_stack"
+                    orientation="horizontal"
+                    top="0"
+                    width="1024">
+        <panel auto_resize="true"
+               follows="all"
+               height="500"
+               layout="topleft"
+               mouse_opaque="false"
+               name="main_view"
+               user_resize="true"
+               width="500">
+          <layout_stack border_size="0"
+                        bottom="500"
+                        follows="all"
                         height="500"
-                        name="DebugView"
-                        width="500"/>
-
-              <panel follows="right|top|bottom" 
-                     height="500" 
+                        left="0"
+                        mouse_opaque="false"
+                        name="world_stack"
+                        orientation="vertical">
+            <panel auto_resize="true"
+                   follows="all"
+                   height="500"
+                   layout="topleft"
+                   mouse_opaque="false"
+                   name="hud container"
+                   width="500">
+              <view bottom="500"
+                    follows="all"
+                    height="500"
+                    left="0"
+                    mouse_opaque="false"
+                    name="world_view_rect"
+                    width="500"/>
+              <panel follows="right|top|bottom"
+                     height="500"
                      mouse_opaque="false"
-                     name="side_bar_tabs" 
-                     right="500" 
-                     top="0" 
+                     name="side_bar_tabs"
+                     right="500"
+                     top="0"
                      width="32"/>
-          </panel>
-          <!--filename="panel_stand_stop_flying.xml"-->
-          <layout_panel auto_resize="false"
-                 follows="all"
-                 min_height="25"
-                 mouse_opaque="false"
-                 name="stand_stop_flying_container"
-                 visible="false"/>
-          <!--filename="panel_bottomtray.xml"-->
-          <layout_panel auto_resize="false" 
-                 follows="all" 
-                 min_height="33" 
-                 mouse_opaque="false"
-                 name="bottom_tray_container"
-                 visible="false"/>
-        </layout_stack>
-        <floater_view follows="all" 
-                      height="500" 
-                      mouse_opaque="false" 
-                      name="Floater View"
-                      tab_group="-1" 
-                      tab_stop="false"
-                      top="0"/>
-        <snapshot_floater_view enabled="false"
-                               follows="all"
-                               height="500"
-                               left="0" 
-                               mouse_opaque="false"
-                               name="Snapshot Floater View"
-                               tab_stop="false"
-                               top="0"
-                               visible="false"/>
-      </panel>
-      <!-- side tray -->
-      <layout_panel auto_resize="false" 
-                    follows="all" 
-                    height="500" 
-                    min_width="333" 
+              <panel bottom="500"
+                     follows="left|right|bottom"
+                     height="25"
+                     left="0"
+                     mouse_opaque="false"
+                     name="stand_stop_flying_container"
+                     visible="false"
+                     width="500"/>
+            </panel>
+            <layout_panel auto_resize="false"
+                   follows="all"
+                   min_height="33"
+                   mouse_opaque="false"
+                   name="bottom_tray_container"
+                   visible="false"/>
+          </layout_stack>
+        </panel>
+        <!-- side tray -->
+        <layout_panel auto_resize="false"
+                      follows="all"
+                      height="500"
+                      min_width="333"
+                      mouse_opaque="false"
+                      name="side_tray_container"
+                      user_resize="true"
+                      visible="false"
+                      width="333"/>
+      </layout_stack>
+      <floater_view follows="all"
+                    height="500"
+                    left="0"
                     mouse_opaque="false"
-                    name="side_tray_container" 
-                    user_resize="true"
-                    visible="false" 
-                    width="333"/>
-    </layout_stack>
+                    name="Floater View"
+                    tab_group="-1"
+                    tab_stop="false"
+                    top="0"
+                    width="1024"/>
+      <debug_view follows="all"
+                  left="0"
+                  top="0"
+                  mouse_opaque="false"
+                  height="500"
+                  name="DebugView"
+                  width="1024"/>
+  </panel>
   </layout_stack>
   <notify_box_view top="0"
                    follows="all"
@@ -128,6 +139,16 @@
                mouse_opaque="false"
                name="Menu Holder"
                width="1024"/>
+  <snapshot_floater_view enabled="false"
+                         follows="all"
+                         height="768"
+                         left="0"
+                         mouse_opaque="false"
+                         name="Snapshot Floater View"
+                         tab_stop="false"
+                         top="0"
+                         visible="false"
+                         width="1024"/>
   <tooltip_view top="0"
                 follows="all"
                 height="768"
diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
index f833e0a1cbb1ede61f9bcf53c09cec8348197f84..faa38084f1a351a1702aace7607170551148a0cb 100644
--- a/indra/newview/skins/default/xui/en/panel_bottomtray.xml
+++ b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
@@ -31,6 +31,7 @@
          height="10"
          image_name="spacer24.tga"
          layout="topleft"
+         min_width="4"
          left="0"
          top="0"
          width="4" />
@@ -44,7 +45,7 @@
          min_height="23"
          width="310"
          top="0"
-         min_width="300"
+         min_width="310"
          name="chat_bar"
          user_resize="false"
          filename="panel_nearby_chat_bar.xml" />
@@ -57,30 +58,31 @@
          min_height="28"
          width="100"
          top_delta="0"
-         min_width="96"
+         min_width="100"
          name="speak_panel"
          user_resize="false">
-         <talk_button
-          follows="right"
-          height="23"
-          speak_button.tab_stop="true"
-          show_button.tab_stop="true"
-          layout="topleft"
-          left="0"
-          name="talk"
-          top="3"
-          width="100" />
+          <talk_button
+           follows="right"
+           height="23"
+           speak_button.tab_stop="true"
+           show_button.tab_stop="true"
+           layout="topleft"
+           left="0"
+           name="talk"
+           top="3"
+           width="100" />
         </layout_panel>
-		 <icon
-         auto_resize="false"
-         follows="left|right"
-         height="10"
-         image_name="spacer24.tga"
-         layout="topleft"
-         left="0"
-         name="DUMMY"
-         top="0"
-         width="4"/>
+        <icon
+            auto_resize="false"
+            follows="left|right"
+            height="10"
+            image_name="spacer24.tga"
+            layout="topleft"
+            left="0"
+            name="DUMMY"
+            min_width="4"
+            top="0"
+            width="4"/>
         <layout_panel
          mouse_opaque="false"
          auto_resize="false"
@@ -112,6 +114,7 @@
          image_name="spacer24.tga"
          layout="topleft"
          left="0"
+         min_width="4" 
          name="DUMMY"
          top="0"
          width="4"/>
@@ -149,6 +152,7 @@
          image_name="spacer24.tga"
          layout="topleft"
          left="0"
+         min_width="4" 
          name="DUMMY"
          top="0"
          width="4"/>
@@ -188,6 +192,7 @@
          image_name="spacer24.tga"
          layout="topleft"
          left="0"
+         min_width="4" 
          name="DUMMY"
          top="0"
          width="4"/>
@@ -243,6 +248,7 @@
          image_name="spacer24.tga"
          layout="topleft"
          left="0"
+         min_width="4" 
          top="0"
          width="5"/>
         <layout_panel
@@ -288,6 +294,7 @@
          height="10"
          image_name="spacer24.tga"
          layout="topleft"
+         min_width="4" 
          right="-1"
          top="0"
          width="26"/>
diff --git a/indra/newview/skins/default/xui/en/panel_status_bar.xml b/indra/newview/skins/default/xui/en/panel_status_bar.xml
index 7b9c9f47a2fe1a7463139adc05e4fa71629a741d..1171a8f0b5d8a20ae6630a11778e873c3d706d83 100644
--- a/indra/newview/skins/default/xui/en/panel_status_bar.xml
+++ b/indra/newview/skins/default/xui/en/panel_status_bar.xml
@@ -3,7 +3,7 @@
  background_opaque="true"
  background_visible="true"
  bg_opaque_color="MouseGray"
- follows="top|left|right"
+ follows="all"
  height="19"
  layout="topleft"
  left="0"
diff --git a/indra/newview/skins/default/xui/en/widgets/context_menu.xml b/indra/newview/skins/default/xui/en/widgets/context_menu.xml
new file mode 100644
index 0000000000000000000000000000000000000000..459706c689c940d100852fe1c81fcada91b628a1
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/widgets/context_menu.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<context_menu visible="false"/>
diff --git a/indra/newview/skins/default/xui/en/widgets/side_tray.xml b/indra/newview/skins/default/xui/en/widgets/side_tray.xml
index 8b4a5afbe9564e31e3622dd481872461d05033ca..022564c12fcee20dc04b7d23d71fcfa01a46dec9 100644
--- a/indra/newview/skins/default/xui/en/widgets/side_tray.xml
+++ b/indra/newview/skins/default/xui/en/widgets/side_tray.xml
@@ -1,8 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <side_tray tab_btn_image="TaskPanel_Tab_Off"
-        tab_btn_image_selected="TaskPanel_Tab_Selected"
-		tab_btn_width="32"
-		tab_btn_height="40"
-		tab_btn_margin="1"
-        >
+           tab_btn_image_selected="TaskPanel_Tab_Selected"
+           tab_btn_width="32"
+           tab_btn_height="40"
+           tab_btn_margin="1">
 </side_tray>
diff --git a/indra/newview/skins/default/xui/en/widgets/toggleable_menu.xml b/indra/newview/skins/default/xui/en/widgets/toggleable_menu.xml
new file mode 100644
index 0000000000000000000000000000000000000000..48950a98ad547f59d7d83a2396438e0f414d8894
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/widgets/toggleable_menu.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<toggleable_menu visible="false"/>