diff --git a/indra/llrender/llfontgl.cpp b/indra/llrender/llfontgl.cpp
index 176d35dea872425ca33ea05d971f625e59341c64..71569e98cff21f3e9846c342349f994a2fe90128 100644
--- a/indra/llrender/llfontgl.cpp
+++ b/indra/llrender/llfontgl.cpp
@@ -147,7 +147,7 @@ S32 LLFontGL::render(const LLWString &wstr, S32 begin_offset, const LLRectf& rec
 S32 LLFontGL::render(const LLWString &wstr, S32 begin_offset, F32 x, F32 y, const LLColor4 &color, HAlign halign, VAlign valign, U8 style, 
 					 ShadowType shadow, S32 max_chars, S32 max_pixels, F32* right_x, BOOL use_ellipses) const
 {
-	//LL_RECORD_BLOCK_TIME(FTM_RENDER_FONTS);
+	LL_RECORD_BLOCK_TIME(FTM_RENDER_FONTS);
 
 	if(!sDisplayFont) //do not display texts
 	{
@@ -274,7 +274,7 @@ S32 LLFontGL::render(const LLWString &wstr, S32 begin_offset, F32 x, F32 y, cons
 	const LLFontGlyphInfo* next_glyph = NULL;
 
 	const S32 GLYPH_BATCH_SIZE = 30;
-	LLVector3 vertices[GLYPH_BATCH_SIZE * 4];
+	LLVector4a vertices[GLYPH_BATCH_SIZE * 4];
 	LLVector2 uvs[GLYPH_BATCH_SIZE * 4];
 	LLColor4U colors[GLYPH_BATCH_SIZE * 4];
 
@@ -870,6 +870,10 @@ void LLFontGL::destroyAllGL()
 U8 LLFontGL::getStyleFromString(const std::string &style)
 {
 	S32 ret = 0;
+	if (style.find("NORMAL") != style.npos)
+	{
+		ret |= NORMAL;
+	}
 	if (style.find("BOLD") != style.npos)
 	{
 		ret |= BOLD;
@@ -1127,31 +1131,31 @@ std::string LLFontGL::getFontPathLocal()
 	return local_path;
 }
 
-void LLFontGL::renderQuad(LLVector3* vertex_out, LLVector2* uv_out, LLColor4U* colors_out, const LLRectf& screen_rect, const LLRectf& uv_rect, const LLColor4U& color, F32 slant_amt) const
+void LLFontGL::renderQuad(LLVector4a* vertex_out, LLVector2* uv_out, LLColor4U* colors_out, const LLRectf& screen_rect, const LLRectf& uv_rect, const LLColor4U& color, F32 slant_amt) const
 {
 	S32 index = 0;
 
-	vertex_out[index] = LLVector3(screen_rect.mRight, screen_rect.mTop, 0.f);
+	vertex_out[index].set(screen_rect.mRight, screen_rect.mTop, 0.f);
 	uv_out[index] = LLVector2(uv_rect.mRight, uv_rect.mTop);
 	colors_out[index] = color;
 	index++;
 
-	vertex_out[index] = LLVector3(screen_rect.mLeft, screen_rect.mTop, 0.f);
+	vertex_out[index].set(screen_rect.mLeft, screen_rect.mTop, 0.f);
 	uv_out[index] = LLVector2(uv_rect.mLeft, uv_rect.mTop);
 	colors_out[index] = color;
 	index++;
 
-	vertex_out[index] = LLVector3(screen_rect.mLeft, screen_rect.mBottom, 0.f);
+	vertex_out[index].set(screen_rect.mLeft, screen_rect.mBottom, 0.f);
 	uv_out[index] = LLVector2(uv_rect.mLeft, uv_rect.mBottom);
 	colors_out[index] = color;
 	index++;
 
-	vertex_out[index] = LLVector3(screen_rect.mRight, screen_rect.mBottom, 0.f);
+	vertex_out[index].set(screen_rect.mRight, screen_rect.mBottom, 0.f);
 	uv_out[index] = LLVector2(uv_rect.mRight, uv_rect.mBottom);
 	colors_out[index] = color;
 }
 
-void LLFontGL::drawGlyph(S32& glyph_count, LLVector3* vertex_out, LLVector2* uv_out, LLColor4U* colors_out, const LLRectf& screen_rect, const LLRectf& uv_rect, const LLColor4U& color, U8 style, ShadowType shadow, F32 drop_shadow_strength) const
+void LLFontGL::drawGlyph(S32& glyph_count, LLVector4a* vertex_out, LLVector2* uv_out, LLColor4U* colors_out, const LLRectf& screen_rect, const LLRectf& uv_rect, const LLColor4U& color, U8 style, ShadowType shadow, F32 drop_shadow_strength) const
 {
 	F32 slant_offset;
 	slant_offset = ((style & ITALIC) ? ( -mFontFreetype->getAscenderHeight() * 0.2f) : 0.f);
diff --git a/indra/llrender/llfontgl.h b/indra/llrender/llfontgl.h
index ea9bd7686cebdab2f72db39b9c9c60e89adc65a7..ba6c2a0144f2a0fe8e348a1095c3c44788b9005d 100644
--- a/indra/llrender/llfontgl.h
+++ b/indra/llrender/llfontgl.h
@@ -223,8 +223,8 @@ class LLFontGL
 	LLFontDescriptor mFontDescriptor;
 	LLPointer<LLFontFreetype> mFontFreetype;
 
-	void renderQuad(LLVector3* vertex_out, LLVector2* uv_out, LLColor4U* colors_out, const LLRectf& screen_rect, const LLRectf& uv_rect, const LLColor4U& color, F32 slant_amt) const;
-	void drawGlyph(S32& glyph_count, LLVector3* vertex_out, LLVector2* uv_out, LLColor4U* colors_out, const LLRectf& screen_rect, const LLRectf& uv_rect, const LLColor4U& color, U8 style, ShadowType shadow, F32 drop_shadow_fade) const;
+	void renderQuad(LLVector4a* vertex_out, LLVector2* uv_out, LLColor4U* colors_out, const LLRectf& screen_rect, const LLRectf& uv_rect, const LLColor4U& color, F32 slant_amt) const;
+	void drawGlyph(S32& glyph_count, LLVector4a* vertex_out, LLVector2* uv_out, LLColor4U* colors_out, const LLRectf& screen_rect, const LLRectf& uv_rect, const LLColor4U& color, U8 style, ShadowType shadow, F32 drop_shadow_fade) const;
 
 	// Registry holds all instantiated fonts.
 	static LLFontRegistry* sFontRegistry;
diff --git a/indra/llrender/llrender.cpp b/indra/llrender/llrender.cpp
index 0ed3c09091cff833173c2c123c43fe920a23038f..c691b2f4a9dbdef1ab3e7951fdef057806808e22 100644
--- a/indra/llrender/llrender.cpp
+++ b/indra/llrender/llrender.cpp
@@ -1595,9 +1595,8 @@ void LLRender::translateUI(F32 x, F32 y, F32 z)
 		LL_ERRS() << "Need to push a UI translation frame before offsetting" << LL_ENDL;
 	}
 
-	mUIOffset.back().mV[0] += x;
-	mUIOffset.back().mV[1] += y;
-	mUIOffset.back().mV[2] += z;
+	LLVector4a add(x,y,z);
+	mUIOffset.back().add(add);
 }
 
 void LLRender::scaleUI(F32 x, F32 y, F32 z)
@@ -1607,14 +1606,15 @@ void LLRender::scaleUI(F32 x, F32 y, F32 z)
 		LL_ERRS() << "Need to push a UI transformation frame before scaling." << LL_ENDL;
 	}
 
-	mUIScale.back().scaleVec(LLVector3(x,y,z));
+	LLVector4a scale(x,y,z);
+	mUIScale.back().mul(scale);
 }
 
 void LLRender::pushUIMatrix()
 {
 	if (mUIOffset.empty())
 	{
-		mUIOffset.push_back(LLVector3(0,0,0));
+		mUIOffset.emplace_back(LLVector4a::getZero());
 	}
 	else
 	{
@@ -1623,7 +1623,7 @@ void LLRender::pushUIMatrix()
 	
 	if (mUIScale.empty())
 	{
-		mUIScale.push_back(LLVector3(1,1,1));
+		mUIScale.emplace_back(LLVector4a(1.f));
 	}
 	else
 	{
@@ -1633,10 +1633,11 @@ void LLRender::pushUIMatrix()
 
 void LLRender::popUIMatrix()
 {
-	if (mUIOffset.empty())
+	if (mUIOffset.empty() || mUIScale.empty())
 	{
-		LL_ERRS() << "UI offset stack blown." << LL_ENDL;
+		LL_ERRS() << "UI offset or scale stack blown." << LL_ENDL;
 	}
+
 	mUIOffset.pop_back();
 	mUIScale.pop_back();
 }
@@ -1647,7 +1648,7 @@ LLVector3 LLRender::getUITranslation()
 	{
 		return LLVector3(0,0,0);
 	}
-	return mUIOffset.back();
+	return LLVector3(mUIOffset.back().getF32ptr());
 }
 
 LLVector3 LLRender::getUIScale()
@@ -1656,18 +1657,18 @@ LLVector3 LLRender::getUIScale()
 	{
 		return LLVector3(1,1,1);
 	}
-	return mUIScale.back();
+	return LLVector3(mUIScale.back().getF32ptr());
 }
 
 
 void LLRender::loadUIIdentity()
 {
-	if (mUIOffset.empty())
+	if (mUIOffset.empty() || mUIScale.empty())
 	{
 		LL_ERRS() << "Need to push UI translation frame before clearing offset." << LL_ENDL;
 	}
-	mUIOffset.back().setVec(0,0,0);
-	mUIScale.back().setVec(1,1,1);
+	mUIOffset.back().splat(0.f);
+	mUIScale.back().splat(1.f);
 }
 
 void LLRender::setColorMask(bool writeColor, bool writeAlpha)
@@ -2003,7 +2004,7 @@ void LLRender::flush()
 	}
 }
 
-void LLRender::vertex3f(const GLfloat& x, const GLfloat& y, const GLfloat& z)
+void LLRender::vertex4a(const LLVector4a& vertex)
 { 
 	//the range of mVerticesp, mColorsp and mTexcoordsp is [0, 4095]
 	if (mCount > 2048)
@@ -2025,12 +2026,12 @@ void LLRender::vertex3f(const GLfloat& x, const GLfloat& y, const GLfloat& z)
 
 	if (mUIOffset.empty())
 	{
-		mVerticesp[mCount] = LLVector3(x,y,z);
+		mVerticesp[mCount] = vertex;
 	}
 	else
 	{
-		LLVector3 vert = (LLVector3(x,y,z)+mUIOffset.back()).scaledVec(mUIScale.back());
-		mVerticesp[mCount] = vert;
+		mVerticesp[mCount].setAdd(vertex, mUIOffset.back());
+		mVerticesp[mCount].mul(mUIScale.back());
 	}
 
 	if (mMode == LLRender::QUADS && LLRender::sGLCoreProfile)
@@ -2058,7 +2059,7 @@ void LLRender::vertex3f(const GLfloat& x, const GLfloat& y, const GLfloat& z)
 	mTexcoordsp[mCount] = mTexcoordsp[mCount-1];	
 }
 
-void LLRender::vertexBatchPreTransformed(LLVector3* verts, S32 vert_count)
+void LLRender::vertexBatchPreTransformed(LLVector4a* verts, S32 vert_count)
 {
 	if (mCount + vert_count > 4094)
 	{
@@ -2116,7 +2117,7 @@ void LLRender::vertexBatchPreTransformed(LLVector3* verts, S32 vert_count)
 		mVerticesp[mCount] = mVerticesp[mCount-1];
 }
 
-void LLRender::vertexBatchPreTransformed(LLVector3* verts, LLVector2* uvs, S32 vert_count)
+void LLRender::vertexBatchPreTransformed(LLVector4a* verts, LLVector2* uvs, S32 vert_count)
 {
 	if (mCount + vert_count > 4094)
 	{
@@ -2177,7 +2178,7 @@ void LLRender::vertexBatchPreTransformed(LLVector3* verts, LLVector2* uvs, S32 v
 	}
 }
 
-void LLRender::vertexBatchPreTransformed(LLVector3* verts, LLVector2* uvs, LLColor4U* colors, S32 vert_count)
+void LLRender::vertexBatchPreTransformed(LLVector4a* verts, LLVector2* uvs, LLColor4U* colors, S32 vert_count)
 {
 	if (mCount + vert_count > 4094)
 	{
@@ -2240,26 +2241,6 @@ void LLRender::vertexBatchPreTransformed(LLVector3* verts, LLVector2* uvs, LLCol
 	}
 }
 
-void LLRender::vertex2i(const GLint& x, const GLint& y)
-{
-	vertex3f((GLfloat) x, (GLfloat) y, 0);	
-}
-
-void LLRender::vertex2f(const GLfloat& x, const GLfloat& y)
-{ 
-	vertex3f(x,y,0);
-}
-
-void LLRender::vertex2fv(const GLfloat* v)
-{ 
-	vertex3f(v[0], v[1], 0);
-}
-
-void LLRender::vertex3fv(const GLfloat* v)
-{
-	vertex3f(v[0], v[1], v[2]);
-}
-
 void LLRender::texCoord2f(const GLfloat& x, const GLfloat& y)
 { 
 	mTexcoordsp[mCount] = LLVector2(x,y);
diff --git a/indra/llrender/llrender.h b/indra/llrender/llrender.h
index 5c2c74b58b1d5baa039090f103ae6aca9464234b..d31a1b0f5b354fb1c4e0b3f3feec93dbc44461cb 100644
--- a/indra/llrender/llrender.h
+++ b/indra/llrender/llrender.h
@@ -42,6 +42,8 @@
 #include "llpointer.h"
 #include "llglheaders.h"
 #include "llmatrix4a.h"
+#include "llvector4a.h"
+#include <boost/align/aligned_allocator.hpp>
 #if LL_GNUC
 #pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Wmisleading-indentation"
@@ -405,11 +407,12 @@ class LLRender
 
 	void begin(const GLuint& mode);
 	void end();
-	void vertex2i(const GLint& x, const GLint& y);
-	void vertex2f(const GLfloat& x, const GLfloat& y);
-	void vertex3f(const GLfloat& x, const GLfloat& y, const GLfloat& z);
-	void vertex2fv(const GLfloat* v);
-	void vertex3fv(const GLfloat* v);
+	LL_FORCE_INLINE void vertex2i(const GLint& x, const GLint& y) { vertex4a(LLVector4a((GLfloat)x,(GLfloat)y,0.f)); }
+	LL_FORCE_INLINE void vertex2f(const GLfloat& x, const GLfloat& y) { vertex4a(LLVector4a(x,y,0.f)); }
+	LL_FORCE_INLINE void vertex3f(const GLfloat& x, const GLfloat& y, const GLfloat& z) { vertex4a(LLVector4a(x,y,z)); }
+	LL_FORCE_INLINE void vertex2fv(const GLfloat* v) { vertex4a(LLVector4a(v[0],v[1],0.f)); }
+	LL_FORCE_INLINE void vertex3fv(const GLfloat* v) { vertex4a(LLVector4a(v[0],v[1],v[2])); }
+	void vertex4a(const LLVector4a& v);
 	
 	void texCoord2i(const GLint& x, const GLint& y);
 	void texCoord2f(const GLfloat& x, const GLfloat& y);
@@ -429,9 +432,9 @@ class LLRender
 	void diffuseColor4ubv(const U8* c);
 	void diffuseColor4ub(U8 r, U8 g, U8 b, U8 a);
 
-	void vertexBatchPreTransformed(LLVector3* verts, S32 vert_count);
-	void vertexBatchPreTransformed(LLVector3* verts, LLVector2* uvs, S32 vert_count);
-	void vertexBatchPreTransformed(LLVector3* verts, LLVector2* uvs, LLColor4U*, S32 vert_count);
+	void vertexBatchPreTransformed(LLVector4a* verts, S32 vert_count);
+	void vertexBatchPreTransformed(LLVector4a* verts, LLVector2* uvs, S32 vert_count);
+	void vertexBatchPreTransformed(LLVector4a* verts, LLVector2* uvs, LLColor4U*, S32 vert_count);
 
 	void setColorMask(bool writeColor, bool writeAlpha);
 	void setColorMask(bool writeColorR, bool writeColorG, bool writeColorB, bool writeAlpha);
@@ -495,7 +498,7 @@ class LLRender
 	F32				mLineWidth;
 
 	LLPointer<LLVertexBuffer>	mBuffer;
-	LLStrider<LLVector3>		mVerticesp;
+	LLStrider<LLVector4a>		mVerticesp;
 	LLStrider<LLVector2>		mTexcoordsp;
 	LLStrider<LLColor4U>		mColorsp;
 	std::vector<LLTexUnit*>		mTexUnits;
@@ -510,8 +513,8 @@ class LLRender
 	F32				mMaxAnisotropy;
     U32             mDummyVAO;
 
-	std::vector<LLVector3> mUIOffset;
-	std::vector<LLVector3> mUIScale;
+	std::vector<LLVector4a, boost::alignment::aligned_allocator<LLVector4a, 64> > mUIOffset;
+	std::vector<LLVector4a, boost::alignment::aligned_allocator<LLVector4a, 64> > mUIScale;
 
 };
 
diff --git a/indra/llrender/llrender2dutils.cpp b/indra/llrender/llrender2dutils.cpp
index f82b1b94341925fb0cabffbbf4c4492569edcaaf..cfffd456d0020b4c3edfebc4606163ccc2e960c5 100644
--- a/indra/llrender/llrender2dutils.cpp
+++ b/indra/llrender/llrender2dutils.cpp
@@ -484,7 +484,7 @@ void gl_draw_scaled_image_with_border(S32 x, S32 y, S32 width, S32 height, LLTex
 	
 		const S32 NUM_VERTICES = 9 * 4; // 9 quads
 		LLVector2 uv[NUM_VERTICES];
-		LLVector3 pos[NUM_VERTICES];
+		LLVector4a pos[NUM_VERTICES];
 
 		S32 index = 0;
 
@@ -492,155 +492,155 @@ void gl_draw_scaled_image_with_border(S32 x, S32 y, S32 width, S32 height, LLTex
 		{
 			// draw bottom left
 			uv[index] = LLVector2(uv_outer_rect.mLeft, uv_outer_rect.mBottom);
-			pos[index] = LLVector3(draw_outer_rect.mLeft, draw_outer_rect.mBottom, 0.f);
+			pos[index].set(draw_outer_rect.mLeft, draw_outer_rect.mBottom, 0.f);
 			index++;
 
 			uv[index] = LLVector2(uv_center_rect.mLeft, uv_outer_rect.mBottom);
-			pos[index] = LLVector3(draw_center_rect.mLeft, draw_outer_rect.mBottom, 0.f);
+			pos[index].set(draw_center_rect.mLeft, draw_outer_rect.mBottom, 0.f);
 			index++;
 
 			uv[index] = LLVector2(uv_center_rect.mLeft, uv_center_rect.mBottom);
-			pos[index] = LLVector3(draw_center_rect.mLeft, draw_center_rect.mBottom, 0.f);
+			pos[index].set(draw_center_rect.mLeft, draw_center_rect.mBottom, 0.f);
 			index++;
 
 			uv[index] = LLVector2(uv_outer_rect.mLeft, uv_center_rect.mBottom);
-			pos[index] = LLVector3(draw_outer_rect.mLeft, draw_center_rect.mBottom, 0.f);
+			pos[index].set(draw_outer_rect.mLeft, draw_center_rect.mBottom, 0.f);
 			index++;
 
 			// draw bottom middle
 			uv[index] = LLVector2(uv_center_rect.mLeft, uv_outer_rect.mBottom);
-			pos[index] = LLVector3(draw_center_rect.mLeft, draw_outer_rect.mBottom, 0.f);
+			pos[index].set(draw_center_rect.mLeft, draw_outer_rect.mBottom, 0.f);
 			index++;
 
 			uv[index] = LLVector2(uv_center_rect.mRight, uv_outer_rect.mBottom);
-			pos[index] = LLVector3(draw_center_rect.mRight, draw_outer_rect.mBottom, 0.f);
+			pos[index].set(draw_center_rect.mRight, draw_outer_rect.mBottom, 0.f);
 			index++;
 
 			uv[index] = LLVector2(uv_center_rect.mRight, uv_center_rect.mBottom);
-			pos[index] = LLVector3(draw_center_rect.mRight, draw_center_rect.mBottom, 0.f);
+			pos[index].set(draw_center_rect.mRight, draw_center_rect.mBottom, 0.f);
 			index++;
 
 			uv[index] = LLVector2(uv_center_rect.mLeft, uv_center_rect.mBottom);
-			pos[index] = LLVector3(draw_center_rect.mLeft, draw_center_rect.mBottom, 0.f);
+			pos[index].set(draw_center_rect.mLeft, draw_center_rect.mBottom, 0.f);
 			index++;
 
 			// draw bottom right
 			uv[index] = LLVector2(uv_center_rect.mRight, uv_outer_rect.mBottom);
-			pos[index] = LLVector3(draw_center_rect.mRight, draw_outer_rect.mBottom, 0.f);
+			pos[index].set(draw_center_rect.mRight, draw_outer_rect.mBottom, 0.f);
 			index++;
 
 			uv[index] = LLVector2(uv_outer_rect.mRight, uv_outer_rect.mBottom);
-			pos[index] = LLVector3(draw_outer_rect.mRight, draw_outer_rect.mBottom, 0.f);
+			pos[index].set(draw_outer_rect.mRight, draw_outer_rect.mBottom, 0.f);
 			index++;
 
 			uv[index] = LLVector2(uv_outer_rect.mRight, uv_center_rect.mBottom);
-			pos[index] = LLVector3(draw_outer_rect.mRight, draw_center_rect.mBottom, 0.f);
+			pos[index].set(draw_outer_rect.mRight, draw_center_rect.mBottom, 0.f);
 			index++;
 
 			uv[index] = LLVector2(uv_center_rect.mRight, uv_center_rect.mBottom);
-			pos[index] = LLVector3(draw_center_rect.mRight, draw_center_rect.mBottom, 0.f);
+			pos[index].set(draw_center_rect.mRight, draw_center_rect.mBottom, 0.f);
 			index++;
 
 			// draw left 
 			uv[index] = LLVector2(uv_outer_rect.mLeft, uv_center_rect.mBottom);
-			pos[index] = LLVector3(draw_outer_rect.mLeft, draw_center_rect.mBottom, 0.f);
+			pos[index].set(draw_outer_rect.mLeft, draw_center_rect.mBottom, 0.f);
 			index++;
 
 			uv[index] = LLVector2(uv_center_rect.mLeft, uv_center_rect.mBottom);
-			pos[index] = LLVector3(draw_center_rect.mLeft, draw_center_rect.mBottom, 0.f);
+			pos[index].set(draw_center_rect.mLeft, draw_center_rect.mBottom, 0.f);
 			index++;
 
 			uv[index] = LLVector2(uv_center_rect.mLeft, uv_center_rect.mTop);
-			pos[index] = LLVector3(draw_center_rect.mLeft, draw_center_rect.mTop, 0.f);
+			pos[index].set(draw_center_rect.mLeft, draw_center_rect.mTop, 0.f);
 			index++;
 
 			uv[index] = LLVector2(uv_outer_rect.mLeft, uv_center_rect.mTop);
-			pos[index] = LLVector3(draw_outer_rect.mLeft, draw_center_rect.mTop, 0.f);
+			pos[index].set(draw_outer_rect.mLeft, draw_center_rect.mTop, 0.f);
 			index++;
 
 			// draw middle
 			uv[index] = LLVector2(uv_center_rect.mLeft, uv_center_rect.mBottom);
-			pos[index] = LLVector3(draw_center_rect.mLeft, draw_center_rect.mBottom, 0.f);
+			pos[index].set(draw_center_rect.mLeft, draw_center_rect.mBottom, 0.f);
 			index++;
 
 			uv[index] = LLVector2(uv_center_rect.mRight, uv_center_rect.mBottom);
-			pos[index] = LLVector3(draw_center_rect.mRight, draw_center_rect.mBottom, 0.f);
+			pos[index].set(draw_center_rect.mRight, draw_center_rect.mBottom, 0.f);
 			index++;
 
 			uv[index] = LLVector2(uv_center_rect.mRight, uv_center_rect.mTop);
-			pos[index] = LLVector3(draw_center_rect.mRight, draw_center_rect.mTop, 0.f);
+			pos[index].set(draw_center_rect.mRight, draw_center_rect.mTop, 0.f);
 			index++;
 
 			uv[index] = LLVector2(uv_center_rect.mLeft, uv_center_rect.mTop);
-			pos[index] = LLVector3(draw_center_rect.mLeft, draw_center_rect.mTop, 0.f);
+			pos[index].set(draw_center_rect.mLeft, draw_center_rect.mTop, 0.f);
 			index++;
 
 			// draw right 
 			uv[index] = LLVector2(uv_center_rect.mRight, uv_center_rect.mBottom);
-			pos[index] = LLVector3(draw_center_rect.mRight, draw_center_rect.mBottom, 0.f);
+			pos[index].set(draw_center_rect.mRight, draw_center_rect.mBottom, 0.f);
 			index++;
 
 			uv[index] = LLVector2(uv_outer_rect.mRight, uv_center_rect.mBottom);
-			pos[index] = LLVector3(draw_outer_rect.mRight, draw_center_rect.mBottom, 0.f);
+			pos[index].set(draw_outer_rect.mRight, draw_center_rect.mBottom, 0.f);
 			index++;
 
 			uv[index] = LLVector2(uv_outer_rect.mRight, uv_center_rect.mTop);
-			pos[index] = LLVector3(draw_outer_rect.mRight, draw_center_rect.mTop, 0.f);
+			pos[index].set(draw_outer_rect.mRight, draw_center_rect.mTop, 0.f);
 			index++;
 
 			uv[index] = LLVector2(uv_center_rect.mRight, uv_center_rect.mTop);
-			pos[index] = LLVector3(draw_center_rect.mRight, draw_center_rect.mTop, 0.f);
+			pos[index].set(draw_center_rect.mRight, draw_center_rect.mTop, 0.f);
 			index++;
 
 			// draw top left
 			uv[index] = LLVector2(uv_outer_rect.mLeft, uv_center_rect.mTop);
-			pos[index] = LLVector3(draw_outer_rect.mLeft, draw_center_rect.mTop, 0.f);
+			pos[index].set(draw_outer_rect.mLeft, draw_center_rect.mTop, 0.f);
 			index++;
 
 			uv[index] = LLVector2(uv_center_rect.mLeft, uv_center_rect.mTop);
-			pos[index] = LLVector3(draw_center_rect.mLeft, draw_center_rect.mTop, 0.f);
+			pos[index].set(draw_center_rect.mLeft, draw_center_rect.mTop, 0.f);
 			index++;
 
 			uv[index] = LLVector2(uv_center_rect.mLeft, uv_outer_rect.mTop);
-			pos[index] = LLVector3(draw_center_rect.mLeft, draw_outer_rect.mTop, 0.f);
+			pos[index].set(draw_center_rect.mLeft, draw_outer_rect.mTop, 0.f);
 			index++;
 
 			uv[index] = LLVector2(uv_outer_rect.mLeft, uv_outer_rect.mTop);
-			pos[index] = LLVector3(draw_outer_rect.mLeft, draw_outer_rect.mTop, 0.f);
+			pos[index].set(draw_outer_rect.mLeft, draw_outer_rect.mTop, 0.f);
 			index++;
 
 			// draw top middle
 			uv[index] = LLVector2(uv_center_rect.mLeft, uv_center_rect.mTop);
-			pos[index] = LLVector3(draw_center_rect.mLeft, draw_center_rect.mTop, 0.f);
+			pos[index].set(draw_center_rect.mLeft, draw_center_rect.mTop, 0.f);
 			index++;
 
 			uv[index] = LLVector2(uv_center_rect.mRight, uv_center_rect.mTop);
-			pos[index] = LLVector3(draw_center_rect.mRight, draw_center_rect.mTop, 0.f);
+			pos[index].set(draw_center_rect.mRight, draw_center_rect.mTop, 0.f);
 			index++;
 
 			uv[index] = LLVector2(uv_center_rect.mRight, uv_outer_rect.mTop);
-			pos[index] = LLVector3(draw_center_rect.mRight, draw_outer_rect.mTop, 0.f);
+			pos[index].set(draw_center_rect.mRight, draw_outer_rect.mTop, 0.f);
 			index++;
 
 			uv[index] = LLVector2(uv_center_rect.mLeft, uv_outer_rect.mTop);
-			pos[index] = LLVector3(draw_center_rect.mLeft, draw_outer_rect.mTop, 0.f);
+			pos[index].set(draw_center_rect.mLeft, draw_outer_rect.mTop, 0.f);
 			index++;
 
 			// draw top right
 			uv[index] = LLVector2(uv_center_rect.mRight, uv_center_rect.mTop);
-			pos[index] = LLVector3(draw_center_rect.mRight, draw_center_rect.mTop, 0.f);
+			pos[index].set(draw_center_rect.mRight, draw_center_rect.mTop, 0.f);
 			index++;
 
 			uv[index] = LLVector2(uv_outer_rect.mRight, uv_center_rect.mTop);
-			pos[index] = LLVector3(draw_outer_rect.mRight, draw_center_rect.mTop, 0.f);
+			pos[index].set(draw_outer_rect.mRight, draw_center_rect.mTop, 0.f);
 			index++;
 
 			uv[index] = LLVector2(uv_outer_rect.mRight, uv_outer_rect.mTop);
-			pos[index] = LLVector3(draw_outer_rect.mRight, draw_outer_rect.mTop, 0.f);
+			pos[index].set(draw_outer_rect.mRight, draw_outer_rect.mTop, 0.f);
 			index++;
 
 			uv[index] = LLVector2(uv_center_rect.mRight, uv_outer_rect.mTop);
-			pos[index] = LLVector3(draw_center_rect.mRight, draw_outer_rect.mTop, 0.f);
+			pos[index].set(draw_center_rect.mRight, draw_outer_rect.mTop, 0.f);
 			index++;
 
 			gGL.vertexBatchPreTransformed(pos, uv, NUM_VERTICES);
@@ -691,7 +691,7 @@ void gl_draw_scaled_rotated_image(S32 x, S32 y, S32 width, S32 height, F32 degre
 	{
 		const S32 NUM_VERTICES = 4; // 9 quads
 		LLVector2 uv[NUM_VERTICES];
-		LLVector3 pos[NUM_VERTICES];
+		LLVector4a pos[NUM_VERTICES];
 
 		gGL.begin(LLRender::QUADS);
 		{
@@ -705,19 +705,19 @@ void gl_draw_scaled_rotated_image(S32 x, S32 y, S32 width, S32 height, F32 degre
 			S32 scaled_height = ll_round(height * ui_scale.mV[VY]);
 
 			uv[index] = LLVector2(uv_rect.mRight, uv_rect.mTop);
-			pos[index] = LLVector3(ui_translation.mV[VX] + scaled_width, ui_translation.mV[VY] + scaled_height, 0.f);
+			pos[index].set(ui_translation.mV[VX] + scaled_width, ui_translation.mV[VY] + scaled_height, 0.f);
 			index++;
 
 			uv[index] = LLVector2(uv_rect.mLeft, uv_rect.mTop);
-			pos[index] = LLVector3(ui_translation.mV[VX], ui_translation.mV[VY] + scaled_height, 0.f);
+			pos[index].set(ui_translation.mV[VX], ui_translation.mV[VY] + scaled_height, 0.f);
 			index++;
 
 			uv[index] = LLVector2(uv_rect.mLeft, uv_rect.mBottom);
-			pos[index] = LLVector3(ui_translation.mV[VX], ui_translation.mV[VY], 0.f);
+			pos[index].set(ui_translation.mV[VX], ui_translation.mV[VY], 0.f);
 			index++;
 
 			uv[index] = LLVector2(uv_rect.mRight, uv_rect.mBottom);
-			pos[index] = LLVector3(ui_translation.mV[VX] + scaled_width, ui_translation.mV[VY], 0.f);
+			pos[index].set(ui_translation.mV[VX] + scaled_width, ui_translation.mV[VY], 0.f);
 			index++;
 
 			gGL.vertexBatchPreTransformed(pos, uv, NUM_VERTICES);
diff --git a/indra/llui/llbadge.cpp b/indra/llui/llbadge.cpp
index 589b75ab5bd8e1cd27a50d803bb33684c997b12a..ac05a6b0faf64e7a318913cbb08ddcbf12be7509 100644
--- a/indra/llui/llbadge.cpp
+++ b/indra/llui/llbadge.cpp
@@ -202,11 +202,11 @@ void renderBadgeBackground(F32 centerX, F32 centerY, F32 width, F32 height, cons
 						ll_round(x) + width,
 						ll_round(y) + height);
 	
-	LLVector3 vertices[4];
-	vertices[0] = LLVector3(screen_rect.mRight, screen_rect.mTop,    1.0f);
-	vertices[1] = LLVector3(screen_rect.mLeft,  screen_rect.mTop,    1.0f);
-	vertices[2] = LLVector3(screen_rect.mLeft,  screen_rect.mBottom, 1.0f);
-	vertices[3] = LLVector3(screen_rect.mRight, screen_rect.mBottom, 1.0f);
+	LLVector4a vertices[4];
+	vertices[0].set(screen_rect.mRight, screen_rect.mTop,    1.0f);
+	vertices[1].set(screen_rect.mLeft,  screen_rect.mTop,    1.0f);
+	vertices[2].set(screen_rect.mLeft,  screen_rect.mBottom, 1.0f);
+	vertices[3].set(screen_rect.mRight, screen_rect.mBottom, 1.0f);
 	
 	gGL.begin(LLRender::QUADS);
 	{