diff --git a/indra/llrender/llfontfreetype.h b/indra/llrender/llfontfreetype.h
index 1325b4995b89c6356c1f1113797865f88c349d5c..7a5d029038e60908843f93074f36353d971a7ffc 100644
--- a/indra/llrender/llfontfreetype.h
+++ b/indra/llrender/llfontfreetype.h
@@ -58,9 +58,8 @@ class LLFontManager
 	~LLFontManager();
 };
 
-class LLFontGlyphInfo
+struct LLFontGlyphInfo
 {
-public:
 	LLFontGlyphInfo(U32 index);
 
 	U32 mGlyphIndex;
diff --git a/indra/llrender/llfontgl.cpp b/indra/llrender/llfontgl.cpp
index a28ffbfdc0d3816085326acc697a007d4891bd1f..db1f019a81850fa2eef2ef613db14b5b28d02a30 100644
--- a/indra/llrender/llfontgl.cpp
+++ b/indra/llrender/llfontgl.cpp
@@ -195,7 +195,7 @@ S32 LLFontGL::render(const LLWString &wstr, S32 begin_offset, F32 x, F32 y, cons
 		cur_y += mFontFreetype->getDescenderHeight();
 		break;
 	case VCENTER:
-		cur_y -= ((mFontFreetype->getAscenderHeight() - mFontFreetype->getDescenderHeight())/2.f);
+		cur_y -= (mFontFreetype->getAscenderHeight() - mFontFreetype->getDescenderHeight()) / 2.f;
 		break;
 	case BASELINE:
 		// Baseline, do nothing.
@@ -221,7 +221,7 @@ S32 LLFontGL::render(const LLWString &wstr, S32 begin_offset, F32 x, F32 y, cons
 	cur_render_y = cur_y;
 	cur_render_x = cur_x;
 
-	F32 start_x = cur_x;
+	F32 start_x = llround(cur_x);
 
 	const LLFontBitmapCache* font_bitmap_cache = mFontFreetype->getFontBitmapCache();
 
@@ -235,7 +235,8 @@ S32 LLFontGL::render(const LLWString &wstr, S32 begin_offset, F32 x, F32 y, cons
 	if (use_ellipses)
 	{
 		// check for too long of a string
-		if (getWidthF32(wstr.c_str(), begin_offset, max_chars) * sScaleX > scaled_max_pixels)
+		S32 string_width = llround(getWidthF32(wstr.c_str(), begin_offset, max_chars) * sScaleX);
+		if (string_width > scaled_max_pixels)
 		{
 			// use four dots for ellipsis width to generate padding
 			const LLWString dots(utf8str_to_wstring(std::string("....")));
@@ -301,8 +302,8 @@ S32 LLFontGL::render(const LLWString &wstr, S32 begin_offset, F32 x, F32 y, cons
 		// Must do this to cur_x, not just to cur_render_x, otherwise you
 		// will squish sub-pixel kerned characters too close together.
 		// For example, "CCCCC" looks bad.
-		cur_x = (F32)llfloor(cur_x + 0.5f);
-		//cur_y = (F32)llfloor(cur_y + 0.5f);
+		cur_x = (F32)llround(cur_x);
+		//cur_y = (F32)llround(cur_y);
 
 		cur_render_x = cur_x;
 		cur_render_y = cur_y;
@@ -461,7 +462,7 @@ F32 LLFontGL::getWidthF32(const llwchar* wchars, S32 begin_offset, S32 max_chars
 			cur_x += mFontFreetype->getXKerning(wch, next_char);
 		}
 		// Round after kerning.
-		cur_x = (F32)llfloor(cur_x + 0.5f);
+		cur_x = (F32)llround(cur_x);
 	}
 
 	// add in extra pixels for last character's width past its xadvance
@@ -490,6 +491,7 @@ S32 LLFontGL::maxDrawableChars(const llwchar* wchars, F32 max_pixels, S32 max_ch
 
 	// avoid S32 overflow when max_pixels == S32_MAX by staying in floating point
 	F32 scaled_max_pixels =	ceil(max_pixels * sScaleX);
+	F32 width_padding = 0.f;
 
 	S32 i;
 	for (i=0; (i < max_chars); i++)
@@ -533,9 +535,17 @@ S32 LLFontGL::maxDrawableChars(const llwchar* wchars, F32 max_pixels, S32 max_ch
 			}
 		}
 
-		cur_x += mFontFreetype->getXAdvance(wch);
+		LLFontGlyphInfo* fgi = mFontFreetype->getGlyphInfo(wch);
+
+		// account for glyphs that run beyond the starting point for the next glyphs
+		width_padding = llmax(	0.f,													// always use positive padding amount
+								width_padding - fgi->mXAdvance,							// previous padding left over after advance of current character
+								(F32)(fgi->mWidth + fgi->mXBearing) - fgi->mXAdvance);	// difference between width of this character and advance to next character
+
+		cur_x += fgi->mXAdvance;
 		
-		if (scaled_max_pixels < cur_x)
+		// clip if current character runs past scaled_max_pixels (using width_padding)
+		if (scaled_max_pixels < cur_x + width_padding)
 		{
 			clip = TRUE;
 			break;
@@ -548,7 +558,7 @@ S32 LLFontGL::maxDrawableChars(const llwchar* wchars, F32 max_pixels, S32 max_ch
 		}
 
 		// Round after kerning.
-		cur_x = (F32)llfloor(cur_x + 0.5f);
+		cur_x = llround(cur_x);
 		drawn_x = cur_x;
 	}
 
@@ -660,7 +670,7 @@ S32 LLFontGL::charFromPixelOffset(const llwchar* wchars, S32 begin_offset, F32 t
 		}
 
 		// Round after kerning.
-		cur_x = (F32)llfloor(cur_x + 0.5f);
+		cur_x = llround(cur_x);
 	}
 
 	return llmin(max_chars, pos - begin_offset);
diff --git a/indra/llui/llbutton.cpp b/indra/llui/llbutton.cpp
index 7721137e291624a5628d10c15510d284614e9bda..e9f6288f44c94aa87469a1548885f3bbdb196a69 100644
--- a/indra/llui/llbutton.cpp
+++ b/indra/llui/llbutton.cpp
@@ -63,7 +63,6 @@ template class LLButton* LLView::getChild<class LLButton>(
 
 // globals loaded from settings.xml
 S32	LLBUTTON_H_PAD	= 0;
-S32	LLBUTTON_V_PAD	= 0;
 S32 BTN_HEIGHT_SMALL= 0;
 S32 BTN_HEIGHT		= 0;
 
@@ -93,6 +92,7 @@ LLButton::Params::Params()
 	flash_color("flash_color"),
 	pad_right("pad_right", LLUI::sSettingGroups["config"]->getS32("ButtonHPad")),
 	pad_left("pad_left", LLUI::sSettingGroups["config"]->getS32("ButtonHPad")),
+	pad_bottom("pad_bottom"),
 	click_callback("click_callback"),
 	mouse_down_callback("mouse_down_callback"),
 	mouse_up_callback("mouse_up_callback"),
@@ -148,6 +148,7 @@ LLButton::LLButton(const LLButton::Params& p)
 	mHAlign(p.font_halign),
 	mLeftHPad(p.pad_left),
 	mRightHPad(p.pad_right),
+	mBottomVPad(p.pad_bottom),
 	mHoverGlowStrength(p.hover_glow_amount),
 	mCommitOnReturn(p.commit_on_return),
 	mFadeWhenDisabled(FALSE),
@@ -839,7 +840,9 @@ void LLButton::draw()
 		// LLFontGL::render expects S32 max_chars variable but process in a separate way -1 value.
 		// Due to U32_MAX is equal to S32 -1 value I have rest this value for non-ellipses mode.
 		// Not sure if it is really needed. Probably S32_MAX should be always passed as max_chars.
-		mLastDrawCharsCount = mGLFont->render(label, 0, (F32)x, (F32)(LLBUTTON_V_PAD + y_offset),
+		mLastDrawCharsCount = mGLFont->render(label, 0,
+			(F32)x,
+			(F32)(mBottomVPad + y_offset),
 			label_color % alpha,
 			mHAlign, LLFontGL::BOTTOM,
 			LLFontGL::NORMAL,
diff --git a/indra/llui/llbutton.h b/indra/llui/llbutton.h
index 4c7400220d1883eeda4cb52ab25571683ec85aba..5e28b8cdff5a14e8fd02951c27f4565af35f40d1 100644
--- a/indra/llui/llbutton.h
+++ b/indra/llui/llbutton.h
@@ -49,7 +49,6 @@
 // PLEASE please use these "constants" when building your own buttons.
 // They are loaded from settings.xml at run time.
 extern S32	LLBUTTON_H_PAD;
-extern S32	LLBUTTON_V_PAD;
 extern S32	BTN_HEIGHT_SMALL;
 extern S32	BTN_HEIGHT;
 
@@ -105,6 +104,7 @@ class LLButton
 		// layout
 		Optional<S32>			pad_right;
 		Optional<S32>			pad_left;
+		Optional<S32>			pad_bottom; // under text label
 		
 		// callbacks
 		Optional<CommitCallbackParam>	click_callback, // alias -> commit_callback
@@ -310,6 +310,7 @@ class LLButton
 	LLFontGL::HAlign			mHAlign;
 	S32							mLeftHPad;
 	S32							mRightHPad;
+	S32							mBottomVPad;	// under text label
 
 	F32							mHoverGlowStrength;
 	F32							mCurGlowStrength;
diff --git a/indra/llui/lldraghandle.cpp b/indra/llui/lldraghandle.cpp
index d9b98b1c285f579d823acda7edaf697dd804f12c..a93c6666486d5c3b4168c2513109e7c932d25e68 100644
--- a/indra/llui/lldraghandle.cpp
+++ b/indra/llui/lldraghandle.cpp
@@ -112,6 +112,7 @@ void LLDragHandleTop::setTitle(const std::string& title)
 		params.font(font);
 		params.follows.flags(FOLLOWS_TOP | FOLLOWS_LEFT | FOLLOWS_RIGHT);
 		params.font_shadow(LLFontGL::DROP_SHADOW_SOFT);
+		params.use_ellipses = true;
 		mTitleBox = LLUICtrlFactory::create<LLTextBox> (params);
 		addChild( mTitleBox );
 	}
diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp
index fd7b64af02bf0d54b7023ef2dec5af2ef59ffe72..5fd707fea3495fc2ed4fe2743db9b508d6f7867e 100644
--- a/indra/llui/llfloater.cpp
+++ b/indra/llui/llfloater.cpp
@@ -1649,6 +1649,7 @@ void LLFloater::draw()
 	}
 	else
 	{
+		//FIXME: get rid of this hack
 		// draw children
 		LLView* focused_child = dynamic_cast<LLView*>(gFocusMgr.getKeyboardFocus());
 		BOOL focused_child_visible = FALSE;
@@ -2703,6 +2704,18 @@ bool LLFloater::initFloaterXML(LLXMLNodePtr node, LLView *parent, LLXMLNodePtr o
 			output_node, output_params, &default_params);
 	}
 
+	// Default floater position to top-left corner of screen
+	// However, some legacy floaters have explicit top or bottom
+	// coordinates set, so respect their wishes.
+	if (!params.rect.top.isProvided() && !params.rect.bottom.isProvided())
+	{
+		params.rect.top.set(0);
+	}
+	if (!params.rect.left.isProvided() && !params.rect.right.isProvided())
+	{
+		params.rect.left.set(0);
+	}
+
 	setupParams(params, parent);
  	initFromParams(params);
 	
diff --git a/indra/llui/lltabcontainer.cpp b/indra/llui/lltabcontainer.cpp
index d7d61cf6cb1cc0c50f46b75c7a837d673ace3b76..2d9106923e35d476cb08d22d1acc88781abbc3bd 100644
--- a/indra/llui/lltabcontainer.cpp
+++ b/indra/llui/lltabcontainer.cpp
@@ -906,7 +906,7 @@ void LLTabContainer::addTabPanel(const TabPanelParams& panel)
 	
 	if (placeholder)
 	{
-		btn_rect.translate(0, -LLBUTTON_V_PAD-2);
+		btn_rect.translate(0, -3); // *TODO: make configurable
 		LLTextBox::Params params;
 		params.name(trimmed_label);
 		params.rect(btn_rect);
diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp
index e0503a084470bf3c3597bcc49d08a26ddda2da12..1f120a1483438ceb58c313b2d5d385d6b2c809e9 100644
--- a/indra/llui/lltextbase.cpp
+++ b/indra/llui/lltextbase.cpp
@@ -312,7 +312,7 @@ void LLTextBase::drawSelectionBackground()
 
 		S32 selection_left		= llmin( mSelectionStart, mSelectionEnd );
 		S32 selection_right		= llmax( mSelectionStart, mSelectionEnd );
-		LLRect selection_rect = mTextRect;
+		LLRect selection_rect = mVisibleTextRect;
 
 		// Skip through the lines we aren't drawing.
 		LLRect content_display_rect = getVisibleDocumentRect();
@@ -391,7 +391,7 @@ void LLTextBase::drawSelectionBackground()
 			++rect_it)
 		{
 			LLRect selection_rect = *rect_it;
-			selection_rect.translate(mTextRect.mLeft - content_display_rect.mLeft, mTextRect.mBottom - content_display_rect.mBottom);
+			selection_rect.translate(mVisibleTextRect.mLeft - content_display_rect.mLeft, mVisibleTextRect.mBottom - content_display_rect.mBottom);
 			gl_rect_2d(selection_rect, selection_color);
 		}
 	}
@@ -538,10 +538,10 @@ void LLTextBase::drawText()
 			line_end = next_start;
 		}
 
-		LLRect text_rect(line.mRect.mLeft + mTextRect.mLeft - scrolled_view_rect.mLeft,
-						line.mRect.mTop - scrolled_view_rect.mBottom + mTextRect.mBottom,
+		LLRect text_rect(line.mRect.mLeft + mVisibleTextRect.mLeft - scrolled_view_rect.mLeft,
+						line.mRect.mTop - scrolled_view_rect.mBottom + mVisibleTextRect.mBottom,
 						llmin(mDocumentView->getRect().getWidth(), line.mRect.mRight) - scrolled_view_rect.mLeft,
-						line.mRect.mBottom - scrolled_view_rect.mBottom + mTextRect.mBottom);
+						line.mRect.mBottom - scrolled_view_rect.mBottom + mVisibleTextRect.mBottom);
 
 		// draw a single line of text
 		S32 seg_start = line_start;
@@ -561,14 +561,14 @@ void LLTextBase::drawText()
 			
 			S32 clipped_end	=	llmin( line_end, cur_segment->getEnd() )  - cur_segment->getStart();
 
-			if (mUseEllipses
-				&& clipped_end == line_end 
-				&& next_line == last_line 
-				&& last_line < (S32)mLineInfoList.size())
+			if (mUseEllipses								// using ellipses
+				&& clipped_end == line_end					// last segment on line
+				&& next_line == last_line					// this is the last visible line
+				&& last_line < (S32)mLineInfoList.size())	// and there is more text to display
 			{
-				// more text to go, but we can't fit it
-				// so attempt to draw one extra character to force ellipses
-				clipped_end++;
+				// more lines of text to go, but we can't fit them
+				// so shrink text rect to force ellipses
+				text_rect.mRight -= 2;
 			}
 
 			text_rect.mLeft = (S32)(cur_segment->draw(seg_start - cur_segment->getStart(), clipped_end, selection_left, selection_right, text_rect));
@@ -949,7 +949,7 @@ void LLTextBase::reshape(S32 width, S32 height, BOOL called_from_parent)
 		LLUICtrl::reshape( width, height, called_from_parent );
 
 		// do this first after reshape, because other things depend on
-		// up-to-date mTextRect
+		// up-to-date mVisibleTextRect
 		updateRects();
 		
 		needsReflow();
@@ -984,7 +984,7 @@ void LLTextBase::draw()
 							: hasFocus() 
 								? mFocusBgColor.get() 
 								: mWriteableBgColor.get();
-		gl_rect_2d(mTextRect, bg_color, TRUE);
+		gl_rect_2d(mVisibleTextRect, bg_color, TRUE);
 	}
 
 	// draw document view
@@ -1053,9 +1053,9 @@ S32 LLTextBase::getLeftOffset(S32 width)
 	case LLFontGL::LEFT:
 		return mHPad;
 	case LLFontGL::HCENTER:
-		return mHPad + (mTextRect.getWidth() - width - mHPad) / 2;
+		return mHPad + (mVisibleTextRect.getWidth() - width - mHPad) / 2;
 	case LLFontGL::RIGHT:
-		return mTextRect.getWidth() - width;
+		return mVisibleTextRect.getWidth() - width;
 	default:
 		return mHPad;
 	}
@@ -1071,17 +1071,17 @@ void LLTextBase::reflow(S32 start_index)
 
 	while(mReflowNeeded)
 	{
-		mReflowNeeded = FALSE;
+		mReflowNeeded = false;
 
 		// shrink document to minimum size (visible portion of text widget)
 		// to force inlined widgets with follows set to shrink
-		mDocumentView->setShape(mTextRect);
+		mDocumentView->reshape(mVisibleTextRect.getWidth(), mDocumentView->getRect().getHeight());
 
 		bool scrolled_to_bottom = mScroller ? mScroller->isAtBottom() : false;
 
 		LLRect old_cursor_rect = getLocalRectFromDocIndex(mCursorPos);
-		bool follow_selection = mTextRect.overlaps(old_cursor_rect); // cursor is visible
-		old_cursor_rect.translate(-mTextRect.mLeft, -mTextRect.mBottom);
+		bool follow_selection = mVisibleTextRect.overlaps(old_cursor_rect); // cursor is visible
+		old_cursor_rect.translate(-mVisibleTextRect.mLeft, -mVisibleTextRect.mBottom);
 
 		S32 first_line = getFirstVisibleLine();
 
@@ -1094,15 +1094,15 @@ void LLTextBase::reflow(S32 start_index)
 		}
 		LLRect first_char_rect = getLocalRectFromDocIndex(mScrollIndex);
 		// subtract off effect of horizontal scrollbar from local position of first char
-		first_char_rect.translate(-mTextRect.mLeft, -mTextRect.mBottom);
+		first_char_rect.translate(-mVisibleTextRect.mLeft, -mVisibleTextRect.mBottom);
 
 		S32 cur_top = 0;
 
 		segment_set_t::iterator seg_iter = mSegments.begin();
 		S32 seg_offset = 0;
 		S32 line_start_index = 0;
-		const S32 text_width = mTextRect.getWidth() - mHPad;  // reserve room for margin
-		S32 remaining_pixels = text_width;
+		const S32 text_available_width = mVisibleTextRect.getWidth() - mHPad;  // reserve room for margin
+		S32 remaining_pixels = text_available_width;
 		LLWString text(getWText());
 		S32 line_count = 0;
 
@@ -1142,10 +1142,11 @@ void LLTextBase::reflow(S32 start_index)
 
 			S32 last_segment_char_on_line = segment->getStart() + seg_offset;
 
-			S32 text_left = getLeftOffset(text_width - remaining_pixels);
+			S32 text_actual_width = text_available_width - remaining_pixels;
+			S32 text_left = getLeftOffset(text_actual_width);
 			LLRect line_rect(text_left, 
 							cur_top, 
-							text_left + (text_width - remaining_pixels), 
+							text_left + text_actual_width, 
 							cur_top - line_height);
 
 			// if we didn't finish the current segment...
@@ -1160,7 +1161,7 @@ void LLTextBase::reflow(S32 start_index)
 
 				line_start_index = segment->getStart() + seg_offset;
 				cur_top -= llround((F32)line_height * mLineSpacingMult) + mLineSpacingPixels;
-				remaining_pixels = text_width;
+				remaining_pixels = text_available_width;
 				line_height = 0;
 			}
 			// ...just consumed last segment..
@@ -1188,7 +1189,7 @@ void LLTextBase::reflow(S32 start_index)
 					line_start_index = segment->getStart() + seg_offset;
 					cur_top -= llround((F32)line_height * mLineSpacingMult) + mLineSpacingPixels;
 					line_height = 0;
-					remaining_pixels = text_width;
+					remaining_pixels = text_available_width;
 				}
 				++seg_iter;
 				seg_offset = 0;
@@ -1238,10 +1239,10 @@ void LLTextBase::reflow(S32 start_index)
 	}
 }
 
-LLRect LLTextBase::getContentsRect()
+LLRect LLTextBase::getTextBoundingRect()
 {
 	reflow();
-	return mContentsRect;
+	return mTextBoundingRect;
 }
 
 
@@ -1760,7 +1761,7 @@ S32 LLTextBase::getDocIndexFromLocalCoord( S32 local_x, S32 local_y, BOOL round
 	LLRect visible_region = getVisibleDocumentRect();
 
 	// binary search for line that starts before local_y
-	line_list_t::const_iterator line_iter = std::lower_bound(mLineInfoList.begin(), mLineInfoList.end(), local_y - mTextRect.mBottom + visible_region.mBottom, compare_bottom());
+	line_list_t::const_iterator line_iter = std::lower_bound(mLineInfoList.begin(), mLineInfoList.end(), local_y - mVisibleTextRect.mBottom + visible_region.mBottom, compare_bottom());
 
 	if (line_iter == mLineInfoList.end())
 	{
@@ -1768,7 +1769,7 @@ S32 LLTextBase::getDocIndexFromLocalCoord( S32 local_x, S32 local_y, BOOL round
 	}
 	
 	S32 pos = getLength();
-	S32 start_x = mTextRect.mLeft + line_iter->mRect.mLeft;
+	S32 start_x = mVisibleTextRect.mLeft + line_iter->mRect.mLeft;
 
 	segment_set_t::iterator line_seg_iter;
 	S32 line_seg_offset;
@@ -1879,7 +1880,7 @@ LLRect LLTextBase::getLocalRectFromDocIndex(S32 pos) const
 	if (mLineInfoList.empty()) 
 	{ 
 		// return default height rect in upper left
-		local_rect = mTextRect;
+		local_rect = mVisibleTextRect;
 		local_rect.mBottom = local_rect.mTop - (S32)(mDefaultFont->getLineHeight());
 		return local_rect;
 	}
@@ -1890,8 +1891,8 @@ LLRect LLTextBase::getLocalRectFromDocIndex(S32 pos) const
 	// compensate for scrolled, inset view of doc
 	LLRect scrolled_view_rect = getVisibleDocumentRect();
 	local_rect = doc_rect;
-	local_rect.translate(mTextRect.mLeft - scrolled_view_rect.mLeft, 
-						mTextRect.mBottom - scrolled_view_rect.mBottom);
+	local_rect.translate(mVisibleTextRect.mLeft - scrolled_view_rect.mLeft, 
+						mVisibleTextRect.mBottom - scrolled_view_rect.mBottom);
 
 	return local_rect;
 }
@@ -1991,7 +1992,7 @@ void LLTextBase::changeLine( S32 delta )
 
 	LLRect visible_region = getVisibleDocumentRect();
 
-	S32 new_cursor_pos = getDocIndexFromLocalCoord(mDesiredXPixel, mLineInfoList[new_line].mRect.mBottom + mTextRect.mBottom - visible_region.mBottom, TRUE);
+	S32 new_cursor_pos = getDocIndexFromLocalCoord(mDesiredXPixel, mLineInfoList[new_line].mRect.mBottom + mVisibleTextRect.mBottom - visible_region.mBottom, TRUE);
 	setCursorPos(new_cursor_pos, true);
 }
 
@@ -2067,56 +2068,64 @@ void LLTextBase::updateRects()
 {
 	if (mLineInfoList.empty()) 
 	{
-		mContentsRect = LLRect(0, mVPad, mHPad, 0);
+		mTextBoundingRect = LLRect(0, mVPad, mHPad, 0);
 	}
 	else
 	{
-		mContentsRect = mLineInfoList.begin()->mRect;
+		mTextBoundingRect = mLineInfoList.begin()->mRect;
 		for (line_list_t::const_iterator line_iter = ++mLineInfoList.begin();
 			line_iter != mLineInfoList.end();
 			++line_iter)
 		{
-			mContentsRect.unionWith(line_iter->mRect);
+			mTextBoundingRect.unionWith(line_iter->mRect);
 		}
 
-		mContentsRect.mTop += mVPad;
+		mTextBoundingRect.mTop += mVPad;
 		// subtract a pixel off the bottom to deal with rounding errors in measuring font height
-		mContentsRect.mBottom -= 1;
+		mTextBoundingRect.mBottom -= 1;
 
-		S32 delta_pos = -mContentsRect.mBottom;
+		S32 delta_pos = -mTextBoundingRect.mBottom;
 		// move line segments to fit new document rect
 		for (line_list_t::iterator it = mLineInfoList.begin(); it != mLineInfoList.end(); ++it)
 		{
 			it->mRect.translate(0, delta_pos);
 		}
-		mContentsRect.translate(0, delta_pos);
+		mTextBoundingRect.translate(0, delta_pos);
 	}
 
 	// update document container dimensions according to text contents
-	LLRect doc_rect = mContentsRect;
-	// use old mTextRect constraint document to width of viewable region
+	LLRect doc_rect = mTextBoundingRect;
+	// use old mVisibleTextRect constraint document to width of viewable region
 	doc_rect.mLeft = 0;
-	doc_rect.mRight = llmax(mTextRect.getWidth(), mContentsRect.mRight);
+
+	// allow horizontal scrolling?
+	// if so, use entire width of text contents
+	// otherwise, stop at width of mVisibleTextRect
+	doc_rect.mRight = mScroller 
+		? llmax(mVisibleTextRect.getWidth(), mTextBoundingRect.mRight)
+		: mVisibleTextRect.getWidth();
 
 	mDocumentView->setShape(doc_rect);
 
-	//update mTextRect *after* mDocumentView has been resized
+	//update mVisibleTextRect *after* mDocumentView has been resized
 	// so that scrollbars are added if document needs to scroll
-	// since mTextRect does not include scrollbars
-	LLRect old_text_rect = mTextRect;
-	mTextRect = mScroller ? mScroller->getContentWindowRect() : getLocalRect();
+	// since mVisibleTextRect does not include scrollbars
+	LLRect old_text_rect = mVisibleTextRect;
+	mVisibleTextRect = mScroller ? mScroller->getContentWindowRect() : getLocalRect();
 	//FIXME: replace border with image?
 	if (mBorderVisible)
 	{
-		mTextRect.stretch(-1);
+		mVisibleTextRect.stretch(-1);
 	}
-	if (mTextRect != old_text_rect)
+	if (mVisibleTextRect != old_text_rect)
 	{
 		needsReflow();
 	}
 
-	// update document container again, using new mTextRect
-	doc_rect.mRight = llmax(mTextRect.getWidth(), mContentsRect.mRight);
+	// update document container again, using new mVisibleTextRect (that has scrollbars enabled as needed)
+	doc_rect.mRight = mScroller 
+		? llmax(mVisibleTextRect.getWidth(), mTextBoundingRect.mRight)
+		: mVisibleTextRect.getWidth();
 	mDocumentView->setShape(doc_rect);
 }
 
@@ -2154,7 +2163,7 @@ LLRect LLTextBase::getVisibleDocumentRect() const
 		LLRect doc_rect = mDocumentView->getLocalRect();
 		doc_rect.mLeft -= mDocumentView->getRect().mLeft;
 		// adjust for height of text above widget baseline
-		doc_rect.mBottom = doc_rect.getHeight() - mTextRect.getHeight();
+		doc_rect.mBottom = doc_rect.getHeight() - mVisibleTextRect.getHeight();
 		return doc_rect;
 	}
 }
@@ -2413,10 +2422,18 @@ bool LLNormalTextSegment::getDimensions(S32 first_char, S32 num_chars, S32& widt
 	if (num_chars > 0)
 	{
 		LLWString text = mEditor.getWText();
-		width = mStyle->getFont()->getWidth(text.c_str(), mStart + first_char, num_chars);
 		// if last character is a newline, then return true, forcing line break
 		llwchar last_char = text[mStart + first_char + num_chars - 1];
-		force_newline = (last_char == '\n');
+		if (last_char == '\n')
+		{
+			force_newline = true;
+			// don't count newline in font width
+			width = mStyle->getFont()->getWidth(text.c_str(), mStart + first_char, num_chars - 1);
+		}
+		else
+		{
+			width = mStyle->getFont()->getWidth(text.c_str(), mStart + first_char, num_chars);
+		}
 	}
 	else
 	{
diff --git a/indra/llui/lltextbase.h b/indra/llui/lltextbase.h
index 0138ca370422a0ecbdc7088593551220bcee82c2..a1f8ba39ae7ea5bff7c2e66e8b3f375ef23b6a5f 100644
--- a/indra/llui/lltextbase.h
+++ b/indra/llui/lltextbase.h
@@ -156,8 +156,8 @@ class LLTextBase
 	void					addDocumentChild(LLView* view);
 	void					removeDocumentChild(LLView* view);
 	const LLView*			getDocumentView() const { return mDocumentView; }
-	LLRect					getTextRect() { return mTextRect; }
-	LLRect					getContentsRect();
+	LLRect					getVisibleTextRect() { return mVisibleTextRect; }
+	LLRect					getTextBoundingRect();
 	LLRect					getVisibleDocumentRect() const;
 
 	S32						getVPad() { return mVPad; }
@@ -311,8 +311,8 @@ class LLTextBase
 	// text segmentation and flow
 	segment_set_t       		mSegments;
 	line_list_t					mLineInfoList;
-	LLRect						mTextRect;			// The rect in which text is drawn.  Excludes borders.
-	LLRect						mContentsRect;
+	LLRect						mVisibleTextRect;			// The rect in which text is drawn.  Excludes borders.
+	LLRect						mTextBoundingRect;
 
 	// colors
 	LLUIColor					mCursorColor;
diff --git a/indra/llui/lltextbox.cpp b/indra/llui/lltextbox.cpp
index 0bd0ab59fb1851b734f9e0ca494648388e18394b..a1f5b5726bf8fb5c0e01d32e50d545eccdb3a9ff 100644
--- a/indra/llui/lltextbox.cpp
+++ b/indra/llui/lltextbox.cpp
@@ -134,12 +134,12 @@ void LLTextBox::setClickedCallback( boost::function<void (void*)> cb, void* user
 
 S32 LLTextBox::getTextPixelWidth()
 {
-	return getContentsRect().getWidth();
+	return getTextBoundingRect().getWidth();
 }
 
 S32 LLTextBox::getTextPixelHeight()
 {
-	return getContentsRect().getHeight();
+	return getTextBoundingRect().getHeight();
 }
 
 
diff --git a/indra/llui/lltexteditor.cpp b/indra/llui/lltexteditor.cpp
index faf9ccbeb86afd24f5b8fde26cc272d3fa64e79c..e8fc9475a542d55f42958964c6d6e692b9fbe5f5 100644
--- a/indra/llui/lltexteditor.cpp
+++ b/indra/llui/lltexteditor.cpp
@@ -758,8 +758,8 @@ BOOL LLTextEditor::handleHover(S32 x, S32 y, MASK mask)
 			{	
 				mScroller->autoScroll(x, y);
 			}
-			S32 clamped_x = llclamp(x, mTextRect.mLeft, mTextRect.mRight);
-			S32 clamped_y = llclamp(y, mTextRect.mBottom, mTextRect.mTop);
+			S32 clamped_x = llclamp(x, mVisibleTextRect.mLeft, mVisibleTextRect.mRight);
+			S32 clamped_y = llclamp(y, mVisibleTextRect.mBottom, mVisibleTextRect.mTop);
 			setCursorAtLocalPos( clamped_x, clamped_y, true );
 			mSelectionEnd = mCursorPos;
 		}
@@ -809,8 +809,8 @@ BOOL LLTextEditor::handleMouseUp(S32 x, S32 y, MASK mask)
 			{
 				mScroller->autoScroll(x, y);
 			}
-			S32 clamped_x = llclamp(x, mTextRect.mLeft, mTextRect.mRight);
-			S32 clamped_y = llclamp(y, mTextRect.mBottom, mTextRect.mTop);
+			S32 clamped_x = llclamp(x, mVisibleTextRect.mLeft, mVisibleTextRect.mRight);
+			S32 clamped_y = llclamp(y, mVisibleTextRect.mBottom, mVisibleTextRect.mTop);
 			setCursorAtLocalPos( clamped_x, clamped_y, true );
 			endSelection();
 		}
@@ -2075,8 +2075,8 @@ void LLTextEditor::drawPreeditMarker()
 	const S32 line_height = llround( mDefaultFont->getLineHeight() );
 
 	S32 line_start = getLineStart(cur_line);
-	S32 line_y = mTextRect.mTop - line_height;
-	while((mTextRect.mBottom <= line_y) && (num_lines > cur_line))
+	S32 line_y = mVisibleTextRect.mTop - line_height;
+	while((mVisibleTextRect.mBottom <= line_y) && (num_lines > cur_line))
 	{
 		S32 next_start = -1;
 		S32 line_end = text_len;
@@ -2108,12 +2108,12 @@ void LLTextEditor::drawPreeditMarker()
 					continue;
 				}
 
-				S32 preedit_left = mTextRect.mLeft;
+				S32 preedit_left = mVisibleTextRect.mLeft;
 				if (left > line_start)
 				{
 					preedit_left += mDefaultFont->getWidth(text, line_start, left - line_start);
 				}
-				S32 preedit_right = mTextRect.mLeft;
+				S32 preedit_right = mVisibleTextRect.mLeft;
 				if (right < line_end)
 				{
 					preedit_right += mDefaultFont->getWidth(text, line_start, right - line_start);
@@ -2154,7 +2154,7 @@ void LLTextEditor::drawLineNumbers()
 {
 	LLGLSUIDefault gls_ui;
 	LLRect scrolled_view_rect = getVisibleDocumentRect();
-	LLRect content_rect = getTextRect();	
+	LLRect content_rect = getVisibleTextRect();	
 	LLLocalClipRect clip(content_rect);
 	S32 first_line = getFirstVisibleLine();
 	S32 num_lines = getLineCount();
@@ -2180,12 +2180,12 @@ void LLTextEditor::drawLineNumbers()
 		{
 			line_info& line = mLineInfoList[cur_line];
 
-			if ((line.mRect.mTop - scrolled_view_rect.mBottom) < mTextRect.mBottom) 
+			if ((line.mRect.mTop - scrolled_view_rect.mBottom) < mVisibleTextRect.mBottom) 
 			{
 				break;
 			}
 
-			S32 line_bottom = line.mRect.mBottom - scrolled_view_rect.mBottom + mTextRect.mBottom;
+			S32 line_bottom = line.mRect.mBottom - scrolled_view_rect.mBottom + mVisibleTextRect.mBottom;
 			// draw the line numbers
 			if(line.mLineNum != last_line_num && line.mRect.mTop <= scrolled_view_rect.mTop) 
 			{
@@ -2216,8 +2216,8 @@ void LLTextEditor::draw()
 {
 	{
 		// pad clipping rectangle so that cursor can draw at full width
-		// when at left edge of mTextRect
-		LLRect clip_rect(mTextRect);
+		// when at left edge of mVisibleTextRect
+		LLRect clip_rect(mVisibleTextRect);
 		clip_rect.stretch(1);
 		LLLocalClipRect clip(clip_rect);
 		drawPreeditMarker();
@@ -2781,7 +2781,7 @@ BOOL LLTextEditor::getPreeditLocation(S32 query_offset, LLCoordGL *coord, LLRect
 	if (control)
 	{
 		LLRect control_rect_screen;
-		localRectToScreen(mTextRect, &control_rect_screen);
+		localRectToScreen(mVisibleTextRect, &control_rect_screen);
 		LLUI::screenRectToGL(control_rect_screen, control);
 	}
 
@@ -2832,8 +2832,8 @@ BOOL LLTextEditor::getPreeditLocation(S32 query_offset, LLCoordGL *coord, LLRect
 
 	if (coord)
 	{
-		const S32 query_x = mTextRect.mLeft + mDefaultFont->getWidth(text, current_line_start, query - current_line_start);
-		const S32 query_y = mTextRect.mTop - (current_line - first_visible_line) * line_height - line_height / 2;
+		const S32 query_x = mVisibleTextRect.mLeft + mDefaultFont->getWidth(text, current_line_start, query - current_line_start);
+		const S32 query_y = mVisibleTextRect.mTop - (current_line - first_visible_line) * line_height - line_height / 2;
 		S32 query_screen_x, query_screen_y;
 		localPointToScreen(query_x, query_y, &query_screen_x, &query_screen_y);
 		LLUI::screenPointToGL(query_screen_x, query_screen_y, &coord->mX, &coord->mY);
@@ -2841,13 +2841,13 @@ BOOL LLTextEditor::getPreeditLocation(S32 query_offset, LLCoordGL *coord, LLRect
 
 	if (bounds)
 	{
-		S32 preedit_left = mTextRect.mLeft;
+		S32 preedit_left = mVisibleTextRect.mLeft;
 		if (preedit_left_position > current_line_start)
 		{
 			preedit_left += mDefaultFont->getWidth(text, current_line_start, preedit_left_position - current_line_start);
 		}
 
-		S32 preedit_right = mTextRect.mLeft;
+		S32 preedit_right = mVisibleTextRect.mLeft;
 		if (preedit_right_position < current_line_end)
 		{
 			preedit_right += mDefaultFont->getWidth(text, current_line_start, preedit_right_position - current_line_start);
@@ -2857,7 +2857,7 @@ BOOL LLTextEditor::getPreeditLocation(S32 query_offset, LLCoordGL *coord, LLRect
 			preedit_right += mDefaultFont->getWidth(text, current_line_start, current_line_end - current_line_start);
 		}
 
-		const S32 preedit_top = mTextRect.mTop - (current_line - first_visible_line) * line_height;
+		const S32 preedit_top = mVisibleTextRect.mTop - (current_line - first_visible_line) * line_height;
 		const S32 preedit_bottom = preedit_top - line_height;
 
 		const LLRect preedit_rect_local(preedit_left, preedit_top, preedit_right, preedit_bottom);
diff --git a/indra/llui/lluistring.cpp b/indra/llui/lluistring.cpp
index 3a1e656364389c800a32b965a3e29471adeb8c7e..f7a53e87def377a8f0757a5606a92b4606b8040d 100644
--- a/indra/llui/lluistring.cpp
+++ b/indra/llui/lluistring.cpp
@@ -39,22 +39,23 @@ LLFastTimer::DeclareTimer FTM_UI_STRING("UI String");
 
 
 LLUIString::LLUIString(const std::string& instring, const LLStringUtil::format_map_t& args)
-	: mOrig(instring),
-	  mArgs(args)
+:	mOrig(instring),
+	mArgs(args)
 {
-	format();
+	dirty();
 }
 
 void LLUIString::assign(const std::string& s)
 {
 	mOrig = s;
-	format();
+	dirty();
 }
 
 void LLUIString::setArgList(const LLStringUtil::format_map_t& args)
+
 {
 	mArgs = args;
-	format();
+	dirty();
 }
 
 void LLUIString::setArgs(const LLSD& sd)
@@ -68,40 +69,40 @@ void LLUIString::setArgs(const LLSD& sd)
 	{
 		setArg(sd_it->first, sd_it->second.asString());
 	}
-	format();
+	dirty();
 }
 
 void LLUIString::setArg(const std::string& key, const std::string& replacement)
 {
 	mArgs[key] = replacement;
-	format();
+	dirty();
 }
 
 void LLUIString::truncate(S32 maxchars)
 {
-	if (mWResult.size() > (size_t)maxchars)
+	if (getUpdatedWResult().size() > (size_t)maxchars)
 	{
-		LLWStringUtil::truncate(mWResult, maxchars);
-		mResult = wstring_to_utf8str(mWResult);
+		LLWStringUtil::truncate(getUpdatedWResult(), maxchars);
+		mResult = wstring_to_utf8str(getUpdatedWResult());
 	}
 }
 
 void LLUIString::erase(S32 charidx, S32 len)
 {
-	mWResult.erase(charidx, len);
-	mResult = wstring_to_utf8str(mWResult);
+	getUpdatedWResult().erase(charidx, len);
+	mResult = wstring_to_utf8str(getUpdatedWResult());
 }
 
 void LLUIString::insert(S32 charidx, const LLWString& wchars)
 {
-	mWResult.insert(charidx, wchars);
-	mResult = wstring_to_utf8str(mWResult);
+	getUpdatedWResult().insert(charidx, wchars);
+	mResult = wstring_to_utf8str(getUpdatedWResult());
 }
 
 void LLUIString::replace(S32 charidx, llwchar wc)
 {
-	mWResult[charidx] = wc;
-	mResult = wstring_to_utf8str(mWResult);
+	getUpdatedWResult()[charidx] = wc;
+	mResult = wstring_to_utf8str(getUpdatedWResult());
 }
 
 void LLUIString::clear()
@@ -112,8 +113,16 @@ void LLUIString::clear()
 	mWResult.clear();
 }
 
-void LLUIString::format()
+void LLUIString::dirty()
 {
+	mNeedsResult = true;
+	mNeedsWResult = true;
+}
+
+void LLUIString::updateResult() const
+{
+	mNeedsResult = false;
+
 	LLFastTimer timer(FTM_UI_STRING);
 	
 	// optimize for empty strings (don't attempt string replacement)
@@ -129,5 +138,11 @@ void LLUIString::format()
 	LLStringUtil::format_map_t combined_args = LLTrans::getDefaultArgs();
 	combined_args.insert(mArgs.begin(), mArgs.end());
 	LLStringUtil::format(mResult, combined_args);
-	mWResult = utf8str_to_wstring(mResult);
+}
+
+void LLUIString::updateWResult() const
+{
+	mNeedsWResult = false;
+
+	mWResult = utf8str_to_wstring(getUpdatedResult());
 }
diff --git a/indra/llui/lluistring.h b/indra/llui/lluistring.h
index 763de4d6a3ca80588caf7ae8be7a7fa417727542..7ec0fd603a1fd9ccba2f70ee6b7900ecddd8f0bc 100644
--- a/indra/llui/lluistring.h
+++ b/indra/llui/lluistring.h
@@ -76,19 +76,19 @@ class LLUIString
 	void setArgs(const class LLSD& sd);
 	void setArg(const std::string& key, const std::string& replacement);
 
-	const std::string& getString() const { return mResult; }
-	operator std::string() const { return mResult; }
+	const std::string& getString() const { return getUpdatedResult(); }
+	operator std::string() const { return getUpdatedResult(); }
 
-	const LLWString& getWString() const { return mWResult; }
-	operator LLWString() const { return mWResult; }
+	const LLWString& getWString() const { return getUpdatedWResult(); }
+	operator LLWString() const { return getUpdatedWResult(); }
 
-	bool empty() const { return mWResult.empty(); }
-	S32 length() const { return mWResult.size(); }
+	bool empty() const { return getUpdatedResult().empty(); }
+	S32 length() const { return getUpdatedWResult().size(); }
 
 	void clear();
 	void clearArgs() { mArgs.clear(); }
 	
-	// These utuilty functions are included for text editing.
+	// These utility functions are included for text editing.
 	// They do not affect mOrig and do not perform argument substitution
 	void truncate(S32 maxchars);
 	void erase(S32 charidx, S32 len);
@@ -96,12 +96,24 @@ class LLUIString
 	void replace(S32 charidx, llwchar wc);
 	
 private:
-	void format();	
+	// something changed, requiring reformatting of strings
+	void dirty();
+
+	std::string& getUpdatedResult() const { if (mNeedsResult) { updateResult(); } return mResult; }
+	LLWString& getUpdatedWResult() const{ if (mNeedsWResult) { updateWResult(); } return mWResult; }
+
+	// do actual work of updating strings (non-inlined)
+	void updateResult() const;
+	void updateWResult() const;
 	
 	std::string mOrig;
-	std::string mResult;
-	LLWString mWResult; // for displaying
+	mutable std::string mResult;
+	mutable LLWString mWResult; // for displaying
 	LLStringUtil::format_map_t mArgs;
+
+	// controls lazy evaluation
+	mutable bool	mNeedsResult;
+	mutable bool	mNeedsWResult;
 };
 
 #endif // LL_LLUISTRING_H
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index eed84671c1ec3bb60ac6ac25039fe390b5180d77..7ac7a09d56fb50d2e723e0763d0aebd119ca6d21 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -1068,17 +1068,6 @@
       <key>Value</key>
       <integer>23</integer>
     </map>
-    <key>ButtonVPad</key>
-    <map>
-      <key>Comment</key>
-      <string>Default vertical spacing between buttons (pixels)</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>S32</string>
-      <key>Value</key>
-      <integer>1</integer>
-    </map>
     <key>CacheLocation</key>
     <map>
       <key>Comment</key>
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 3250343b253abbee297ed097d83744e58e491bcf..90b8cd95721d017889a9a57e7d648e45a9db9679 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -391,7 +391,6 @@ bool handleCrashSubmitBehaviorChanged(const LLSD& newvalue)
 static void settings_to_globals()
 {
 	LLBUTTON_H_PAD		= gSavedSettings.getS32("ButtonHPad");
-	LLBUTTON_V_PAD		= gSavedSettings.getS32("ButtonVPad");
 	BTN_HEIGHT_SMALL	= gSavedSettings.getS32("ButtonHeightSmall");
 	BTN_HEIGHT			= gSavedSettings.getS32("ButtonHeight");
 
diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp
index efe9ea4c350fade1153896f4844a92e144ea3dc2..6c843e1ec3594f3b2bf4494f078480a335ee2e8a 100644
--- a/indra/newview/llchathistory.cpp
+++ b/indra/newview/llchathistory.cpp
@@ -332,12 +332,12 @@ LLChatHistory::~LLChatHistory()
 {
 	static LLUICachedControl<S32> texteditor_border ("UITextEditorBorder", 0);
 
-	LLRect old_text_rect = mTextRect;
-	mTextRect = mScroller->getContentWindowRect();
-	mTextRect.stretch(-texteditor_border);
-	mTextRect.mLeft += mLeftTextPad;
-	mTextRect.mRight -= mRightTextPad;
-	if (mTextRect != old_text_rect)
+	LLRect old_text_rect = mVisibleTextRect;
+	mVisibleTextRect = mScroller->getContentWindowRect();
+	mVisibleTextRect.stretch(-texteditor_border);
+	mVisibleTextRect.mLeft += mLeftTextPad;
+	mVisibleTextRect.mRight -= mRightTextPad;
+	if (mVisibleTextRect != old_text_rect)
 	{
 		needsReflow();
 	}
diff --git a/indra/newview/llexpandabletextbox.cpp b/indra/newview/llexpandabletextbox.cpp
index bd6936f05c65542188716f5286f3b405fb3caed0..9c37c953fe73c687413d06b52c54e7501b40ddfa 100644
--- a/indra/newview/llexpandabletextbox.cpp
+++ b/indra/newview/llexpandabletextbox.cpp
@@ -51,8 +51,16 @@ class LLExpanderSegment : public LLTextSegment
 	/*virtual*/ bool	getDimensions(S32 first_char, S32 num_chars, S32& width, S32& height) const 
 	{
 		// more label always spans width of text box
-		width = mEditor.getTextRect().getWidth() - mEditor.getHPad(); 
-		height = llceil(mStyle->getFont()->getLineHeight());
+		if (num_chars == 0)
+		{
+			width = 0; 
+			height = 0;
+		}
+		else
+		{
+			width = mEditor.getDocumentView()->getRect().getWidth() - mEditor.getHPad(); 
+			height = llceil(mStyle->getFont()->getLineHeight());
+		}
 		return true;
 	}
 	/*virtual*/ S32		getOffset(S32 segment_local_x_coord, S32 start_offset, S32 num_chars, bool round) const 
@@ -104,7 +112,8 @@ class LLExpanderSegment : public LLTextSegment
 
 LLExpandableTextBox::LLTextBoxEx::Params::Params()
 :	more_label("more_label")
-{}
+{
+}
 
 LLExpandableTextBox::LLTextBoxEx::LLTextBoxEx(const Params& p)
 :	LLTextBox(p),
@@ -117,16 +126,13 @@ LLExpandableTextBox::LLTextBoxEx::LLTextBoxEx(const Params& p)
 
 void LLExpandableTextBox::LLTextBoxEx::reshape(S32 width, S32 height, BOOL called_from_parent)
 {
+	hideExpandText();
 	LLTextBox::reshape(width, height, called_from_parent);
 
 	if (getTextPixelHeight() > getRect().getHeight())
 	{
 		showExpandText();
 	}
-	else
-	{
-		hideExpandText();
-	}
 }
 
 void LLExpandableTextBox::LLTextBoxEx::setText(const LLStringExplicit& text,const LLStyle::Params& input_params)
@@ -317,7 +323,8 @@ void LLExpandableTextBox::expandTextBox()
 	mTextBox->hideExpandText();
 
 	S32 text_delta = mTextBox->getVerticalTextDelta();
-	text_delta += mTextBox->getVPad() * 2 + mScroll->getBorderWidth() * 2;
+	text_delta += mTextBox->getVPad() * 2;
+	text_delta += mScroll->getBorderWidth() * 2;
 	// no need to expand
 	if(text_delta <= 0)
 	{
diff --git a/indra/newview/llinspectobject.cpp b/indra/newview/llinspectobject.cpp
index 42d061ff7257023bdde20aeab2479657339f82ba..cb35a287e9c10b06db1232919d884e7acae6d9ce 100644
--- a/indra/newview/llinspectobject.cpp
+++ b/indra/newview/llinspectobject.cpp
@@ -416,18 +416,6 @@ void LLInspectObject::updateDescription(LLSelectNode* nodep)
 
 	LLTextBox* textbox = getChild<LLTextBox>("object_description");
 	textbox->setValue(desc);
-
-	// Truncate description text to fit in widget
-	// *HACK: OMG, use lower-left corner to truncate text
-	// Don't round the position, we want the left of the character
-	S32 corner_index = textbox->getDocIndexFromLocalCoord( 0, 0, FALSE);
-	LLWString desc_wide = textbox->getWText();
-	// index == length if position is past last character
-	if (corner_index < (S32)desc_wide.length())
-	{
-		desc_wide = desc_wide.substr(0, corner_index);
-		textbox->setWText(desc_wide);
-	}
 }
 
 void LLInspectObject::updateMediaCurrentURL()
diff --git a/indra/newview/llmaniptranslate.cpp b/indra/newview/llmaniptranslate.cpp
index 765b504afe0b2fa92713ab949febc7dfa04a500f..5f30ab4e0150b04ad54fdb77c2387be21703b0c7 100644
--- a/indra/newview/llmaniptranslate.cpp
+++ b/indra/newview/llmaniptranslate.cpp
@@ -101,6 +101,16 @@ const U32 ARROW_TO_AXIS[4] =
 	VZ
 };
 
+// Sort manipulator handles by their screen-space projection
+struct ClosestToCamera
+{
+	bool operator()(const LLManipTranslate::ManipulatorHandle& a,
+					const LLManipTranslate::ManipulatorHandle& b) const
+	{
+		return a.mEndPosition.mV[VZ] < b.mEndPosition.mV[VZ];
+	}
+};
+
 LLManipTranslate::LLManipTranslate( LLToolComposite* composite )
 :	LLManip( std::string("Move"), composite ),
 	mLastHoverMouseX(-1),
@@ -273,7 +283,6 @@ void LLManipTranslate::restoreGL()
 
 LLManipTranslate::~LLManipTranslate()
 {
-	for_each(mProjectedManipulators.begin(), mProjectedManipulators.end(), DeletePointer());
 }
 
 
@@ -888,8 +897,9 @@ void LLManipTranslate::highlightManipulators(S32 x, S32 y)
 		planar_manip_xy_visible = TRUE;
 	}
 
-	for_each(mProjectedManipulators.begin(), mProjectedManipulators.end(), DeletePointer());
-	mProjectedManipulators.clear();
+	// Project up to 9 manipulators to screen space 2*X, 2*Y, 2*Z, 3*planes
+	std::vector<ManipulatorHandle> projected_manipulators;
+	projected_manipulators.reserve(9);
 	
 	for (S32 i = 0; i < num_arrow_manips; i+= 2)
 	{
@@ -899,12 +909,12 @@ void LLManipTranslate::highlightManipulators(S32 x, S32 y)
 		LLVector4 projected_end = mManipulatorVertices[i + 1] * transform;
 		projected_end = projected_end * (1.f / projected_end.mV[VW]);
 
-		ManipulatorHandle* projManipulator = 
-			new ManipulatorHandle(LLVector3(projected_start.mV[VX], projected_start.mV[VY], projected_start.mV[VZ]), 
+		ManipulatorHandle projected_manip(
+				LLVector3(projected_start.mV[VX], projected_start.mV[VY], projected_start.mV[VZ]), 
 				LLVector3(projected_end.mV[VX], projected_end.mV[VY], projected_end.mV[VZ]), 
 				MANIPULATOR_IDS[i / 2],
 				10.f); // 10 pixel hotspot for arrows
-		mProjectedManipulators.insert(projManipulator);
+		projected_manipulators.push_back(projected_manip);
 	}
 
 	if (planar_manip_yz_visible)
@@ -916,12 +926,12 @@ void LLManipTranslate::highlightManipulators(S32 x, S32 y)
 		LLVector4 projected_end = mManipulatorVertices[i + 1] * transform;
 		projected_end = projected_end * (1.f / projected_end.mV[VW]);
 
-		ManipulatorHandle* projManipulator = 
-			new ManipulatorHandle(LLVector3(projected_start.mV[VX], projected_start.mV[VY], projected_start.mV[VZ]), 
+		ManipulatorHandle projected_manip(
+				LLVector3(projected_start.mV[VX], projected_start.mV[VY], projected_start.mV[VZ]), 
 				LLVector3(projected_end.mV[VX], projected_end.mV[VY], projected_end.mV[VZ]), 
 				MANIPULATOR_IDS[i / 2],
 				20.f); // 20 pixels for planar manipulators
-		mProjectedManipulators.insert(projManipulator);
+		projected_manipulators.push_back(projected_manip);
 	}
 
 	if (planar_manip_xz_visible)
@@ -933,12 +943,12 @@ void LLManipTranslate::highlightManipulators(S32 x, S32 y)
 		LLVector4 projected_end = mManipulatorVertices[i + 1] * transform;
 		projected_end = projected_end * (1.f / projected_end.mV[VW]);
 
-		ManipulatorHandle* projManipulator = 
-			new ManipulatorHandle(LLVector3(projected_start.mV[VX], projected_start.mV[VY], projected_start.mV[VZ]), 
+		ManipulatorHandle projected_manip(
+				LLVector3(projected_start.mV[VX], projected_start.mV[VY], projected_start.mV[VZ]), 
 				LLVector3(projected_end.mV[VX], projected_end.mV[VY], projected_end.mV[VZ]), 
 				MANIPULATOR_IDS[i / 2],
 				20.f); // 20 pixels for planar manipulators
-		mProjectedManipulators.insert(projManipulator);
+		projected_manipulators.push_back(projected_manip);
 	}
 
 	if (planar_manip_xy_visible)
@@ -950,12 +960,12 @@ void LLManipTranslate::highlightManipulators(S32 x, S32 y)
 		LLVector4 projected_end = mManipulatorVertices[i + 1] * transform;
 		projected_end = projected_end * (1.f / projected_end.mV[VW]);
 
-		ManipulatorHandle* projManipulator = 
-			new ManipulatorHandle(LLVector3(projected_start.mV[VX], projected_start.mV[VY], projected_start.mV[VZ]), 
+		ManipulatorHandle projected_manip(
+				LLVector3(projected_start.mV[VX], projected_start.mV[VY], projected_start.mV[VZ]), 
 				LLVector3(projected_end.mV[VX], projected_end.mV[VY], projected_end.mV[VZ]), 
 				MANIPULATOR_IDS[i / 2],
 				20.f); // 20 pixels for planar manipulators
-		mProjectedManipulators.insert(projManipulator);
+		projected_manipulators.push_back(projected_manip);
 	}
 
 	LLVector2 manip_start_2d;
@@ -967,13 +977,18 @@ void LLManipTranslate::highlightManipulators(S32 x, S32 y)
 	LLVector2 mousePos((F32)x - half_width, (F32)y - half_height);
 	LLVector2 mouse_delta;
 
-	for (minpulator_list_t::iterator iter = mProjectedManipulators.begin();
-		 iter != mProjectedManipulators.end(); ++iter)
+	// Keep order consistent with insertion via stable_sort
+	std::stable_sort( projected_manipulators.begin(),
+		projected_manipulators.end(),
+		ClosestToCamera() );
+
+	std::vector<ManipulatorHandle>::iterator it = projected_manipulators.begin();
+	for ( ; it != projected_manipulators.end(); ++it)
 	{
-		ManipulatorHandle* manipulator = *iter;
+		ManipulatorHandle& manipulator = *it;
 		{
-			manip_start_2d.setVec(manipulator->mStartPosition.mV[VX] * half_width, manipulator->mStartPosition.mV[VY] * half_height);
-			manip_end_2d.setVec(manipulator->mEndPosition.mV[VX] * half_width, manipulator->mEndPosition.mV[VY] * half_height);
+			manip_start_2d.setVec(manipulator.mStartPosition.mV[VX] * half_width, manipulator.mStartPosition.mV[VY] * half_height);
+			manip_end_2d.setVec(manipulator.mEndPosition.mV[VX] * half_width, manipulator.mEndPosition.mV[VY] * half_height);
 			manip_dir = manip_end_2d - manip_start_2d;
 
 			mouse_delta = mousePos - manip_start_2d;
@@ -985,9 +1000,9 @@ void LLManipTranslate::highlightManipulators(S32 x, S32 y)
 
 			if (mouse_pos_manip > 0.f &&
 				mouse_pos_manip < manip_length &&
-				mouse_dist_manip_squared < manipulator->mHotSpotRadius * manipulator->mHotSpotRadius)
+				mouse_dist_manip_squared < manipulator.mHotSpotRadius * manipulator.mHotSpotRadius)
 			{
-				mHighlightedPart = manipulator->mManipID;
+				mHighlightedPart = manipulator.mManipID;
 				break;
 			}
 		}
diff --git a/indra/newview/llmaniptranslate.h b/indra/newview/llmaniptranslate.h
index 25ff35cc726cab28e32b5979a083211aa439960a..d20b86b2f465d954ffb9e1498994ca3593e81028 100644
--- a/indra/newview/llmaniptranslate.h
+++ b/indra/newview/llmaniptranslate.h
@@ -89,17 +89,6 @@ class LLManipTranslate : public LLManip
 	F32			getMinGridScale();
 
 private:
-	struct compare_manipulators
-	{
-		bool operator() (const ManipulatorHandle* const a, const ManipulatorHandle* const b) const
-		{
-			if (a->mEndPosition.mV[VZ] != b->mEndPosition.mV[VZ])
-				return (a->mEndPosition.mV[VZ] < b->mEndPosition.mV[VZ]);
-			else
-				return a->mManipID < b->mManipID;			
-		}
-	};
-	
 	S32			mLastHoverMouseX;
 	S32			mLastHoverMouseY;
 	BOOL		mSendUpdateOnMouseUp;
@@ -116,8 +105,6 @@ class LLManipTranslate : public LLManip
 	LLVector3d	mDragCursorStartGlobal;
 	LLVector3d	mDragSelectionStartGlobal;
 	LLTimer		mUpdateTimer;
-	typedef std::set<ManipulatorHandle*, compare_manipulators> minpulator_list_t;
-	minpulator_list_t mProjectedManipulators;
 	LLVector4	mManipulatorVertices[18];
 	F32			mSnapOffsetMeters;
 	LLVector3	mSnapOffsetAxis;
diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp
index 44930f03c5edad758d4c69255106a1f8bf8f0951..6e99d5a5f0eb6f645c4c510ec6e04c53063b8212 100644
--- a/indra/newview/llselectmgr.cpp
+++ b/indra/newview/llselectmgr.cpp
@@ -3494,7 +3494,7 @@ void LLSelectMgr::deselectAllIfTooFar()
 
 	// HACK: Don't deselect when we're navigating to rate an object's
 	// owner or creator.  JC
-	if (gPieObject->getVisible() || gPieRate->getVisible() )
+	if (gMenuObject->getVisible())
 	{
 		return;
 	}
@@ -5493,11 +5493,15 @@ void dialog_refresh_all()
 
 	gFloaterTools->dirty();
 
-	gPieObject->needsArrange();
+	gMenuObject->needsArrange();
 
-	if( gPieAttachment->getVisible() )
+	if( gMenuAttachmentSelf->getVisible() )
 	{
-		gPieAttachment->arrange();
+		gMenuAttachmentSelf->arrange();
+	}
+	if( gMenuAttachmentOther->getVisible() )
+	{
+		gMenuAttachmentOther->arrange();
 	}
 
 	LLFloaterProperties::dirtyAll();
diff --git a/indra/newview/lltoastpanel.cpp b/indra/newview/lltoastpanel.cpp
index afb9e261b0f4093b00b1c710a9d142ad66f5a2a1..755e64777716000ae2527c000cc5b38c026996b2 100644
--- a/indra/newview/lltoastpanel.cpp
+++ b/indra/newview/lltoastpanel.cpp
@@ -80,7 +80,7 @@ void LLToastPanel::snapToMessageHeight(LLTextBase* message, S32 maxLineCount)
 
 		//Knowing the height is set to max allowed, getTextPixelHeight returns needed text height
 		//Perhaps we need to pass maxLineCount as parameter to getTextPixelHeight to avoid previous reshape.
-		S32 requiredTextHeight = message->getContentsRect().getHeight();
+		S32 requiredTextHeight = message->getTextBoundingRect().getHeight();
 		S32 newTextHeight = llmin(requiredTextHeight, maxTextHeight);
 
 		//Calculate last delta height deducting previous heightDelta 
diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp
index f88de20242112e44526e21ca785f7eae99d54c34..74fbce890d9513b3eecd1f73fd4bc750c0041b06 100644
--- a/indra/newview/lltoolpie.cpp
+++ b/indra/newview/lltoolpie.cpp
@@ -1443,28 +1443,29 @@ BOOL LLToolPie::pickRightMouseDownCallback()
 	{
 		LLParcelSelectionHandle selection = LLViewerParcelMgr::getInstance()->selectParcelAt( mPick.mPosGlobal );
 		gMenuHolder->setParcelSelection(selection);
-		gPieLand->show(x, y);
+		gMenuLand->show(x, y);
 
 		showVisualContextMenuEffect();
 
 	}
 	else if (mPick.mObjectID == gAgent.getID() )
 	{
-		if(!gPieSelf) 
+		if(!gMenuAvatarSelf) 
 		{
 			//either at very early startup stage or at late quitting stage,
 			//this event is ignored.
 			return TRUE ;
 		}
 
-		gPieSelf->show(x, y);
+		gMenuAvatarSelf->show(x, y);
 	}
 	else if (object)
 	{
 		gMenuHolder->setObjectSelection(LLSelectMgr::getInstance()->getSelection());
 
+		bool is_other_attachment = (object->isAttachment() && !object->isHUDAttachment() && !object->permYouOwner());
 		if (object->isAvatar() 
-			|| (object->isAttachment() && !object->isHUDAttachment() && !object->permYouOwner()))
+			|| is_other_attachment)
 		{
 			// Find the attachment's avatar
 			while( object && object->isAttachment())
@@ -1475,20 +1476,30 @@ BOOL LLToolPie::pickRightMouseDownCallback()
 			// Object is an avatar, so check for mute by id.
 			LLVOAvatar* avatar = (LLVOAvatar*)object;
 			std::string name = avatar->getFullname();
+			std::string mute_msg;
 			if (LLMuteList::getInstance()->isMuted(avatar->getID(), avatar->getFullname()))
 			{
-				gMenuHolder->childSetText("Avatar Mute", std::string("Unmute")); // *TODO:Translate
+				mute_msg = LLTrans::getString("UnmuteAvatar");
 			}
 			else
 			{
-				gMenuHolder->childSetText("Avatar Mute", std::string("Mute")); // *TODO:Translate
+				mute_msg = LLTrans::getString("MuteAvatar");
 			}
 
-			gPieAvatar->show(x, y);
+			if (is_other_attachment)
+			{
+				gMenuAttachmentOther->getChild<LLUICtrl>("Avatar Mute")->setValue(mute_msg);
+				gMenuAttachmentOther->show(x, y);
+			}
+			else
+			{
+				gMenuAvatarOther->getChild<LLUICtrl>("Avatar Mute")->setValue(mute_msg);
+				gMenuAvatarOther->show(x, y);
+			}
 		}
 		else if (object->isAttachment())
 		{
-			gPieAttachment->show(x, y);
+			gMenuAttachmentSelf->show(x, y);
 		}
 		else
 		{
@@ -1499,16 +1510,18 @@ BOOL LLToolPie::pickRightMouseDownCallback()
 			{
 				name = node->mName;
 			}
+			std::string mute_msg;
 			if (LLMuteList::getInstance()->isMuted(object->getID(), name))
 			{
-				gMenuHolder->childSetText("Object Mute", std::string("Unmute")); // *TODO:Translate
+				mute_msg = LLTrans::getString("UnmuteObject");
 			}
 			else
 			{
-				gMenuHolder->childSetText("Object Mute", std::string("Mute")); // *TODO:Translate
+				mute_msg = LLTrans::getString("MuteObject");
 			}
 			
-			gPieObject->show(x, y);
+			gMenuHolder->childSetText("Object Mute", mute_msg);
+			gMenuObject->show(x, y);
 
 			showVisualContextMenuEffect();
 		}
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 36d9e7935ff0f650367ed7fa87af5affe3bb044c..0be0b56bc3c37fe4bf07ea6e2e91d75b194bea5f 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -134,11 +134,12 @@ LLMenuGL		*gPopupMenuView = NULL;
 LLMenuBarGL		*gLoginMenuBarView = NULL;
 
 // Pie menus
-LLContextMenu	*gPieSelf	= NULL;
-LLContextMenu	*gPieAvatar = NULL;
-LLContextMenu	*gPieObject = NULL;
-LLContextMenu	*gPieAttachment = NULL;
-LLContextMenu	*gPieLand	= NULL;
+LLContextMenu	*gMenuAvatarSelf	= NULL;
+LLContextMenu	*gMenuAvatarOther = NULL;
+LLContextMenu	*gMenuObject = NULL;
+LLContextMenu	*gMenuAttachmentSelf = NULL;
+LLContextMenu	*gMenuAttachmentOther = NULL;
+LLContextMenu	*gMenuLand	= NULL;
 
 const std::string SAVE_INTO_INVENTORY("Save Object Back to My Inventory");
 const std::string SAVE_INTO_TASK_INVENTORY("Save Object Back to Object Contents");
@@ -146,7 +147,6 @@ const std::string SAVE_INTO_TASK_INVENTORY("Save Object Back to Object Contents"
 LLMenuGL* gAttachSubMenu = NULL;
 LLMenuGL* gDetachSubMenu = NULL;
 LLMenuGL* gTakeOffClothes = NULL;
-LLContextMenu* gPieRate = NULL;
 LLContextMenu* gAttachScreenPieMenu = NULL;
 LLContextMenu* gAttachPieMenu = NULL;
 LLContextMenu* gAttachBodyPartPieMenus[8];
@@ -376,25 +376,31 @@ void init_menus()
 	gMenuHolder->addChild( gPopupMenuView );
 
 	///
-	/// Pie menus
+	/// Context menus
 	///
-	gPieSelf = LLUICtrlFactory::getInstance()->createFromFile<LLContextMenu>("menu_pie_self.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
+	const widget_registry_t& registry =
+		LLViewerMenuHolderGL::child_registry_t::instance();
+	gMenuAvatarSelf = LLUICtrlFactory::createFromFile<LLContextMenu>(
+		"menu_avatar_self.xml", gMenuHolder, registry);
+	gMenuAvatarOther = LLUICtrlFactory::createFromFile<LLContextMenu>(
+		"menu_avatar_other.xml", gMenuHolder, registry);
 
-	// TomY TODO: what shall we do about these?
 	gDetachScreenPieMenu = gMenuHolder->getChild<LLContextMenu>("Object Detach HUD", true);
 	gDetachPieMenu = gMenuHolder->getChild<LLContextMenu>("Object Detach", true);
 
-	gPieAvatar = LLUICtrlFactory::getInstance()->createFromFile<LLContextMenu>("menu_pie_avatar.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
-
-	gPieObject = LLUICtrlFactory::getInstance()->createFromFile<LLContextMenu>("menu_pie_object.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
+	gMenuObject = LLUICtrlFactory::createFromFile<LLContextMenu>(
+		"menu_object.xml", gMenuHolder, registry);
 
 	gAttachScreenPieMenu = gMenuHolder->getChild<LLContextMenu>("Object Attach HUD");
 	gAttachPieMenu = gMenuHolder->getChild<LLContextMenu>("Object Attach");
-	gPieRate = gMenuHolder->getChild<LLContextMenu>("Rate Menu");
 
-	gPieAttachment = LLUICtrlFactory::getInstance()->createFromFile<LLContextMenu>("menu_pie_attachment.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
+	gMenuAttachmentSelf = LLUICtrlFactory::createFromFile<LLContextMenu>(
+		"menu_attachment_self.xml", gMenuHolder, registry);
+	gMenuAttachmentOther = LLUICtrlFactory::createFromFile<LLContextMenu>(
+		"menu_attachment_other.xml", gMenuHolder, registry);
 
-	gPieLand = LLUICtrlFactory::getInstance()->createFromFile<LLContextMenu>("menu_pie_land.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
+	gMenuLand = LLUICtrlFactory::createFromFile<LLContextMenu>(
+		"menu_land.xml", gMenuHolder, registry);
 
 	///
 	/// set up the colors
@@ -403,12 +409,13 @@ void init_menus()
 
 	LLColor4 context_menu_color = LLUIColorTable::instance().getColor("MenuPopupBgColor");
 	
-	gPieSelf->setBackgroundColor( context_menu_color );
-	gPieAvatar->setBackgroundColor( context_menu_color );
-	gPieObject->setBackgroundColor( context_menu_color );
-	gPieAttachment->setBackgroundColor( context_menu_color );
+	gMenuAvatarSelf->setBackgroundColor( context_menu_color );
+	gMenuAvatarOther->setBackgroundColor( context_menu_color );
+	gMenuObject->setBackgroundColor( context_menu_color );
+	gMenuAttachmentSelf->setBackgroundColor( context_menu_color );
+	gMenuAttachmentOther->setBackgroundColor( context_menu_color );
 
-	gPieLand->setBackgroundColor( context_menu_color );
+	gMenuLand->setBackgroundColor( context_menu_color );
 
 	color = LLUIColorTable::instance().getColor( "MenuPopupBgColor" );
 	gPopupMenuView->setBackgroundColor( color );
@@ -2263,20 +2270,23 @@ void cleanup_menus()
 	delete gMenuParcelObserver;
 	gMenuParcelObserver = NULL;
 
-	delete gPieSelf;
-	gPieSelf = NULL;
+	delete gMenuAvatarSelf;
+	gMenuAvatarSelf = NULL;
+
+	delete gMenuAvatarOther;
+	gMenuAvatarOther = NULL;
 
-	delete gPieAvatar;
-	gPieAvatar = NULL;
+	delete gMenuObject;
+	gMenuObject = NULL;
 
-	delete gPieObject;
-	gPieObject = NULL;
+	delete gMenuAttachmentSelf;
+	gMenuAttachmentSelf = NULL;
 
-	delete gPieAttachment;
-	gPieAttachment = NULL;
+	delete gMenuAttachmentOther;
+	gMenuAttachmentSelf = NULL;
 
-	delete gPieLand;
-	gPieLand = NULL;
+	delete gMenuLand;
+	gMenuLand = NULL;
 
 	delete gMenuBarView;
 	gMenuBarView = NULL;
@@ -4911,7 +4921,7 @@ class LLEditDelete : public view_listener_t
 
 		// When deleting an object we may not actually be done
 		// Keep selection so we know what to delete when confirmation is needed about the delete
-		gPieObject->hide();
+		gMenuObject->hide();
 		return true;
 	}
 };
@@ -4944,7 +4954,7 @@ void handle_object_delete()
 
 		// When deleting an object we may not actually be done
 		// Keep selection so we know what to delete when confirmation is needed about the delete
-		gPieObject->hide();
+		gMenuObject->hide();
 		return;
 }
 
@@ -6006,7 +6016,7 @@ class LLWornItemFetchedObserver : public LLInventoryFetchObserver
 protected:
 	virtual void done()
 	{
-		gPieAttachment->buildDrawLabels();
+		gMenuAttachmentSelf->buildDrawLabels();
 		gInventory.removeObserver(this);
 		delete this;
 	}
diff --git a/indra/newview/llviewermenu.h b/indra/newview/llviewermenu.h
index 01a6b341707bb4f28a85a63924d0c2943d497f59..71be4cb592eb6a193ed435aa586376d27aad4b18 100644
--- a/indra/newview/llviewermenu.h
+++ b/indra/newview/llviewermenu.h
@@ -160,21 +160,13 @@ extern LLMenuGL*		gPopupMenuView;
 extern LLViewerMenuHolderGL*	gMenuHolder;
 extern LLMenuBarGL*		gLoginMenuBarView;
 
-// Pie menus
-extern LLContextMenu		*gPieSelf;
-extern LLContextMenu		*gPieAvatar;
-extern LLContextMenu		*gPieObject;
-extern LLContextMenu		*gPieAttachment;
-
-extern LLContextMenu		*gPieLand;
-extern LLContextMenu		*gPieRate;
-
-// Pie menus
-extern LLContextMenu	*gPieSelfSimple;
-extern LLContextMenu	*gPieAvatarSimple;
-extern LLContextMenu	*gPieObjectSimple;
-extern LLContextMenu	*gPieAttachmentSimple;
-extern LLContextMenu	*gPieLandSimple;
+// Context menus in 3D scene
+extern LLContextMenu		*gMenuAvatarSelf;
+extern LLContextMenu		*gMenuAvatarOther;
+extern LLContextMenu		*gMenuObject;
+extern LLContextMenu		*gMenuAttachmentSelf;
+extern LLContextMenu		*gMenuAttachmentOther;
+extern LLContextMenu		*gMenuLand;
 
 // Needed to build menus when attachment site list available
 extern LLMenuGL* gAttachSubMenu;
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 8529a935271a2c2afdd2ce0a404b27897eeb8ab7..966aeba25cb6a5ed74377bd3f15c6656640cbd5a 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -259,19 +259,21 @@ class RecordToChatConsole : public LLError::Recorder, public LLSingleton<RecordT
 	virtual void recordMessage(LLError::ELevel level,
 								const std::string& message)
 	{
-		// only log warnings to chat console
-		if (level == LLError::LEVEL_WARN)
-		{
-			LLFloaterChat* chat_floater = LLFloaterReg::findTypedInstance<LLFloaterChat>("chat");
-			if (chat_floater && gSavedSettings.getBOOL("WarningsAsChat"))
-			{
-				LLChat chat;
-				chat.mText = message;
-				chat.mSourceType = CHAT_SOURCE_SYSTEM;
+		//FIXME: this is NOT thread safe, and will do bad things when a warning is issued from a non-UI thread
 
-				chat_floater->addChat(chat, FALSE, FALSE);
-			}
-		}
+		// only log warnings to chat console
+		//if (level == LLError::LEVEL_WARN)
+		//{
+			//LLFloaterChat* chat_floater = LLFloaterReg::findTypedInstance<LLFloaterChat>("chat");
+			//if (chat_floater && gSavedSettings.getBOOL("WarningsAsChat"))
+			//{
+			//	LLChat chat;
+			//	chat.mText = message;
+			//	chat.mSourceType = CHAT_SOURCE_SYSTEM;
+
+			//	chat_floater->addChat(chat, FALSE, FALSE);
+			//}
+		//}
 	}
 };
 
@@ -3140,7 +3142,6 @@ void LLViewerWindow::pickAsync(S32 x, S32 y_from_bot, MASK mask, void (*callback
 		return;
 	}
 	
-	// push back pick info object
 	BOOL in_build_mode = LLFloaterReg::instanceVisible("build");
 	if (in_build_mode || LLDrawPoolAlpha::sShowDebugAlpha)
 	{
@@ -3149,27 +3150,8 @@ void LLViewerWindow::pickAsync(S32 x, S32 y_from_bot, MASK mask, void (*callback
 		pick_transparent = TRUE;
 	}
 
-	// center initial pick frame buffer region under mouse cursor
-	// since that area is guaranteed to be onscreen and hence a valid
-	// part of the framebuffer
-	if (mPicks.empty())
-	{
-		mPickScreenRegion.setCenterAndSize(x, y_from_bot, PICK_DIAMETER, PICK_DIAMETER);
-
-		if (mPickScreenRegion.mLeft < mWorldViewRectScaled.mLeft) mPickScreenRegion.translate(mWorldViewRectScaled.mLeft - mPickScreenRegion.mLeft, 0);
-		if (mPickScreenRegion.mBottom < mWorldViewRectScaled.mBottom) mPickScreenRegion.translate(0, mWorldViewRectScaled.mBottom - mPickScreenRegion.mBottom);
-		if (mPickScreenRegion.mRight > mWorldViewRectScaled.mRight ) mPickScreenRegion.translate(mWorldViewRectScaled.mRight - mPickScreenRegion.mRight, 0);
-		if (mPickScreenRegion.mTop > mWorldViewRectScaled.mTop ) mPickScreenRegion.translate(0, mWorldViewRectScaled.mTop - mPickScreenRegion.mTop);
-	}
-
-	// set frame buffer region for picking results
-	// stack multiple picks left to right
-	LLRect screen_region = mPickScreenRegion;
-	screen_region.translate(mPicks.size() * PICK_DIAMETER, 0);
-
-	LLPickInfo pick(LLCoordGL(x, y_from_bot), screen_region, mask, pick_transparent, TRUE, callback);
-
-	schedulePick(pick);
+	LLPickInfo pick_info(LLCoordGL(x, y_from_bot), mask, pick_transparent, TRUE, callback);
+	schedulePick(pick_info);
 }
 
 void LLViewerWindow::schedulePick(LLPickInfo& pick_info)
@@ -3184,10 +3166,11 @@ void LLViewerWindow::schedulePick(LLPickInfo& pick_info)
 	
 		return;
 	}
-	llassert_always(pick_info.mScreenRegion.notEmpty());
 	mPicks.push_back(pick_info);
 	
 	// delay further event processing until we receive results of pick
+	// only do this for async picks so that handleMouseUp won't be called
+	// until the pick triggered in handleMouseDown has been processed, for example
 	mWindow->delayInputProcessing();
 }
 
@@ -3235,20 +3218,18 @@ LLPickInfo LLViewerWindow::pickImmediate(S32 x, S32 y_from_bot,  BOOL pick_trans
 		return LLPickInfo();
 	}
 
-	pickAsync(x, y_from_bot, gKeyboard->currentMask(TRUE), NULL, pick_transparent);
-	// assume that pickAsync put the results in the back of the mPicks list
-	if(mPicks.size() != 0)
-	{
-		mLastPick = mPicks.back();
-		mLastPick.fetchResults();
-		mPicks.pop_back();
-	}
-	else
+	BOOL in_build_mode = LLFloaterReg::instanceVisible("build");
+	if (in_build_mode || LLDrawPoolAlpha::sShowDebugAlpha)
 	{
-		lldebugs << "List of last picks is empty: Using stub pick" << llendl;
-		mLastPick = LLPickInfo();
+		// build mode allows interaction with all transparent objects
+		// "Show Debug Alpha" means no object actually transparent
+		pick_transparent = TRUE;
 	}
 
+	// shortcut queueing in mPicks and just update mLastPick in place
+	mLastPick = LLPickInfo(LLCoordGL(x, y_from_bot), gKeyboard->currentMask(TRUE), pick_transparent, TRUE, NULL);
+	mLastPick.fetchResults();
+
 	return mLastPick;
 }
 
@@ -4895,13 +4876,11 @@ LLPickInfo::LLPickInfo()
 }
 
 LLPickInfo::LLPickInfo(const LLCoordGL& mouse_pos, 
-					   const LLRect& screen_region,
 						MASK keyboard_mask, 
 						BOOL pick_transparent,
 						BOOL pick_uv_coords,
 						void (*pick_callback)(const LLPickInfo& pick_info))
 	: mMousePt(mouse_pos),
-	  mScreenRegion(screen_region),
 	  mKeyMask(keyboard_mask),
 	  mPickCallback(pick_callback),
 	  mPickType(PICK_INVALID),
diff --git a/indra/newview/llviewerwindow.h b/indra/newview/llviewerwindow.h
index 1d564a133835c2e867cefbb320bb8f69ffde31e5..766c66ed0f369a760f77b586dfe64d96ddf63927 100644
--- a/indra/newview/llviewerwindow.h
+++ b/indra/newview/llviewerwindow.h
@@ -88,7 +88,6 @@ class LLPickInfo
 public:
 	LLPickInfo();
 	LLPickInfo(const LLCoordGL& mouse_pos, 
-		const LLRect& screen_region,
 		MASK keyboard_mask, 
 		BOOL pick_transparent, 
 		BOOL pick_surface_info,
@@ -120,7 +119,6 @@ class LLPickInfo
 	LLVector3		mNormal;
 	LLVector3		mBinormal;
 	BOOL			mPickTransparent;
-	LLRect			mScreenRegion;
 	void		    getSurfaceInfo();
 
 private:
@@ -345,7 +343,6 @@ class LLViewerWindow : public LLWindowCallbacks
 	void			performPick();
 	void			returnEmptyPicks();
 
-
 	void			pickAsync(S32 x, S32 y_from_bot, MASK mask, void (*callback)(const LLPickInfo& pick_info), BOOL pick_transparent = FALSE);
 	LLPickInfo		pickImmediate(S32 x, S32 y, BOOL pick_transparent);
 	LLHUDIcon* cursorIntersectIcon(S32 mouse_x, S32 mouse_y, F32 depth,
@@ -397,7 +394,7 @@ class LLViewerWindow : public LLWindowCallbacks
 private:
 	bool                    shouldShowToolTipFor(LLMouseHandler *mh);
 	static bool onAlert(const LLSD& notify);
-	
+
 	void			switchToolByMask(MASK mask);
 	void			destroyWindow();
 	void			drawMouselookInstructions();
diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml
index cdbeed111e3104e06148cc7bc9c89697f1324ab7..b6995d2122da6c60aecedd60a829db731589ad9c 100644
--- a/indra/newview/skins/default/colors.xml
+++ b/indra/newview/skins/default/colors.xml
@@ -67,7 +67,7 @@
 	 value="0 0 1 1" />
 	<color
 	 name="Yellow"
-	 value="1 1 0 1" />
+	 value="0.114 0.65 0.1" />
 	<color
 	 name="Unused?"
 	 value="1 0.5 0 1" />
@@ -513,7 +513,7 @@
      reference="White" />
     <color
      name="ObjectChatColor"
-     reference="0.7 0.8 0.9 1" />
+     reference="EmphasisColor" />
     <color
      name="OverdrivenColor"
      value="1 0 0 1" />
diff --git a/indra/newview/skins/default/textures/bottomtray/Notices_Unread.png b/indra/newview/skins/default/textures/bottomtray/Notices_Unread.png
index aa3898ca99f816f86ecb763761d43d91a3d7420a..0ac5b72b8f70e67faef73d07f1ffcd483690c4c1 100644
Binary files a/indra/newview/skins/default/textures/bottomtray/Notices_Unread.png and b/indra/newview/skins/default/textures/bottomtray/Notices_Unread.png differ
diff --git a/indra/newview/skins/default/textures/bottomtray/Unread_IM.png b/indra/newview/skins/default/textures/bottomtray/Unread_IM.png
index 598342ea805b903d7e1b5bc9b25d86d41d2d9c96..5c0c85b864e4d3c76c17fe10e46994e191cddf6e 100644
Binary files a/indra/newview/skins/default/textures/bottomtray/Unread_IM.png and b/indra/newview/skins/default/textures/bottomtray/Unread_IM.png differ
diff --git a/indra/newview/skins/default/textures/bottomtray/WellButton_Lit.png b/indra/newview/skins/default/textures/bottomtray/WellButton_Lit.png
index 60676b43fd96e34c728bf71ab5fcfc0a442cb491..dd9133bcc463fe3303ae364bdd381ae3132f66a0 100644
Binary files a/indra/newview/skins/default/textures/bottomtray/WellButton_Lit.png and b/indra/newview/skins/default/textures/bottomtray/WellButton_Lit.png differ
diff --git a/indra/newview/skins/default/textures/bottomtray/WellButton_Lit_Selected.png b/indra/newview/skins/default/textures/bottomtray/WellButton_Lit_Selected.png
index 98cde96aff13e42fc24f71d793613b32737e7b34..0080e71f4191729d2902dc07d49329c185833100 100644
Binary files a/indra/newview/skins/default/textures/bottomtray/WellButton_Lit_Selected.png and b/indra/newview/skins/default/textures/bottomtray/WellButton_Lit_Selected.png differ
diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml
index 24d3512bcb74ff81418854b7a5ba0f81531720dd..0317d55768125eda0dee9c7df28fdd16620d74e2 100644
--- a/indra/newview/skins/default/textures/textures.xml
+++ b/indra/newview/skins/default/textures/textures.xml
@@ -143,6 +143,7 @@ with the same filename but different name
   <texture name="DropDown_Over" file_name="widgets/DropDown_Over.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" />
   <texture name="DropDown_Press" file_name="widgets/DropDown_Press.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" />
   <texture name="DropDown_Selected" file_name="widgets/DropDown_Selected.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" />
+  <texture name="DropDown_On" file_name="widgets/DropDown_On.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" />
   <texture name="DropDown_Off" file_name="widgets/DropDown_Off.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" />
 
   <texture name="DropTarget" file_name="widgets/DropTarget.png" preload="false" />
@@ -592,9 +593,9 @@ with the same filename but different name
 
   <texture name="Unread_IM" file_name="bottomtray/Unread_IM.png" preload="false" />
   <texture name="Unread_Msg" file_name="bottomtray/Unread_Msg.png" preload="false" />
-  
-  <texture name="WellButton_Lit" file_name="bottomtray/WellButton_Lit.png" />
-  <texture name="WellButton_Lit_Selected" file_name="bottomtray/WellButton_Lit_Selected.png" />
+
+  <texture name="WellButton_Lit" file_name="bottomtray/WellButton_Lit.png"  preload="true" scale.left="4" scale.top="19" scale.right="28" scale.bottom="4" />
+  <texture name="WellButton_Lit_Selected" file_name="bottomtray/WellButton_Lit_Selected.png" preload="true" scale.left="4" scale.top="19" scale.right="28" scale.bottom="4" />
 
   <texture name="VoicePTT_Lvl1" file_name="bottomtray/VoicePTT_Lvl1.png" preload="false" />
   <texture name="VoicePTT_Lvl2" file_name="bottomtray/VoicePTT_Lvl2.png" preload="false" />
diff --git a/indra/newview/skins/default/xui/en/floater_media_settings.xml b/indra/newview/skins/default/xui/en/floater_media_settings.xml
index 8122386fae35c3fb7c31072949454e9b43b5a779..681731b0da538e79d8c11f5a47f83175d83ebce4 100644
--- a/indra/newview/skins/default/xui/en/floater_media_settings.xml
+++ b/indra/newview/skins/default/xui/en/floater_media_settings.xml
@@ -1,7 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <floater
  legacy_header_height="18"
- bottom="666" 
  can_close="true" 
  can_drag_on_left="false" 
  can_minimize="true"
diff --git a/indra/newview/skins/default/xui/en/floater_preview_texture.xml b/indra/newview/skins/default/xui/en/floater_preview_texture.xml
index 602a18ea56c421f9755b1e3b4ee972dba2e152df..abc30c335cdc0c6bc8627f0f94a4389411831b88 100644
--- a/indra/newview/skins/default/xui/en/floater_preview_texture.xml
+++ b/indra/newview/skins/default/xui/en/floater_preview_texture.xml
@@ -3,15 +3,15 @@
  legacy_header_height="18"
  auto_tile="true"
  can_resize="true"
- follows="left|bottom"
- height="331"
+ follows="left|top"
+ height="313"
  layout="topleft"
  min_height="120"
- min_width="300"
+ min_width="320"
  name="preview_texture"
  help_topic="preview_texture"
- width="300">
-    <floater.string
+ width="320">
+   <floater.string
      name="Title">
         Texture: [NAME]
     </floater.string>
@@ -43,72 +43,38 @@
      max_length="127"
      name="desc"
      width="190" />
-    <button
-     follows="left|bottom"
-     height="22"
-     label="OK"
-     layout="topleft"
-     left="80"
-     name="Keep"
-     top="302"
-     width="100" />
-    <button
-     follows="left|bottom"
-     height="22"
-     label="Cancel"
-     layout="topleft"
-     left_pad="5"
-     name="Discard"
-     top_delta="0"
-     width="100" />
-    <button
-     follows="left|bottom"
-     height="22"
-     label="Save As"
-     layout="topleft"
-     left_pad="5"
-     name="save_tex_btn"
-     top_delta="0"
-     width="100" />
     <text
      type="string"
+     halign="right"
      length="1"
-     follows="left|bottom"
+     follows="right|bottom"
      height="16"
      layout="topleft"
-     left="13"
+     left="110"
      name="dimensions"
-     top="309"
-     width="303">
+     top="255"
+     width="200">
         [WIDTH]px x [HEIGHT]px
     </text>
     <text
      type="string"
+     halign="right"
      length="1"
-     bg_visible="false"
-     border_drop_shadow_visible="false"
-     border_visible="false"
-     top="309"
-     drop_shadow_visible="true"
-     enabled="true"
      follows="right|bottom"
-     font="SansSerifSmall"
-     h_pad="0"
-     halign="right"
-     height="14"
-     left="54"
-     mouse_opaque="true"
-     name="aspect_ratio"
-     v_pad="0"
-     width="110">
-    	Preview Aspect Ratio
+     height="16"
+     layout="topleft"
+     left_delta="-110"
+     name="dimensions"
+     top_pad="5"
+     width="200">
+        Preview aspect ratio
     </text>
     <combo_box
      allow_text_entry="true" 
-     top="306" 
+     top_delta="-3" 
      follows="right|bottom" 
-     height="20"
-     left="176"
+     height="23"
+     left_pad="10"
      max_chars="20"
      mouse_opaque="true"
      enabled="true"
@@ -140,4 +106,31 @@
 		2:1
 	</combo_item>
 	</combo_box>
+    <button
+     follows="right|bottom"
+     height="22"
+     label="OK"
+     layout="topleft"
+     left="6"
+     name="keep"
+     top_pad="5"
+     width="100" />
+    <button
+     follows="right|bottom"
+     height="22"
+     label="Cancel"
+     layout="topleft"
+     left_pad="5"
+     name="discard"
+     top_delta="0"
+     width="100" />
+    <button
+     follows="right|bottom"
+     height="22"
+     label="Save As"
+     layout="topleft"
+     left_pad="5"
+     name="save_tex_btn"
+     top_delta="0"
+     width="100" />
 </floater>
diff --git a/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml
index 113da9ea4db2725c9b386470bdb5f16168a555a8..695021f7550cacf58369260ae2670f54fdcaecd8 100644
--- a/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml
+++ b/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml
@@ -101,7 +101,7 @@
     <filter_editor
      follows="left|top|right"
      height="23"
-     label="Filter textures"
+     label="Filter Textures"
      layout="topleft"
      left="175"
      name="inventory search editor"
diff --git a/indra/newview/skins/default/xui/en/inspect_object.xml b/indra/newview/skins/default/xui/en/inspect_object.xml
index 16f6e49092ecdb98ce2c6cad643b10d6948f1a2e..cedf83f8b1f71bdea6223834f613623dc090cc52 100644
--- a/indra/newview/skins/default/xui/en/inspect_object.xml
+++ b/indra/newview/skins/default/xui/en/inspect_object.xml
@@ -9,7 +9,7 @@
  bg_opaque_image="Inspector_Background"
  can_close="false"
  can_minimize="false"
- height="148"
+ height="150"
  layout="topleft"
  name="inspect_object"
  single_instance="true"
@@ -71,13 +71,15 @@ owner secondlife:///app/agent/0e346d8b-4433-4d66-a6b0-fd37083abc4c/about
    width="196">
 L$300,000
   </text>
-   <text
+  <text
+   clip_partial="true" 
    follows="all"
    font="SansSerifSmall"
-   height="36"
+   height="37"
    left="8"
    name="object_description"
    top_pad="0"
+   use_ellipses="true" 
    width="220"
    word_wrap="true">
 This is a really long description for an object being as how it is at least 80 characters in length and maybe more like 120 at this point. Who knows, really?
@@ -90,7 +92,7 @@ This is a really long description for an object being as how it is at least 80 c
    height="13"
    left_delta="0"
    name="object_media_url"
-   top_pad="0"
+   top_pad="-1"
    width="291"
    max_length = "50"
    use_ellipses="true">
@@ -102,7 +104,7 @@ This is a really long description for an object being as how it is at least 80 c
    label="Buy"
    left="8"
    name="buy_btn"
-   top="119"
+   top="121"
    width="80" />
   <button
    follows="top|left"
diff --git a/indra/newview/skins/default/xui/en/menu_attachment_other.xml b/indra/newview/skins/default/xui/en/menu_attachment_other.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5b94645b603af76db3d12c70a6dadb88e5c00be6
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/menu_attachment_other.xml
@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<!-- *NOTE: See also menu_avatar_other.xml -->
+<context_menu
+ layout="topleft"
+ name="Avatar Pie">
+    <menu_item_call
+     label="View Profile"
+     name="Profile...">
+        <menu_item_call.on_click
+         function="ShowAgentProfile"
+         parameter="hit object" />
+    </menu_item_call>
+   <menu_item_call
+     enabled="false"
+     label="Add Friend"
+     name="Add Friend">
+        <menu_item_call.on_click
+         function="Avatar.AddFriend" />
+        <menu_item_call.on_enable
+         function="Avatar.EnableAddFriend" />
+    </menu_item_call>
+    <menu_item_call
+     label="IM"
+     name="Send IM...">
+        <menu_item_call.on_click
+         function="Avatar.SendIM" />
+    </menu_item_call>
+    <menu_item_call
+     label="Call"
+     name="Call">
+        <menu_item_call.on_click
+         function="Avatar.Call" />
+    </menu_item_call>
+      <menu_item_call
+         label="Invite to Group"
+         name="Invite...">
+      <menu_item_call.on_click
+         function="Avatar.InviteToGroup" />
+      </menu_item_call>
+   <menu_item_separator />
+    <menu_item_call
+     enabled="false"
+     label="Block"
+     name="Avatar Mute">
+        <menu_item_call.on_click
+         function="Avatar.Mute" />
+        <menu_item_call.on_enable
+         function="Avatar.EnableMute" />
+    </menu_item_call>
+    <menu_item_call
+     label="Report"
+     name="abuse">
+        <menu_item_call.on_click
+         function="Avatar.ReportAbuse" />
+    </menu_item_call>
+        <menu_item_call
+         label="Freeze"
+         name="Freeze...">
+            <menu_item_call.on_click
+             function="Avatar.Freeze" />
+            <menu_item_call.on_visible
+             function="Avatar.EnableFreezeEject"/>
+        </menu_item_call>
+        <menu_item_call
+         label="Eject"
+         name="Eject...">
+            <menu_item_call.on_click
+             function="Avatar.Eject" />
+            <menu_item_call.on_visible
+             function="Avatar.EnableFreezeEject"/>
+        </menu_item_call>
+        <menu_item_call
+         label="Debug"
+         name="Debug...">
+            <menu_item_call.on_click
+             function="Avatar.Debug" />
+            <menu_item_call.on_visible
+             function="IsGodCustomerService"/>
+        </menu_item_call>
+	    <menu_item_call
+         label="Zoom In"
+          name="Zoom In">
+        <menu_item_call.on_click
+           function="Tools.LookAtSelection"
+           parameter="zoom" />
+    </menu_item_call>
+   <menu_item_call
+     enabled="false"
+     label="Pay"
+     name="Pay...">
+        <menu_item_call.on_click
+         function="PayObject" />
+        <menu_item_call.on_enable
+         function="EnablePayAvatar" />
+    </menu_item_call>
+   <menu_item_separator />
+   <menu_item_call
+       label="Object Profile"
+       name="Object Inspect">
+         <menu_item_call.on_click
+          function="Object.Inspect" />
+         <menu_item_call.on_enable
+          function="Object.EnableInspect" />
+   </menu_item_call>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/en/menu_attachment_self.xml b/indra/newview/skins/default/xui/en/menu_attachment_self.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c85dbbb1bcd6c664dd5c98538ff5257cad60344f
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/menu_attachment_self.xml
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<context_menu
+ layout="topleft"
+ name="Attachment Pie">
+    <menu_item_call
+     enabled="false"
+     label="Touch"
+     layout="topleft"
+     name="Attachment Object Touch">
+        <menu_item_call.on_click
+         function="Object.Touch" />
+        <menu_item_call.on_enable
+         function="Object.EnableTouch"
+         name="EnableTouch"
+         parameter="Touch" />
+    </menu_item_call>
+    <!--menu_item_call
+     label="Stand Up"
+     layout="topleft"
+     name="Stand Up">
+        <menu_item_call.on_click
+         function="Self.StandUp"
+         parameter="" />
+        <menu_item_call.on_enable
+         function="Self.EnableStandUp" />
+    </menu_item_call-->
+        <menu_item_call
+     enabled="false"
+     label="Edit"
+     layout="topleft"
+     name="Edit...">
+        <menu_item_call.on_click
+         function="Object.Edit" />
+        <menu_item_call.on_enable
+         function="EnableEdit" />
+    </menu_item_call>
+    <menu_item_call
+     enabled="false"
+     label="Detach"
+     layout="topleft"
+     name="Detach">
+        <menu_item_call.on_click
+         function="Attachment.Detach" />
+        <menu_item_call.on_enable
+         function="Attachment.EnableDetach" />
+    </menu_item_call>
+      <menu_item_call
+     enabled="false"
+     label="Drop"
+     layout="topleft"
+     name="Drop">
+        <menu_item_call.on_click
+         function="Attachment.Drop" />
+        <menu_item_call.on_enable
+         function="Attachment.EnableDrop" />
+    </menu_item_call>
+    <!--menu_item_call
+     label="My Profile"
+     layout="topleft"
+     name="Profile...">
+        <menu_item_call.on_click
+         function="ShowAgentProfile"
+         parameter="agent" />
+    </menu_item_call>
+    <menu_item_call
+     label="My Appearance"
+     layout="topleft"
+     name="Appearance...">
+        <menu_item_call.on_click
+         function="ShowFloater"
+         parameter="appearance" />
+        <menu_item_call.on_enable
+         function="Edit.EnableCustomizeAvatar" />
+
+    </menu_item_call-->
+    <menu_item_separator
+      layout="topleft" />
+    
+       <menu_item_call
+     label="Stand Up"
+     layout="topleft"
+     name="Stand Up">
+        <menu_item_call.on_click
+         function="Self.StandUp"
+         parameter="" />
+        <menu_item_call.on_enable
+         function="Self.EnableStandUp" />
+    </menu_item_call>
+     <menu_item_call
+     label="My Appearance"
+     layout="topleft"
+     name="Appearance...">
+        <menu_item_call.on_click
+         function="ShowFloater"
+         parameter="appearance" />
+        <menu_item_call.on_enable
+         function="Edit.EnableCustomizeAvatar" />
+    </menu_item_call>
+   <menu_item_call
+     label="My Friends"
+     layout="topleft"
+     name="Friends...">
+        <menu_item_call.on_click
+         function="SideTray.PanelPeopleTab"
+         parameter="friends_panel" />
+    </menu_item_call>
+    <menu_item_call
+     label="My Groups"
+     layout="topleft"
+     name="Groups...">
+        <menu_item_call.on_click
+         function="SideTray.PanelPeopleTab"
+         parameter="groups_panel" />
+    </menu_item_call>
+   <menu_item_call
+     label="My Profile"
+     layout="topleft"
+     name="Profile...">
+        <menu_item_call.on_click
+         function="ShowAgentProfile"
+         parameter="agent" />
+    </menu_item_call>
+    
+</context_menu>
diff --git a/indra/newview/skins/default/xui/en/menu_avatar_other.xml b/indra/newview/skins/default/xui/en/menu_avatar_other.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0ad41546d204575e0eb369304c55a3f76a1b8c9b
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/menu_avatar_other.xml
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<!-- *NOTE: See also menu_attachment_other.xml -->
+<context_menu
+ layout="topleft"
+ name="Avatar Pie">
+    <menu_item_call
+     label="View Profile"
+     name="Profile...">
+        <menu_item_call.on_click
+         function="ShowAgentProfile"
+         parameter="hit object" />
+    </menu_item_call>
+   <menu_item_call
+     enabled="false"
+     label="Add Friend"
+     name="Add Friend">
+        <menu_item_call.on_click
+         function="Avatar.AddFriend" />
+        <menu_item_call.on_enable
+         function="Avatar.EnableAddFriend" />
+    </menu_item_call>
+    <menu_item_call
+     label="IM"
+     name="Send IM...">
+        <menu_item_call.on_click
+         function="Avatar.SendIM" />
+    </menu_item_call>
+    <menu_item_call
+     label="Call"
+     name="Call">
+        <menu_item_call.on_click
+         function="Avatar.Call" />
+    </menu_item_call>
+      <menu_item_call
+         label="Invite to Group"
+         name="Invite...">
+      <menu_item_call.on_click
+         function="Avatar.InviteToGroup" />
+      </menu_item_call>
+   <menu_item_separator />
+    <menu_item_call
+     enabled="false"
+     label="Block"
+     name="Avatar Mute">
+        <menu_item_call.on_click
+         function="Avatar.Mute" />
+        <menu_item_call.on_enable
+         function="Avatar.EnableMute" />
+    </menu_item_call>
+    <menu_item_call
+     label="Report"
+     name="abuse">
+        <menu_item_call.on_click
+         function="Avatar.ReportAbuse" />
+    </menu_item_call>
+        <menu_item_call
+         label="Freeze"
+         name="Freeze...">
+            <menu_item_call.on_click
+             function="Avatar.Freeze" />
+            <menu_item_call.on_visible
+             function="Avatar.EnableFreezeEject"/>
+        </menu_item_call>
+        <menu_item_call
+         label="Eject"
+         name="Eject...">
+            <menu_item_call.on_click
+             function="Avatar.Eject" />
+            <menu_item_call.on_visible
+             function="Avatar.EnableFreezeEject"/>
+        </menu_item_call>
+        <menu_item_call
+         label="Debug"
+         name="Debug...">
+            <menu_item_call.on_click
+             function="Avatar.Debug" />
+            <menu_item_call.on_visible
+             function="IsGodCustomerService"/>
+        </menu_item_call>
+	    <menu_item_call
+         label="Zoom In"
+          name="Zoom In">
+        <menu_item_call.on_click
+           function="Tools.LookAtSelection"
+           parameter="zoom" />
+    </menu_item_call>
+   <menu_item_call
+     enabled="false"
+     label="Pay"
+     name="Pay...">
+        <menu_item_call.on_click
+         function="PayObject" />
+        <menu_item_call.on_enable
+         function="EnablePayAvatar" />
+    </menu_item_call>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/en/menu_avatar_self.xml b/indra/newview/skins/default/xui/en/menu_avatar_self.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c6ce612a76482f0e1f58719f662fc9debe623c29
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/menu_avatar_self.xml
@@ -0,0 +1,227 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<context_menu
+ layout="topleft"
+ name="Self Pie">
+       <menu_item_call
+     label="Stand Up"
+     layout="topleft"
+     name="Stand Up">
+        <menu_item_call.on_click
+         function="Self.StandUp"
+         parameter="" />
+        <menu_item_call.on_enable
+         function="Self.EnableStandUp" />
+    </menu_item_call>
+    <context_menu
+     label="Take Off &gt;"
+     layout="topleft"
+     name="Take Off &gt;">
+        <context_menu
+         label="Clothes &gt;"
+         layout="topleft"
+         name="Clothes &gt;">
+            <menu_item_call
+             enabled="false"
+             label="Shirt"
+             layout="topleft"
+             name="Shirt">
+                <menu_item_call.on_click
+                 function="Edit.TakeOff"
+                 parameter="shirt" />
+                <menu_item_call.on_enable
+                 function="Edit.EnableTakeOff"
+                 parameter="shirt" />
+            </menu_item_call>
+            <menu_item_call
+             enabled="false"
+             label="Pants"
+             layout="topleft"
+             name="Pants">
+                <menu_item_call.on_click
+                 function="Edit.TakeOff"
+                 parameter="pants" />
+                <menu_item_call.on_enable
+                 function="Edit.EnableTakeOff"
+                 parameter="pants" />
+            </menu_item_call>
+            <menu_item_call
+             enabled="false"
+             label="Skirt"
+             layout="topleft"
+             name="Skirt">
+                <menu_item_call.on_click
+                 function="Edit.TakeOff"
+                 parameter="skirt" />
+                <menu_item_call.on_enable
+                 function="Edit.EnableTakeOff"
+                 parameter="skirt" />
+            </menu_item_call>
+            <menu_item_call
+             enabled="false"
+             label="Shoes"
+             layout="topleft"
+             name="Shoes">
+                <menu_item_call.on_click
+                 function="Edit.TakeOff"
+                 parameter="shoes" />
+                <menu_item_call.on_enable
+                 function="Edit.EnableTakeOff"
+                 parameter="shoes" />
+            </menu_item_call>
+            <menu_item_call
+             enabled="false"
+             label="Socks"
+             layout="topleft"
+             name="Socks">
+                <menu_item_call.on_click
+                 function="Edit.TakeOff"
+                 parameter="socks" />
+                <menu_item_call.on_enable
+                 function="Edit.EnableTakeOff"
+                 parameter="socks" />
+            </menu_item_call>
+            <menu_item_call
+             enabled="false"
+             label="Jacket"
+             layout="topleft"
+             name="Jacket">
+                <menu_item_call.on_click
+                 function="Edit.TakeOff"
+                 parameter="jacket" />
+                <menu_item_call.on_enable
+                 function="Edit.EnableTakeOff"
+                 parameter="jacket" />
+            </menu_item_call>
+            <menu_item_call
+             enabled="false"
+             label="Gloves"
+             layout="topleft"
+             name="Gloves">
+                <menu_item_call.on_click
+                 function="Edit.TakeOff"
+                 parameter="gloves" />
+                <menu_item_call.on_enable
+                 function="Edit.EnableTakeOff"
+                 parameter="gloves" />
+            </menu_item_call>
+           <menu_item_call
+                 enabled="false"
+                 label="Undershirt"
+                 layout="topleft"
+                 name="Self Undershirt">
+                    <menu_item_call.on_click
+                     function="Edit.TakeOff"
+                     parameter="undershirt" />
+                    <menu_item_call.on_enable
+                     function="Edit.EnableTakeOff"
+                     parameter="undershirt" />
+                </menu_item_call>
+               <menu_item_call
+                 enabled="false"
+                 label="Underpants"
+                 layout="topleft"
+                 name="Self Underpants">
+                    <menu_item_call.on_click
+                     function="Edit.TakeOff"
+                     parameter="underpants" />
+                    <menu_item_call.on_enable
+                     function="Edit.EnableTakeOff"
+                     parameter="underpants" />
+                </menu_item_call>
+               <menu_item_call
+                 enabled="false"
+                 label="Tattoo"
+                 layout="topleft"
+                 name="Self Tattoo">
+                    <menu_item_call.on_click
+                     function="Edit.TakeOff"
+                     parameter="tattoo" />
+                    <menu_item_call.on_enable
+                     function="Edit.EnableTakeOff"
+                     parameter="tattoo" />
+                </menu_item_call>
+               <menu_item_call
+                 enabled="false"
+                 label="Alpha"
+                 layout="topleft"
+                 name="Self Alpha">
+                    <menu_item_call.on_click
+                     function="Edit.TakeOff"
+                     parameter="alpha" />
+                    <menu_item_call.on_enable
+                     function="Edit.EnableTakeOff"
+                     parameter="alpha" />
+                </menu_item_call>				
+                <menu_item_separator
+                 layout="topleft" />
+                <menu_item_call
+                 label="All Clothes"
+                 layout="topleft"
+                 name="All Clothes">
+                    <menu_item_call.on_click
+                     function="Edit.TakeOff"
+                     parameter="all" />
+                </menu_item_call>
+        </context_menu>
+        <context_menu
+         label="HUD &gt;"
+         layout="topleft"
+         name="Object Detach HUD" />
+        <context_menu
+         label="Detach &gt;"
+         layout="topleft"
+         name="Object Detach" />
+        <menu_item_call
+         label="Detach All"
+         layout="topleft"
+         name="Detach All">
+            <menu_item_call.on_click
+             function="Self.RemoveAllAttachments"
+             parameter="" />
+            <menu_item_call.on_enable
+             function="Self.EnableRemoveAllAttachments" />
+        </menu_item_call>
+    </context_menu>
+     <menu_item_call
+     label="My Appearance"
+     layout="topleft"
+     name="Appearance...">
+        <menu_item_call.on_click
+         function="ShowFloater"
+         parameter="appearance" />
+        <menu_item_call.on_enable
+         function="Edit.EnableCustomizeAvatar" />
+    </menu_item_call>
+   <menu_item_call
+     label="My Friends"
+     layout="topleft"
+     name="Friends...">
+        <menu_item_call.on_click
+         function="SideTray.PanelPeopleTab"
+         parameter="friends_panel" />
+    </menu_item_call>
+   <!--menu_item_call
+     label="My Gestures"
+     layout="topleft"
+     name="Gestures...">
+        <menu_item_call.on_click
+         function="ShowFloater"
+         parameter="gestures" />
+    </menu_item_call-->
+    <menu_item_call
+     label="My Groups"
+     layout="topleft"
+     name="Groups...">
+        <menu_item_call.on_click
+         function="SideTray.PanelPeopleTab"
+         parameter="groups_panel" />
+    </menu_item_call>
+   <menu_item_call
+     label="My Profile"
+     layout="topleft"
+     name="Profile...">
+        <menu_item_call.on_click
+         function="ShowAgentProfile"
+         parameter="agent" />
+    </menu_item_call>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/en/menu_land.xml b/indra/newview/skins/default/xui/en/menu_land.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d88a2f8d25a1e3d4810cf736ff8c49457a17db64
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/menu_land.xml
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<context_menu
+ layout="topleft"
+ name="Land Pie">
+    <menu_item_call
+     label="About Land"
+     name="Place Information...">
+        <menu_item_call.on_click
+         function="ShowFloater"
+         parameter="about_land" />
+    </menu_item_call>
+ <!--   <menu_item_call
+     label="Go Here"
+     name="Go Here">
+        <menu_item_call.on_click
+         function="GoToObject" />
+    </menu_item_call>-->
+    <menu_item_call
+     label="Sit Here"
+     name="Sit Here">
+        <menu_item_call.on_click
+         function="Land.Sit" />
+    </menu_item_call>
+    <menu_item_separator
+     layout="topleft" />
+        <menu_item_call
+     enabled="false"
+     label="Buy This Land"
+     name="Land Buy">
+        <menu_item_call.on_click
+         function="ShowFloater"
+         parameter="buy land" />
+        <menu_item_call.on_enable
+         function="World.EnableBuyLand" />
+    </menu_item_call>
+   <menu_item_call
+     enabled="false"
+     label="Buy Pass"
+     name="Land Buy Pass">
+        <menu_item_call.on_click
+         function="Land.BuyPass" />
+        <menu_item_call.on_enable
+         function="Land.EnableBuyPass" />
+    </menu_item_call>
+            <menu_item_separator
+     layout="topleft" />
+   <menu_item_call
+     enabled="false"
+     label="Build"
+     name="Create">
+        <menu_item_call.on_click
+         function="Land.Build" />
+        <menu_item_call.on_enable
+         function="EnableEdit" />
+    </menu_item_call>
+    <menu_item_call
+     enabled="false"
+     label="Edit Terrain"
+     name="Edit Terrain">
+        <menu_item_call.on_click
+         function="Land.Edit" />
+        <menu_item_call.on_enable
+         function="EnableEdit" />
+    </menu_item_call>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/en/menu_object.xml b/indra/newview/skins/default/xui/en/menu_object.xml
new file mode 100644
index 0000000000000000000000000000000000000000..62500c5116c22473631907763b0c62564f0e6b9d
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/menu_object.xml
@@ -0,0 +1,158 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<context_menu
+ layout="topleft"
+ name="Object Pie">
+   <menu_item_call
+     enabled="false"
+     label="Touch"
+     name="Object Touch">
+        <menu_item_call.on_click
+         function="Object.Touch" />
+        <menu_item_call.on_enable
+         function="Object.EnableTouch"
+         name="EnableTouch"
+         parameter="Touch" />
+   </menu_item_call>
+   <menu_item_call
+     label="Edit"
+     name="Edit...">
+        <menu_item_call.on_click
+         function="Object.Edit" />
+        <menu_item_call.on_visible
+         function="EnableEdit"/>
+    </menu_item_call>
+    <menu_item_call
+      label="Build"
+      name="Build">
+      <menu_item_call.on_click
+       function="Object.Edit" />
+      <menu_item_call.on_visible
+       function="VisibleBuild"/>
+    </menu_item_call>
+   <menu_item_call
+     enabled="false"
+     label="Open"
+     name="Open">
+        <menu_item_call.on_click
+         function="Object.Open" />
+        <menu_item_call.on_enable
+         function="Object.EnableOpen" />
+   </menu_item_call>
+   <menu_item_call
+     enabled="false"
+     label="Sit Here"
+     name="Object Sit">
+        <menu_item_call.on_click
+         function="Object.SitOrStand" />
+        <menu_item_call.on_enable
+         function="Object.EnableSitOrStand"
+         name="EnableSitOrStand"
+         parameter="Sit Here,Stand Up" />
+    </menu_item_call>
+   <menu_item_call
+       label="Object Profile"
+       name="Object Inspect">
+         <menu_item_call.on_click
+          function="Object.Inspect" />
+         <menu_item_call.on_enable
+          function="Object.EnableInspect" />
+   </menu_item_call>
+<menu_item_separator layout="topleft" />
+   <context_menu
+         label="Put On &gt;"
+         name="Put On" >
+   <menu_item_call
+      enabled="false"
+      label="Wear"
+      name="Wear">
+            <menu_item_call.on_click
+             function="Object.AttachToAvatar" />
+            <menu_item_call.on_enable
+             function="Object.EnableWear" />
+   </menu_item_call>
+   <context_menu
+         label="Attach &gt;"
+         name="Object Attach" />
+   <context_menu
+         label="Attach HUD &gt;"
+         name="Object Attach HUD" />
+   </context_menu>
+   <context_menu
+         label="Remove &gt;"
+         name="Remove">
+   <menu_item_call
+     enabled="false"
+     label="Take"
+     name="Pie Object Take">
+        <menu_item_call.on_click
+         function="Tools.BuyOrTake" />
+        <menu_item_call.on_enable
+         function="Tools.EnableBuyOrTake"
+         parameter="Buy,Take" />
+    </menu_item_call>
+   <menu_item_call
+         enabled="false"
+         label="Report Abuse"
+         name="Report Abuse...">
+            <menu_item_call.on_click
+             function="Object.ReportAbuse" />
+            <menu_item_call.on_enable
+             function="Object.EnableReportAbuse" />
+   </menu_item_call>
+   <menu_item_call
+          enabled="false"
+          label="Block"
+          name="Object Mute">
+             <menu_item_call.on_click
+              function="Object.Mute" />
+             <menu_item_call.on_enable
+              function="Object.EnableMute" />
+   </menu_item_call>
+   <menu_item_call
+      enabled="false"
+      label="Return"
+      name="Return...">
+         <menu_item_call.on_click
+          function="Object.Return" />
+         <menu_item_call.on_enable
+          function="Object.EnableReturn" />
+     </menu_item_call>
+     <menu_item_call
+   enabled="false"
+   label="Delete"
+   name="Delete">
+      <menu_item_call.on_click
+       function="Object.Delete" />
+      <menu_item_call.on_enable
+       function="Object.EnableDelete" />
+    </menu_item_call>
+    </context_menu>
+   <menu_item_separator layout="topleft" />
+   <menu_item_call
+   enabled="false"
+   label="Take Copy"
+   name="Take Copy">
+      <menu_item_call.on_click
+       function="Tools.TakeCopy" />
+      <menu_item_call.on_enable
+       function="Tools.EnableTakeCopy" />
+  </menu_item_call>
+   <menu_item_call
+   enabled="false"
+   label="Pay"
+   name="Pay...">
+  <menu_item_call.on_click
+   function="PayObject" />
+  <menu_item_call.on_enable
+   function="EnablePayObject" />
+</menu_item_call>
+  <menu_item_call
+   enabled="false"
+   label="Buy"
+   name="Buy...">
+      <menu_item_call.on_click
+       function="Object.Buy" />
+      <menu_item_call.on_enable
+       function="Object.EnableBuy" />
+   </menu_item_call>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
index a41d492624bc48c72f3fb5ccd942416fdc81522f..034f685ee9934d11f777cfbe186e873a5b910ae3 100644
--- a/indra/newview/skins/default/xui/en/panel_bottomtray.xml
+++ b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
@@ -114,7 +114,7 @@
           width="82"
           tool_tip="Shows/hides gestures">
              <gesture_combo_box.drop_down_button
-              pad_right="10" 
+              pad_right="10"
               use_ellipses="true" />
          </gesture_combo_box>
         </layout_panel>
@@ -126,7 +126,7 @@
          image_name="spacer24.tga"
          layout="topleft"
          left="0"
-         min_width="4" 
+         min_width="4"
          name="DUMMY"
          top="0"
          width="4"/>
@@ -168,7 +168,7 @@
          image_name="spacer24.tga"
          layout="topleft"
          left="0"
-         min_width="4" 
+         min_width="4"
          name="DUMMY"
          top="0"
          width="4"/>
@@ -211,7 +211,7 @@
          image_name="spacer24.tga"
          layout="topleft"
          left="0"
-         min_width="4" 
+         min_width="4"
          name="DUMMY"
          top="0"
          width="4"/>
@@ -243,7 +243,7 @@
         <layout_panel
          mouse_opaque="false"
          follows="left|right"
-         height="28"
+         height="29"
          layout="topleft"
          top="0"
          name="chiclet_list_panel"
@@ -251,24 +251,24 @@
          min_width="180"
          user_resize="false"
          auto_resize="true">
-<!--*NOTE: min_width of the chiclet_panel (chiclet_list) must be the same 
+<!--*NOTE: min_width of the chiclet_panel (chiclet_list) must be the same
 as for parent layout_panel (chiclet_list_panel) to resize bottom tray properly. EXT-991-->
             <chiclet_panel
 	    mouse_opaque="false"
              follows="left|right"
              height="23"
              layout="topleft"
-             left="0"
+             left="1"
              min_width="180"
              name="chiclet_list"
-             top="4"
+             top="6"
              chiclet_padding="4"
              scrolling_offset="40"
              width="189">
                 <button
                  auto_resize="true"
                  follows="right"
-                 height="23"
+                 height="29"
                  image_selected="SegmentedBtn_Left_Off"
                  image_unselected="SegmentedBtn_Left_Off"
 		 image_hover_selected="SegmentedBtn_Left_Over"
@@ -278,14 +278,16 @@ as for parent layout_panel (chiclet_list_panel) to resize bottom tray properly.
 		 image_overlay="Arrow_Small_Left"
                  layout="topleft"
                  name="chicklet_left_scroll_button"
+        scale_image="true"
                  tab_stop="false"
-                 top="0"
+                 top="-2"
+                 right_pad="2"
                  visible="false"
-                 width="20" />
+                 width="7" />
                 <button
                  auto_resize="true"
                  follows="right"
-                 height="23"
+                 height="29"
                  image_selected="SegmentedBtn_Right_Off"
                  image_unselected="SegmentedBtn_Right_Off"
 		 image_hover_selected="SegmentedBtn_Right_Over"
@@ -295,10 +297,11 @@ as for parent layout_panel (chiclet_list_panel) to resize bottom tray properly.
 		 image_overlay="Arrow_Small_Right"
                  layout="topleft"
                  name="chicklet_right_scroll_button"
+        scale_image="true"
                  tab_stop="false"
-                 top="0"
+                 top="-2"
                  visible="false"
-                 width="20" />
+                 width="7" />
             </chiclet_panel>
         </layout_panel>
         <icon
@@ -309,7 +312,7 @@ as for parent layout_panel (chiclet_list_panel) to resize bottom tray properly.
          image_name="spacer24.tga"
          layout="topleft"
          left="0"
-         min_width="4" 
+         min_width="4"
          top="0"
          width="5"/>
         <layout_panel
@@ -320,18 +323,18 @@ as for parent layout_panel (chiclet_list_panel) to resize bottom tray properly.
          min_height="28"
          top="0"
          name="im_well_panel"
-         width="34"
-         min_width="34"
+         width="35"
+         min_width="35"
          user_resize="false">
             <chiclet_im_well
-             flash_period="0.3" 
+             flash_period="0.3"
              follows="right"
              height="23"
              layout="topleft"
              left="0"
              name="im_well"
              top="4"
-             width="34">
+             width="35">
              <!--
 Emulate 4 states of button by background images, see detains in EXT-3147. The same should be for notification_well button
 xml attribute           Description
@@ -342,21 +345,22 @@ image_pressed_selected  "Lit" + "Selected" - there are new messages and the Well
              -->
                 <button
                  auto_resize="true"
-                 flash_color="EmphasisColor"
+                 flash_color="Yellow"
                  follows="right"
                  halign="center"
                  height="23"
-                 image_overlay="Notices_Unread"
-                 image_overlay_alignment="center" 
-                 image_pressed="WellButton_Lit"
-                 image_pressed_selected="WellButton_Lit_Selected"
-                 image_selected="PushButton_Selected_Press"
+                 image_overlay="Unread_IM"
+                 image_overlay_alignment="center"
+                 image_pressed="WellButton_Lit_Selected"
+                 image_pressed_selected="WellButton_Lit"
+                 image_selected="WellButton_Lit"
+                 label_color="Black"
                  left="0"
                  max_displayed_count="99"
                  name="Unread IM messages"
                  pad_left="0"
                  pad_right="0"
-                 width="34" >
+                 width="35" >
                     <button.init_callback
                      function="Button.SetDockableFloaterToggle"
                      parameter="im_well_window" />
@@ -370,9 +374,10 @@ image_pressed_selected  "Lit" + "Selected" - there are new messages and the Well
          layout="topleft"
          min_height="28"
          top="0"
+         left_pad="4"
          name="notification_well_panel"
-         width="34"
-         min_width="34"
+         width="35"
+         min_width="35"
          user_resize="false">
             <chiclet_notification
              flash_period="0.25"
@@ -383,23 +388,24 @@ image_pressed_selected  "Lit" + "Selected" - there are new messages and the Well
              max_displayed_count="99"
              name="notification_well"
              top="4"
-             width="34">
+             width="35">
               <button
-                 image_selected="PushButton_Selected_Press"
-                 image_pressed="WellButton_Lit"
-                 image_pressed_selected="WellButton_Lit_Selected"
+                 bottom_pad="3"
+                 image_selected="WellButton_Lit"
+                 image_pressed="WellButton_Lit_Selected"
+                 image_pressed_selected="WellButton_Lit "
               auto_resize="true"
                halign="center"
                height="23"
                follows="right"
-               flash_color="EmphasisColor"
-               left="0"
+               flash_color="Yellow"
+                label_color="Black"
+               left="5"
                name="Unread"
                image_overlay="Notices_Unread"
-               image_overlay_alignment="center" 
-               pad_right="0"
-               pad_left="0"
-               width="34" >
+               image_overlay_alignment="center"
+               pad_right="5"
+               width="35" >
                   <button.init_callback
                    function="Button.SetDockableFloaterToggle"
                    parameter="notification_well_window" />
@@ -413,7 +419,7 @@ image_pressed_selected  "Lit" + "Selected" - there are new messages and the Well
          height="10"
          image_name="spacer24.tga"
          layout="topleft"
-         min_width="4" 
+         min_width="4"
          right="-1"
          top="0"
          width="4"/>
diff --git a/indra/newview/skins/default/xui/en/panel_login.xml b/indra/newview/skins/default/xui/en/panel_login.xml
index c9db75b5d86c3c0d1efa26441bc55d409419bb39..6187b8f1e2eec26a4e1839da1154387dbcc14a5b 100644
--- a/indra/newview/skins/default/xui/en/panel_login.xml
+++ b/indra/newview/skins/default/xui/en/panel_login.xml
@@ -33,21 +33,31 @@ name="login_html"
 start_url=""
 top="0"
 height="600"
-     width="996" />
-<panel
+     width="980" />
+<layout_stack
 follows="left|bottom|right"
 name="login_widgets"
 layout="topleft"
+orientation="horizontal"
 top="519"
 width="996"
-     height="80">
+height="80">
+<layout_panel
+auto_resize="false"
+follows="left|bottom"
+name="login"
+layout="topleft"
+width="695"
+min_width="695"
+user_resize="false"
+height="80">
 <text
 follows="left|bottom"
 font="SansSerifSmall"
 height="16"
-left="20"
 name="first_name_text"
 top="20"
+left="20"
 width="150">
 First name:
 </text>
@@ -145,7 +155,7 @@ name="Typeregionname"   value="" />
 <combo_box
 allow_text_entry="true"
 font="SansSerifSmall"
-   follows="left|bottom"
+   follows="left|right|bottom"
    height="23"
 layout="topleft"
 top_pad="2"
@@ -164,14 +174,20 @@ width="135"
   name="connect_btn"
   top="35"
   width="90" />
- <text
+</layout_panel>
+<layout_panel
+follows="right|bottom"
+name="links"
+width="200"
+min_width="200"
+user_resize="false"
+height="80">
+   <text
 follows="right|bottom"
 font="SansSerifSmall"
-text_color="EmphasisColor"
 halign="right"
 height="16"
 top="12"
-left_pad="5"
 right="-10"
 name="create_new_account_text"
   width="180">
@@ -183,7 +199,9 @@ font="SansSerifSmall"
 text_color="EmphasisColor"
 halign="right"
 height="16"
-name="forgot_password_text"    top_pad="12"
+name="forgot_password_text"
+top_pad="12"
+right="-10"
   width="180">
        Forgot your name or password?
 </text>
@@ -195,6 +213,7 @@ halign="right"
 height="16"
 name="login_help"
 top_pad="2"
+right="-10"
     width="180">
        Need help logging in?   </text>
 <!--  <text
@@ -208,5 +227,6 @@ top_pad="2"
     word_wrap="true">
        [VERSION]
    </text>-->
-</panel>
+   </layout_panel>
+</layout_stack>
 </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_main_inventory.xml b/indra/newview/skins/default/xui/en/panel_main_inventory.xml
index 9990215dfd74d0ff99c63aeeda7269d46efaa6e8..4353b306cd9ee4bcc3c9bbaaefaa140a5c72f411 100644
--- a/indra/newview/skins/default/xui/en/panel_main_inventory.xml
+++ b/indra/newview/skins/default/xui/en/panel_main_inventory.xml
@@ -17,7 +17,7 @@
      text_pad_left="14"
      follows="left|top|right"
 	height="23"
-     label="Filter"
+     label="Filter Inventory"
      layout="topleft"
      left="15"
 max_length="300"
diff --git a/indra/newview/skins/default/xui/en/panel_places.xml b/indra/newview/skins/default/xui/en/panel_places.xml
index 88df529ec1f20d0cb389b432cffdceb6360d515a..c24f47750ba49f9870db14d34650bcee64c01bfa 100644
--- a/indra/newview/skins/default/xui/en/panel_places.xml
+++ b/indra/newview/skins/default/xui/en/panel_places.xml
@@ -22,7 +22,7 @@ background_visible="true"
      height="23"
      layout="topleft"
      left="15"
-     label="Filter"
+     label="Filter Places"
      max_length="300"
      name="Filter"
      top="3"
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_sound.xml b/indra/newview/skins/default/xui/en/panel_preferences_sound.xml
index 5332007bafaca34268828d8bfd33ce7f0cfa2330..d8e3f4ccfb479f01a7f8bd47cf27b7d6cd76d696 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_sound.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_sound.xml
@@ -348,23 +348,24 @@
    label="Input/Output devices"
    layout="topleft"
    left="30"
-   top="270"
+   top="262"
    name="device_settings_btn"
    width="190">
   </button>
     <panel
-     background_visible="true"
+     background_visible="false"
      bg_alpha_color="DkGray"
      visiblity_control="ShowDeviceSettings"
      border="false"
      follows="top|left"
-     height="145"
+     height="120"
      label="Device Settings"
      layout="topleft"
      left="0"
      name="device_settings_panel"
      class="panel_voice_device_settings"
-     width="501">
+     width="501"
+     top="285">
       <panel.string
         name="default_text">
         Default
@@ -397,8 +398,33 @@
      left="165"
      max_chars="128"
      name="voice_input_device"
-     top_pad="0"
+     top_pad="-2"
      width="200" />
+   <text
+     type="string"
+     length="1"
+     follows="left|top"
+     height="16"
+     layout="topleft"
+     left="165"
+     name="My volume label"
+     top_pad="5"
+     width="200">
+        My volume:
+    </text>
+      <slider_bar
+        control_name="AudioLevelMic"
+     follows="left|top"
+     height="17"
+     increment="0.05"
+     initial_value="1.0"
+     layout="topleft"
+     left="160"
+     max_val="2"
+     name="mic_volume_slider"
+     tool_tip="Change the volume using this slider"
+     top_pad="-2"
+     width="220" />
     <text
      type="string"
      text_color="EmphasisColor"
@@ -408,7 +434,7 @@
      layout="topleft"
      left_pad="5"
      name="wait_text"
-     top_delta="5"
+     top_delta="0"
      width="110">
         Please wait
     </text>
@@ -417,7 +443,7 @@
      layout="topleft"
      left_delta="0"
      name="bar0"
-     top_delta="-5"
+     top_delta="0"
      width="20" />
     <locate
      height="20"
@@ -453,7 +479,7 @@
              left="80"
              name="speaker_icon"
              mouse_opaque="false"
-             top_pad="4"
+             top_pad="-8"
              visible="true"
              width="22" />
     <text
@@ -475,7 +501,7 @@
      left="165"
      max_chars="128"
      name="voice_output_device"
-     top_pad="0"
+     top_pad="-2"
      width="200" />
     </panel>
     </panel>
diff --git a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml
index 3cddbed2d493ed1c559ccd5e9fee7843b30bcaff..e04af2bad65deb5ecd81c0253621126527c7c6a8 100644
--- a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml
+++ b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml
@@ -6,7 +6,7 @@
 	 name="item properties"
 	 help_topic="item_properties"
 	 save_rect="true"
-	 title="Object Profile"
+	 title="Inventory Item Properties"
 	 width="333">
 	<panel.string
 		 name="unknown">
@@ -50,15 +50,15 @@
      width="23" />
     <text
      follows="top|left|right"
-     font="SansSerifHuge"
+     font="SansSerifHugeBold"
      height="26"
      layout="topleft"
      left_pad="10"
      name="title"
-     text_color="LtGray"
+     text_color="white"
      top="0"
      use_ellipses="true"
-     value="Object Profile"
+     value="Item Properties"
      width="275" />
 	<panel
          follows="all"
@@ -71,7 +71,7 @@
          width="313"
    background_visible="true"
    bg_alpha_color="DkGray2">
-	    <text
+	    <text	 	 	 
 		     type="string"
 		     length="1"
 		     follows="left|top"
@@ -79,7 +79,7 @@
 		     layout="topleft"
 		     left="5"
 		     name="LabelItemNameTitle"
-		     top="10"
+		     top="5"
 		     width="78">
 	        Name:
 	    </text>
@@ -87,7 +87,7 @@
 		     border_style="line"
 		     border_thickness="1"
 	    	 follows="left|top|right"
-		     height="20"
+		     height="16"
 		     layout="topleft"
 	    	 left_delta="78"
 		     max_length="63"
@@ -102,7 +102,7 @@
 		     layout="topleft"
     		 left="5"
 		     name="LabelItemDescTitle"
-    		 top_pad="10"
+    		 top_delta="20"
 	    	 width="78">
 	        Description:
 	    </text>
@@ -115,7 +115,7 @@
     		 left_delta="78"
 		     max_length="127"
     		 name="LabelItemDesc"
-	    	 top_delta="-5"
+	    	 top_delta="0"
 	    	 width="225" />
 	    <text
 		     type="string"
@@ -123,41 +123,32 @@
 		     follows="left|top"
 		     height="23"
 		     layout="topleft"
-    		 left="5"
+		     left="10"
 		     name="LabelCreatorTitle"
-top_pad="10"
+		     top="65"
 		     width="78">
 	        Creator:
     	</text>
-	        <avatar_icon
-     follows="top|left"
-     height="20"
-     default_icon_name="Generic_Person"
-     layout="topleft"
-     left_pad="0"
-		     top_delta="-6"
-     mouse_opaque="true"
-     width="20" />
 	    <text
 		     type="string"
-     follows="left|right"
-     font="SansSerifSmall"
-     height="15"
-     layout="topleft"
-     left_pad="5"
+		     length="1"
+		     follows="left|top"
+		     height="23"
+		     layout="topleft"
+		     left_delta="78"
 		     name="LabelCreatorName"
-		     top_delta="6"
+		     top_delta="0"
 		     width="140">
 	        Nicole Linden
 	     </text>
 	     <button
 			 follows="top|right"
 			 height="23"
-			 label="Profile"
+			 label="Profile..."
 			 layout="topleft"
-			 right="-1"
+			 left_delta="144"
 			 name="BtnCreator"
-			 top_delta="-6"
+			 top_delta="0"
 			 width="78" />
 	     <text
 			 type="string"
@@ -165,41 +156,32 @@ top_pad="10"
 			 follows="left|top"
 			 height="23"
 			 layout="topleft"
-    		 left="5"
+			 left="10"
 			 name="LabelOwnerTitle"
-top_pad="5"
+			 top="85"
 			 width="78">
 			    Owner:
 	     </text>
-	     <avatar_icon
-     follows="top|left"
-     height="20"
-     default_icon_name="Generic_Person"
-     layout="topleft"
-     left_pad="0"
-		     top_delta="-6"
-     mouse_opaque="true"
-     width="20" />
 	     <text
 			 type="string"
-     follows="left|right"
-     font="SansSerifSmall"
-     height="15"
-     layout="topleft"
-     left_pad="5"
+			 length="1"
+			 follows="left|top"
+			 height="23"
+			 layout="topleft"
+			 left_delta="78"
 			 name="LabelOwnerName"
-			 top_delta="6"
+			 top_delta="0"
 			 width="140">
 			    Thrax Linden
 	     </text>
 	     <button
 			 follows="top|right"
 			 height="23"
-			 label="Profile"
+			 label="Profile..."
 			 layout="topleft"
-			 right="-1"
+			 left_delta="144"
 			 name="BtnOwner"
-			 top_delta="-3"
+			 top_delta="0"
 			 width="78" />
 	     <text
 			 type="string"
@@ -207,9 +189,9 @@ top_pad="5"
 			 follows="left|top"
 			 height="23"
 			 layout="topleft"
-    		 left="5"
+			 left="10"
 			 name="LabelAcquiredTitle"
-top_pad="10"
+			 top="105"
 			 width="78">
 			Acquired:
 	     </text>
@@ -225,146 +207,134 @@ top_pad="10"
 			 width="222">
 			Wed May 24 12:50:46 2006
 	    </text>
-	 <panel
-         border="false"
-         follows="left|top"
-         layout="topleft"
-         mouse_opaque="false"
-         background_visible="true"
-         bg_alpha_color="DkGray"
-         name="perms_inv"
-         left="0"
-         top_pad="25"
-         height="155"
-         width="313">
-	  <text
-             type="string"
-             length="1"
-             left="10"
-             top_pad="13"
-             text_color="EmphasisColor"
-	     height="15"
-             follows="left|top|right"
-             layout="topleft"
-             name="perm_modify"
-             width="200">
-                You can:
-            </text>
+	    <text
+			 type="string"
+			 length="1"
+			 follows="left|top"
+			 height="23"
+			 layout="topleft"
+			 left="10"
+			 name="OwnerLabel"
+			 top="125"
+			 width="78">
+			You:
+	    </text>
 	    <check_box
-			 height="18"
-			 label="Modify"
+			 height="23"
+			 label="Edit"
 			 layout="topleft"
-			 left="20"
+			 left_pad="5"
 			 name="CheckOwnerModify"
-			 top_pad="0"
-			 width="90" />
+			 top_delta="0"
+			 width="78" />
 	    <check_box
-			 height="18"
+			 height="23"
 			 label="Copy"
 			 layout="topleft"
-			 left_pad="0"
+			 left_delta="0"
 			 name="CheckOwnerCopy"
-			 width="90" />
+			 top_pad="5"
+			 width="88" />
 	    <check_box
-			 height="18"
-			 label="Transfer"
+			 height="23"
+			 label="Resell"
 			 layout="topleft"
-			 left_pad="0"
+			 left_delta="0"
 			 name="CheckOwnerTransfer"
+			 top_pad="5"
 			 width="106" />
 	    <text
 			 type="string"
 			 length="1"
 			 follows="left|top"
-			 height="16"
+			 height="10"
 			 layout="topleft"
 			 left="10"
 			 name="AnyoneLabel"
-			 top_pad="8"
-			 width="100">
+			 top_pad="5"
+			 width="78">
 			Anyone:
 	    </text>
 	    <check_box
-			 height="18"
+			 height="16"
 			 label="Copy"
 			 layout="topleft"
-			 left_pad="0"
+			 left_pad="5"
 			 name="CheckEveryoneCopy"
-			 top_delta="-2"
-			 width="150" />
+			 top_delta="0"
+			 width="130" />
     	<text
 			 type="string"
 			 length="1"
 			 follows="left|top"
-			 height="16"
+			 height="10"
 			 layout="topleft"
 			 left="10"
 			 name="GroupLabel"
-			 top_pad="8"
-			 width="100">
+			 top_pad="5"
+			 width="78">
 			Group:
     	</text>
 	    <check_box
-			 height="18"
+			 height="16"
 			 label="Share"
 			 layout="topleft"
-			 left_pad="0"
-			 top_delta="-2"
+			 left_pad="5"
 			 name="CheckShareWithGroup"
-			 tool_tip="Allow all members of the set group to share your modify permissions for this object. You must Deed to enable role restrictions."
-			 width="150" />
+			 top_delta="5"
+			 width="106" />
 	    <text
 			 type="string"
 			 length="1"
 			 follows="left|top"
-			 height="16"
+			 height="25"
 			 layout="topleft"
 			 left="10"
 			 name="NextOwnerLabel"
-			 top_pad="8"
-			 width="200"
+			 top_pad="5"
+			 width="78"
 			 word_wrap="true">
 			Next owner:
 	    </text>
 	    <check_box
-			 height="18"
-			 label="Modify"
+			 height="16"
+			 label="Edit"
 			 layout="topleft"
-			 left="20"
-			 top_pad="0"
+			 left_pad="5"
 			 name="CheckNextOwnerModify"
-			 width="90" />
+			 top_delta="0"
+			 width="78" />
 	    <check_box
-			 height="18"
+			 height="16"
 			 label="Copy"
 			 layout="topleft"
-			 left_pad="0"
+			 left_delta="0"
 			 name="CheckNextOwnerCopy"
-			 width="90" />
+			 top_pad="5"
+			 width="88" />
 	    <check_box
-			 height="18"
-			 label="Transfer"
+			 height="16"
+			 label="Resell"
 			 layout="topleft"
-			 left_pad="0"
+			 left_delta="0"
 			 name="CheckNextOwnerTransfer"
-			 tool_tip="Next owner can give away or resell this object"
+			 top_pad="5"
 			 width="106" />
-	    </panel>
 	    <check_box
-			 height="18"
+			 height="16"
 			 label="For Sale"
 			 layout="topleft"
-			 left="20"
+			 left="10"
 			 name="CheckPurchase"
-			 top_pad="20"
-			 width="100" />
+			 top_pad="5"
+			 width="78" />
 		<combo_box
-			 height="23"
-			 left_pad="0"
+			 height="19"
+			 left_pad="5"
 			 layout="topleft"
 			 follows="left|top"
 			 name="combobox sale copy"
-			 width="170">
+			 width="110">
 			<combo_box.item
 			     label="Copy"
 			     name="Copy"
@@ -380,14 +350,26 @@ top_pad="10"
 			    increment="1"
 			    control_name="Edit Cost"
 			    name="Edit Cost"
-			    label="Price: L$"
-			    label_width="75"
-			    left="120"
-			    width="170"
+			    label="Price:"
+			    label_width="100"
+			    left="10"
+			    width="192"
 			    min_val="1"
-			    height="23"
+			    height="19"
 			    max_val="999999999"
-			    top_pad="10"/>
+			    top_pad="5"/>
+	    <text
+			    type="string"
+			    length="1"
+			    height="15"
+			    follows="left|top"
+			    layout="topleft"
+			    left_delta="82"
+			    name="CurrencySymbol"
+			    top_delta="1"
+			    width="18">
+			L$
+	    </text>
 	    <!--line_editor
 			 border_style="line"
 			 border_thickness="1"
diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index 3044f105732d2afbc5b1b0555dc1ed1ef9ccb25d..1f7784d9abd1b0d143e2d3ed8992d1248be50358 100644
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -460,7 +460,7 @@ Returns the rotation of detected object number (returns &lt;0,0,0,1&gt; if numbe
 	</string>
 	<string name="LSLTipText_llDetectedGroup" translate="false">
 integer llDetectedGroup(integer number)
-Returns an integer that is a boolean representing if the detected object or avatar is in the same group that the prim containing the script is set to
+Returns TRUE if detected object is part of same group as owner
 	</string>
 	<string name="LSLTipText_llDetectedLinkNumber" translate="false">
 integer llDetectedLinkNumber(integer number)
@@ -2112,6 +2112,10 @@ this texture in your inventory
 		Unknown file extension .%s
 Expected .wav, .tga, .bmp, .jpg, .jpeg, or .bvh
 	</string>
+  <string name="MuteObject">Block</string>
+  <string name="MuteAvatar">Block</string>
+  <string name="UnmuteObject">Unblock</string>
+  <string name="UnmuteAvatar">Unblock</string>
 	<string name="AddLandmarkNavBarMenu">Add to My Landmarks...</string>
 	<string name="EditLandmarkNavBarMenu">Edit my Landmark...</string>
 
diff --git a/indra/newview/skins/default/xui/en/widgets/button.xml b/indra/newview/skins/default/xui/en/widgets/button.xml
index 28ed56054328059e32d7edf3c0414da51fd3f5e7..d7aa71a441e7056c645c348f50fc1ee9cc3d8ef5 100644
--- a/indra/newview/skins/default/xui/en/widgets/button.xml
+++ b/indra/newview/skins/default/xui/en/widgets/button.xml
@@ -18,5 +18,6 @@
 	font="SansSerifSmall"
         hover_glow_amount="0.15"
         halign="center"
+        pad_bottom="2" 
         scale_image="true">
 </button>
diff --git a/indra/newview/skins/default/xui/en/widgets/floater.xml b/indra/newview/skins/default/xui/en/widgets/floater.xml
index 19fb520b44543ed883f98533026c542977df7fa8..85d0c633af5fb362983869118c12a711f1550fe5 100644
--- a/indra/newview/skins/default/xui/en/widgets/floater.xml
+++ b/indra/newview/skins/default/xui/en/widgets/floater.xml
@@ -9,8 +9,6 @@
  background_visible="true"
  background_opaque="false"
  header_height="25"
-         top="0"
-         left="0" 
  close_image="Icon_Close_Foreground"
  restore_image="Icon_Restore_Foreground"
  minimize_image="Icon_Minimize_Foreground"