diff --git a/indra/llcharacter/llanimationstates.cpp b/indra/llcharacter/llanimationstates.cpp
index 365fb673f37453772e8ff1f27b518c5d23a0bf48..4c24218fc3f0bf5f586db656adcadca7d14cf0e8 100644
--- a/indra/llcharacter/llanimationstates.cpp
+++ b/indra/llcharacter/llanimationstates.cpp
@@ -39,6 +39,146 @@
 #include "llanimationstates.h"
 #include "llstring.h"
 
+const LLUUID ANIM_AGENT_AFRAID				= LLUUID("6b61c8e8-4747-0d75-12d7-e49ff207a4ca");
+const LLUUID ANIM_AGENT_AIM_BAZOOKA_R		= LLUUID("b5b4a67d-0aee-30d2-72cd-77b333e932ef");
+const LLUUID ANIM_AGENT_AIM_BOW_L			= LLUUID("46bb4359-de38-4ed8-6a22-f1f52fe8f506");
+const LLUUID ANIM_AGENT_AIM_HANDGUN_R		= LLUUID("3147d815-6338-b932-f011-16b56d9ac18b");
+const LLUUID ANIM_AGENT_AIM_RIFLE_R			= LLUUID("ea633413-8006-180a-c3ba-96dd1d756720");
+const LLUUID ANIM_AGENT_ANGRY				= LLUUID("5747a48e-073e-c331-f6f3-7c2149613d3e");
+const LLUUID ANIM_AGENT_AWAY				= LLUUID("fd037134-85d4-f241-72c6-4f42164fedee");
+const LLUUID ANIM_AGENT_BACKFLIP			= LLUUID("c4ca6188-9127-4f31-0158-23c4e2f93304");
+const LLUUID ANIM_AGENT_BELLY_LAUGH			= LLUUID("18b3a4b5-b463-bd48-e4b6-71eaac76c515");
+const LLUUID ANIM_AGENT_BLOW_KISS			= LLUUID("db84829b-462c-ee83-1e27-9bbee66bd624");
+const LLUUID ANIM_AGENT_BORED				= LLUUID("b906c4ba-703b-1940-32a3-0c7f7d791510");
+const LLUUID ANIM_AGENT_BOW					= LLUUID("82e99230-c906-1403-4d9c-3889dd98daba");
+const LLUUID ANIM_AGENT_BRUSH				= LLUUID("349a3801-54f9-bf2c-3bd0-1ac89772af01");
+const LLUUID ANIM_AGENT_BUSY				= LLUUID("efcf670c-2d18-8128-973a-034ebc806b67");
+const LLUUID ANIM_AGENT_CLAP				= LLUUID("9b0c1c4e-8ac7-7969-1494-28c874c4f668");
+const LLUUID ANIM_AGENT_COURTBOW			= LLUUID("9ba1c942-08be-e43a-fb29-16ad440efc50");
+const LLUUID ANIM_AGENT_CROUCH				= LLUUID("201f3fdf-cb1f-dbec-201f-7333e328ae7c");
+const LLUUID ANIM_AGENT_CROUCHWALK			= LLUUID("47f5f6fb-22e5-ae44-f871-73aaaf4a6022");
+const LLUUID ANIM_AGENT_CRY					= LLUUID("92624d3e-1068-f1aa-a5ec-8244585193ed");
+const LLUUID ANIM_AGENT_CUSTOMIZE	 		= LLUUID("038fcec9-5ebd-8a8e-0e2e-6e71a0a1ac53");
+const LLUUID ANIM_AGENT_CUSTOMIZE_DONE		= LLUUID("6883a61a-b27b-5914-a61e-dda118a9ee2c");
+const LLUUID ANIM_AGENT_DANCE1				= LLUUID("b68a3d7c-de9e-fc87-eec8-543d787e5b0d");
+const LLUUID ANIM_AGENT_DANCE2				= LLUUID("928cae18-e31d-76fd-9cc9-2f55160ff818");
+const LLUUID ANIM_AGENT_DANCE3				= LLUUID("30047778-10ea-1af7-6881-4db7a3a5a114");
+const LLUUID ANIM_AGENT_DANCE4				= LLUUID("951469f4-c7b2-c818-9dee-ad7eea8c30b7");
+const LLUUID ANIM_AGENT_DANCE5				= LLUUID("4bd69a1d-1114-a0b4-625f-84e0a5237155");
+const LLUUID ANIM_AGENT_DANCE6				= LLUUID("cd28b69b-9c95-bb78-3f94-8d605ff1bb12");
+const LLUUID ANIM_AGENT_DANCE7				= LLUUID("a54d8ee2-28bb-80a9-7f0c-7afbbe24a5d6");
+const LLUUID ANIM_AGENT_DANCE8				= LLUUID("b0dc417c-1f11-af36-2e80-7e7489fa7cdc");
+const LLUUID ANIM_AGENT_DEAD				= LLUUID("57abaae6-1d17-7b1b-5f98-6d11a6411276");
+const LLUUID ANIM_AGENT_DRINK				= LLUUID("0f86e355-dd31-a61c-fdb0-3a96b9aad05f");
+const LLUUID ANIM_AGENT_EMBARRASSED			= LLUUID("514af488-9051-044a-b3fc-d4dbf76377c6");
+const LLUUID ANIM_AGENT_EXPRESS_AFRAID		= LLUUID("aa2df84d-cf8f-7218-527b-424a52de766e");
+const LLUUID ANIM_AGENT_EXPRESS_ANGER		= LLUUID("1a03b575-9634-b62a-5767-3a679e81f4de");
+const LLUUID ANIM_AGENT_EXPRESS_BORED		= LLUUID("214aa6c1-ba6a-4578-f27c-ce7688f61d0d");
+const LLUUID ANIM_AGENT_EXPRESS_CRY			= LLUUID("d535471b-85bf-3b4d-a542-93bea4f59d33");
+const LLUUID ANIM_AGENT_EXPRESS_DISDAIN		= LLUUID("d4416ff1-09d3-300f-4183-1b68a19b9fc1");
+const LLUUID ANIM_AGENT_EXPRESS_EMBARRASSED = LLUUID("0b8c8211-d78c-33e8-fa28-c51a9594e424");
+const LLUUID ANIM_AGENT_EXPRESS_FROWN		= LLUUID("fee3df48-fa3d-1015-1e26-a205810e3001");
+const LLUUID ANIM_AGENT_EXPRESS_KISS		= LLUUID("1e8d90cc-a84e-e135-884c-7c82c8b03a14");
+const LLUUID ANIM_AGENT_EXPRESS_LAUGH		= LLUUID("62570842-0950-96f8-341c-809e65110823");
+const LLUUID ANIM_AGENT_EXPRESS_OPEN_MOUTH	= LLUUID("d63bc1f9-fc81-9625-a0c6-007176d82eb7");
+const LLUUID ANIM_AGENT_EXPRESS_REPULSED	= LLUUID("f76cda94-41d4-a229-2872-e0296e58afe1");
+const LLUUID ANIM_AGENT_EXPRESS_SAD			= LLUUID("eb6ebfb2-a4b3-a19c-d388-4dd5c03823f7");
+const LLUUID ANIM_AGENT_EXPRESS_SHRUG		= LLUUID("a351b1bc-cc94-aac2-7bea-a7e6ebad15ef");
+const LLUUID ANIM_AGENT_EXPRESS_SMILE		= LLUUID("b7c7c833-e3d3-c4e3-9fc0-131237446312");
+const LLUUID ANIM_AGENT_EXPRESS_SURPRISE	= LLUUID("728646d9-cc79-08b2-32d6-937f0a835c24");
+const LLUUID ANIM_AGENT_EXPRESS_TONGUE_OUT	= LLUUID("835965c6-7f2f-bda2-5deb-2478737f91bf");
+const LLUUID ANIM_AGENT_EXPRESS_TOOTHSMILE	= LLUUID("b92ec1a5-e7ce-a76b-2b05-bcdb9311417e");
+const LLUUID ANIM_AGENT_EXPRESS_WINK		= LLUUID("da020525-4d94-59d6-23d7-81fdebf33148");
+const LLUUID ANIM_AGENT_EXPRESS_WORRY		= LLUUID("9c05e5c7-6f07-6ca4-ed5a-b230390c3950");
+const LLUUID ANIM_AGENT_FALLDOWN			= LLUUID("666307d9-a860-572d-6fd4-c3ab8865c094");
+const LLUUID ANIM_AGENT_FEMALE_RUN_NEW		= LLUUID("85995026-eade-5d78-d364-94a64512cb66");
+const LLUUID ANIM_AGENT_FEMALE_WALK			= LLUUID("f5fc7433-043d-e819-8298-f519a119b688");
+const LLUUID ANIM_AGENT_FEMALE_WALK_NEW		= LLUUID("d60c41d2-7c24-7074-d3fa-6101cea22a51");
+const LLUUID ANIM_AGENT_FINGER_WAG			= LLUUID("c1bc7f36-3ba0-d844-f93c-93be945d644f");
+const LLUUID ANIM_AGENT_FIST_PUMP			= LLUUID("7db00ccd-f380-f3ee-439d-61968ec69c8a");
+const LLUUID ANIM_AGENT_FLY					= LLUUID("aec4610c-757f-bc4e-c092-c6e9caf18daf");
+const LLUUID ANIM_AGENT_FLYSLOW				= LLUUID("2b5a38b2-5e00-3a97-a495-4c826bc443e6");
+const LLUUID ANIM_AGENT_HELLO				= LLUUID("9b29cd61-c45b-5689-ded2-91756b8d76a9");
+const LLUUID ANIM_AGENT_HOLD_BAZOOKA_R		= LLUUID("ef62d355-c815-4816-2474-b1acc21094a6");
+const LLUUID ANIM_AGENT_HOLD_BOW_L			= LLUUID("8b102617-bcba-037b-86c1-b76219f90c88");
+const LLUUID ANIM_AGENT_HOLD_HANDGUN_R		= LLUUID("efdc1727-8b8a-c800-4077-975fc27ee2f2");
+const LLUUID ANIM_AGENT_HOLD_RIFLE_R		= LLUUID("3d94bad0-c55b-7dcc-8763-033c59405d33");
+const LLUUID ANIM_AGENT_HOLD_THROW_R		= LLUUID("7570c7b5-1f22-56dd-56ef-a9168241bbb6");
+const LLUUID ANIM_AGENT_HOVER				= LLUUID("4ae8016b-31b9-03bb-c401-b1ea941db41d");
+const LLUUID ANIM_AGENT_HOVER_DOWN			= LLUUID("20f063ea-8306-2562-0b07-5c853b37b31e");
+const LLUUID ANIM_AGENT_HOVER_UP			= LLUUID("62c5de58-cb33-5743-3d07-9e4cd4352864");
+const LLUUID ANIM_AGENT_IMPATIENT			= LLUUID("5ea3991f-c293-392e-6860-91dfa01278a3");
+const LLUUID ANIM_AGENT_JUMP				= LLUUID("2305bd75-1ca9-b03b-1faa-b176b8a8c49e");
+const LLUUID ANIM_AGENT_JUMP_FOR_JOY		= LLUUID("709ea28e-1573-c023-8bf8-520c8bc637fa");
+const LLUUID ANIM_AGENT_KISS_MY_BUTT		= LLUUID("19999406-3a3a-d58c-a2ac-d72e555dcf51");
+const LLUUID ANIM_AGENT_LAND				= LLUUID("7a17b059-12b2-41b1-570a-186368b6aa6f");
+const LLUUID ANIM_AGENT_LAUGH_SHORT			= LLUUID("ca5b3f14-3194-7a2b-c894-aa699b718d1f");
+const LLUUID ANIM_AGENT_MEDIUM_LAND			= LLUUID("f4f00d6e-b9fe-9292-f4cb-0ae06ea58d57");
+const LLUUID ANIM_AGENT_MOTORCYCLE_SIT		= LLUUID("08464f78-3a8e-2944-cba5-0c94aff3af29");
+const LLUUID ANIM_AGENT_MUSCLE_BEACH		= LLUUID("315c3a41-a5f3-0ba4-27da-f893f769e69b");
+const LLUUID ANIM_AGENT_NO					= LLUUID("5a977ed9-7f72-44e9-4c4c-6e913df8ae74");
+const LLUUID ANIM_AGENT_NO_UNHAPPY			= LLUUID("d83fa0e5-97ed-7eb2-e798-7bd006215cb4");
+const LLUUID ANIM_AGENT_NYAH_NYAH			= LLUUID("f061723d-0a18-754f-66ee-29a44795a32f");
+const LLUUID ANIM_AGENT_ONETWO_PUNCH		= LLUUID("eefc79be-daae-a239-8c04-890f5d23654a");
+const LLUUID ANIM_AGENT_PEACE				= LLUUID("b312b10e-65ab-a0a4-8b3c-1326ea8e3ed9");
+const LLUUID ANIM_AGENT_POINT_ME			= LLUUID("17c024cc-eef2-f6a0-3527-9869876d7752");
+const LLUUID ANIM_AGENT_POINT_YOU			= LLUUID("ec952cca-61ef-aa3b-2789-4d1344f016de");
+const LLUUID ANIM_AGENT_PRE_JUMP			= LLUUID("7a4e87fe-de39-6fcb-6223-024b00893244");
+const LLUUID ANIM_AGENT_PUNCH_LEFT			= LLUUID("f3300ad9-3462-1d07-2044-0fef80062da0");
+const LLUUID ANIM_AGENT_PUNCH_RIGHT			= LLUUID("c8e42d32-7310-6906-c903-cab5d4a34656");
+const LLUUID ANIM_AGENT_REPULSED			= LLUUID("36f81a92-f076-5893-dc4b-7c3795e487cf");
+const LLUUID ANIM_AGENT_ROUNDHOUSE_KICK		= LLUUID("49aea43b-5ac3-8a44-b595-96100af0beda");
+const LLUUID ANIM_AGENT_RPS_COUNTDOWN		= LLUUID("35db4f7e-28c2-6679-cea9-3ee108f7fc7f");
+const LLUUID ANIM_AGENT_RPS_PAPER			= LLUUID("0836b67f-7f7b-f37b-c00a-460dc1521f5a");
+const LLUUID ANIM_AGENT_RPS_ROCK			= LLUUID("42dd95d5-0bc6-6392-f650-777304946c0f");
+const LLUUID ANIM_AGENT_RPS_SCISSORS		= LLUUID("16803a9f-5140-e042-4d7b-d28ba247c325");
+const LLUUID ANIM_AGENT_RUN					= LLUUID("05ddbff8-aaa9-92a1-2b74-8fe77a29b445");
+const LLUUID ANIM_AGENT_RUN_NEW				= LLUUID("1ab1b236-cd08-21e6-0cbc-0d923fc6eca2");
+const LLUUID ANIM_AGENT_SAD					= LLUUID("0eb702e2-cc5a-9a88-56a5-661a55c0676a");
+const LLUUID ANIM_AGENT_SALUTE				= LLUUID("cd7668a6-7011-d7e2-ead8-fc69eff1a104");
+const LLUUID ANIM_AGENT_SHOOT_BOW_L			= LLUUID("e04d450d-fdb5-0432-fd68-818aaf5935f8");
+const LLUUID ANIM_AGENT_SHOUT				= LLUUID("6bd01860-4ebd-127a-bb3d-d1427e8e0c42");
+const LLUUID ANIM_AGENT_SHRUG				= LLUUID("70ea714f-3a97-d742-1b01-590a8fcd1db5");
+const LLUUID ANIM_AGENT_SIT					= LLUUID("1a5fe8ac-a804-8a5d-7cbd-56bd83184568");
+const LLUUID ANIM_AGENT_SIT_FEMALE			= LLUUID("b1709c8d-ecd3-54a1-4f28-d55ac0840782");
+const LLUUID ANIM_AGENT_SIT_GENERIC			= LLUUID("245f3c54-f1c0-bf2e-811f-46d8eeb386e7");
+const LLUUID ANIM_AGENT_SIT_GROUND 			= LLUUID("1c7600d6-661f-b87b-efe2-d7421eb93c86");
+const LLUUID ANIM_AGENT_SIT_GROUND_CONSTRAINED	= LLUUID("1a2bd58e-87ff-0df8-0b4c-53e047b0bb6e");
+const LLUUID ANIM_AGENT_SIT_TO_STAND		= LLUUID("a8dee56f-2eae-9e7a-05a2-6fb92b97e21e");
+const LLUUID ANIM_AGENT_SLEEP				= LLUUID("f2bed5f9-9d44-39af-b0cd-257b2a17fe40");
+const LLUUID ANIM_AGENT_SMOKE_IDLE			= LLUUID("d2f2ee58-8ad1-06c9-d8d3-3827ba31567a");
+const LLUUID ANIM_AGENT_SMOKE_INHALE		= LLUUID("6802d553-49da-0778-9f85-1599a2266526");
+const LLUUID ANIM_AGENT_SMOKE_THROW_DOWN	= LLUUID("0a9fb970-8b44-9114-d3a9-bf69cfe804d6");
+const LLUUID ANIM_AGENT_SNAPSHOT			= LLUUID("eae8905b-271a-99e2-4c0e-31106afd100c");
+const LLUUID ANIM_AGENT_STAND				= LLUUID("2408fe9e-df1d-1d7d-f4ff-1384fa7b350f");
+const LLUUID ANIM_AGENT_STANDUP				= LLUUID("3da1d753-028a-5446-24f3-9c9b856d9422");
+const LLUUID ANIM_AGENT_STAND_1				= LLUUID("15468e00-3400-bb66-cecc-646d7c14458e");
+const LLUUID ANIM_AGENT_STAND_2				= LLUUID("370f3a20-6ca6-9971-848c-9a01bc42ae3c");
+const LLUUID ANIM_AGENT_STAND_3				= LLUUID("42b46214-4b44-79ae-deb8-0df61424ff4b");
+const LLUUID ANIM_AGENT_STAND_4				= LLUUID("f22fed8b-a5ed-2c93-64d5-bdd8b93c889f");
+const LLUUID ANIM_AGENT_STRETCH				= LLUUID("80700431-74ec-a008-14f8-77575e73693f");
+const LLUUID ANIM_AGENT_STRIDE				= LLUUID("1cb562b0-ba21-2202-efb3-30f82cdf9595");
+const LLUUID ANIM_AGENT_SURF				= LLUUID("41426836-7437-7e89-025d-0aa4d10f1d69");
+const LLUUID ANIM_AGENT_SURPRISE			= LLUUID("313b9881-4302-73c0-c7d0-0e7a36b6c224");
+const LLUUID ANIM_AGENT_SWORD_STRIKE		= LLUUID("85428680-6bf9-3e64-b489-6f81087c24bd");
+const LLUUID ANIM_AGENT_TALK				= LLUUID("5c682a95-6da4-a463-0bf6-0f5b7be129d1");
+const LLUUID ANIM_AGENT_TANTRUM				= LLUUID("11000694-3f41-adc2-606b-eee1d66f3724");
+const LLUUID ANIM_AGENT_THROW_R				= LLUUID("aa134404-7dac-7aca-2cba-435f9db875ca");
+const LLUUID ANIM_AGENT_TRYON_SHIRT			= LLUUID("83ff59fe-2346-f236-9009-4e3608af64c1");
+const LLUUID ANIM_AGENT_TURNLEFT			= LLUUID("56e0ba0d-4a9f-7f27-6117-32f2ebbf6135");
+const LLUUID ANIM_AGENT_TURNRIGHT			= LLUUID("2d6daa51-3192-6794-8e2e-a15f8338ec30");
+const LLUUID ANIM_AGENT_TYPE				= LLUUID("c541c47f-e0c0-058b-ad1a-d6ae3a4584d9");
+const LLUUID ANIM_AGENT_WALK				= LLUUID("6ed24bd8-91aa-4b12-ccc7-c97c857ab4e0");
+const LLUUID ANIM_AGENT_WALK_NEW			= LLUUID("33339176-7ddc-9397-94a4-bf3403cbc8f5");
+const LLUUID ANIM_AGENT_WHISPER				= LLUUID("7693f268-06c7-ea71-fa21-2b30d6533f8f");
+const LLUUID ANIM_AGENT_WHISTLE				= LLUUID("b1ed7982-c68e-a982-7561-52a88a5298c0");
+const LLUUID ANIM_AGENT_WINK				= LLUUID("869ecdad-a44b-671e-3266-56aef2e3ac2e");
+const LLUUID ANIM_AGENT_WINK_HOLLYWOOD		= LLUUID("c0c4030f-c02b-49de-24ba-2331f43fe41c");
+const LLUUID ANIM_AGENT_WORRY				= LLUUID("9f496bd2-589a-709f-16cc-69bf7df1d36c");
+const LLUUID ANIM_AGENT_YES					= LLUUID("15dd911d-be82-2856-26db-27659b142875");
+const LLUUID ANIM_AGENT_YES_HAPPY			= LLUUID("b8c8b2a3-9008-1771-3bfc-90924955ab2d");
+const LLUUID ANIM_AGENT_YOGA_FLOAT			= LLUUID("42ecd00b-9947-a97c-400a-bbc9174c7aeb");
+
 LLUUID AGENT_WALK_ANIMS[] = {ANIM_AGENT_WALK, ANIM_AGENT_RUN, ANIM_AGENT_CROUCHWALK, ANIM_AGENT_TURNLEFT, ANIM_AGENT_TURNRIGHT};
 S32 NUM_AGENT_WALK_ANIMS = LL_ARRAY_SIZE(AGENT_WALK_ANIMS);
 
@@ -116,7 +256,9 @@ LLAnimationLibrary::LLAnimationLibrary() :
 	mAnimMap[ANIM_AGENT_EXPRESS_WINK]=			mAnimStringTable.addString("express_wink_emote");
 	mAnimMap[ANIM_AGENT_EXPRESS_WORRY]=			mAnimStringTable.addString("express_worry_emote");
 	mAnimMap[ANIM_AGENT_FALLDOWN]=				mAnimStringTable.addString("falldown");
+	mAnimMap[ANIM_AGENT_FEMALE_RUN_NEW]=		mAnimStringTable.addString("female_run_new");
 	mAnimMap[ANIM_AGENT_FEMALE_WALK]=			mAnimStringTable.addString("female_walk");
+	mAnimMap[ANIM_AGENT_FEMALE_WALK_NEW]=		mAnimStringTable.addString("female_walk_new");
 	mAnimMap[ANIM_AGENT_FINGER_WAG]=			mAnimStringTable.addString("angry_fingerwag");
 	mAnimMap[ANIM_AGENT_FIST_PUMP]=				mAnimStringTable.addString("fist_pump");
 	mAnimMap[ANIM_AGENT_FLY]=					mAnimStringTable.addString("fly");
@@ -156,6 +298,7 @@ LLAnimationLibrary::LLAnimationLibrary() :
 	mAnimMap[ANIM_AGENT_RPS_ROCK]=				mAnimStringTable.addString("rps_rock");
 	mAnimMap[ANIM_AGENT_RPS_SCISSORS]=			mAnimStringTable.addString("rps_scissors");
 	mAnimMap[ANIM_AGENT_RUN]=					mAnimStringTable.addString("run");
+	mAnimMap[ANIM_AGENT_RUN_NEW]=				mAnimStringTable.addString("run_new");
 	mAnimMap[ANIM_AGENT_SAD]=					mAnimStringTable.addString("express_sad");
 	mAnimMap[ANIM_AGENT_SALUTE]=				mAnimStringTable.addString("salute");
 	mAnimMap[ANIM_AGENT_SHOOT_BOW_L]=			mAnimStringTable.addString("shoot_l_bow");
@@ -191,6 +334,7 @@ LLAnimationLibrary::LLAnimationLibrary() :
 	mAnimMap[ANIM_AGENT_TURNRIGHT]=				mAnimStringTable.addString("turnright");
 	mAnimMap[ANIM_AGENT_TYPE]=					mAnimStringTable.addString("type");
 	mAnimMap[ANIM_AGENT_WALK]=					mAnimStringTable.addString("walk");
+	mAnimMap[ANIM_AGENT_WALK_NEW]=				mAnimStringTable.addString("walk_new");
 	mAnimMap[ANIM_AGENT_WHISPER]=				mAnimStringTable.addString("whisper");
 	mAnimMap[ANIM_AGENT_WHISTLE]=				mAnimStringTable.addString("whistle");
 	mAnimMap[ANIM_AGENT_WINK]=					mAnimStringTable.addString("express_wink");
@@ -260,6 +404,23 @@ LLUUID LLAnimationLibrary::stringToAnimState( const std::string& name, BOOL allo
 	return id;
 }
 
+//-----------------------------------------------------------------------------
+// Associate an anim state with a name
+//-----------------------------------------------------------------------------
+void LLAnimationLibrary::animStateSetString( const LLUUID& state, const std::string& name)
+{
+	mAnimMap[state] = mAnimStringTable.addString(name);
+}
+
+std::string LLAnimationLibrary::animationName( const LLUUID& id ) const
+{
+	const char *cptr = gAnimLibrary.animStateToString(id); 
+	if (cptr)
+		return std::string(cptr);
+	else
+		return std::string("[") + id.asString() + std::string("]");
+}
+
 // Animation states that the user can trigger as part of a gesture
 // See struct LLAnimStateEntry in header for label location information
 const LLAnimStateEntry gUserAnimStates[] = {
@@ -337,6 +498,5 @@ const LLAnimStateEntry gUserAnimStates[] = {
 const S32 gUserAnimStatesCount = LL_ARRAY_SIZE(gUserAnimStates);
 
 
-
 // End
 
diff --git a/indra/llcharacter/llanimationstates.h b/indra/llcharacter/llanimationstates.h
index 56b24d52156c92330dd9c52c9cf7174b9e3c66bc..59d3a7d789faee96cc0c84894172f031f9acbb4b 100644
--- a/indra/llcharacter/llanimationstates.h
+++ b/indra/llcharacter/llanimationstates.h
@@ -49,142 +49,145 @@
 //-----------------------------------------------------------------------------
 const S32 MAX_CONCURRENT_ANIMS = 16;
 
-
-const LLUUID ANIM_AGENT_AFRAID				= LLUUID("6b61c8e8-4747-0d75-12d7-e49ff207a4ca");
-const LLUUID ANIM_AGENT_AIM_BAZOOKA_R		= LLUUID("b5b4a67d-0aee-30d2-72cd-77b333e932ef");
-const LLUUID ANIM_AGENT_AIM_BOW_L			= LLUUID("46bb4359-de38-4ed8-6a22-f1f52fe8f506");
-const LLUUID ANIM_AGENT_AIM_HANDGUN_R		= LLUUID("3147d815-6338-b932-f011-16b56d9ac18b");
-const LLUUID ANIM_AGENT_AIM_RIFLE_R			= LLUUID("ea633413-8006-180a-c3ba-96dd1d756720");
-const LLUUID ANIM_AGENT_ANGRY				= LLUUID("5747a48e-073e-c331-f6f3-7c2149613d3e");
-const LLUUID ANIM_AGENT_AWAY				= LLUUID("fd037134-85d4-f241-72c6-4f42164fedee");
-const LLUUID ANIM_AGENT_BACKFLIP			= LLUUID("c4ca6188-9127-4f31-0158-23c4e2f93304");
-const LLUUID ANIM_AGENT_BELLY_LAUGH			= LLUUID("18b3a4b5-b463-bd48-e4b6-71eaac76c515");
-const LLUUID ANIM_AGENT_BLOW_KISS			= LLUUID("db84829b-462c-ee83-1e27-9bbee66bd624");
-const LLUUID ANIM_AGENT_BORED				= LLUUID("b906c4ba-703b-1940-32a3-0c7f7d791510");
-const LLUUID ANIM_AGENT_BOW					= LLUUID("82e99230-c906-1403-4d9c-3889dd98daba");
-const LLUUID ANIM_AGENT_BRUSH				= LLUUID("349a3801-54f9-bf2c-3bd0-1ac89772af01");
-const LLUUID ANIM_AGENT_BUSY				= LLUUID("efcf670c-2d18-8128-973a-034ebc806b67");
-const LLUUID ANIM_AGENT_CLAP				= LLUUID("9b0c1c4e-8ac7-7969-1494-28c874c4f668");
-const LLUUID ANIM_AGENT_COURTBOW			= LLUUID("9ba1c942-08be-e43a-fb29-16ad440efc50");
-const LLUUID ANIM_AGENT_CROUCH				= LLUUID("201f3fdf-cb1f-dbec-201f-7333e328ae7c");
-const LLUUID ANIM_AGENT_CROUCHWALK			= LLUUID("47f5f6fb-22e5-ae44-f871-73aaaf4a6022");
-const LLUUID ANIM_AGENT_CRY					= LLUUID("92624d3e-1068-f1aa-a5ec-8244585193ed");
-const LLUUID ANIM_AGENT_CUSTOMIZE	 		= LLUUID("038fcec9-5ebd-8a8e-0e2e-6e71a0a1ac53");
-const LLUUID ANIM_AGENT_CUSTOMIZE_DONE		= LLUUID("6883a61a-b27b-5914-a61e-dda118a9ee2c");
-const LLUUID ANIM_AGENT_DANCE1				= LLUUID("b68a3d7c-de9e-fc87-eec8-543d787e5b0d");
-const LLUUID ANIM_AGENT_DANCE2				= LLUUID("928cae18-e31d-76fd-9cc9-2f55160ff818");
-const LLUUID ANIM_AGENT_DANCE3				= LLUUID("30047778-10ea-1af7-6881-4db7a3a5a114");
-const LLUUID ANIM_AGENT_DANCE4				= LLUUID("951469f4-c7b2-c818-9dee-ad7eea8c30b7");
-const LLUUID ANIM_AGENT_DANCE5				= LLUUID("4bd69a1d-1114-a0b4-625f-84e0a5237155");
-const LLUUID ANIM_AGENT_DANCE6				= LLUUID("cd28b69b-9c95-bb78-3f94-8d605ff1bb12");
-const LLUUID ANIM_AGENT_DANCE7				= LLUUID("a54d8ee2-28bb-80a9-7f0c-7afbbe24a5d6");
-const LLUUID ANIM_AGENT_DANCE8				= LLUUID("b0dc417c-1f11-af36-2e80-7e7489fa7cdc");
-const LLUUID ANIM_AGENT_DEAD				= LLUUID("57abaae6-1d17-7b1b-5f98-6d11a6411276");
-const LLUUID ANIM_AGENT_DRINK				= LLUUID("0f86e355-dd31-a61c-fdb0-3a96b9aad05f");
-const LLUUID ANIM_AGENT_EMBARRASSED			= LLUUID("514af488-9051-044a-b3fc-d4dbf76377c6");
-const LLUUID ANIM_AGENT_EXPRESS_AFRAID		= LLUUID("aa2df84d-cf8f-7218-527b-424a52de766e");
-const LLUUID ANIM_AGENT_EXPRESS_ANGER		= LLUUID("1a03b575-9634-b62a-5767-3a679e81f4de");
-const LLUUID ANIM_AGENT_EXPRESS_BORED		= LLUUID("214aa6c1-ba6a-4578-f27c-ce7688f61d0d");
-const LLUUID ANIM_AGENT_EXPRESS_CRY			= LLUUID("d535471b-85bf-3b4d-a542-93bea4f59d33");
-const LLUUID ANIM_AGENT_EXPRESS_DISDAIN		= LLUUID("d4416ff1-09d3-300f-4183-1b68a19b9fc1");
-const LLUUID ANIM_AGENT_EXPRESS_EMBARRASSED = LLUUID("0b8c8211-d78c-33e8-fa28-c51a9594e424");
-const LLUUID ANIM_AGENT_EXPRESS_FROWN		= LLUUID("fee3df48-fa3d-1015-1e26-a205810e3001");
-const LLUUID ANIM_AGENT_EXPRESS_KISS		= LLUUID("1e8d90cc-a84e-e135-884c-7c82c8b03a14");
-const LLUUID ANIM_AGENT_EXPRESS_LAUGH		= LLUUID("62570842-0950-96f8-341c-809e65110823");
-const LLUUID ANIM_AGENT_EXPRESS_OPEN_MOUTH	= LLUUID("d63bc1f9-fc81-9625-a0c6-007176d82eb7");
-const LLUUID ANIM_AGENT_EXPRESS_REPULSED	= LLUUID("f76cda94-41d4-a229-2872-e0296e58afe1");
-const LLUUID ANIM_AGENT_EXPRESS_SAD			= LLUUID("eb6ebfb2-a4b3-a19c-d388-4dd5c03823f7");
-const LLUUID ANIM_AGENT_EXPRESS_SHRUG		= LLUUID("a351b1bc-cc94-aac2-7bea-a7e6ebad15ef");
-const LLUUID ANIM_AGENT_EXPRESS_SMILE		= LLUUID("b7c7c833-e3d3-c4e3-9fc0-131237446312");
-const LLUUID ANIM_AGENT_EXPRESS_SURPRISE	= LLUUID("728646d9-cc79-08b2-32d6-937f0a835c24");
-const LLUUID ANIM_AGENT_EXPRESS_TONGUE_OUT	= LLUUID("835965c6-7f2f-bda2-5deb-2478737f91bf");
-const LLUUID ANIM_AGENT_EXPRESS_TOOTHSMILE	= LLUUID("b92ec1a5-e7ce-a76b-2b05-bcdb9311417e");
-const LLUUID ANIM_AGENT_EXPRESS_WINK		= LLUUID("da020525-4d94-59d6-23d7-81fdebf33148");
-const LLUUID ANIM_AGENT_EXPRESS_WORRY		= LLUUID("9c05e5c7-6f07-6ca4-ed5a-b230390c3950");
-const LLUUID ANIM_AGENT_FALLDOWN			= LLUUID("666307d9-a860-572d-6fd4-c3ab8865c094");
-const LLUUID ANIM_AGENT_FEMALE_WALK			= LLUUID("f5fc7433-043d-e819-8298-f519a119b688");
-const LLUUID ANIM_AGENT_FINGER_WAG			= LLUUID("c1bc7f36-3ba0-d844-f93c-93be945d644f");
-const LLUUID ANIM_AGENT_FIST_PUMP			= LLUUID("7db00ccd-f380-f3ee-439d-61968ec69c8a");
-const LLUUID ANIM_AGENT_FLY					= LLUUID("aec4610c-757f-bc4e-c092-c6e9caf18daf");
-const LLUUID ANIM_AGENT_FLYSLOW				= LLUUID("2b5a38b2-5e00-3a97-a495-4c826bc443e6");
-const LLUUID ANIM_AGENT_HELLO				= LLUUID("9b29cd61-c45b-5689-ded2-91756b8d76a9");
-const LLUUID ANIM_AGENT_HOLD_BAZOOKA_R		= LLUUID("ef62d355-c815-4816-2474-b1acc21094a6");
-const LLUUID ANIM_AGENT_HOLD_BOW_L			= LLUUID("8b102617-bcba-037b-86c1-b76219f90c88");
-const LLUUID ANIM_AGENT_HOLD_HANDGUN_R		= LLUUID("efdc1727-8b8a-c800-4077-975fc27ee2f2");
-const LLUUID ANIM_AGENT_HOLD_RIFLE_R		= LLUUID("3d94bad0-c55b-7dcc-8763-033c59405d33");
-const LLUUID ANIM_AGENT_HOLD_THROW_R		= LLUUID("7570c7b5-1f22-56dd-56ef-a9168241bbb6");
-const LLUUID ANIM_AGENT_HOVER				= LLUUID("4ae8016b-31b9-03bb-c401-b1ea941db41d");
-const LLUUID ANIM_AGENT_HOVER_DOWN			= LLUUID("20f063ea-8306-2562-0b07-5c853b37b31e");
-const LLUUID ANIM_AGENT_HOVER_UP			= LLUUID("62c5de58-cb33-5743-3d07-9e4cd4352864");
-const LLUUID ANIM_AGENT_IMPATIENT			= LLUUID("5ea3991f-c293-392e-6860-91dfa01278a3");
-const LLUUID ANIM_AGENT_JUMP				= LLUUID("2305bd75-1ca9-b03b-1faa-b176b8a8c49e");
-const LLUUID ANIM_AGENT_JUMP_FOR_JOY		= LLUUID("709ea28e-1573-c023-8bf8-520c8bc637fa");
-const LLUUID ANIM_AGENT_KISS_MY_BUTT		= LLUUID("19999406-3a3a-d58c-a2ac-d72e555dcf51");
-const LLUUID ANIM_AGENT_LAND				= LLUUID("7a17b059-12b2-41b1-570a-186368b6aa6f");
-const LLUUID ANIM_AGENT_LAUGH_SHORT			= LLUUID("ca5b3f14-3194-7a2b-c894-aa699b718d1f");
-const LLUUID ANIM_AGENT_MEDIUM_LAND			= LLUUID("f4f00d6e-b9fe-9292-f4cb-0ae06ea58d57");
-const LLUUID ANIM_AGENT_MOTORCYCLE_SIT		= LLUUID("08464f78-3a8e-2944-cba5-0c94aff3af29");
-const LLUUID ANIM_AGENT_MUSCLE_BEACH		= LLUUID("315c3a41-a5f3-0ba4-27da-f893f769e69b");
-const LLUUID ANIM_AGENT_NO					= LLUUID("5a977ed9-7f72-44e9-4c4c-6e913df8ae74");
-const LLUUID ANIM_AGENT_NO_UNHAPPY			= LLUUID("d83fa0e5-97ed-7eb2-e798-7bd006215cb4");
-const LLUUID ANIM_AGENT_NYAH_NYAH			= LLUUID("f061723d-0a18-754f-66ee-29a44795a32f");
-const LLUUID ANIM_AGENT_ONETWO_PUNCH		= LLUUID("eefc79be-daae-a239-8c04-890f5d23654a");
-const LLUUID ANIM_AGENT_PEACE				= LLUUID("b312b10e-65ab-a0a4-8b3c-1326ea8e3ed9");
-const LLUUID ANIM_AGENT_POINT_ME			= LLUUID("17c024cc-eef2-f6a0-3527-9869876d7752");
-const LLUUID ANIM_AGENT_POINT_YOU			= LLUUID("ec952cca-61ef-aa3b-2789-4d1344f016de");
-const LLUUID ANIM_AGENT_PRE_JUMP			= LLUUID("7a4e87fe-de39-6fcb-6223-024b00893244");
-const LLUUID ANIM_AGENT_PUNCH_LEFT			= LLUUID("f3300ad9-3462-1d07-2044-0fef80062da0");
-const LLUUID ANIM_AGENT_PUNCH_RIGHT			= LLUUID("c8e42d32-7310-6906-c903-cab5d4a34656");
-const LLUUID ANIM_AGENT_REPULSED			= LLUUID("36f81a92-f076-5893-dc4b-7c3795e487cf");
-const LLUUID ANIM_AGENT_ROUNDHOUSE_KICK		= LLUUID("49aea43b-5ac3-8a44-b595-96100af0beda");
-const LLUUID ANIM_AGENT_RPS_COUNTDOWN		= LLUUID("35db4f7e-28c2-6679-cea9-3ee108f7fc7f");
-const LLUUID ANIM_AGENT_RPS_PAPER			= LLUUID("0836b67f-7f7b-f37b-c00a-460dc1521f5a");
-const LLUUID ANIM_AGENT_RPS_ROCK			= LLUUID("42dd95d5-0bc6-6392-f650-777304946c0f");
-const LLUUID ANIM_AGENT_RPS_SCISSORS		= LLUUID("16803a9f-5140-e042-4d7b-d28ba247c325");
-const LLUUID ANIM_AGENT_RUN					= LLUUID("05ddbff8-aaa9-92a1-2b74-8fe77a29b445");
-const LLUUID ANIM_AGENT_SAD					= LLUUID("0eb702e2-cc5a-9a88-56a5-661a55c0676a");
-const LLUUID ANIM_AGENT_SALUTE				= LLUUID("cd7668a6-7011-d7e2-ead8-fc69eff1a104");
-const LLUUID ANIM_AGENT_SHOOT_BOW_L			= LLUUID("e04d450d-fdb5-0432-fd68-818aaf5935f8");
-const LLUUID ANIM_AGENT_SHOUT				= LLUUID("6bd01860-4ebd-127a-bb3d-d1427e8e0c42");
-const LLUUID ANIM_AGENT_SHRUG				= LLUUID("70ea714f-3a97-d742-1b01-590a8fcd1db5");
-const LLUUID ANIM_AGENT_SIT					= LLUUID("1a5fe8ac-a804-8a5d-7cbd-56bd83184568");
-const LLUUID ANIM_AGENT_SIT_FEMALE			= LLUUID("b1709c8d-ecd3-54a1-4f28-d55ac0840782");
-const LLUUID ANIM_AGENT_SIT_GENERIC			= LLUUID("245f3c54-f1c0-bf2e-811f-46d8eeb386e7");
-const LLUUID ANIM_AGENT_SIT_GROUND 			= LLUUID("1c7600d6-661f-b87b-efe2-d7421eb93c86");
-const LLUUID ANIM_AGENT_SIT_GROUND_CONSTRAINED	= LLUUID("1a2bd58e-87ff-0df8-0b4c-53e047b0bb6e");
-const LLUUID ANIM_AGENT_SIT_TO_STAND		= LLUUID("a8dee56f-2eae-9e7a-05a2-6fb92b97e21e");
-const LLUUID ANIM_AGENT_SLEEP				= LLUUID("f2bed5f9-9d44-39af-b0cd-257b2a17fe40");
-const LLUUID ANIM_AGENT_SMOKE_IDLE			= LLUUID("d2f2ee58-8ad1-06c9-d8d3-3827ba31567a");
-const LLUUID ANIM_AGENT_SMOKE_INHALE		= LLUUID("6802d553-49da-0778-9f85-1599a2266526");
-const LLUUID ANIM_AGENT_SMOKE_THROW_DOWN	= LLUUID("0a9fb970-8b44-9114-d3a9-bf69cfe804d6");
-const LLUUID ANIM_AGENT_SNAPSHOT			= LLUUID("eae8905b-271a-99e2-4c0e-31106afd100c");
-const LLUUID ANIM_AGENT_STAND				= LLUUID("2408fe9e-df1d-1d7d-f4ff-1384fa7b350f");
-const LLUUID ANIM_AGENT_STANDUP				= LLUUID("3da1d753-028a-5446-24f3-9c9b856d9422");
-const LLUUID ANIM_AGENT_STAND_1				= LLUUID("15468e00-3400-bb66-cecc-646d7c14458e");
-const LLUUID ANIM_AGENT_STAND_2				= LLUUID("370f3a20-6ca6-9971-848c-9a01bc42ae3c");
-const LLUUID ANIM_AGENT_STAND_3				= LLUUID("42b46214-4b44-79ae-deb8-0df61424ff4b");
-const LLUUID ANIM_AGENT_STAND_4				= LLUUID("f22fed8b-a5ed-2c93-64d5-bdd8b93c889f");
-const LLUUID ANIM_AGENT_STRETCH				= LLUUID("80700431-74ec-a008-14f8-77575e73693f");
-const LLUUID ANIM_AGENT_STRIDE				= LLUUID("1cb562b0-ba21-2202-efb3-30f82cdf9595");
-const LLUUID ANIM_AGENT_SURF				= LLUUID("41426836-7437-7e89-025d-0aa4d10f1d69");
-const LLUUID ANIM_AGENT_SURPRISE			= LLUUID("313b9881-4302-73c0-c7d0-0e7a36b6c224");
-const LLUUID ANIM_AGENT_SWORD_STRIKE		= LLUUID("85428680-6bf9-3e64-b489-6f81087c24bd");
-const LLUUID ANIM_AGENT_TALK				= LLUUID("5c682a95-6da4-a463-0bf6-0f5b7be129d1");
-const LLUUID ANIM_AGENT_TANTRUM				= LLUUID("11000694-3f41-adc2-606b-eee1d66f3724");
-const LLUUID ANIM_AGENT_THROW_R				= LLUUID("aa134404-7dac-7aca-2cba-435f9db875ca");
-const LLUUID ANIM_AGENT_TRYON_SHIRT			= LLUUID("83ff59fe-2346-f236-9009-4e3608af64c1");
-const LLUUID ANIM_AGENT_TURNLEFT			= LLUUID("56e0ba0d-4a9f-7f27-6117-32f2ebbf6135");
-const LLUUID ANIM_AGENT_TURNRIGHT			= LLUUID("2d6daa51-3192-6794-8e2e-a15f8338ec30");
-const LLUUID ANIM_AGENT_TYPE				= LLUUID("c541c47f-e0c0-058b-ad1a-d6ae3a4584d9");
-const LLUUID ANIM_AGENT_WALK				= LLUUID("6ed24bd8-91aa-4b12-ccc7-c97c857ab4e0");
-const LLUUID ANIM_AGENT_WHISPER				= LLUUID("7693f268-06c7-ea71-fa21-2b30d6533f8f");
-const LLUUID ANIM_AGENT_WHISTLE				= LLUUID("b1ed7982-c68e-a982-7561-52a88a5298c0");
-const LLUUID ANIM_AGENT_WINK				= LLUUID("869ecdad-a44b-671e-3266-56aef2e3ac2e");
-const LLUUID ANIM_AGENT_WINK_HOLLYWOOD		= LLUUID("c0c4030f-c02b-49de-24ba-2331f43fe41c");
-const LLUUID ANIM_AGENT_WORRY				= LLUUID("9f496bd2-589a-709f-16cc-69bf7df1d36c");
-const LLUUID ANIM_AGENT_YES					= LLUUID("15dd911d-be82-2856-26db-27659b142875");
-const LLUUID ANIM_AGENT_YES_HAPPY			= LLUUID("b8c8b2a3-9008-1771-3bfc-90924955ab2d");
-const LLUUID ANIM_AGENT_YOGA_FLOAT			= LLUUID("42ecd00b-9947-a97c-400a-bbc9174c7aeb");
+extern const LLUUID ANIM_AGENT_AFRAID;
+extern const LLUUID ANIM_AGENT_AIM_BAZOOKA_R;
+extern const LLUUID ANIM_AGENT_AIM_BOW_L;
+extern const LLUUID ANIM_AGENT_AIM_HANDGUN_R;
+extern const LLUUID ANIM_AGENT_AIM_RIFLE_R;
+extern const LLUUID ANIM_AGENT_ANGRY;
+extern const LLUUID ANIM_AGENT_AWAY;
+extern const LLUUID ANIM_AGENT_BACKFLIP;
+extern const LLUUID ANIM_AGENT_BELLY_LAUGH;
+extern const LLUUID ANIM_AGENT_BLOW_KISS;
+extern const LLUUID ANIM_AGENT_BORED;
+extern const LLUUID ANIM_AGENT_BOW;
+extern const LLUUID ANIM_AGENT_BRUSH;
+extern const LLUUID ANIM_AGENT_BUSY;
+extern const LLUUID ANIM_AGENT_CLAP;
+extern const LLUUID ANIM_AGENT_COURTBOW;
+extern const LLUUID ANIM_AGENT_CROUCH;
+extern const LLUUID ANIM_AGENT_CROUCHWALK;
+extern const LLUUID ANIM_AGENT_CRY;
+extern const LLUUID ANIM_AGENT_CUSTOMIZE;
+extern const LLUUID ANIM_AGENT_CUSTOMIZE_DONE;
+extern const LLUUID ANIM_AGENT_DANCE1;
+extern const LLUUID ANIM_AGENT_DANCE2;
+extern const LLUUID ANIM_AGENT_DANCE3;
+extern const LLUUID ANIM_AGENT_DANCE4;
+extern const LLUUID ANIM_AGENT_DANCE5;
+extern const LLUUID ANIM_AGENT_DANCE6;
+extern const LLUUID ANIM_AGENT_DANCE7;
+extern const LLUUID ANIM_AGENT_DANCE8;
+extern const LLUUID ANIM_AGENT_DEAD;
+extern const LLUUID ANIM_AGENT_DRINK;
+extern const LLUUID ANIM_AGENT_EMBARRASSED;
+extern const LLUUID ANIM_AGENT_EXPRESS_AFRAID;
+extern const LLUUID ANIM_AGENT_EXPRESS_ANGER;
+extern const LLUUID ANIM_AGENT_EXPRESS_BORED;
+extern const LLUUID ANIM_AGENT_EXPRESS_CRY;
+extern const LLUUID ANIM_AGENT_EXPRESS_DISDAIN;
+extern const LLUUID ANIM_AGENT_EXPRESS_EMBARRASSED;
+extern const LLUUID ANIM_AGENT_EXPRESS_FROWN;
+extern const LLUUID ANIM_AGENT_EXPRESS_KISS;
+extern const LLUUID ANIM_AGENT_EXPRESS_LAUGH;
+extern const LLUUID ANIM_AGENT_EXPRESS_OPEN_MOUTH;
+extern const LLUUID ANIM_AGENT_EXPRESS_REPULSED;
+extern const LLUUID ANIM_AGENT_EXPRESS_SAD;
+extern const LLUUID ANIM_AGENT_EXPRESS_SHRUG;
+extern const LLUUID ANIM_AGENT_EXPRESS_SMILE;
+extern const LLUUID ANIM_AGENT_EXPRESS_SURPRISE;
+extern const LLUUID ANIM_AGENT_EXPRESS_TONGUE_OUT;
+extern const LLUUID ANIM_AGENT_EXPRESS_TOOTHSMILE;
+extern const LLUUID ANIM_AGENT_EXPRESS_WINK;
+extern const LLUUID ANIM_AGENT_EXPRESS_WORRY;
+extern const LLUUID ANIM_AGENT_FALLDOWN;
+extern const LLUUID ANIM_AGENT_FEMALE_RUN_NEW;
+extern const LLUUID ANIM_AGENT_FEMALE_WALK;
+extern const LLUUID ANIM_AGENT_FEMALE_WALK_NEW;
+extern const LLUUID ANIM_AGENT_FINGER_WAG;
+extern const LLUUID ANIM_AGENT_FIST_PUMP;
+extern const LLUUID ANIM_AGENT_FLY;
+extern const LLUUID ANIM_AGENT_FLYSLOW;
+extern const LLUUID ANIM_AGENT_HELLO;
+extern const LLUUID ANIM_AGENT_HOLD_BAZOOKA_R;
+extern const LLUUID ANIM_AGENT_HOLD_BOW_L;
+extern const LLUUID ANIM_AGENT_HOLD_HANDGUN_R;
+extern const LLUUID ANIM_AGENT_HOLD_RIFLE_R;
+extern const LLUUID ANIM_AGENT_HOLD_THROW_R;
+extern const LLUUID ANIM_AGENT_HOVER;
+extern const LLUUID ANIM_AGENT_HOVER_DOWN;
+extern const LLUUID ANIM_AGENT_HOVER_UP;
+extern const LLUUID ANIM_AGENT_IMPATIENT;
+extern const LLUUID ANIM_AGENT_JUMP;
+extern const LLUUID ANIM_AGENT_JUMP_FOR_JOY;
+extern const LLUUID ANIM_AGENT_KISS_MY_BUTT;
+extern const LLUUID ANIM_AGENT_LAND;
+extern const LLUUID ANIM_AGENT_LAUGH_SHORT;
+extern const LLUUID ANIM_AGENT_MEDIUM_LAND;
+extern const LLUUID ANIM_AGENT_MOTORCYCLE_SIT;
+extern const LLUUID ANIM_AGENT_MUSCLE_BEACH;
+extern const LLUUID ANIM_AGENT_NO;
+extern const LLUUID ANIM_AGENT_NO_UNHAPPY;
+extern const LLUUID ANIM_AGENT_NYAH_NYAH;
+extern const LLUUID ANIM_AGENT_ONETWO_PUNCH;
+extern const LLUUID ANIM_AGENT_PEACE;
+extern const LLUUID ANIM_AGENT_POINT_ME;
+extern const LLUUID ANIM_AGENT_POINT_YOU;
+extern const LLUUID ANIM_AGENT_PRE_JUMP;
+extern const LLUUID ANIM_AGENT_PUNCH_LEFT;
+extern const LLUUID ANIM_AGENT_PUNCH_RIGHT;
+extern const LLUUID ANIM_AGENT_REPULSED;
+extern const LLUUID ANIM_AGENT_ROUNDHOUSE_KICK;
+extern const LLUUID ANIM_AGENT_RPS_COUNTDOWN;
+extern const LLUUID ANIM_AGENT_RPS_PAPER;
+extern const LLUUID ANIM_AGENT_RPS_ROCK;
+extern const LLUUID ANIM_AGENT_RPS_SCISSORS;
+extern const LLUUID ANIM_AGENT_RUN;
+extern const LLUUID ANIM_AGENT_RUN_NEW;
+extern const LLUUID ANIM_AGENT_SAD;
+extern const LLUUID ANIM_AGENT_SALUTE;
+extern const LLUUID ANIM_AGENT_SHOOT_BOW_L;
+extern const LLUUID ANIM_AGENT_SHOUT;
+extern const LLUUID ANIM_AGENT_SHRUG;
+extern const LLUUID ANIM_AGENT_SIT;
+extern const LLUUID ANIM_AGENT_SIT_FEMALE;
+extern const LLUUID ANIM_AGENT_SIT_GENERIC;
+extern const LLUUID ANIM_AGENT_SIT_GROUND;
+extern const LLUUID ANIM_AGENT_SIT_GROUND_CONSTRAINED;
+extern const LLUUID ANIM_AGENT_SIT_TO_STAND;
+extern const LLUUID ANIM_AGENT_SLEEP;
+extern const LLUUID ANIM_AGENT_SMOKE_IDLE;
+extern const LLUUID ANIM_AGENT_SMOKE_INHALE;
+extern const LLUUID ANIM_AGENT_SMOKE_THROW_DOWN;
+extern const LLUUID ANIM_AGENT_SNAPSHOT;
+extern const LLUUID ANIM_AGENT_STAND;
+extern const LLUUID ANIM_AGENT_STANDUP;
+extern const LLUUID ANIM_AGENT_STAND_1;
+extern const LLUUID ANIM_AGENT_STAND_2;
+extern const LLUUID ANIM_AGENT_STAND_3;
+extern const LLUUID ANIM_AGENT_STAND_4;
+extern const LLUUID ANIM_AGENT_STRETCH;
+extern const LLUUID ANIM_AGENT_STRIDE;
+extern const LLUUID ANIM_AGENT_SURF;
+extern const LLUUID ANIM_AGENT_SURPRISE;
+extern const LLUUID ANIM_AGENT_SWORD_STRIKE;
+extern const LLUUID ANIM_AGENT_TALK;
+extern const LLUUID ANIM_AGENT_TANTRUM;
+extern const LLUUID ANIM_AGENT_THROW_R;
+extern const LLUUID ANIM_AGENT_TRYON_SHIRT;
+extern const LLUUID ANIM_AGENT_TURNLEFT;
+extern const LLUUID ANIM_AGENT_TURNRIGHT;
+extern const LLUUID ANIM_AGENT_TYPE;
+extern const LLUUID ANIM_AGENT_WALK;
+extern const LLUUID ANIM_AGENT_WALK_NEW;
+extern const LLUUID ANIM_AGENT_WHISPER;
+extern const LLUUID ANIM_AGENT_WHISTLE;
+extern const LLUUID ANIM_AGENT_WINK;
+extern const LLUUID ANIM_AGENT_WINK_HOLLYWOOD;
+extern const LLUUID ANIM_AGENT_WORRY;
+extern const LLUUID ANIM_AGENT_YES;
+extern const LLUUID ANIM_AGENT_YES_HAPPY;
+extern const LLUUID ANIM_AGENT_YOGA_FLOAT;
 
 extern LLUUID AGENT_WALK_ANIMS[];
 extern S32 NUM_AGENT_WALK_ANIMS;
@@ -224,6 +227,16 @@ class LLAnimationLibrary
 	// Retun NULL if the name is invalid.
 	//-----------------------------------------------------------------------------
 	LLUUID stringToAnimState( const std::string& name, BOOL allow_ids = TRUE );
+
+	//-----------------------------------------------------------------------------
+	// Associate an anim state with a name
+	//-----------------------------------------------------------------------------
+	void animStateSetString( const LLUUID& state, const std::string& name);
+
+	//-----------------------------------------------------------------------------
+	// Find the name for a given animation, or UUID string if none defined.
+	//-----------------------------------------------------------------------------
+	std::string animationName( const LLUUID& id ) const;
 };
 
 struct LLAnimStateEntry
@@ -249,7 +262,6 @@ extern const LLAnimStateEntry gUserAnimStates[];
 extern const S32 gUserAnimStatesCount;
 extern LLAnimationLibrary gAnimLibrary;
 
-
 #endif // LL_LLANIMATIONSTATES_H
 
 
diff --git a/indra/llcharacter/llkeyframewalkmotion.cpp b/indra/llcharacter/llkeyframewalkmotion.cpp
index 461309bee998523ed53809490791ebc629d1c250..f814618fc180e968b419f62884ea28cec800e0ac 100644
--- a/indra/llcharacter/llkeyframewalkmotion.cpp
+++ b/indra/llcharacter/llkeyframewalkmotion.cpp
@@ -48,8 +48,10 @@ const F32 MAX_WALK_PLAYBACK_SPEED = 8.f;	// max m/s for which we adjust walk cyc
 
 const F32 MIN_WALK_SPEED = 0.1f;	// minimum speed at which we use velocity for down foot detection
 const F32 MAX_TIME_DELTA = 2.f;		//max two seconds a frame for calculating interpolation
-const F32 SPEED_ADJUST_MAX = 2.5f; // maximum adjustment of walk animation playback speed
-const F32 SPEED_ADJUST_MAX_SEC = 3.f;	// maximum adjustment to walk animation playback speed for a second
+F32 SPEED_ADJUST_MAX = 2.5f; // maximum adjustment of walk animation playback speed
+F32 SPEED_ADJUST_MAX_SEC = 3.f;	// maximum adjustment to walk animation playback speed for a second
+F32 ANIM_SPEED_MAX = 10.0f; // absolute upper limit on animation speed
+F32 ANIM_SPEED_MIN = 0.0f; // absolute lower limit on animation speed
 const F32 DRIFT_COMP_MAX_TOTAL = 0.07f;//0.55f; // maximum drift compensation overall, in any direction 
 const F32 DRIFT_COMP_MAX_SPEED = 4.f; // speed at which drift compensation total maxes out
 const F32 MAX_ROLL = 0.6f;
@@ -300,6 +302,7 @@ BOOL LLWalkAdjustMotion::onUpdate(F32 time, U8* joint_mask)
 	// and if we're moving backward, we walk backward
 
 	F32 directional_factor = localVel.mV[VX] * mRelativeDir;
+
 	if (speed > 0.1f)
 	{
 		// calculate ratio of desired foot velocity to detected foot velocity
@@ -318,16 +321,36 @@ BOOL LLWalkAdjustMotion::onUpdate(F32 time, U8* joint_mask)
 	}
 
 	mAnimSpeed = (mAvgSpeed + mSpeedAdjust) * mRelativeDir;
-//	char debug_text[64];
-//	sprintf(debug_text, "Foot slip vel: %.2f", footSlipVelocity);
-//	mCharacter->addDebugText(debug_text);
-//	sprintf(debug_text, "Speed: %.2f", mAvgSpeed);
-//	mCharacter->addDebugText(debug_text);
-//	sprintf(debug_text, "Speed Adjust: %.2f", mSpeedAdjust);
-//	mCharacter->addDebugText(debug_text);
-//	sprintf(debug_text, "Animation Playback Speed: %.2f", mAnimSpeed);
-//	mCharacter->addDebugText(debug_text);
-	mCharacter->setAnimationData("Walk Speed", &mAnimSpeed);
+	if (mAnimSpeed>0)
+	{
+		mAnimSpeed = llclamp(mAnimSpeed, ANIM_SPEED_MIN, ANIM_SPEED_MAX);
+	}
+	else
+	{
+		mAnimSpeed = llclamp(mAnimSpeed, -ANIM_SPEED_MAX, -ANIM_SPEED_MIN);
+	}
+// 	char debug_text[64];
+// 	sprintf(debug_text, "Foot slip vel: %.2f", footSlipVelocity);
+// 	mCharacter->addDebugText(debug_text);
+// 	sprintf(debug_text, "Speed: %.2f", mAvgSpeed);
+// 	mCharacter->addDebugText(debug_text);
+// 	sprintf(debug_text, "Speed Adjust: %.2f", mSpeedAdjust);
+// 	mCharacter->addDebugText(debug_text);
+// 	sprintf(debug_text, "Animation Playback Speed: %.2f", mAnimSpeed);
+// 	mCharacter->addDebugText(debug_text);
+ 	mCharacter->setAnimationData("Walk Speed", &mAnimSpeed);
+	if (mCharacter->getMotionController().mIsSelf)
+	{
+//		F32 elapsed = mCharacter->getMotionController().getFrameTimer().getElapsedTimeF32();
+// 		llinfos << "PLOT elapsed: " << elapsed 
+// 				<< " footSlipVelocity: " << footSlipVelocity
+// 				<< " mAvgCorrection: " << mAvgCorrection
+// 				<< " mAvgSpeed: " << mAvgSpeed
+// 				<< " mAnimSpeed: " << mAnimSpeed
+// 				<< " ANIM_SPEED_MAX: " << ANIM_SPEED_MAX
+// 				<< " ANIM_SPEED_MIN: " << ANIM_SPEED_MIN
+// 				<< llendl;
+	}
 
 	// clamp pelvis offset to a 90 degree arc behind the nominal position
 	F32 drift_comp_max = llclamp(speed, 0.f, DRIFT_COMP_MAX_SPEED) / DRIFT_COMP_MAX_SPEED;
diff --git a/indra/llcharacter/llmotioncontroller.cpp b/indra/llcharacter/llmotioncontroller.cpp
index bb9625b2bd5451c4b2ca83cb1b1a0d7a09188704..78d9398c1d0a6648c24407146033eceb498edb54 100644
--- a/indra/llcharacter/llmotioncontroller.cpp
+++ b/indra/llcharacter/llmotioncontroller.cpp
@@ -143,7 +143,8 @@ LLMotionController::LLMotionController()
 	  mPauseTime(0.f),
 	  mTimeStep(0.f),
 	  mTimeStepCount(0),
-	  mLastInterp(0.f)
+	  mLastInterp(0.f),
+	  mIsSelf(FALSE)
 {
 }
 
@@ -446,6 +447,7 @@ BOOL LLMotionController::stopMotionInstance(LLMotion* motion, BOOL stop_immediat
 		return FALSE;
 	}
 
+	
 	// If on active list, stop it
 	if (isMotionActive(motion) && !motion->isStopped())
 	{
@@ -1032,6 +1034,31 @@ LLMotion* LLMotionController::findMotion(const LLUUID& id) const
 	}
 }
 
+//-----------------------------------------------------------------------------
+// dumpMotions()
+//-----------------------------------------------------------------------------
+void LLMotionController::dumpMotions()
+{
+	llinfos << "=====================================" << llendl;
+	for (motion_map_t::iterator iter = mAllMotions.begin();
+		 iter != mAllMotions.end(); iter++)
+	{
+		LLUUID id = iter->first;
+		std::string state_string;
+		LLMotion *motion = iter->second;
+		if (mLoadingMotions.find(motion) != mLoadingMotions.end())
+			state_string += std::string("l");
+		if (mLoadedMotions.find(motion) != mLoadedMotions.end())
+			state_string += std::string("L");
+		if (std::find(mActiveMotions.begin(), mActiveMotions.end(), motion)!=mActiveMotions.end())
+			state_string += std::string("A");
+		if (mDeprecatedMotions.find(motion) != mDeprecatedMotions.end())
+			state_string += std::string("D");
+		llinfos << gAnimLibrary.animationName(id) << " " << state_string << llendl;
+		
+	}
+}
+
 //-----------------------------------------------------------------------------
 // deactivateAllMotions()
 //-----------------------------------------------------------------------------
diff --git a/indra/llcharacter/llmotioncontroller.h b/indra/llcharacter/llmotioncontroller.h
index 5c3ec223cb0e1484c2598eee992a10fd2d0f2bdc..f8bf5ac2896ace3b4a54a26743e84d0e3fdd8aca 100644
--- a/indra/llcharacter/llmotioncontroller.h
+++ b/indra/llcharacter/llmotioncontroller.h
@@ -92,6 +92,7 @@ class LLMotionController
 public:
 	typedef std::list<LLMotion*> motion_list_t;
 	typedef std::set<LLMotion*> motion_set_t;
+	BOOL mIsSelf;
 	
 public:
 	// Constructor
@@ -169,6 +170,10 @@ class LLMotionController
 	bool isMotionLoading( LLMotion *motion );
 	LLMotion *findMotion( const LLUUID& id ) const;
 
+	void dumpMotions();
+
+	const LLFrameTimer& getFrameTimer() { return mTimer; }
+
 protected:
 	// internal operations act on motion instances directly
 	// as there can be duplicate motions per id during blending overlap
diff --git a/indra/llmessage/llassetstorage.cpp b/indra/llmessage/llassetstorage.cpp
index bf0ed971436eea1a9b83f61d639989bb2e23fda4..970b6747f79e0325046abd9e4fb094d53e2a6581 100644
--- a/indra/llmessage/llassetstorage.cpp
+++ b/indra/llmessage/llassetstorage.cpp
@@ -440,6 +440,7 @@ void LLAssetStorage::getAssetData(const LLUUID uuid, LLAssetType::EType type, LL
 
 	if (mShutDown)
 	{
+		llinfos << "ASSET_TRACE cancelled " << uuid << " type " << LLAssetType::lookup(type) << " shutting down" << llendl;
 		return; // don't get the asset or do any callbacks, we are shutting down
 	}
 		
@@ -456,6 +457,7 @@ void LLAssetStorage::getAssetData(const LLUUID uuid, LLAssetType::EType type, LL
 	// Try static VFS first.
 	if (findInStaticVFSAndInvokeCallback(uuid,type,callback,user_data))
 	{
+		llinfos << "ASSET_TRACE asset " << uuid << " found in static VFS" << llendl;
 		return;
 	}
 
@@ -472,6 +474,8 @@ void LLAssetStorage::getAssetData(const LLUUID uuid, LLAssetType::EType type, LL
 		{
 			callback(mVFS, uuid, type, user_data, LL_ERR_NOERR, LL_EXSTAT_VFS_CACHED);
 		}
+
+		llinfos << "ASSET_TRACE asset " << uuid << " found in VFS" << llendl;
 	}
 	else
 	{
@@ -512,7 +516,6 @@ void LLAssetStorage::getAssetData(const LLUUID uuid, LLAssetType::EType type, LL
 		// This can be overridden by subclasses
 		_queueDataRequest(uuid, type, callback, user_data, duplicate, is_priority);	
 	}
-		llinfos << "ASSET_TRACE asset " << uuid << " found in VFS" << llendl;
 
 }
 
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index dad2c615e34bd37198ac625251d371a3b24e68d0..50d149152303fe85e776497909b54650662fce8d 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -164,7 +164,6 @@ set(viewer_SOURCE_FILES
     llfloaterbuyland.cpp
     llfloatercamera.cpp
     llfloatercolorpicker.cpp
-    llfloatercustomize.cpp
     llfloaterdaycycle.cpp
     llfloaterenvsettings.cpp
     llfloaterevent.cpp
@@ -276,6 +275,7 @@ set(viewer_SOURCE_FILES
     lllogchat.cpp
     llloginhandler.cpp
     lllogininstance.cpp
+    llmachineid.cpp
     llmanip.cpp
     llmaniprotate.cpp
     llmanipscale.cpp
@@ -682,7 +682,6 @@ set(viewer_HEADER_FILES
     llfloaterbuyland.h
     llfloatercamera.h
     llfloatercolorpicker.h
-    llfloatercustomize.h
     llfloaterdaycycle.h
     llfloaterenvsettings.h
     llfloaterevent.h
@@ -794,6 +793,7 @@ set(viewer_HEADER_FILES
     lllogchat.h
     llloginhandler.h
     lllogininstance.h
+    llmachineid.h
     llmanip.h
     llmaniprotate.h
     llmanipscale.h
@@ -1843,7 +1843,7 @@ if (LL_TESTS)
   )
 
     LL_ADD_INTEGRATION_TEST(llsechandler_basic
-     llsechandler_basic.cpp
+    llsechandler_basic.cpp
     "${test_libs}"
     )
 
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 1d3301d6f7549045ccd82efc771d67b751d70154..c0be54a1051b3d4f2ff5176727a6ffe57edf0887 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -574,6 +574,17 @@
       <key>Value</key>
       <integer>2</integer>
     </map>
+    <key>AvatarBakedTextureTimeout</key>
+    <map>
+      <key>Comment</key>
+      <string>Specifes the maximum time in seconds to wait before sending your baked textures for avatar appearance.  Set to 0 to disable and wait until all baked textures are at highest resolution.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>U32</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>AvatarSex</key>
     <map>
       <key>Comment</key>
@@ -2687,6 +2698,17 @@
       <key>Value</key>
       <integer>4</integer>
     </map>
+    <key>DumpVFSCaches</key>
+    <map>
+      <key>Comment</key>
+      <string>Dump VFS caches on startup.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>DynamicCameraStrength</key>
     <map>
       <key>Comment</key>
@@ -4161,6 +4183,17 @@
         <key>Value</key>
             <integer>1</integer>
         </map>
+    <key>LastGPUClass</key>
+    <map>
+      <key>Comment</key>
+      <string>[DO NOT MODIFY] previous GPU class for tracking hardware changes</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>-1</integer>
+    </map>
     <key>LastFeatureVersion</key>
     <map>
       <key>Comment</key>
@@ -10461,7 +10494,17 @@
       <key>Value</key>
       <real>10.0</real>
     </map>
-
+    <key>UseNewWalkRun</key>
+    <map>
+      <key>Comment</key>
+      <string>Replace standard walk/run animations with new ones.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>UseStartScreen</key>
     <map>
       <key>Comment</key>
diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp
index 7d84f8d071b3ab892d1516fc2d1d1214b2780ca4..0fa77ff7c2ad544e556b892ffaa53344d5207d9f 100644
--- a/indra/newview/llagent.cpp
+++ b/indra/newview/llagent.cpp
@@ -45,7 +45,6 @@
 #include "llchannelmanager.h"
 #include "llconsole.h"
 #include "llfloatercamera.h"
-#include "llfloatercustomize.h"
 #include "llfloaterreg.h"
 #include "llfloatertools.h"
 #include "llgroupactions.h"
@@ -73,6 +72,7 @@
 #include "llviewerdisplay.h"
 #include "llviewerjoystick.h"
 #include "llviewermediafocus.h"
+#include "llviewermenu.h"
 #include "llviewerobjectlist.h"
 #include "llviewerparcelmgr.h"
 #include "llviewerstats.h"
diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp
index 9638d0e94f821482f7454dc1b92425699dfcce8c..47f290ad3b2afc6da6f7f365db45db6059c7616c 100644
--- a/indra/newview/llagentcamera.cpp
+++ b/indra/newview/llagentcamera.cpp
@@ -38,7 +38,6 @@
 #include "llagent.h"
 #include "llanimationstates.h"
 #include "llfloatercamera.h"
-#include "llfloatercustomize.h"
 #include "llfloaterreg.h"
 #include "llhudmanager.h"
 #include "lljoystickbutton.h"
@@ -48,6 +47,7 @@
 #include "llviewercamera.h"
 #include "llviewercontrol.h"
 #include "llviewerjoystick.h"
+#include "llviewermenu.h"
 #include "llviewerobjectlist.h"
 #include "llviewerregion.h"
 #include "llviewerwindow.h"
@@ -1538,26 +1538,6 @@ F32 LLAgentCamera::calcCustomizeAvatarUIOffset(const LLVector3d& camera_pos_glob
 {
 	F32 ui_offset = 0.f;
 
-	if (gFloaterCustomize)
-	{
-		const LLRect& rect = gFloaterCustomize->getRect();
-
-		// Move the camera so that the avatar isn't covered up by this floater.
-		F32 fraction_of_fov = 0.5f - (0.5f * (1.f - llmin(1.f, ((F32)rect.getWidth() / (F32)gViewerWindow->getWindowWidthScaled()))));
-		F32 apparent_angle = fraction_of_fov * LLViewerCamera::getInstance()->getView() * LLViewerCamera::getInstance()->getAspect();  // radians
-		F32 offset = tan(apparent_angle);
-
-		if( rect.mLeft < (gViewerWindow->getWindowWidthScaled() - rect.mRight) )
-		{
-			// Move the avatar to the right (camera to the left)
-			ui_offset = offset;
-		}
-		else
-		{
-			// Move the avatar to the left (camera to the right)
-			ui_offset = -offset;
-		}
-	}
 	F32 range = (F32)dist_vec(camera_pos_global, getFocusGlobal());
 	mUIOffset = lerp(mUIOffset, ui_offset, LLCriticalDamp::getInterpolant(0.05f));
 	return mUIOffset * range;
diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp
index 68c4fa1ea0d619817fa327bf98c2728637eecae7..e5796f8e639c9531ca27187d0b34645f1bc21f3f 100644
--- a/indra/newview/llagentwearables.cpp
+++ b/indra/newview/llagentwearables.cpp
@@ -39,7 +39,6 @@
 #include "llagentwearablesfetch.h"
 #include "llappearancemgr.h"
 #include "llcallbacklist.h"
-#include "llfloatercustomize.h"
 #include "llfolderview.h"
 #include "llgesturemgr.h"
 #include "llinventorybridge.h"
@@ -617,6 +616,23 @@ const LLWearable* LLAgentWearables::getWearableFromItemID(const LLUUID& item_id)
 	return NULL;
 }
 
+LLWearable* LLAgentWearables::getWearableFromItemID(const LLUUID& item_id)
+{
+	const LLUUID& base_item_id = gInventory.getLinkedItemID(item_id);
+	for (S32 i=0; i < LLWearableType::WT_COUNT; i++)
+	{
+		for (U32 j=0; j < getWearableCount((LLWearableType::EType)i); j++)
+		{
+			LLWearable * curr_wearable = getWearable((LLWearableType::EType)i, j);
+			if (curr_wearable && (curr_wearable->getItemID() == base_item_id))
+			{
+				return curr_wearable;
+			}
+		}
+	}
+	return NULL;
+}
+
 LLWearable*	LLAgentWearables::getWearableFromAssetID(const LLUUID& asset_id) 
 {
 	for (S32 i=0; i < LLWearableType::WT_COUNT; i++)
@@ -702,16 +718,16 @@ U32 LLAgentWearables::pushWearable(const LLWearableType::EType type, LLWearable
 	{
 		// no null wearables please!
 		llwarns << "Null wearable sent for type " << type << llendl;
-		return MAX_WEARABLES_PER_TYPE;
+		return MAX_CLOTHING_PER_TYPE;
 	}
-	if (type < LLWearableType::WT_COUNT || mWearableDatas[type].size() < MAX_WEARABLES_PER_TYPE)
+	if (type < LLWearableType::WT_COUNT || mWearableDatas[type].size() < MAX_CLOTHING_PER_TYPE)
 	{
 		mWearableDatas[type].push_back(wearable);
 		wearableUpdated(wearable);
 		checkWearableAgainstInventory(wearable);
 		return mWearableDatas[type].size()-1;
 	}
-	return MAX_WEARABLES_PER_TYPE;
+	return MAX_CLOTHING_PER_TYPE;
 }
 
 void LLAgentWearables::wearableUpdated(LLWearable *wearable)
@@ -748,7 +764,7 @@ void LLAgentWearables::popWearable(LLWearable *wearable)
 	U32 index = getWearableIndex(wearable);
 	LLWearableType::EType type = wearable->getType();
 
-	if (index < MAX_WEARABLES_PER_TYPE && index < getWearableCount(type))
+	if (index < MAX_CLOTHING_PER_TYPE && index < getWearableCount(type))
 	{
 		popWearable(type, index);
 	}
@@ -769,7 +785,7 @@ U32	LLAgentWearables::getWearableIndex(LLWearable *wearable)
 {
 	if (wearable == NULL)
 	{
-		return MAX_WEARABLES_PER_TYPE;
+		return MAX_CLOTHING_PER_TYPE;
 	}
 
 	const LLWearableType::EType type = wearable->getType();
@@ -777,7 +793,7 @@ U32	LLAgentWearables::getWearableIndex(LLWearable *wearable)
 	if (wearable_iter == mWearableDatas.end())
 	{
 		llwarns << "tried to get wearable index with an invalid type!" << llendl;
-		return MAX_WEARABLES_PER_TYPE;
+		return MAX_CLOTHING_PER_TYPE;
 	}
 	const wearableentry_vec_t& wearable_vec = wearable_iter->second;
 	for(U32 index = 0; index < wearable_vec.size(); index++)
@@ -788,7 +804,7 @@ U32	LLAgentWearables::getWearableIndex(LLWearable *wearable)
 		}
 	}
 
-	return MAX_WEARABLES_PER_TYPE;
+	return MAX_CLOTHING_PER_TYPE;
 }
 
 const LLWearable* LLAgentWearables::getWearable(const LLWearableType::EType type, U32 index) const
@@ -1659,14 +1675,12 @@ void LLAgentWearables::userRemoveWearablesOfType(const LLWearableType::EType &ty
 void LLAgentWearables::userRemoveAllClothes()
 {
 	// We have to do this up front to avoid having to deal with the case of multiple wearables being dirty.
-	if (gFloaterCustomize)
-	{
-		gFloaterCustomize->askToSaveIfDirty(userRemoveAllClothesStep2);
-	}
-	else
+	if (gAgentCamera.cameraCustomizeAvatar())
 	{
-		userRemoveAllClothesStep2(TRUE);
+		// switching to outfit editor should automagically save any currently edited wearable
+		LLSideTray::getInstance()->showPanel("sidepanel_appearance", LLSD().with("type", "edit_outfit"));
 	}
+	userRemoveAllClothesStep2(TRUE);
 }
 
 // static
diff --git a/indra/newview/llagentwearables.h b/indra/newview/llagentwearables.h
index 1f19d1045b25a1f9392e2bc3512089d8c028cfe6..5d5c5ae3718aa424830f9dd3423a5714ad8581af 100644
--- a/indra/newview/llagentwearables.h
+++ b/indra/newview/llagentwearables.h
@@ -91,6 +91,7 @@ class LLAgentWearables
 	const LLUUID		getWearableItemID(LLWearableType::EType type, U32 index /*= 0*/) const;
 	const LLUUID		getWearableAssetID(LLWearableType::EType type, U32 index /*= 0*/) const;
 	const LLWearable*	getWearableFromItemID(const LLUUID& item_id) const;
+	LLWearable*	getWearableFromItemID(const LLUUID& item_id);
 	LLWearable*	getWearableFromAssetID(const LLUUID& asset_id);
 	LLInventoryItem*	getWearableInventoryItem(LLWearableType::EType type, U32 index /*= 0*/);
 	static BOOL			selfHasWearable(LLWearableType::EType type);
@@ -101,6 +102,9 @@ class LLAgentWearables
 	U32				getWearableCount(const LLWearableType::EType type) const;
 	U32				getWearableCount(const U32 tex_index) const;
 
+	static const U32 MAX_CLOTHING_PER_TYPE = 5; 
+
+
 	//--------------------------------------------------------------------
 	// Setters
 	//--------------------------------------------------------------------
@@ -273,8 +277,6 @@ class LLAgentWearables
 		LLPointer<LLRefCount> mCB;
 	};
 
-	static const U32 MAX_WEARABLES_PER_TYPE = 1; 
-
 }; // LLAgentWearables
 
 extern LLAgentWearables gAgentWearables;
diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp
index e90dd2ac75cfed4ea7d39f6e5631cb9dd46d6087..f27e632180fb79c33f6fbf52a34c4753a7b055e5 100644
--- a/indra/newview/llappearancemgr.cpp
+++ b/indra/newview/llappearancemgr.cpp
@@ -34,10 +34,10 @@
 
 #include "llaccordionctrltab.h"
 #include "llagent.h"
+#include "llagentcamera.h"
 #include "llagentwearables.h"
 #include "llappearancemgr.h"
 #include "llcommandhandler.h"
-#include "llfloatercustomize.h"
 #include "llgesturemgr.h"
 #include "llinventorybridge.h"
 #include "llinventoryfunctions.h"
@@ -970,7 +970,7 @@ void LLAppearanceMgr::updateCOF(const LLUUID& category, bool append)
 	getDescendentsOfAssetType(category, wear_items, LLAssetType::AT_CLOTHING, false);
 	// Reduce wearables to max of one per type.
 	removeDuplicateItems(wear_items);
-	filterWearableItems(wear_items, 5);
+	filterWearableItems(wear_items, LLAgentWearables::MAX_CLOTHING_PER_TYPE);
 
 	// - Attachments: include COF contents only if appending.
 	LLInventoryModel::item_array_t obj_items;
@@ -1362,16 +1362,13 @@ void LLAppearanceMgr::wearInventoryCategoryOnAvatar( LLInventoryCategory* catego
 	llinfos << "wearInventoryCategoryOnAvatar( " << category->getName()
 			 << " )" << llendl;
 			 	
-	if( gFloaterCustomize )
+	if (gAgentCamera.cameraCustomizeAvatar())
 	{
-		gFloaterCustomize->askToSaveIfDirty(boost::bind(&LLAppearanceMgr::changeOutfit,
-														&LLAppearanceMgr::instance(),
-														_1, category->getUUID(), append));
-	}
-	else
-	{
-		LLAppearanceMgr::changeOutfit(TRUE, category->getUUID(), append);
+		// switching to outfit editor should automagically save any currently edited wearable
+		LLSideTray::getInstance()->showPanel("sidepanel_appearance", LLSD().with("type", "edit_outfit"));
 	}
+
+	LLAppearanceMgr::changeOutfit(TRUE, category->getUUID(), append);
 }
 
 void LLAppearanceMgr::wearOutfitByName(const std::string& name)
@@ -1528,11 +1525,12 @@ void LLAppearanceMgr::addCOFItemLink(const LLInventoryItem *item, bool do_update
 	else
 	{
 		LLPointer<LLInventoryCallback> cb = do_update ? new ModifiedCOFCallback : 0;
+		const std::string description = vitem->getIsLinkType() ? vitem->getDescription() : "";
 		link_inventory_item( gAgent.getID(),
 							 vitem->getLinkedUUID(),
 							 getCOF(),
 							 vitem->getName(),
-							 vitem->getDescription(),
+							 description,
 							 LLAssetType::AT_LINK,
 							 cb);
 	}
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 7b17933b5c316a508726e0f736bfffce2da7702d..deafb20af78353b11f5b29831f1a170f4782dbee 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -195,6 +195,7 @@
 
 // Include for security api initialization
 #include "llsecapi.h"
+#include "llmachineid.h"
 
 // *FIX: These extern globals should be cleaned up.
 // The globals either represent state/config/resource-storage of either 
@@ -619,6 +620,7 @@ bool LLAppViewer::init()
     // *NOTE:Mani - LLCurl::initClass is not thread safe. 
     // Called before threads are created.
     LLCurl::initClass();
+    LLMachineID::init();
 
     initThreads();
     writeSystemInfo();
@@ -2988,6 +2990,44 @@ S32 LLAppViewer::getCacheVersion()
 	return cache_version ;
 }
 
+void dumpVFSCaches()
+{
+	llinfos << "======= Static VFS ========" << llendl;
+	gStaticVFS->listFiles();
+#if LL_WINDOWS
+	llinfos << "======= Dumping static VFS to StaticVFSDump ========" << llendl;
+	WCHAR w_str[MAX_PATH];
+	GetCurrentDirectory(MAX_PATH, w_str);
+	S32 res = LLFile::mkdir("StaticVFSDump");
+	if (res == -1)
+	{
+		if (errno != EEXIST)
+		{
+			llwarns << "Couldn't create dir StaticVFSDump" << llendl;
+		}
+	}
+	SetCurrentDirectory(utf8str_to_utf16str("StaticVFSDump").c_str());
+	gStaticVFS->dumpFiles();
+	SetCurrentDirectory(w_str);
+#endif
+						
+	llinfos << "========= Dynamic VFS ====" << llendl;
+	gVFS->listFiles();
+#if LL_WINDOWS
+	llinfos << "========= Dumping dynamic VFS to VFSDump ====" << llendl;
+	res = LLFile::mkdir("VFSDump");
+	if (res == -1)
+	{
+		if (errno != EEXIST)
+		{
+			llwarns << "Couldn't create dir VFSDump" << llendl;
+		}
+	}
+	SetCurrentDirectory(utf8str_to_utf16str("VFSDump").c_str());
+	gVFS->dumpFiles();
+	SetCurrentDirectory(w_str);
+#endif
+}
 bool LLAppViewer::initCache()
 {
 	mPurgeCache = false;
@@ -3205,11 +3245,12 @@ bool LLAppViewer::initCache()
 	{
 		LLVFile::initClass();
 
-		//llinfos << "Static VFS listing" << llendl;
-		//gStaticVFS->listFiles();
-
-		//llinfos << "regular VFS listing" << llendl;
-		//gVFS->listFiles();
+#ifndef LL_RELEASE_FOR_DOWNLOAD
+		if (gSavedSettings.getBOOL("DumpVFSCaches"))
+		{
+			dumpVFSCaches();
+		}
+#endif
 		
 		return true;
 	}
diff --git a/indra/newview/llcofwearables.cpp b/indra/newview/llcofwearables.cpp
index 6e7a7fe9376b7376253d97431a9f6feda967221d..ee366f4e3c27d80b6e57151d3d957020c01290ed 100644
--- a/indra/newview/llcofwearables.cpp
+++ b/indra/newview/llcofwearables.cpp
@@ -312,13 +312,15 @@ void LLCOFWearables::populateAttachmentsAndBodypartsLists(const LLInventoryModel
 LLPanelClothingListItem* LLCOFWearables::buildClothingListItem(LLViewerInventoryItem* item, bool first, bool last)
 {
 	llassert(item);
-
+	if (!item) return NULL;
 	LLPanelClothingListItem* item_panel = LLPanelClothingListItem::create(item);
 	if (!item_panel) return NULL;
 
 	//updating verbs
 	//we don't need to use permissions of a link but of an actual/linked item
 	if (item->getLinkedItem()) item = item->getLinkedItem();
+	llassert(item);
+	if (!item) return NULL;
 
 	bool allow_modify = item->getPermissions().allowModifyBy(gAgentID);
 	
@@ -344,14 +346,15 @@ LLPanelClothingListItem* LLCOFWearables::buildClothingListItem(LLViewerInventory
 LLPanelBodyPartsListItem* LLCOFWearables::buildBodypartListItem(LLViewerInventoryItem* item)
 {
 	llassert(item);
-
+	if (!item) return NULL;
 	LLPanelBodyPartsListItem* item_panel = LLPanelBodyPartsListItem::create(item);
 	if (!item_panel) return NULL;
 
 	//updating verbs
 	//we don't need to use permissions of a link but of an actual/linked item
 	if (item->getLinkedItem()) item = item->getLinkedItem();
-
+	llassert(item);
+	if (!item) return NULL;
 	bool allow_modify = item->getPermissions().allowModifyBy(gAgentID);
 	item_panel->setShowLockButton(!allow_modify);
 	item_panel->setShowEditButton(allow_modify);
diff --git a/indra/newview/llfeaturemanager.cpp b/indra/newview/llfeaturemanager.cpp
index 50b08f782a04a100227363acfc0df14dc6ae54e5..4fdb0101620b4415607e7b6524853b55de2bf00a 100644
--- a/indra/newview/llfeaturemanager.cpp
+++ b/indra/newview/llfeaturemanager.cpp
@@ -45,10 +45,13 @@
 #include "llsecondlifeurls.h"
 
 #include "llappviewer.h"
+#include "llhttpclient.h"
+#include "llnotificationsutil.h"
 #include "llviewercontrol.h"
 #include "llworld.h"
 #include "lldrawpoolterrain.h"
 #include "llviewertexturelist.h"
+#include "llversioninfo.h"
 #include "llwindow.h"
 #include "llui.h"
 #include "llcontrol.h"
@@ -62,15 +65,20 @@
 
 #if LL_DARWIN
 const char FEATURE_TABLE_FILENAME[] = "featuretable_mac.txt";
+const char FEATURE_TABLE_VER_FILENAME[] = "featuretable_mac.%s.txt";
 #elif LL_LINUX
 const char FEATURE_TABLE_FILENAME[] = "featuretable_linux.txt";
+const char FEATURE_TABLE_VER_FILENAME[] = "featuretable_linux.%s.txt";
 #elif LL_SOLARIS
 const char FEATURE_TABLE_FILENAME[] = "featuretable_solaris.txt";
+const char FEATURE_TABLE_VER_FILENAME[] = "featuretable_solaris.%s.txt";
 #else
 const char FEATURE_TABLE_FILENAME[] = "featuretable.txt";
+const char FEATURE_TABLE_VER_FILENAME[] = "featuretable.%s.txt";
 #endif
 
 const char GPU_TABLE_FILENAME[] = "gpu_table.txt";
+const char GPU_TABLE_VER_FILENAME[] = "gpu_table.%s.txt";
 
 LLFeatureInfo::LLFeatureInfo(const std::string& name, const BOOL available, const F32 level)
 	: mValid(TRUE), mName(name), mAvailable(available), mRecommendedLevel(level)
@@ -215,22 +223,44 @@ BOOL LLFeatureManager::loadFeatureTables()
 	mSkippedFeatures.insert("RenderVBOEnable");
 	mSkippedFeatures.insert("RenderFogRatio");
 
-	std::string data_path = gDirUtilp->getAppRODataDir();
+	// first table is install with app
+	std::string app_path = gDirUtilp->getAppRODataDir();
+	app_path += gDirUtilp->getDirDelimiter();
+	app_path += FEATURE_TABLE_FILENAME;
 
-	data_path += gDirUtilp->getDirDelimiter();
+	// second table is downloaded with HTTP
+	std::string http_filename = llformat(FEATURE_TABLE_VER_FILENAME, LLVersionInfo::getVersion().c_str());
+	std::string http_path = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, http_filename);
 
-	data_path += FEATURE_TABLE_FILENAME;
-	lldebugs << "Looking for feature table in " << data_path << llendl;
+	// use HTTP table if it exists
+	std::string path;
+	if (gDirUtilp->fileExists(http_path))
+	{
+		path = http_path;
+	}
+	else
+	{
+		path = app_path;
+	}
+
+	
+	return parseFeatureTable(path);
+}
+
+
+BOOL LLFeatureManager::parseFeatureTable(std::string filename)
+{
+	llinfos << "Looking for feature table in " << filename << llendl;
 
 	llifstream file;
 	std::string name;
 	U32		version;
 	
-	file.open(data_path); 	 /*Flawfinder: ignore*/
+	file.open(filename); 	 /*Flawfinder: ignore*/
 
 	if (!file)
 	{
-		LL_WARNS("RenderInit") << "Unable to open feature table!" << LL_ENDL;
+		LL_WARNS("RenderInit") << "Unable to open feature table " << filename << LL_ENDL;
 		return FALSE;
 	}
 
@@ -239,7 +269,7 @@ BOOL LLFeatureManager::loadFeatureTables()
 	file >> version;
 	if (name != "version")
 	{
-		LL_WARNS("RenderInit") << data_path << " does not appear to be a valid feature table!" << LL_ENDL;
+		LL_WARNS("RenderInit") << filename << " does not appear to be a valid feature table!" << LL_ENDL;
 		return FALSE;
 	}
 
@@ -302,24 +332,44 @@ BOOL LLFeatureManager::loadFeatureTables()
 
 void LLFeatureManager::loadGPUClass()
 {
-	std::string data_path = gDirUtilp->getAppRODataDir();
-
-	data_path += gDirUtilp->getDirDelimiter();
-
-	data_path += GPU_TABLE_FILENAME;
-
 	// defaults
 	mGPUClass = GPU_CLASS_UNKNOWN;
 	mGPUString = gGLManager.getRawGLString();
 	mGPUSupported = FALSE;
 
+	// first table is in the app dir
+	std::string app_path = gDirUtilp->getAppRODataDir();
+	app_path += gDirUtilp->getDirDelimiter();
+	app_path += GPU_TABLE_FILENAME;
+	
+	// second table is downloaded with HTTP
+	std::string http_filename = llformat(GPU_TABLE_VER_FILENAME, LLVersionInfo::getVersion().c_str());
+	std::string http_path = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, http_filename);
+
+	// use HTTP table if it exists
+	std::string path;
+	if (gDirUtilp->fileExists(http_path))
+	{
+		path = http_path;
+	}
+	else
+	{
+		path = app_path;
+	}
+
+	parseGPUTable(path);
+}
+
+	
+void LLFeatureManager::parseGPUTable(std::string filename)
+{
 	llifstream file;
 		
-	file.open(data_path); 		 /*Flawfinder: ignore*/
+	file.open(filename);
 
 	if (!file)
 	{
-		LL_WARNS("RenderInit") << "Unable to open GPU table: " << data_path << "!" << LL_ENDL;
+		LL_WARNS("RenderInit") << "Unable to open GPU table: " << filename << "!" << LL_ENDL;
 		return;
 	}
 
@@ -403,6 +453,70 @@ void LLFeatureManager::loadGPUClass()
 	LL_WARNS("RenderInit") << "Couldn't match GPU to a class: " << gGLManager.getRawGLString() << LL_ENDL;
 }
 
+// responder saves table into file
+class LLHTTPFeatureTableResponder : public LLHTTPClient::Responder
+{
+public:
+
+	LLHTTPFeatureTableResponder(std::string filename) :
+		mFilename(filename)
+	{
+	}
+
+	
+	virtual void completedRaw(U32 status, const std::string& reason,
+							  const LLChannelDescriptors& channels,
+							  const LLIOPipe::buffer_ptr_t& buffer)
+	{
+		if (isGoodStatus(status))
+		{
+			// write to file
+
+			llinfos << "writing feature table to " << mFilename << llendl;
+			
+			S32 file_size = buffer->countAfter(channels.in(), NULL);
+			if (file_size > 0)
+			{
+				// read from buffer
+				U8* copy_buffer = new U8[file_size];
+				buffer->readAfter(channels.in(), NULL, copy_buffer, file_size);
+
+				// write to file
+				LLAPRFile out(mFilename, LL_APR_WB);
+				out.write(copy_buffer, file_size);
+				out.close();
+			}
+		}
+		
+	}
+	
+private:
+	std::string mFilename;
+};
+
+void fetch_table(std::string table)
+{
+	const std::string base       = "http://viewer-settings.s3.amazonaws.com/";
+
+	const std::string filename   = llformat(table.c_str(), LLVersionInfo::getVersion().c_str());
+
+	const std::string url        = base + filename;
+
+	const std::string path       = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, filename);
+
+	llinfos << "LLFeatureManager fetching " << url << " into " << path << llendl;
+	
+	LLHTTPClient::get(url, new LLHTTPFeatureTableResponder(path));
+}
+
+// fetch table(s) from a website (S3)
+void LLFeatureManager::fetchHTTPTables()
+{
+	fetch_table(FEATURE_TABLE_VER_FILENAME);
+	fetch_table(GPU_TABLE_VER_FILENAME);
+}
+
+
 void LLFeatureManager::cleanupFeatureTables()
 {
 	std::for_each(mMaskList.begin(), mMaskList.end(), DeletePairedPointer());
diff --git a/indra/newview/llfeaturemanager.h b/indra/newview/llfeaturemanager.h
index dd218d428fa169be4bc7f6eb1472f95ccc2b88f7..c2ecede2c55caecafb8a0e7682ca5a0bf472399b 100644
--- a/indra/newview/llfeaturemanager.h
+++ b/indra/newview/llfeaturemanager.h
@@ -48,6 +48,7 @@ typedef enum EGPUClass
 	GPU_CLASS_3 = 3
 } EGPUClass; 
 
+
 class LLFeatureInfo
 {
 public:
@@ -144,8 +145,13 @@ class LLFeatureManager : public LLFeatureList, public LLSingleton<LLFeatureManag
 	// in the skip list if true
 	void applyFeatures(bool skipFeatures);
 
+	// load the dynamic GPU/feature table from a website
+	void fetchHTTPTables();
+	
 protected:
 	void loadGPUClass();
+	BOOL parseFeatureTable(std::string filename);
+	void parseGPUTable(std::string filename);
 	void initBaseMask();
 
 
diff --git a/indra/newview/llfloateravatartextures.cpp b/indra/newview/llfloateravatartextures.cpp
index fd392d949a6525536ccede755970e4584e28e17f..847462a6c3e4ca60da93d96e965a73bda42cd9ef 100644
--- a/indra/newview/llfloateravatartextures.cpp
+++ b/indra/newview/llfloateravatartextures.cpp
@@ -160,8 +160,7 @@ void LLFloaterAvatarTextures::onClickDump(void* data)
 {
 	if (gAgent.isGodlike())
 	{
-		LLFloaterAvatarTextures* self = (LLFloaterAvatarTextures*)data;
-		LLVOAvatar* avatarp = find_avatar(self->mID);
+		const LLVOAvatarSelf* avatarp = gAgentAvatarp;
 		if (!avatarp) return;
 		for (S32 i = 0; i < avatarp->getNumTEs(); i++)
 		{
diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp
index b9008fa53b0146c9e5cbb1eb1affcbf74d2bd416..5bea3325a83e7a27734d4d3108403a02d0042c72 100644
--- a/indra/newview/llfloatersnapshot.cpp
+++ b/indra/newview/llfloatersnapshot.cpp
@@ -2196,7 +2196,7 @@ bool LLFloaterSnapshot::updateButtons(ESnapshotMode mode)
 	childSetVisible("save", mode == SNAPSHOT_MAIN);
 	childSetVisible("set_profile_pic", mode == SNAPSHOT_MAIN);
 
-	childSetVisible("share_to_web", mode == SNAPSHOT_SHARE);
+//	childSetVisible("share_to_web", mode == SNAPSHOT_SHARE);
 	childSetVisible("share_to_email", mode == SNAPSHOT_SHARE);
 
 	childSetVisible("save_to_inventory", mode == SNAPSHOT_SAVE);
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index 29865e420a23750baf61955ee75bba4fea7389e2..577652fc79e5172e1075e0654e52663c96355f32 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -41,7 +41,6 @@
 #include "llagentwearables.h"
 #include "llappearancemgr.h"
 #include "llavataractions.h"
-#include "llfloatercustomize.h"
 #include "llfloateropenobject.h"
 #include "llfloaterreg.h"
 #include "llfloaterworldmap.h"
@@ -62,9 +61,11 @@
 #include "llpreviewgesture.h"
 #include "llpreviewtexture.h"
 #include "llselectmgr.h"
+#include "llsidepanelappearance.h"
 #include "llsidetray.h"
 #include "lltrans.h"
 #include "llviewerassettype.h"
+#include "llviewermenu.h"
 #include "llviewermessage.h"
 #include "llviewerobjectlist.h"
 #include "llviewerwindow.h"
@@ -4446,15 +4447,13 @@ void remove_inventory_category_from_avatar( LLInventoryCategory* category )
 			 << " )" << llendl;
 
 
-	if( gFloaterCustomize )
+	if (gAgentCamera.cameraCustomizeAvatar())
 	{
-		gFloaterCustomize->askToSaveIfDirty(
-			boost::bind(remove_inventory_category_from_avatar_step2, _1, category->getUUID()));
-	}
-	else
-	{
-		remove_inventory_category_from_avatar_step2(TRUE, category->getUUID() );
+		// switching to outfit editor should automagically save any currently edited wearable
+		LLSideTray::getInstance()->showPanel("sidepanel_appearance", LLSD().with("type", "edit_outfit"));
 	}
+
+	remove_inventory_category_from_avatar_step2(TRUE, category->getUUID() );
 }
 
 struct OnRemoveStruct
@@ -4878,18 +4877,12 @@ void LLWearableBridge::onEditOnAvatar(void* user_data)
 
 void LLWearableBridge::editOnAvatar()
 {
-	const LLWearable* wearable = gAgentWearables.getWearableFromItemID(mUUID);
+	LLWearable* wearable = gAgentWearables.getWearableFromItemID(mUUID);
 	if( wearable )
 	{
-		// Set the tab to the right wearable.
-		if (gFloaterCustomize)
-			gFloaterCustomize->setCurrentWearableType( wearable->getType() );
+		LLPanel * panel = LLSideTray::getInstance()->getPanel("sidepanel_appearance");
 
-		if( CAMERA_MODE_CUSTOMIZE_AVATAR != gAgentCamera.getCameraMode() )
-		{
-			// Start Avatar Customization
-			gAgentCamera.changeCameraToCustomizeAvatar();
-		}
+		LLSidepanelAppearance::editWearable(wearable, panel);
 	}
 }
 
diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp
index 6301ff0d6d944a006bb60e8854837902aba5b90f..0cc4b0e389594919d0795092ff7c17d48d37e1fb 100644
--- a/indra/newview/llinventoryfunctions.cpp
+++ b/indra/newview/llinventoryfunctions.cpp
@@ -52,7 +52,6 @@
 #include "llappearancemgr.h"
 #include "llappviewer.h"
 //#include "llfirstuse.h"
-#include "llfloatercustomize.h"
 #include "llfocusmgr.h"
 #include "llfolderview.h"
 #include "llgesturemgr.h"
diff --git a/indra/newview/llinventoryitemslist.cpp b/indra/newview/llinventoryitemslist.cpp
index 1c3eb547bb79e339318846e485b2465f64b8135f..750cdfb678e0029dd30965ea047d0ab60cd9e32f 100644
--- a/indra/newview/llinventoryitemslist.cpp
+++ b/indra/newview/llinventoryitemslist.cpp
@@ -388,7 +388,7 @@ void LLInventoryItemsList::refresh()
 	computeDifference(getIDs(), added_items, removed_items);
 
 	bool add_limit_exceeded = false;
-	unsigned nadded = 0;
+	unsigned int nadded = 0;
 
 	uuid_vec_t::const_iterator it = added_items.begin();
 	for( ; added_items.end() != it; ++it)
@@ -400,8 +400,12 @@ void LLInventoryItemsList::refresh()
 		}
 		LLViewerInventoryItem* item = gInventory.getItem(*it);
 		// Do not rearrange items on each adding, let's do that on filter call
-		addNewItem(item, false);
-		++nadded;
+		llassert(item);
+		if (item)
+		{
+			addNewItem(item, false);
+			++nadded;
+		}
 	}
 
 	it = removed_items.begin();
diff --git a/indra/newview/llmachineid.cpp b/indra/newview/llmachineid.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..53243e9807b442c62c839168583d03b1629a5e2f
--- /dev/null
+++ b/indra/newview/llmachineid.cpp
@@ -0,0 +1,269 @@
+/** 
+ * @file llmachineid.cpp
+ * @brief retrieves unique machine ids
+ *
+ * $LicenseInfo:firstyear=2009&license=viewergpl$
+ * 
+ * Copyright (c) 2010, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+#include "lluuid.h"
+#include "llmachineid.h"
+#if	LL_WINDOWS
+#define _WIN32_DCOM
+#include <iostream>
+using namespace std;
+#include <comdef.h>
+#include <Wbemidl.h>
+#endif
+unsigned char static_unique_id[] =  {0,0,0,0,0,0};
+bool static has_static_unique_id = false;
+
+// get an unique machine id.
+// NOT THREAD SAFE - do before setting up threads.
+// MAC Address doesn't work for Windows 7 since the first returned hardware MAC address changes with each reboot,  Go figure??
+
+S32 LLMachineID::init()
+{
+    memset(static_unique_id,0,sizeof(static_unique_id));
+    S32 ret_code = 0;
+#if	LL_WINDOWS
+# pragma comment(lib, "wbemuuid.lib")
+        size_t len = sizeof(static_unique_id);
+
+        // algorithm to detect BIOS serial number found at:
+        // http://msdn.microsoft.com/en-us/library/aa394077%28VS.85%29.aspx
+        // we can't use the MAC address since on Windows 7, the first returned MAC address changes with every reboot.
+
+
+        HRESULT hres;
+
+        // Step 1: --------------------------------------------------
+        // Initialize COM. ------------------------------------------
+
+        hres =  CoInitializeEx(0, COINIT_MULTITHREADED); 
+        if (FAILED(hres))
+        {
+            LL_DEBUGS("AppInit") << "Failed to initialize COM library. Error code = 0x"   << hex << hres << LL_ENDL;
+            return 1;                  // Program has failed.
+        }
+
+        // Step 2: --------------------------------------------------
+        // Set general COM security levels --------------------------
+        // Note: If you are using Windows 2000, you need to specify -
+        // the default authentication credentials for a user by using
+        // a SOLE_AUTHENTICATION_LIST structure in the pAuthList ----
+        // parameter of CoInitializeSecurity ------------------------
+
+        hres =  CoInitializeSecurity(
+            NULL, 
+            -1,                          // COM authentication
+            NULL,                        // Authentication services
+            NULL,                        // Reserved
+            RPC_C_AUTHN_LEVEL_DEFAULT,   // Default authentication 
+            RPC_C_IMP_LEVEL_IMPERSONATE, // Default Impersonation  
+            NULL,                        // Authentication info
+            EOAC_NONE,                   // Additional capabilities 
+            NULL                         // Reserved
+            );
+
+                          
+        if (FAILED(hres))
+        {
+            LL_DEBUGS("AppInit") << "Failed to initialize security. Error code = 0x"  << hex << hres << LL_ENDL;
+            CoUninitialize();
+            return 1;                    // Program has failed.
+        }
+        
+        // Step 3: ---------------------------------------------------
+        // Obtain the initial locator to WMI -------------------------
+
+        IWbemLocator *pLoc = NULL;
+
+        hres = CoCreateInstance(
+            CLSID_WbemLocator,             
+            0, 
+            CLSCTX_INPROC_SERVER, 
+            IID_IWbemLocator, (LPVOID *) &pLoc);
+     
+        if (FAILED(hres))
+        {
+            LL_DEBUGS("AppInit") << "Failed to create IWbemLocator object." << " Err code = 0x" << hex << hres << LL_ENDL;
+            CoUninitialize();
+            return 1;                 // Program has failed.
+        }
+
+        // Step 4: -----------------------------------------------------
+        // Connect to WMI through the IWbemLocator::ConnectServer method
+
+        IWbemServices *pSvc = NULL;
+    	
+        // Connect to the root\cimv2 namespace with
+        // the current user and obtain pointer pSvc
+        // to make IWbemServices calls.
+        hres = pLoc->ConnectServer(
+             _bstr_t(L"ROOT\\CIMV2"), // Object path of WMI namespace
+             NULL,                    // User name. NULL = current user
+             NULL,                    // User password. NULL = current
+             0,                       // Locale. NULL indicates current
+             NULL,                    // Security flags.
+             0,                       // Authority (e.g. Kerberos)
+             0,                       // Context object 
+             &pSvc                    // pointer to IWbemServices proxy
+             );
+        
+        if (FAILED(hres))
+        {
+            LL_DEBUGS("AppInit") << "Could not connect. Error code = 0x"  << hex << hres << LL_ENDL;
+            pLoc->Release();     
+            CoUninitialize();
+            return 1;                // Program has failed.
+        }
+
+        LL_DEBUGS("AppInit") << "Connected to ROOT\\CIMV2 WMI namespace" << LL_ENDL;
+
+
+        // Step 5: --------------------------------------------------
+        // Set security levels on the proxy -------------------------
+
+        hres = CoSetProxyBlanket(
+           pSvc,                        // Indicates the proxy to set
+           RPC_C_AUTHN_WINNT,           // RPC_C_AUTHN_xxx
+           RPC_C_AUTHZ_NONE,            // RPC_C_AUTHZ_xxx
+           NULL,                        // Server principal name 
+           RPC_C_AUTHN_LEVEL_CALL,      // RPC_C_AUTHN_LEVEL_xxx 
+           RPC_C_IMP_LEVEL_IMPERSONATE, // RPC_C_IMP_LEVEL_xxx
+           NULL,                        // client identity
+           EOAC_NONE                    // proxy capabilities 
+        );
+
+        if (FAILED(hres))
+        {
+            LL_DEBUGS("AppInit") << "Could not set proxy blanket. Error code = 0x"   << hex << hres << LL_ENDL;
+            pSvc->Release();
+            pLoc->Release();     
+            CoUninitialize();
+            return 1;               // Program has failed.
+        }
+
+        // Step 6: --------------------------------------------------
+        // Use the IWbemServices pointer to make requests of WMI ----
+
+        // For example, get the name of the operating system
+        IEnumWbemClassObject* pEnumerator = NULL;
+        hres = pSvc->ExecQuery(
+            bstr_t("WQL"), 
+            bstr_t("SELECT * FROM Win32_OperatingSystem"),
+            WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, 
+            NULL,
+            &pEnumerator);
+        
+        if (FAILED(hres))
+        {
+            LL_DEBUGS("AppInit") << "Query for operating system name failed." << " Error code = 0x"  << hex << hres << LL_ENDL;
+            pSvc->Release();
+            pLoc->Release();
+            CoUninitialize();
+            return 1;               // Program has failed.
+        }
+
+        // Step 7: -------------------------------------------------
+        // Get the data from the query in step 6 -------------------
+     
+        IWbemClassObject *pclsObj = NULL;
+        ULONG uReturn = 0;
+       
+        while (pEnumerator)
+        {
+            HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1, 
+                &pclsObj, &uReturn);
+
+            if(0 == uReturn)
+            {
+                break;
+            }
+
+            VARIANT vtProp;
+
+            // Get the value of the Name property
+            hr = pclsObj->Get(L"SerialNumber", 0, &vtProp, 0, 0);
+            LL_DEBUGS("AppInit") << " Serial Number : " << vtProp.bstrVal << LL_ENDL;
+            // use characters in the returned Serial Number to create a byte array of size len
+            BSTR serialNumber ( vtProp.bstrVal);
+            unsigned int j = 0;
+            while( vtProp.bstrVal[j] != 0)
+            {
+                for (unsigned int i = 0; i < len; i++)
+                {
+                    if (vtProp.bstrVal[j] == 0)
+                        break;
+                    
+                    static_unique_id[i] = (unsigned int)(static_unique_id[i] + serialNumber[j]);
+                    j++;
+                }
+            }
+            VariantClear(&vtProp);
+
+            pclsObj->Release();
+            pclsObj = NULL;
+            break;
+        }
+
+        // Cleanup
+        // ========
+        
+        if (pSvc)
+            pSvc->Release();
+        if (pLoc)
+            pLoc->Release();
+        if (pEnumerator)
+            pEnumerator->Release();
+        CoUninitialize();
+        ret_code=0;
+#else
+        unsigned char * staticPtr = (unsigned char *)(&static_unique_id[0]);
+        ret_code = LLUUID::getNodeID(staticPtr);
+#endif
+        has_static_unique_id = true;
+        return ret_code;
+}
+
+
+S32 LLMachineID::getUniqueID(unsigned char *unique_id, size_t len)
+{
+    if (has_static_unique_id)
+    {
+        memcpy ( unique_id, &static_unique_id, len);
+        LL_DEBUGS("AppInit") << "UniqueID: " << unique_id[0] << unique_id[1]<< unique_id[2] << unique_id[3] << unique_id[4] << unique_id [5] << LL_ENDL;
+        return 1;
+    }
+    return 0;
+}
+
+
+
+
diff --git a/indra/newview/llmachineid.h b/indra/newview/llmachineid.h
new file mode 100644
index 0000000000000000000000000000000000000000..8160309b471ea9dc0cf23d11a6bed9f289298210
--- /dev/null
+++ b/indra/newview/llmachineid.h
@@ -0,0 +1,56 @@
+/** 
+ * @file llmachineid.h
+ * @brief retrieves unique machine ids
+ *
+ * $LicenseInfo:firstyear=2010&license=viewergpl$
+ * 
+ * Copyright (c) 2010, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLMACHINEID_H
+#define LL_LLMACHINEID_H
+
+
+class LLMachineID 
+{
+public:
+	LLMachineID();
+	virtual	~LLMachineID();
+    static S32 getUniqueID(unsigned char *unique_id, size_t len);
+    static S32 init();
+
+protected:
+
+private:
+
+
+};
+
+
+
+
+
+#endif // LL_LLMACHINEID_H
diff --git a/indra/newview/llmorphview.cpp b/indra/newview/llmorphview.cpp
index 27a27fb65a192cb4b4a883d55f79f2c0f6e4eb0e..4c28e98e62797318d3638eb3ab69f63726100569 100644
--- a/indra/newview/llmorphview.cpp
+++ b/indra/newview/llmorphview.cpp
@@ -42,7 +42,6 @@
 #include "lldrawpoolavatar.h"
 #include "llface.h"
 //#include "llfirstuse.h"
-#include "llfloatercustomize.h"
 #include "llfloatertools.h"
 #include "llresmgr.h"
 #include "lltoolmgr.h"
diff --git a/indra/newview/llpaneleditwearable.cpp b/indra/newview/llpaneleditwearable.cpp
index b5b21584aac9b13748dd4e0dd7d9589dc2ac4377..36f2d05fabeee1c6ea22efaa8beddec0fceb2822 100644
--- a/indra/newview/llpaneleditwearable.cpp
+++ b/indra/newview/llpaneleditwearable.cpp
@@ -215,7 +215,10 @@ LLEditWearableDictionary::~LLEditWearableDictionary()
 
 LLEditWearableDictionary::Wearables::Wearables()
 {
-	addEntry(LLWearableType::WT_SHAPE, 		new WearableEntry(LLWearableType::WT_SHAPE,"edit_shape_title","shape_desc_text",0,0,9,	SUBPART_SHAPE_HEAD,	SUBPART_SHAPE_EYES,	SUBPART_SHAPE_EARS,	SUBPART_SHAPE_NOSE,	SUBPART_SHAPE_MOUTH, SUBPART_SHAPE_CHIN, SUBPART_SHAPE_TORSO, SUBPART_SHAPE_LEGS, SUBPART_SHAPE_WHOLE));
+	// note the subpart that is listed first is treated as "default", regardless of what order is in enum.
+	// Please match the order presented in XUI. -Nyx
+	// this will affect what camera angle is shown when first editing a wearable
+	addEntry(LLWearableType::WT_SHAPE, 		new WearableEntry(LLWearableType::WT_SHAPE,"edit_shape_title","shape_desc_text",0,0,9,	SUBPART_SHAPE_WHOLE, SUBPART_SHAPE_HEAD,	SUBPART_SHAPE_EYES,	SUBPART_SHAPE_EARS,	SUBPART_SHAPE_NOSE,	SUBPART_SHAPE_MOUTH, SUBPART_SHAPE_CHIN, SUBPART_SHAPE_TORSO, SUBPART_SHAPE_LEGS ));
 	addEntry(LLWearableType::WT_SKIN, 		new WearableEntry(LLWearableType::WT_SKIN,"edit_skin_title","skin_desc_text",0,3,4, TEX_HEAD_BODYPAINT, TEX_UPPER_BODYPAINT, TEX_LOWER_BODYPAINT, SUBPART_SKIN_COLOR, SUBPART_SKIN_FACEDETAIL, SUBPART_SKIN_MAKEUP, SUBPART_SKIN_BODYDETAIL));
 	addEntry(LLWearableType::WT_HAIR, 		new WearableEntry(LLWearableType::WT_HAIR,"edit_hair_title","hair_desc_text",0,1,4, TEX_HAIR, SUBPART_HAIR_COLOR,	SUBPART_HAIR_STYLE,	SUBPART_HAIR_EYEBROWS, SUBPART_HAIR_FACIAL));
 	addEntry(LLWearableType::WT_EYES, 		new WearableEntry(LLWearableType::WT_EYES,"edit_eyes_title","eyes_desc_text",0,1,1, TEX_EYES_IRIS, SUBPART_EYES));
@@ -898,6 +901,70 @@ void LLPanelEditWearable::showWearable(LLWearable* wearable, BOOL show)
 	// Update picker controls state
 	for_each_picker_ctrl_entry <LLColorSwatchCtrl> (targetPanel, type, boost::bind(set_enabled_color_swatch_ctrl, show, _1, _2));
 	for_each_picker_ctrl_entry <LLTextureCtrl>     (targetPanel, type, boost::bind(set_enabled_texture_ctrl, show, _1, _2));
+
+	showDefaultSubpart();
+}
+
+void LLPanelEditWearable::showDefaultSubpart()
+{
+	changeCamera(0);
+}
+
+void LLPanelEditWearable::onTabExpandedCollapsed(const LLSD& param, U8 index)
+{
+	bool expanded = param.asBoolean();
+
+	if (!mWearablePtr || !gAgentCamera.cameraCustomizeAvatar())
+	{
+		// we don't have a valid wearable we're editing, or we've left the wearable editor
+		return;
+	}
+
+	if (expanded)
+	{
+		changeCamera(index);
+	}
+
+}
+
+void LLPanelEditWearable::changeCamera(U8 subpart)
+{
+	const LLEditWearableDictionary::WearableEntry *wearable_entry = LLEditWearableDictionary::getInstance()->getWearable(mWearablePtr->getType());
+	if (!wearable_entry)
+	{
+		llinfos << "could not get wearable dictionary entry for wearable type: " << mWearablePtr->getType() << llendl;
+		return;
+	}
+
+	if (subpart >= wearable_entry->mSubparts.size())
+	{
+		llinfos << "accordion tab expanded for invalid subpart. Wearable type: " << mWearablePtr->getType() << " subpart num: " << subpart << llendl;
+		return;
+	}
+
+	ESubpart subpart_e = wearable_entry->mSubparts[subpart];
+	const LLEditWearableDictionary::SubpartEntry *subpart_entry = LLEditWearableDictionary::getInstance()->getSubpart(subpart_e);
+
+	if (!subpart_entry)
+	{
+		llwarns << "could not get wearable subpart dictionary entry for subpart: " << subpart_e << llendl;
+		return;
+	}
+
+	// Update the camera
+	gMorphView->setCameraDistToDefault();
+	gMorphView->setCameraTargetJoint( gAgentAvatarp->getJoint( subpart_entry->mTargetJoint ) );
+	gMorphView->setCameraTargetOffset( subpart_entry->mTargetOffset );
+	gMorphView->setCameraOffset( subpart_entry->mCameraOffset );
+	if (gSavedSettings.getBOOL("AppearanceCameraMovement"))
+	{
+		gMorphView->updateCamera();
+	}
+}
+
+void LLPanelEditWearable::updateScrollingPanelList()
+{
+	updateScrollingPanelUI();
 }
 
 void LLPanelEditWearable::initializePanel()
@@ -974,6 +1041,7 @@ void LLPanelEditWearable::initializePanel()
 	for_each_picker_ctrl_entry <LLColorSwatchCtrl> (getPanel(type), type, boost::bind(init_color_swatch_ctrl, this, _1, _2));
 	for_each_picker_ctrl_entry <LLTextureCtrl>     (getPanel(type), type, boost::bind(init_texture_ctrl, this, _1, _2));
 
+	showDefaultSubpart();
 	updateVerbs();
 
 	if (getWearable())
@@ -1013,52 +1081,6 @@ void LLPanelEditWearable::updateTypeSpecificControls(LLWearableType::EType type)
 	}
 }
 
-void LLPanelEditWearable::onTabExpandedCollapsed(const LLSD& param, U8 index)
-{
-	bool expanded = param.asBoolean();
-
-	if (!mWearablePtr || !gAgentCamera.cameraCustomizeAvatar())
-	{
-		// we don't have a valid wearable we're editing, or we've left the wearable editor
-		return;
-	}
-
-	if (expanded)
-	{
-		const LLEditWearableDictionary::WearableEntry *wearable_entry = LLEditWearableDictionary::getInstance()->getWearable(mWearablePtr->getType());
-		if (!wearable_entry)
-		{
-			llinfos << "could not get wearable dictionary entry for wearable type: " << mWearablePtr->getType() << llendl;
-			return;
-		}
-
-		if (index >= wearable_entry->mSubparts.size())
-		{
-			llinfos << "accordion tab expanded for invalid subpart. Wearable type: " << mWearablePtr->getType() << " subpart num: " << index << llendl;
-			return;
-		}
-
-		ESubpart subpart_e = wearable_entry->mSubparts[index];
-		const LLEditWearableDictionary::SubpartEntry *subpart_entry = LLEditWearableDictionary::getInstance()->getSubpart(subpart_e);
-
-		if (!subpart_entry)
-		{
-			llwarns << "could not get wearable subpart dictionary entry for subpart: " << subpart_e << llendl;
-			return;
-		}
-
-		// Update the camera
-		gMorphView->setCameraTargetJoint( gAgentAvatarp->getJoint( subpart_entry->mTargetJoint ) );
-		gMorphView->setCameraTargetOffset( subpart_entry->mTargetOffset );
-		gMorphView->setCameraOffset( subpart_entry->mCameraOffset );
-		gMorphView->setCameraDistToDefault();
-		if (gSavedSettings.getBOOL("AppearanceCameraMovement"))
-		{
-			gMorphView->updateCamera();
-		}
-	}
-}
-
 void LLPanelEditWearable::updateScrollingPanelUI()
 {
 	// do nothing if we don't have a valid wearable we're editing
@@ -1073,6 +1095,8 @@ void LLPanelEditWearable::updateScrollingPanelUI()
 	if(panel && (mWearablePtr->getItemID().notNull()))
 	{
 		const LLEditWearableDictionary::WearableEntry *wearable_entry = LLEditWearableDictionary::getInstance()->getWearable(type);
+		llassert(wearable_entry);
+		if (!wearable_entry) return;
 		U8 num_subparts = wearable_entry->mSubparts.size();
 
 		LLScrollingPanelParam::sUpdateDelayFrames = 0;
diff --git a/indra/newview/llpaneleditwearable.h b/indra/newview/llpaneleditwearable.h
index 0953f09b6c234fc67f69cf4d37d7e6c014a9d9f2..b6b8c0c781115528a0923e07749f9dfbc5522de8 100644
--- a/indra/newview/llpaneleditwearable.h
+++ b/indra/newview/llpaneleditwearable.h
@@ -1,6 +1,6 @@
 /** 
- * @file llfloatercustomize.h
- * @brief The customize avatar floater, triggered by "Appearance..."
+ * @file llpaneleditwearable.h
+ * @brief A LLPanel dedicated to the editing of wearables.
  *
  * $LicenseInfo:firstyear=2009&license=viewergpl$
  * 
@@ -65,10 +65,14 @@ class LLPanelEditWearable : public LLPanel
 	void				saveChanges();
 	void				revertChanges();
 
+	void				showDefaultSubpart();
+	void				onTabExpandedCollapsed(const LLSD& param, U8 index);
+
+	void 				updateScrollingPanelList();
+
 	static void			onRevertButtonClicked(void* userdata);
 	void				onCommitSexChange();
 
-	void				onTabExpandedCollapsed(const LLSD& param, U8 index);
 
 private:
 	typedef std::map<F32, LLViewerVisualParam*> value_map_t;
@@ -88,6 +92,9 @@ class LLPanelEditWearable : public LLPanel
 	void				toggleTypeSpecificControls(LLWearableType::EType type);
 	void				updateTypeSpecificControls(LLWearableType::EType type);
 
+	// changes camera angle to default for selected subpart
+	void				changeCamera(U8 subpart);
+
 	//alpha mask checkboxes
 	void configureAlphaCheckbox(LLVOAvatarDefines::ETextureIndex te, const std::string& name);
 	void onInvisibilityCommit(LLCheckBoxCtrl* checkbox_ctrl, LLVOAvatarDefines::ETextureIndex te);
diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp
index 0009f7203aa08b7d7fdff411bda05e5a76e02634..c8dae024cf41c578ed21f952ce4919f697756752 100644
--- a/indra/newview/llpanellogin.cpp
+++ b/indra/newview/llpanellogin.cpp
@@ -1164,7 +1164,8 @@ void LLPanelLogin::onServerComboLostFocus(LLFocusableElement* fe)
 
 void LLPanelLogin::updateLoginPanelLinks()
 {
-	LLSD grid_data = LLGridManager::getInstance()->getGridInfo();
+	LLSD grid_data;
+	LLGridManager::getInstance()->getGridInfo(grid_data);
 	bool system_grid = grid_data.has(GRID_IS_SYSTEM_GRID_VALUE);
 	
 	// need to call through sInstance, as it's called from onSelectServer, which
diff --git a/indra/newview/llpanelobjectinventory.cpp b/indra/newview/llpanelobjectinventory.cpp
index 0d3beaa9a5808fab325913437f20400468ff93a0..c557e9b85ddd6655f568b4f4f38bc931f0b82c31 100644
--- a/indra/newview/llpanelobjectinventory.cpp
+++ b/indra/newview/llpanelobjectinventory.cpp
@@ -1249,29 +1249,30 @@ LLTaskInvFVBridge* LLTaskInvFVBridge::createObjectBridge(LLPanelObjectInventory*
 {
 	LLTaskInvFVBridge* new_bridge = NULL;
 	const LLInventoryItem* item = dynamic_cast<LLInventoryItem*>(object);
+	const U32 itemflags = ( NULL == item ? 0 : item->getFlags() );
 	LLAssetType::EType type = object->getType();
 
 	switch(type)
 	{
 	case LLAssetType::AT_TEXTURE:
 		new_bridge = new LLTaskTextureBridge(panel,
-											 object->getUUID(),
-											 object->getName());
+						     object->getUUID(),
+						     object->getName());
 		break;
 	case LLAssetType::AT_SOUND:
 		new_bridge = new LLTaskSoundBridge(panel,
-										   object->getUUID(),
-										   object->getName());
+						   object->getUUID(),
+						   object->getName());
 		break;
 	case LLAssetType::AT_LANDMARK:
 		new_bridge = new LLTaskLandmarkBridge(panel,
-											  object->getUUID(),
-											  object->getName());
+						      object->getUUID(),
+						      object->getName());
 		break;
 	case LLAssetType::AT_CALLINGCARD:
 		new_bridge = new LLTaskCallingCardBridge(panel,
-												 object->getUUID(),
-												 object->getName());
+							 object->getUUID(),
+							 object->getName());
 		break;
 	case LLAssetType::AT_SCRIPT:
 		// OLD SCRIPTS DEPRECATED - JC
@@ -1281,45 +1282,42 @@ LLTaskInvFVBridge* LLTaskInvFVBridge::createObjectBridge(LLPanelObjectInventory*
 		//									   object->getName());
 		break;
 	case LLAssetType::AT_OBJECT:
-		{
-			U32 flags = ( NULL == item ? 0 : item->getFlags() );
-			new_bridge = new LLTaskObjectBridge(panel,
-												object->getUUID(),
-												object->getName(),
-												flags);
-		}
+		new_bridge = new LLTaskObjectBridge(panel,
+						    object->getUUID(),
+						    object->getName(),
+						    itemflags);
 		break;
 	case LLAssetType::AT_NOTECARD:
 		new_bridge = new LLTaskNotecardBridge(panel,
-											  object->getUUID(),
-											  object->getName());
+						      object->getUUID(),
+						      object->getName());
 		break;
 	case LLAssetType::AT_ANIMATION:
 		new_bridge = new LLTaskAnimationBridge(panel,
-											  object->getUUID(),
-											  object->getName());
+						       object->getUUID(),
+						       object->getName());
 		break;
 	case LLAssetType::AT_GESTURE:
 		new_bridge = new LLTaskGestureBridge(panel,
-											  object->getUUID(),
-											  object->getName());
+						     object->getUUID(),
+						     object->getName());
 		break;
 	case LLAssetType::AT_CLOTHING:
 	case LLAssetType::AT_BODYPART:
 		new_bridge = new LLTaskWearableBridge(panel,
-											  object->getUUID(),
-											  object->getName(),
-											  item->getFlags());
+						      object->getUUID(),
+						      object->getName(),
+						      itemflags);
 		break;
 	case LLAssetType::AT_CATEGORY:
 		new_bridge = new LLTaskCategoryBridge(panel,
-											  object->getUUID(),
-											  object->getName());
+						      object->getUUID(),
+						      object->getName());
 		break;
 	case LLAssetType::AT_LSL_TEXT:
 		new_bridge = new LLTaskLSLBridge(panel,
-										 object->getUUID(),
-										 object->getName());
+						 object->getUUID(),
+						 object->getName());
 		break;
 	default:
 		llinfos << "Unhandled inventory type (llassetstorage.h): "
diff --git a/indra/newview/llpaneloutfitedit.cpp b/indra/newview/llpaneloutfitedit.cpp
index 8d7a2b33bee6818ef9c0a6a5ff6ff84834ae5646..2fe020149665768f8b1fe6068695de6b8140959f 100644
--- a/indra/newview/llpaneloutfitedit.cpp
+++ b/indra/newview/llpaneloutfitedit.cpp
@@ -36,6 +36,7 @@
 
 // *TODO: reorder includes to match the coding standard
 #include "llagent.h"
+#include "llagentcamera.h"
 #include "llagentwearables.h"
 #include "llappearancemgr.h"
 #include "llcofwearables.h"
diff --git a/indra/newview/llsecapi.cpp b/indra/newview/llsecapi.cpp
index 1caeec5b04c865b3e5700c36405e4d2c36e0ab84..9e636f38c0cd747b97e439c191b48a8a76d85c83 100644
--- a/indra/newview/llsecapi.cpp
+++ b/indra/newview/llsecapi.cpp
@@ -124,7 +124,7 @@ int secapiSSLCertVerifyCallback(X509_STORE_CTX *ctx, void *param)
 		// we rely on libcurl to validate the hostname, as libcurl does more extensive validation
 		// leaving our hostname validation call mechanism for future additions with respect to
 		// OS native (Mac keyring, windows CAPI) validation.
-		chain->validate(VALIDATION_POLICY_SSL & (~VALIDATION_POLICY_HOSTNAME), store, validation_params);
+		store->validate(VALIDATION_POLICY_SSL & (~VALIDATION_POLICY_HOSTNAME), chain, validation_params);
 	}
 	catch (LLCertValidationTrustException& cert_exception)
 	{
diff --git a/indra/newview/llsecapi.h b/indra/newview/llsecapi.h
index 59a1e1eff09bb8592ee98e841450acb77d76d419..5a1a3879d4ccb392d0d1921d3bcd561fb763aabf 100644
--- a/indra/newview/llsecapi.h
+++ b/indra/newview/llsecapi.h
@@ -154,7 +154,7 @@ class LLCertificate : public LLRefCount
 	
 	// return an LLSD object containing information about the certificate
 	// such as its name, signature, expiry time, serial number
-	virtual LLSD getLLSD() const=0; 
+	virtual void getLLSD(LLSD& llsd)=0; 
 	
 	// return an openSSL X509 struct for the certificate
 	virtual X509* getOpenSSLX509() const=0;
@@ -231,6 +231,18 @@ class LLCertificateVector : public LLRefCount
 	virtual LLPointer<LLCertificate> erase(iterator cert)=0;	
 };
 
+// class LLCertificateChain
+// Class representing a chain of certificates in order, with the 
+// first element being the child cert.
+class LLCertificateChain : virtual public LLCertificateVector
+{	
+	
+public:
+	LLCertificateChain() {}
+	
+	virtual ~LLCertificateChain() {}
+	
+};
 
 // class LLCertificateStore
 // represents a store of certificates, typically a store of root CA
@@ -250,30 +262,17 @@ class LLCertificateStore : virtual public LLCertificateVector
 	
 	// return the store id
 	virtual std::string storeId() const=0;
-};
-
-// class LLCertificateChain
-// Class representing a chain of certificates in order, with the 
-// first element being the child cert.
-class LLCertificateChain : virtual public LLCertificateVector
-{	
-
-public:
-	LLCertificateChain() {}
 	
-	virtual ~LLCertificateChain() {}
-
 	// validate a certificate chain given the params.
 	// Will throw exceptions on error
 	
 	virtual void validate(int validation_policy,
-						  LLPointer<LLCertificateStore> ca_store,
+						  LLPointer<LLCertificateChain> cert_chain,
 						  const LLSD& validation_params) =0;
+	
 };
 
 
-
-
 inline
 bool operator==(const LLCertificateVector::iterator& _lhs, const LLCertificateVector::iterator& _rhs)
 {
diff --git a/indra/newview/llsechandler_basic.cpp b/indra/newview/llsechandler_basic.cpp
index edf5ce9b60d2d42a533e305b867c24e686da9647..e191e50c4b78322e967d8ca95bc80ee6fa11449f 100644
--- a/indra/newview/llsechandler_basic.cpp
+++ b/indra/newview/llsechandler_basic.cpp
@@ -52,6 +52,7 @@ LLS * By copying, modifying or distributing this software, you acknowledge
 #include <iostream>
 #include <iomanip>
 #include <time.h>
+#include "llmachineid.h"
 
 
 
@@ -85,7 +86,6 @@ LLBasicCertificate::LLBasicCertificate(const std::string& pem_cert)
 	{
 		throw LLInvalidCertificate(this);
 	}
-	_initLLSD();
 }
 
 
@@ -96,7 +96,6 @@ LLBasicCertificate::LLBasicCertificate(X509* pCert)
 		throw LLInvalidCertificate(this);
 	}	
 	mCert = X509_dup(pCert);
-	_initLLSD();
 }
 
 LLBasicCertificate::~LLBasicCertificate() 
@@ -150,9 +149,13 @@ std::vector<U8> LLBasicCertificate::getBinary() const
 }
 
 
-LLSD LLBasicCertificate::getLLSD() const
+void LLBasicCertificate::getLLSD(LLSD &llsd)
 {
-	return mLLSDInfo;
+	if (mLLSDInfo.isUndefined())
+	{
+		_initLLSD();
+	}
+	llsd = mLLSDInfo;
 }
 
 // Initialize the LLSD info for the certificate
@@ -516,8 +519,9 @@ LLBasicCertificateVector::iterator LLBasicCertificateVector::find(const LLSD& pa
 		cert++)
 	{
 
-			found= TRUE;
-		LLSD cert_info = (*cert)->getLLSD();
+		found= TRUE;
+		LLSD cert_info;
+		(*cert)->getLLSD(cert_info);
 			for (LLSD::map_const_iterator param = params.beginMap();
 			 param != params.endMap();
 			 param++)
@@ -541,9 +545,10 @@ LLBasicCertificateVector::iterator LLBasicCertificateVector::find(const LLSD& pa
 // Insert a certificate into the store.  If the certificate already 
 // exists in the store, nothing is done.
 void  LLBasicCertificateVector::insert(iterator _iter, 
-									   LLPointer<LLCertificate> cert)
+				       LLPointer<LLCertificate> cert)
 {
-	LLSD cert_info = cert->getLLSD();
+	LLSD cert_info;
+	cert->getLLSD(cert_info);
 	if (cert_info.isMap() && cert_info.has(CERT_SHA1_DIGEST))
 	{
 		LLSD existing_cert_info = LLSD::emptyMap();
@@ -551,7 +556,11 @@ void  LLBasicCertificateVector::insert(iterator _iter,
 		if(find(existing_cert_info) == end())
 		{
 			BasicIteratorImpl *basic_iter = dynamic_cast<BasicIteratorImpl*>(_iter.mImpl.get());
-			mCerts.insert(basic_iter->mIter, cert);
+			llassert(basic_iter);
+			if (basic_iter)
+			{
+				mCerts.insert(basic_iter->mIter, cert);
+			}
 		}
 	}
 }
@@ -691,7 +700,8 @@ LLBasicCertificateChain::LLBasicCertificateChain(const X509_STORE_CTX* store)
 		while(untrusted_certs.size() > 0)
 		{
 			LLSD find_data = LLSD::emptyMap();
-			LLSD cert_data = current->getLLSD();
+			LLSD cert_data;
+			current->getLLSD(cert_data);
 			// we simply build the chain via subject/issuer name as the
 			// client should not have passed in multiple CA's with the same 
 			// subject name.  If they did, it'll come out in the wash during
@@ -850,12 +860,13 @@ bool _LLSDArrayIncludesValue(const LLSD& llsd_set, LLSD llsd_value)
 }
 
 void _validateCert(int validation_policy,
-				  const LLPointer<LLCertificate> cert,
+				  LLPointer<LLCertificate> cert,
 				  const LLSD& validation_params,
 				  int depth)
 {
 
-	LLSD current_cert_info = cert->getLLSD();		
+	LLSD current_cert_info;
+	cert->getLLSD(current_cert_info);		
 	// check basic properties exist in the cert
 	if(!current_cert_info.has(CERT_SUBJECT_NAME) || !current_cert_info.has(CERT_SUBJECT_NAME_STRING))
 	{
@@ -943,8 +954,9 @@ bool _verify_signature(LLPointer<LLCertificate> parent,
 					   LLPointer<LLCertificate> child)
 {
 	bool verify_result = FALSE; 
-	LLSD cert1 = parent->getLLSD();
-	LLSD cert2 = child->getLLSD();
+	LLSD cert1, cert2;
+	parent->getLLSD(cert1);
+	child->getLLSD(cert2);
 	X509 *signing_cert = parent->getOpenSSLX509();
 	X509 *child_cert = child->getOpenSSLX509();
 	if((signing_cert != NULL) && (child_cert != NULL))
@@ -979,6 +991,7 @@ bool _verify_signature(LLPointer<LLCertificate> parent,
 	return verify_result;
 }
 
+
 // validate the certificate chain against a store.
 // There are many aspects of cert validatioin policy involved in
 // trust validation.  The policies in this validation algorithm include
@@ -993,17 +1006,17 @@ bool _verify_signature(LLPointer<LLCertificate> parent,
 // and verify the last cert is in the certificate store, or points
 // to a cert in the store.  It validates whether any cert in the chain
 // is trusted in the store, even if it's not the last one.
-void LLBasicCertificateChain::validate(int validation_policy,
-									   LLPointer<LLCertificateStore> ca_store,
+void LLBasicCertificateStore::validate(int validation_policy,
+									   LLPointer<LLCertificateChain> cert_chain,
 									   const LLSD& validation_params)
 {
 
-	if(size() < 1)
+	if(cert_chain->size() < 1)
 	{
 		throw LLCertException(NULL, "No certs in chain");
 	}
-	iterator current_cert = begin();
-	LLSD 	current_cert_info = (*current_cert)->getLLSD();
+	iterator current_cert = cert_chain->begin();
+	LLSD 	current_cert_info;
 	LLSD validation_date;
 	if (validation_params.has(CERT_VALIDATION_DATE))
 	{
@@ -1012,6 +1025,7 @@ void LLBasicCertificateChain::validate(int validation_policy,
 
 	if (validation_policy & VALIDATION_POLICY_HOSTNAME)
 	{
+		(*current_cert)->getLLSD(current_cert_info);
 		if(!validation_params.has(CERT_HOSTNAME))
 		{
 			throw LLCertException((*current_cert), "No hostname passed in for validation");			
@@ -1021,7 +1035,7 @@ void LLBasicCertificateChain::validate(int validation_policy,
 			throw LLInvalidCertificate((*current_cert));				
 		}
 		
-		LL_INFOS("SECAPI") << "Validating the hostname " << validation_params[CERT_HOSTNAME].asString() << 
+		LL_DEBUGS("SECAPI") << "Validating the hostname " << validation_params[CERT_HOSTNAME].asString() << 
 		     "against the cert CN " << current_cert_info[CERT_SUBJECT_NAME][CERT_NAME_CN].asString() << LL_ENDL;
 		if(!_cert_hostname_wildcard_match(validation_params[CERT_HOSTNAME].asString(),
 										  current_cert_info[CERT_SUBJECT_NAME][CERT_NAME_CN].asString()))
@@ -1030,16 +1044,50 @@ void LLBasicCertificateChain::validate(int validation_policy,
 													(*current_cert));
 		}
 	}
-	
 
+	// check the cache of already validated certs
+	X509* cert_x509 = (*current_cert)->getOpenSSLX509();
+	if(!cert_x509)
+	{
+		throw LLInvalidCertificate((*current_cert));			
+	}
+	std::string sha1_hash((const char *)cert_x509->sha1_hash, SHA_DIGEST_LENGTH);
+	t_cert_cache::iterator cache_entry = mTrustedCertCache.find(sha1_hash);
+	if(cache_entry != mTrustedCertCache.end())
+	{
+		LL_DEBUGS("SECAPI") << "Found cert in cache" << LL_ENDL;	
+		// this cert is in the cache, so validate the time.
+		if (validation_policy & VALIDATION_POLICY_TIME)
+		{
+			LLDate validation_date(time(NULL));
+			if(validation_params.has(CERT_VALIDATION_DATE))
+			{
+				validation_date = validation_params[CERT_VALIDATION_DATE];
+			}
+			
+			if((validation_date < cache_entry->second.first) ||
+			   (validation_date > cache_entry->second.second))
+			{
+				throw LLCertValidationExpirationException((*current_cert), validation_date);
+			}
+		}
+		// successfully found in cache
+		return;
+	}
+	if(current_cert_info.isUndefined())
+	{
+		(*current_cert)->getLLSD(current_cert_info);
+	}
+	LLDate from_time = current_cert_info[CERT_VALID_FROM].asDate();
+	LLDate to_time = current_cert_info[CERT_VALID_TO].asDate();
 	int depth = 0;
 	LLPointer<LLCertificate> previous_cert;
 	// loop through the cert chain, validating the current cert against the next one.
-	while(current_cert != end())
+	while(current_cert != cert_chain->end())
 	{
 		
 		int local_validation_policy = validation_policy;
-		if(current_cert == begin())
+		if(current_cert == cert_chain->begin())
 		{
 			// for the child cert, we don't validate CA stuff
 			local_validation_policy &= ~(VALIDATION_POLICY_CA_KU | 
@@ -1061,23 +1109,23 @@ void LLBasicCertificateChain::validate(int validation_policy,
 					  depth);
 		
 		// look for a CA in the CA store that may belong to this chain.
-		LLSD cert_llsd = (*current_cert)->getLLSD();
 		LLSD cert_search_params = LLSD::emptyMap();		
 		// is the cert itself in the store?
-		cert_search_params[CERT_SHA1_DIGEST] = cert_llsd[CERT_SHA1_DIGEST];
-		LLCertificateStore::iterator found_store_cert = ca_store->find(cert_search_params);
-		if(found_store_cert != ca_store->end())
+		cert_search_params[CERT_SHA1_DIGEST] = current_cert_info[CERT_SHA1_DIGEST];
+		LLCertificateStore::iterator found_store_cert = find(cert_search_params);
+		if(found_store_cert != end())
 		{
+			mTrustedCertCache[sha1_hash] = std::pair<LLDate, LLDate>(from_time, to_time);
 			return;
 		}
 		
 		// is the parent in the cert store?
 			
 		cert_search_params = LLSD::emptyMap();
-		cert_search_params[CERT_SUBJECT_NAME_STRING] = cert_llsd[CERT_ISSUER_NAME_STRING];
-		if (cert_llsd.has(CERT_AUTHORITY_KEY_IDENTIFIER))
+		cert_search_params[CERT_SUBJECT_NAME_STRING] = current_cert_info[CERT_ISSUER_NAME_STRING];
+		if (current_cert_info.has(CERT_AUTHORITY_KEY_IDENTIFIER))
 		{
-			LLSD cert_aki = cert_llsd[CERT_AUTHORITY_KEY_IDENTIFIER];
+			LLSD cert_aki = current_cert_info[CERT_AUTHORITY_KEY_IDENTIFIER];
 			if(cert_aki.has(CERT_AUTHORITY_KEY_IDENTIFIER_ID))
 			{
 				cert_search_params[CERT_SUBJECT_KEY_IDENTFIER] = cert_aki[CERT_AUTHORITY_KEY_IDENTIFIER_ID];
@@ -1087,11 +1135,10 @@ void LLBasicCertificateChain::validate(int validation_policy,
 				cert_search_params[CERT_SERIAL_NUMBER] = cert_aki[CERT_AUTHORITY_KEY_IDENTIFIER_SERIAL];
 			}
 		}
-		found_store_cert = ca_store->find(cert_search_params);
+		found_store_cert = find(cert_search_params);
 		
-		if(found_store_cert != ca_store->end())
+		if(found_store_cert != end())
 		{
-			LLSD foo = (*found_store_cert)->getLLSD();
 			// validate the store cert against the depth
 			_validateCert(validation_policy & VALIDATION_POLICY_CA_BASIC_CONSTRAINTS,
 						  (*found_store_cert),
@@ -1105,19 +1152,24 @@ void LLBasicCertificateChain::validate(int validation_policy,
 				throw LLCertValidationInvalidSignatureException(*current_cert);
 			}			
 			// successfully validated.
+			mTrustedCertCache[sha1_hash] = std::pair<LLDate, LLDate>(from_time, to_time);		
 			return;
 		}
 		previous_cert = (*current_cert);
 		current_cert++;
-			   depth++;
+		depth++;
+		if(current_cert != cert_chain->end())
+		{
+			(*current_cert)->getLLSD(current_cert_info);
+		}
 	}
 	if (validation_policy & VALIDATION_POLICY_TRUSTED)
 	{
-		LLPointer<LLCertificate> untrusted_ca_cert = (*this)[size()-1];
 		// we reached the end without finding a trusted cert.
-		throw LLCertValidationTrustException((*this)[size()-1]);
+		throw LLCertValidationTrustException((*cert_chain)[cert_chain->size()-1]);
 
 	}
+	mTrustedCertCache[sha1_hash] = std::pair<LLDate, LLDate>(from_time, to_time);	
 }
 
 
@@ -1155,7 +1207,7 @@ void LLSecAPIBasicHandler::init()
 														"CA.pem");
 		
 		
-		LL_INFOS("SECAPI") << "Loading certificate store from " << store_file << LL_ENDL;
+		LL_DEBUGS("SECAPI") << "Loading certificate store from " << store_file << LL_ENDL;
 		mStore = new LLBasicCertificateStore(store_file);
 		
 		// grab the application CA.pem file that contains the well-known certs shipped
@@ -1195,9 +1247,9 @@ void LLSecAPIBasicHandler::_readProtectedData()
 		U8 buffer[BUFFER_READ_SIZE];
 		U8 decrypted_buffer[BUFFER_READ_SIZE];
 		int decrypted_length;	
-		unsigned char MACAddress[MAC_ADDRESS_BYTES];
-		LLUUID::getNodeID(MACAddress);
-		LLXORCipher cipher(MACAddress, MAC_ADDRESS_BYTES);
+		unsigned char unique_id[MAC_ADDRESS_BYTES];
+        LLMachineID::getUniqueID(unique_id, sizeof(unique_id));
+		LLXORCipher cipher(unique_id, sizeof(unique_id));
 
 		// read in the salt and key
 		protected_data_stream.read((char *)salt, STORE_SALT_SIZE);
@@ -1281,9 +1333,9 @@ void LLSecAPIBasicHandler::_writeProtectedData()
 		EVP_CIPHER_CTX ctx;
 		EVP_CIPHER_CTX_init(&ctx);
 		EVP_EncryptInit(&ctx, EVP_rc4(), salt, NULL);
-		unsigned char MACAddress[MAC_ADDRESS_BYTES];
-		LLUUID::getNodeID(MACAddress);
-		LLXORCipher cipher(MACAddress, MAC_ADDRESS_BYTES);
+		unsigned char unique_id[MAC_ADDRESS_BYTES];
+        LLMachineID::getUniqueID(unique_id, sizeof(unique_id));
+		LLXORCipher cipher(unique_id, sizeof(unique_id));
 		cipher.encrypt(salt, STORE_SALT_SIZE);
 		protected_data_stream.write((const char *)salt, STORE_SALT_SIZE);
 
@@ -1465,7 +1517,7 @@ void LLSecAPIBasicHandler::saveCredential(LLPointer<LLCredential> cred, bool sav
 	{
 		credential["authenticator"] = cred->getAuthenticator();
 	}
-	LL_INFOS("SECAPI") << "Saving Credential " << cred->getGrid() << ":" << cred->userID() << " " << save_authenticator << LL_ENDL;
+	LL_DEBUGS("SECAPI") << "Saving Credential " << cred->getGrid() << ":" << cred->userID() << " " << save_authenticator << LL_ENDL;
 	setProtectedData("credential", cred->getGrid(), credential);
 	//*TODO: If we're saving Agni credentials, should we write the
 	// credentials to the legacy password.dat/etc?
@@ -1501,9 +1553,9 @@ std::string LLSecAPIBasicHandler::_legacyLoadPassword()
 	}
 	
 	// Decipher with MAC address
-	unsigned char MACAddress[MAC_ADDRESS_BYTES];
-	LLUUID::getNodeID(MACAddress);
-	LLXORCipher cipher(MACAddress, 6);
+	unsigned char unique_id[MAC_ADDRESS_BYTES];
+    LLMachineID::getUniqueID(unique_id, sizeof(unique_id));
+	LLXORCipher cipher(unique_id, sizeof(unique_id));
 	cipher.decrypt(&buffer[0], buffer.size());
 	
 	return std::string((const char*)&buffer[0], buffer.size());
diff --git a/indra/newview/llsechandler_basic.h b/indra/newview/llsechandler_basic.h
index 4bbb73f062a1c0f357f835a12aef056e5606cc49..356ea7efcb7e51d1dcae04eaef6e7700fe42ecf3 100644
--- a/indra/newview/llsechandler_basic.h
+++ b/indra/newview/llsechandler_basic.h
@@ -59,12 +59,13 @@ class LLBasicCertificate : public LLCertificate
 	
 	virtual std::string getPem() const;
 	virtual std::vector<U8> getBinary() const;
-	virtual LLSD getLLSD() const;
+	virtual void getLLSD(LLSD &llsd);
 
 	virtual X509* getOpenSSLX509() const;
 	
 	// set llsd elements for testing
 	void setLLSD(const std::string name, const LLSD& value) { mLLSDInfo[name] = value; }
+
 protected:
 
 	// certificates are stored as X509 objects, as validation and
@@ -116,6 +117,8 @@ class LLBasicCertificateVector : virtual public LLCertificateVector
 		virtual bool equals(const LLPointer<iterator_impl>& _iter) const
 		{
 			const BasicIteratorImpl *rhs_iter = dynamic_cast<const BasicIteratorImpl *>(_iter.get());
+			llassert(rhs_iter);
+			if (!rhs_iter) return 0;
 			return (mIter == rhs_iter->mIter);
 		}
 		virtual LLPointer<LLCertificate> get()
@@ -173,8 +176,21 @@ class LLBasicCertificateStore : virtual public LLBasicCertificateVector, public
 	// return the store id
 	virtual std::string storeId() const;
 	
+	// validate a certificate chain against a certificate store, using the
+	// given validation policy.
+	virtual void validate(int validation_policy,
+						  LLPointer<LLCertificateChain> ca_chain,
+						  const LLSD& validation_params);
+	
 protected:
-	std::vector<LLPointer<LLCertificate> >mCerts;
+	std::vector<LLPointer<LLCertificate> >            mCerts;
+	
+	// cache of cert sha1 hashes to from/to date pairs, to improve
+	// performance of cert trust.  Note, these are not the CA certs,
+	// but the certs that have been validated against this store.
+	typedef std::map<std::string, std::pair<LLDate, LLDate> > t_cert_cache;
+	t_cert_cache mTrustedCertCache;
+	
 	std::string mFilename;
 };
 
@@ -189,11 +205,6 @@ class LLBasicCertificateChain : virtual public LLBasicCertificateVector, public
 	
 	virtual ~LLBasicCertificateChain() {}
 	
-	// validate a certificate chain against a certificate store, using the
-	// given validation policy.
-	virtual void validate(int validation_policy,
-						  LLPointer<LLCertificateStore> ca_store,
-						  const LLSD& validation_params);
 };
 
 
diff --git a/indra/newview/llsidepanelappearance.cpp b/indra/newview/llsidepanelappearance.cpp
index 707fc1555ab706520781fbc6122b7fbc4746cf5b..b66789448fca5667a840fa0f82d9b9d93427b375 100644
--- a/indra/newview/llsidepanelappearance.cpp
+++ b/indra/newview/llsidepanelappearance.cpp
@@ -163,6 +163,8 @@ BOOL LLSidepanelAppearance::postBuild()
 	mOutfitRenameWatcher = new LLWatchForOutfitRenameObserver(this);
 	gInventory.addObserver(mOutfitRenameWatcher);
 
+	setVisibleCallback(boost::bind(&LLSidepanelAppearance::onVisibilityChange,this,_2));
+
 	return TRUE;
 }
 
@@ -201,6 +203,27 @@ void LLSidepanelAppearance::onOpen(const LLSD& key)
 	mOpened = true;
 }
 
+void LLSidepanelAppearance::onVisibilityChange(const LLSD &new_visibility)
+{
+	if (new_visibility.asBoolean())
+	{
+		if ((mOutfitEdit && mOutfitEdit->getVisible()) || (mEditWearable && mEditWearable->getVisible()))
+		{
+			if (!gAgentCamera.cameraCustomizeAvatar())
+			{
+				gAgentCamera.changeCameraToCustomizeAvatar();
+			}
+		}
+	}
+	else
+	{
+		if (gAgentCamera.cameraCustomizeAvatar())
+		{
+			gAgentCamera.changeCameraToDefault();
+		}
+	}
+}
+
 void LLSidepanelAppearance::onFilterEdit(const std::string& search_string)
 {
 	if (mFilterSubString != search_string)
@@ -465,3 +488,19 @@ void LLSidepanelAppearance::setWearablesLoading(bool val)
 	childSetVisible("wearables_loading_indicator", val);
 	childSetVisible("edit_outfit_btn", !val);
 }
+
+void LLSidepanelAppearance::showDefaultSubpart()
+{
+	if (mEditWearable->getVisible())
+	{
+		mEditWearable->showDefaultSubpart();
+	}
+}
+
+void LLSidepanelAppearance::updateScrollingPanelList()
+{
+	if (mEditWearable->getVisible())
+	{
+		mEditWearable->updateScrollingPanelList();
+	}
+}
diff --git a/indra/newview/llsidepanelappearance.h b/indra/newview/llsidepanelappearance.h
index 12303b6e96c625a9a8063fd0e6f4ca83de91e81b..30022ae37535698a85af778b318bc147ffe4f2cb 100644
--- a/indra/newview/llsidepanelappearance.h
+++ b/indra/newview/llsidepanelappearance.h
@@ -67,9 +67,12 @@ class LLSidepanelAppearance : public LLPanel
 	void showOutfitEditPanel();
 	void showWearableEditPanel(LLWearable *wearable = NULL);
 	void setWearablesLoading(bool val);
+	void showDefaultSubpart();
+	void updateScrollingPanelList();
 
 private:
 	void onFilterEdit(const std::string& search_string);
+	void onVisibilityChange ( const LLSD& new_visibility );
 
 	void onOpenOutfitButtonClicked();
 	void onEditAppearanceButtonClicked();
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 466c154f366e2343048cd79fc0797cc9bd514e94..6418551517aee96bebeeda1f17bf575785f6fc4d 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -385,13 +385,22 @@ bool idle_startup()
 		{
 			LLNotificationsUtil::add("DisplaySetToRecommended");
 		}
+		else if ((gSavedSettings.getS32("LastGPUClass") != LLFeatureManager::getInstance()->getGPUClass()) &&
+				 (gSavedSettings.getS32("LastGPUClass") != -1))
+		{
+			LLNotificationsUtil::add("DisplaySetToRecommended");
+		}
 		else if (!gViewerWindow->getInitAlert().empty())
 		{
 			LLNotificationsUtil::add(gViewerWindow->getInitAlert());
 		}
 			
 		gSavedSettings.setS32("LastFeatureVersion", LLFeatureManager::getInstance()->getVersion());
+		gSavedSettings.setS32("LastGPUClass", LLFeatureManager::getInstance()->getGPUClass());
 
+		// load dynamic GPU/feature tables from website (S3)
+		LLFeatureManager::getInstance()->fetchHTTPTables();
+		
 		std::string xml_file = LLUI::locateSkin("xui_version.xml");
 		LLXMLNodePtr root;
 		bool xml_ok = false;
@@ -2723,7 +2732,8 @@ LLSD transform_cert_args(LLPointer<LLCertificate> cert)
 {
 	LLSD args = LLSD::emptyMap();
 	std::string value;
-	LLSD cert_info = cert->getLLSD();
+	LLSD cert_info;
+	cert->getLLSD(cert_info);
 	// convert all of the elements in the cert into                                        
 	// args for the xml dialog, so we have flexability to                                  
 	// display various parts of the cert by only modifying                                 
diff --git a/indra/newview/lltexlayer.cpp b/indra/newview/lltexlayer.cpp
index 4be03596f84f07d3be2217390f4e194b13ceaaa8..7290849fcaf7a379ca3cfc9110f1d3dbbf1152de 100644
--- a/indra/newview/lltexlayer.cpp
+++ b/indra/newview/lltexlayer.cpp
@@ -37,6 +37,7 @@
 #include "llagent.h"
 #include "llimagej2c.h"
 #include "llimagetga.h"
+#include "llnotificationsutil.h"
 #include "llvfile.h"
 #include "llvfs.h"
 #include "llviewerstats.h"
@@ -49,6 +50,7 @@
 #include "llui.h"
 #include "llagentwearables.h"
 #include "llwearable.h"
+#include "llviewercontrol.h"
 #include "llviewervisualparam.h"
 
 //#include "../tools/imdebug/imdebug.h"
@@ -60,10 +62,12 @@ using namespace LLVOAvatarDefines;
 //-----------------------------------------------------------------------------
 LLBakedUploadData::LLBakedUploadData(const LLVOAvatarSelf* avatar,
 									 LLTexLayerSet* layerset,
-									 const LLUUID& id) : 
+									 const LLUUID& id,
+									 BOOL highest_lod) : 
 	mAvatar(avatar),
 	mTexLayerSet(layerset),
 	mID(id),
+	mHighestLOD(highest_lod),
 	mStartTime(LLFrameTimer::getTotalTime())		// Record starting time
 { 
 }
@@ -80,12 +84,14 @@ LLTexLayerSetBuffer::LLTexLayerSetBuffer(LLTexLayerSet* const owner,
 										 S32 width, S32 height) :
 	// ORDER_LAST => must render these after the hints are created.
 	LLViewerDynamicTexture( width, height, 4, LLViewerDynamicTexture::ORDER_LAST, TRUE ), 
-	mNeedsUpdate( TRUE ),
-	mNeedsUpload( FALSE ),
-	mUploadPending( FALSE ), // Not used for any logic here, just to sync sending of updates
+	mNeedsUpdate(TRUE),
+	mNeedsUpload(FALSE),
+	mUploadPending(FALSE), // Not used for any logic here, just to sync sending of updates
+	mNeedsLowResUpload(TRUE),
 	mTexLayerSet(owner)
 {
 	LLTexLayerSetBuffer::sGLByteCount += getSize();
+	mNeedsUploadTimer.start();
 }
 
 LLTexLayerSetBuffer::~LLTexLayerSetBuffer()
@@ -125,7 +131,6 @@ void LLTexLayerSetBuffer::dumpTotalByteCount()
 void LLTexLayerSetBuffer::requestUpdate()
 {
 	mNeedsUpdate = TRUE;
-
 	// If we're in the middle of uploading a baked texture, we don't care about it any more.
 	// When it's downloaded, ignore it.
 	mUploadID.setNull();
@@ -133,20 +138,24 @@ void LLTexLayerSetBuffer::requestUpdate()
 
 void LLTexLayerSetBuffer::requestUpload()
 {
-	if (!mNeedsUpload)
+	// If we requested a new upload but haven't even uploaded
+	// a low res version of our last upload request, then
+	// keep the timer ticking instead of resetting it.
+	if (mNeedsUpload && mNeedsLowResUpload)
 	{
-		mNeedsUpload = TRUE;
-		mUploadPending = TRUE;
+		mNeedsUploadTimer.reset();
 	}
+	mNeedsUpload = TRUE;
+	mNeedsLowResUpload = TRUE;
+	mUploadPending = TRUE;
+	mNeedsUploadTimer.unpause();
 }
 
 void LLTexLayerSetBuffer::cancelUpload()
 {
-	if (mNeedsUpload)
-	{
-		mNeedsUpload = FALSE;
-	}
+	mNeedsUpload = FALSE;
 	mUploadPending = FALSE;
+	mNeedsUploadTimer.pause();
 }
 
 void LLTexLayerSetBuffer::pushProjection() const
@@ -174,7 +183,8 @@ BOOL LLTexLayerSetBuffer::needsRender()
 {
 	llassert(mTexLayerSet->getAvatar() == gAgentAvatarp);
 	if (!isAgentAvatarValid()) return FALSE;
-	BOOL upload_now = mNeedsUpload && mTexLayerSet->isLocalTextureDataFinal() && gAgentQueryManager.hasNoPendingQueries();
+
+	const BOOL upload_now = isReadyToUpload();
 	BOOL needs_update = (mNeedsUpdate || upload_now) && !gAgentAvatarp->mAppearanceAnimating;
 	if (needs_update)
 	{
@@ -191,6 +201,7 @@ BOOL LLTexLayerSetBuffer::needsRender()
 			needs_update &= mTexLayerSet->isLocalTextureDataAvailable();
 		}
 	}
+
 	return needs_update;
 }
 
@@ -217,7 +228,7 @@ BOOL LLTexLayerSetBuffer::render()
 
 	// do we need to upload, and do we have sufficient data to create an uploadable composite?
 	// When do we upload the texture if gAgent.mNumPendingQueries is non-zero?
-	BOOL upload_now = (gAgentQueryManager.hasNoPendingQueries() && mNeedsUpload && mTexLayerSet->isLocalTextureDataFinal());
+	const BOOL upload_now = isReadyToUpload();
 	BOOL success = TRUE;
 
 
@@ -226,11 +237,11 @@ BOOL LLTexLayerSetBuffer::render()
 	success &= mTexLayerSet->render( mOrigin.mX, mOrigin.mY, mFullWidth, mFullHeight );
 	gGL.flush();
 
-	if( upload_now )
+	if(upload_now)
 	{
 		if (!success)
 		{
-			llinfos << "Failed attempt to bake " << mTexLayerSet->getBodyRegion() << llendl;
+			llinfos << "Failed attempt to bake " << mTexLayerSet->getBodyRegionName() << llendl;
 			mUploadPending = FALSE;
 		}
 		else
@@ -244,6 +255,7 @@ BOOL LLTexLayerSetBuffer::render()
 			{
 				mUploadPending = FALSE;
 				mNeedsUpload = FALSE;
+				mNeedsUploadTimer.pause();
 				mTexLayerSet->getAvatar()->setNewBakedTexture(mTexLayerSet->getBakedTexIndex(),IMG_INVISIBLE);
 			}
 		}
@@ -265,6 +277,26 @@ bool LLTexLayerSetBuffer::isInitialized(void) const
 	return mGLTexturep.notNull() && mGLTexturep->isGLTextureCreated();
 }
 
+BOOL LLTexLayerSetBuffer::isReadyToUpload() const
+{
+	if (!mNeedsUpload) return FALSE; // Don't need to upload if we haven't requested one.
+	if (!gAgentQueryManager.hasNoPendingQueries()) return FALSE; // Can't upload if there are pending queries.
+	
+	// If we requested an upload and have the final LOD ready, then upload.
+	const BOOL can_highest_lod = mTexLayerSet->isLocalTextureDataFinal();
+	if (can_highest_lod) return TRUE;
+
+	const U32 texture_timeout = gSavedSettings.getU32("AvatarBakedTextureTimeout");
+	if (texture_timeout)
+	{
+		// If we hit our timeout and have textures available at even lower resolution, then upload.
+		const BOOL is_upload_textures_timeout = mNeedsUploadTimer.getElapsedTimeF32() >= texture_timeout;
+		const BOOL has_lower_lod = mTexLayerSet->isLocalTextureDataAvailable();
+		if (has_lower_lod && is_upload_textures_timeout && mNeedsLowResUpload) return TRUE; 
+	}
+	return FALSE;
+}
+
 BOOL LLTexLayerSetBuffer::updateImmediate()
 {
 	mNeedsUpdate = TRUE;
@@ -288,7 +320,7 @@ void LLTexLayerSetBuffer::readBackAndUpload()
 	glReadPixels(mOrigin.mX, mOrigin.mY, mFullWidth, mFullHeight, GL_RGBA, GL_UNSIGNED_BYTE, baked_color_data );
 	stop_glerror();
 
-	llinfos << "Baked " << mTexLayerSet->getBodyRegion() << llendl;
+	llinfos << "Baked " << mTexLayerSet->getBodyRegionName() << llendl;
 	LLViewerStats::getInstance()->incStat(LLViewerStats::ST_TEX_BAKES);
 
 	// We won't need our caches since we're baked now.  (Techically, we won't 
@@ -355,9 +387,12 @@ void LLTexLayerSetBuffer::readBackAndUpload()
 			
 			if( valid )
 			{
+				const BOOL highest_lod = mTexLayerSet->isLocalTextureDataFinal();
 				// baked_upload_data is owned by the responder and deleted after the request completes
-				LLBakedUploadData* baked_upload_data =
-					new LLBakedUploadData(gAgentAvatarp, this->mTexLayerSet, asset_id);
+				LLBakedUploadData* baked_upload_data = new LLBakedUploadData(gAgentAvatarp, 
+																			 this->mTexLayerSet, 
+																			 asset_id,
+																			 highest_lod);
 				mUploadID = asset_id;
 				
 				// upload the image
@@ -384,8 +419,28 @@ void LLTexLayerSetBuffer::readBackAndUpload()
 												  TRUE,		// is_priority
 												  TRUE);	// store_local
 				}
+
+				if (gSavedSettings.getBOOL("DebugAvatarRezTime"))
+				{
+					std::string lod_str = highest_lod ? "HighRes" : "LowRes";
+					LLSD args;
+					args["EXISTENCE"] = llformat("%d",(U32)mTexLayerSet->getAvatar()->debugGetExistenceTimeElapsedF32());
+					args["TIME"] = llformat("%d",(U32)mNeedsUploadTimer.getElapsedTimeF32());
+					args["BODYREGION"] = mTexLayerSet->getBodyRegionName();
+					args["RESOLUTION"] = lod_str;
+					LLNotificationsUtil::add("AvatarRezSelfBakeNotification",args);
+					llinfos << "Uploading [ name: " << mTexLayerSet->getBodyRegionName() << " res:" << lod_str << " time:" << (U32)mNeedsUploadTimer.getElapsedTimeF32() << " ]" << llendl;
+				}
 		
-				mNeedsUpload = FALSE;
+				if (highest_lod)
+				{
+					mNeedsUpload = FALSE;
+					mNeedsUploadTimer.pause();
+				}
+				else
+				{
+					mNeedsLowResUpload = FALSE;
+				}
 			}
 			else
 			{
@@ -414,12 +469,11 @@ void LLTexLayerSetBuffer::onTextureUploadComplete(const LLUUID& uuid,
 {
 	LLBakedUploadData* baked_upload_data = (LLBakedUploadData*)userdata;
 
-	if (0 == result &&
+	if ((result == 0) &&
 		isAgentAvatarValid() &&
 		!gAgentAvatarp->isDead() &&
-		baked_upload_data->mAvatar == gAgentAvatarp && // Sanity check: only the user's avatar should be uploading textures.
-		baked_upload_data->mTexLayerSet->hasComposite()
-		)
+		(baked_upload_data->mAvatar == gAgentAvatarp) && // Sanity check: only the user's avatar should be uploading textures.
+		(baked_upload_data->mTexLayerSet->hasComposite()))
 	{
 		LLTexLayerSetBuffer* layerset_buffer = baked_upload_data->mTexLayerSet->getComposite();
 			
@@ -438,10 +492,9 @@ void LLTexLayerSetBuffer::onTextureUploadComplete(const LLUUID& uuid,
 		{
 			// This is the upload we're currently waiting for.
 			layerset_buffer->mUploadID.setNull();
-			layerset_buffer->mUploadPending = FALSE;
-
 			if (result >= 0)
 			{
+				layerset_buffer->mUploadPending = FALSE;
 				LLVOAvatarDefines::ETextureIndex baked_te = gAgentAvatarp->getBakedTE(layerset_buffer->mTexLayerSet);
 				// Update baked texture info with the new UUID
 				U64 now = LLFrameTimer::getTotalTime();		// Record starting time
@@ -758,7 +811,7 @@ BOOL LLTexLayerSet::isBodyRegion(const std::string& region) const
 	return mInfo->mBodyRegion == region; 
 }
 
-const std::string LLTexLayerSet::getBodyRegion() const 
+const std::string LLTexLayerSet::getBodyRegionName() const 
 { 
 	return mInfo->mBodyRegion; 
 }
@@ -788,7 +841,7 @@ void LLTexLayerSet::cancelUpload()
 
 void LLTexLayerSet::createComposite()
 {
-	if( !mComposite )
+	if(!mComposite)
 	{
 		S32 width = mInfo->mWidth;
 		S32 height = mInfo->mHeight;
@@ -823,7 +876,15 @@ void LLTexLayerSet::updateComposite()
 
 LLTexLayerSetBuffer* LLTexLayerSet::getComposite()
 {
-	createComposite();
+	if (!mComposite)
+	{
+		createComposite();
+	}
+	return mComposite;
+}
+
+const LLTexLayerSetBuffer* LLTexLayerSet::getComposite() const
+{
 	return mComposite;
 }
 
@@ -1031,7 +1092,7 @@ BOOL LLTexLayerInfo::parseXml(LLXmlTreeNode* node)
 			}
 			if (mLocalTexture == TEX_NUM_INDICES)
 			{
-				llwarns << "<texture> element has invalid local_texure attribute: " << mName << " " << local_texture_name << llendl;
+				llwarns << "<texture> element has invalid local_texture attribute: " << mName << " " << local_texture_name << llendl;
 				return FALSE;
 			}
 		}
@@ -2169,4 +2230,16 @@ BOOL LLTexLayerStaticImageList::loadImageRaw(const std::string& file_name, LLIma
 	return success;
 }
 
+const std::string LLTexLayerSetBuffer::dumpTextureInfo() const
+{
+	if (!isAgentAvatarValid()) return "";
 
+	const BOOL is_high_res = !mNeedsUpload;
+	const BOOL is_low_res = !mNeedsLowResUpload;
+	const U32 upload_time = (U32)mNeedsUploadTimer.getElapsedTimeF32();
+	const std::string local_texture_info = gAgentAvatarp->debugDumpLocalTextureDataInfo(mTexLayerSet);
+	std::string text = llformat("[ HiRes:%d LoRes:%d Timer:%d ] %s",
+								is_high_res, is_low_res, upload_time, 
+								local_texture_info.c_str());
+	return text;
+}
diff --git a/indra/newview/lltexlayer.h b/indra/newview/lltexlayer.h
index ae280dd0633d6f4348c1f58ada7f82c19a4733c8..8f386b5a19164a92bbcec7313037062584a7ce9b 100644
--- a/indra/newview/lltexlayer.h
+++ b/indra/newview/lltexlayer.h
@@ -253,6 +253,7 @@ class LLTexLayerSet
 
 	BOOL					isBodyRegion(const std::string& region) const;
 	LLTexLayerSetBuffer*	getComposite();
+	const LLTexLayerSetBuffer* getComposite() const; // Do not create one if it doesn't exist.
 	void					requestUpdate();
 	void					requestUpload();
 	void					cancelUpload();
@@ -272,7 +273,7 @@ class LLTexLayerSet
 	void					cloneTemplates(LLLocalTextureObject *lto, LLVOAvatarDefines::ETextureIndex tex_index, LLWearable* wearable);
 	
 	LLVOAvatarSelf*		    getAvatar()	const { return mAvatar; }
-	const std::string		getBodyRegion() const;
+	const std::string		getBodyRegionName() const;
 	BOOL					hasComposite() const { return (mComposite.notNull()); }
 	LLVOAvatarDefines::EBakedTextureIndex getBakedTexIndex() { return mBakedTexIndex; }
 	void					setBakedTexIndex( LLVOAvatarDefines::EBakedTextureIndex index) { mBakedTexIndex = index; }
@@ -344,22 +345,29 @@ class LLTexLayerSetBuffer : public LLViewerDynamicTexture
 													S32 result, LLExtStat ext_status);
 	static void				dumpTotalByteCount();
 
+	const std::string		dumpTextureInfo() const;
+
 	virtual void restoreGLTexture();
 	virtual void destroyGLTexture();
 
-private:
+protected:
 	void					pushProjection() const;
 	void					popProjection() const;
-
+	BOOL					isReadyToUpload() const;
+	
 private:
 	LLTexLayerSet* const    mTexLayerSet;
 
-	BOOL					mNeedsUpdate;
-	BOOL					mNeedsUpload;
-	BOOL					mUploadPending;
-	LLUUID					mUploadID; // Identifys the current upload process (null if none).  Used to avoid overlaps (eg, when the user rapidly makes two changes outside of Face Edit)
+	BOOL					mNeedsUpdate; // Whether we need to update our baked textures
+	BOOL					mNeedsUpload; // Whether we need to send our baked textures to the server
+	BOOL					mNeedsLowResUpload; // Whether we have sent a lowres version of our baked textures to the server
+	BOOL					mUploadPending; // Whether we have received back the new baked textures
+	LLUUID					mUploadID; // Identifies the current upload process (null if none).  Used to avoid overlaps (eg, when the user rapidly makes two changes outside of Face Edit)
 
 	static S32				sGLByteCount;
+	
+	LLFrameTimer    		mNeedsUploadTimer; // Tracks time since upload was requested
+
 };
 
 //
@@ -404,13 +412,18 @@ class LLTexLayerStaticImageList : public LLSingleton<LLTexLayerStaticImageList>
 class LLBakedUploadData
 {
 public:
-	LLBakedUploadData(const LLVOAvatarSelf* avatar, LLTexLayerSet* layerset, const LLUUID& id);
+	LLBakedUploadData(const LLVOAvatarSelf* avatar, 
+					  LLTexLayerSet* layerset, 
+					  const LLUUID& id,
+					  BOOL highest_lod);
 	~LLBakedUploadData() {}
 
 	const LLUUID				mID;
 	const LLVOAvatarSelf*		mAvatar;	 // just backlink, don't LLPointer 
 	LLTexLayerSet*				mTexLayerSet;
    	const U64					mStartTime;		// Used to measure time baked texture upload requires
+	BOOL						mHighestLOD;
+
 };
 
 
diff --git a/indra/newview/lltexturectrl.cpp b/indra/newview/lltexturectrl.cpp
index efdddd947b1cc7a889a1ab534180db9f9ac421c9..a1ab051021222c2bd94609cc7473860109161f1d 100644
--- a/indra/newview/lltexturectrl.cpp
+++ b/indra/newview/lltexturectrl.cpp
@@ -1286,8 +1286,8 @@ void LLTextureCtrl::draw()
 				LLFontGL::DROP_SHADOW);
 		}
 
-		// Show more detailed information if this agent is god.
-		if (gAgent.isGodlike())
+		// Optionally show more detailed information.
+		if (gSavedSettings.getBOOL("DebugAvatarRezTime"))
 		{
 			LLFontGL* font = LLFontGL::getFontSansSerif();
 			std::string tdesc;
diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp
index 7fa04ce57413895ce33fe3ea1495641141234a97..cf3bce2ec1a4e72b90e75ec911f1b95bcc5455ce 100644
--- a/indra/newview/lltexturefetch.cpp
+++ b/indra/newview/lltexturefetch.cpp
@@ -260,6 +260,7 @@ class LLTextureFetchWorker : public LLWorkerClass
 	BOOL mHaveAllData;
 	BOOL mInLocalCache;
 	bool mCanUseHTTP ;
+	bool mCanUseNET ; //can get from asset server.
 	S32 mHTTPFailCount;
 	S32 mRetryAttempt;
 	S32 mActiveCount;
@@ -426,6 +427,8 @@ LLTextureFetchWorker::LLTextureFetchWorker(LLTextureFetch* fetcher,
 	  mTotalPackets(0),
 	  mImageCodec(IMG_CODEC_INVALID)
 {
+	mCanUseNET = mUrl.empty() ;
+
 	calcWorkPriority();
 	mType = host.isOk() ? LLImageBase::TYPE_AVATAR_BAKE : LLImageBase::TYPE_NORMAL;
 // 	llinfos << "Create: " << mID << " mHost:" << host << " Discard=" << discard << llendl;
@@ -904,13 +907,16 @@ bool LLTextureFetchWorker::doWork(S32 param)
 				if (mGetStatus == HTTP_NOT_FOUND)
 				{
 					mHTTPFailCount = max_attempts = 1; // Don't retry
-					//llinfos << "Texture missing from server (404): " << mUrl << llendl;
+					//llwarns << "Texture missing from server (404): " << mUrl << llendl;
 
 					//roll back to try UDP
-					mState = INIT ;
-					mCanUseHTTP = false ;
-					setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
-					return false ;
+					if(mCanUseNET)
+					{
+						mState = INIT ;
+						mCanUseHTTP = false ;
+						setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
+						return false ;
+					}
 				}
 				else if (mGetStatus == HTTP_SERVICE_UNAVAILABLE)
 				{
diff --git a/indra/newview/lltextureview.cpp b/indra/newview/lltextureview.cpp
index 43913f3632636b49c22c072d6ed6fcdade4ecbe8..7a8b6557bb52636464c1ed202c2d238b85b5c832 100644
--- a/indra/newview/lltextureview.cpp
+++ b/indra/newview/lltextureview.cpp
@@ -54,6 +54,11 @@
 #include "llviewertexture.h"
 #include "llviewertexturelist.h"
 #include "llvovolume.h"
+
+// For avatar texture view
+#include "llvoavatarself.h"
+#include "lltexlayer.h"
+
 extern F32 texmem_lower_bound_scale;
 
 LLTextureView *gTextureView = NULL;
@@ -375,6 +380,86 @@ LLRect LLTextureBar::getRequiredRect()
 
 ////////////////////////////////////////////////////////////////////////////
 
+class LLAvatarTexBar : public LLView
+{
+public:
+	struct Params : public LLInitParam::Block<Params, LLView::Params>
+	{
+		Mandatory<LLTextureView*>	texture_view;
+		Params()
+		:	texture_view("texture_view")
+		{
+			S32 line_height = (S32)(LLFontGL::getFontMonospace()->getLineHeight() + .5f);
+			rect(LLRect(0,0,100,line_height * 4));
+		}
+	};
+
+	LLAvatarTexBar(const Params& p)
+	:	LLView(p),
+		mTextureView(p.texture_view)
+	{}
+
+	virtual void draw();	
+	virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
+	virtual LLRect getRequiredRect();	// Return the height of this object, given the set options.
+
+private:
+	LLTextureView* mTextureView;
+};
+
+void LLAvatarTexBar::draw()
+{	
+	if (!gSavedSettings.getBOOL("DebugAvatarRezTime")) return;
+
+	LLVOAvatarSelf* avatarp = gAgentAvatarp;
+	if (!avatarp) return;
+
+	const S32 line_height = (S32)(LLFontGL::getFontMonospace()->getLineHeight() + .5f);
+	const S32 v_offset = (S32)((texture_bar_height + 2.5f) * mTextureView->mNumTextureBars + 2.5f);
+	//----------------------------------------------------------------------------
+	LLGLSUIDefault gls_ui;
+	LLColor4 text_color(1.f, 1.f, 1.f, 1.f);
+	LLColor4 color;
+	
+	U32 line_num = 6;
+	for (LLVOAvatarDefines::LLVOAvatarDictionary::BakedTextures::const_iterator baked_iter = LLVOAvatarDefines::LLVOAvatarDictionary::getInstance()->getBakedTextures().begin();
+		 baked_iter != LLVOAvatarDefines::LLVOAvatarDictionary::getInstance()->getBakedTextures().end();
+		 ++baked_iter)
+	{
+		const LLVOAvatarDefines::EBakedTextureIndex baked_index = baked_iter->first;
+		const LLTexLayerSet *layerset = avatarp->debugGetLayerSet(baked_index);
+		if (!layerset) continue;
+		const LLTexLayerSetBuffer *layerset_buffer = layerset->getComposite();
+		if (!layerset_buffer) continue;
+		std::string text = layerset_buffer->dumpTextureInfo();
+		LLFontGL::getFontMonospace()->renderUTF8(text, 0, 0, v_offset + line_height*line_num,
+												 text_color, LLFontGL::LEFT, LLFontGL::TOP, LLFontGL::BOLD, LLFontGL::DROP_SHADOW_SOFT);
+		line_num++;
+	}
+	const U32 texture_timeout = gSavedSettings.getU32("AvatarBakedTextureTimeout");
+	const U32 override_tex_discard_level = gSavedSettings.getU32("TextureDiscardLevel");
+	
+	const std::string texture_timeout_str = texture_timeout ? llformat("%d",texture_timeout) : "Disabled";
+	const std::string override_tex_discard_level_str = override_tex_discard_level ? llformat("%d",override_tex_discard_level) : "Disabled";
+	std::string header_text = llformat("[ Timeout('AvatarBakedTextureTimeout'):%s ] [ LOD_Override('TextureDiscardLevel'):%s ]", texture_timeout_str.c_str(), override_tex_discard_level_str.c_str());
+	LLFontGL::getFontMonospace()->renderUTF8(header_text, 0, 0, v_offset + line_height*line_num,
+											 text_color, LLFontGL::LEFT, LLFontGL::TOP, LLFontGL::BOLD, LLFontGL::DROP_SHADOW_SOFT);
+}
+
+BOOL LLAvatarTexBar::handleMouseDown(S32 x, S32 y, MASK mask)
+{
+	return FALSE;
+}
+
+LLRect LLAvatarTexBar::getRequiredRect()
+{
+	LLRect rect;
+	rect.mTop = 8;
+	return rect;
+}
+
+////////////////////////////////////////////////////////////////////////////
+
 class LLGLTexMemBar : public LLView
 {
 public:
@@ -412,13 +497,17 @@ void LLGLTexMemBar::draw()
 	F32 cache_usage = (F32)BYTES_TO_MEGA_BYTES(LLAppViewer::getTextureCache()->getUsage()) ;
 	F32 cache_max_usage = (F32)BYTES_TO_MEGA_BYTES(LLAppViewer::getTextureCache()->getMaxUsage()) ;
 	S32 line_height = (S32)(LLFontGL::getFontMonospace()->getLineHeight() + .5f);
-	S32 v_offset = (S32)((texture_bar_height + 2.5f) * mTextureView->mNumTextureBars + 2.5f);
+	S32 v_offset = (S32)((texture_bar_height + 2.5f) * mTextureView->mNumTextureBars + 5.0f);
 	//----------------------------------------------------------------------------
 	LLGLSUIDefault gls_ui;
 	LLColor4 text_color(1.f, 1.f, 1.f, 0.75f);
 	LLColor4 color;
 	
-	std::string text;
+	std::string text = "";
+
+	LLFontGL::getFontMonospace()->renderUTF8(text, 0, 0, v_offset + line_height*6,
+											 text_color, LLFontGL::LEFT, LLFontGL::TOP);
+
 	text = llformat("GL Tot: %d/%d MB Bound: %d/%d MB Raw Tot: %d MB Bias: %.2f Cache: %.1f/%.1f MB",
 					total_mem,
 					max_total_mem,
@@ -640,6 +729,7 @@ LLTextureView::LLTextureView(const LLTextureView::Params& p)
 	
 	setDisplayChildren(TRUE);
 	mGLTexMemBar = 0;
+	mAvatarTexBar = 0;
 }
 
 LLTextureView::~LLTextureView()
@@ -647,6 +737,9 @@ LLTextureView::~LLTextureView()
 	// Children all cleaned up by default view destructor.
 	delete mGLTexMemBar;
 	mGLTexMemBar = 0;
+	
+	delete mAvatarTexBar;
+	mAvatarTexBar = 0;
 }
 
 typedef std::pair<F32,LLViewerFetchedTexture*> decode_pair_t;
@@ -684,6 +777,13 @@ void LLTextureView::draw()
 			mGLTexMemBar = 0;
 		}
 
+		if (mAvatarTexBar)
+		{
+			removeChild(mAvatarTexBar);
+			mAvatarTexBar->die();
+			mAvatarTexBar = 0;
+		}
+
 		typedef std::multiset<decode_pair_t, compare_decode_pair > display_list_t;
 		display_list_t display_image_list;
 	
@@ -851,7 +951,14 @@ void LLTextureView::draw()
 		tmbp.texture_view(this);
 		mGLTexMemBar = LLUICtrlFactory::create<LLGLTexMemBar>(tmbp);
 		addChild(mGLTexMemBar);
-	
+
+		LLAvatarTexBar::Params atbp;
+		atbp.name("gl avatartex bar");
+		atbp.texture_view(this);
+		mAvatarTexBar = LLUICtrlFactory::create<LLAvatarTexBar>(atbp);
+		addChild(mAvatarTexBar);
+
+
 		reshape(getRect().getWidth(), getRect().getHeight(), TRUE);
 
 		/*
diff --git a/indra/newview/lltextureview.h b/indra/newview/lltextureview.h
index 435a55df8357a35dfa21fe95952fcc7224cfae45..dfd9c42c2c316d340a475d5c16694525f2a8a852 100644
--- a/indra/newview/lltextureview.h
+++ b/indra/newview/lltextureview.h
@@ -38,11 +38,13 @@
 class LLViewerFetchedTexture;
 class LLTextureBar;
 class LLGLTexMemBar;
+class LLAvatarTexBar;
 
 class LLTextureView : public LLContainerView
 {
 	friend class LLTextureBar;
 	friend class LLGLTexMemBar;
+	friend class LLAvatarTexBar;
 protected:
 	LLTextureView(const Params&);
 	friend class LLUICtrlFactory;
@@ -73,7 +75,7 @@ class LLTextureView : public LLContainerView
 	U32 mNumTextureBars;
 
 	LLGLTexMemBar* mGLTexMemBar;
-	
+	LLAvatarTexBar* mAvatarTexBar;
 public:
 	static std::set<LLViewerFetchedTexture*> sDebugImages;
 };
diff --git a/indra/newview/lltoolmorph.cpp b/indra/newview/lltoolmorph.cpp
index 22e15dcff25762e379759b4ecd5d88b4a4340bee..c1dc1de5e5f4c4fe683529e08b8e891304168839 100644
--- a/indra/newview/lltoolmorph.cpp
+++ b/indra/newview/lltoolmorph.cpp
@@ -49,7 +49,6 @@
 #include "lldrawable.h"
 #include "lldrawpoolavatar.h"
 #include "llface.h"
-#include "llfloatercustomize.h"
 #include "llmorphview.h"
 #include "llresmgr.h"
 #include "llselectmgr.h"
diff --git a/indra/newview/llurldispatcher.cpp b/indra/newview/llurldispatcher.cpp
index 9efa6c410838fa998e1d1003a5645dfe582d8cd6..cbaa7248a28cafcfdd7d6ffd859fd9f739649d0b 100644
--- a/indra/newview/llurldispatcher.cpp
+++ b/indra/newview/llurldispatcher.cpp
@@ -215,7 +215,8 @@ void LLURLDispatcherImpl::regionHandleCallback(U64 region_handle, const LLSLURL&
 		LLSD args;
 		args["SLURL"] = slurl.getLocationString();
 		args["CURRENT_GRID"] = LLGridManager::getInstance()->getGridLabel();
-		LLSD grid_info = LLGridManager::getInstance()->getGridInfo(slurl.getGrid());
+		LLSD grid_info;
+		LLGridManager::getInstance()->getGridInfo(slurl.getGrid(), grid_info);
 		
 		if(grid_info.has(GRID_LABEL_VALUE))
 		{
diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp
index f0532d5a31aac1647c31c258a5e34a39f413ac5c..e2be49e4cc6cd70246d2599f36f5c0ec0fedd47e 100644
--- a/indra/newview/llviewerinventory.cpp
+++ b/indra/newview/llviewerinventory.cpp
@@ -61,9 +61,9 @@
 #include "llviewerwindow.h"
 #include "lltrans.h"
 #include "llappearancemgr.h"
-#include "llfloatercustomize.h"
 #include "llcommandhandler.h"
 #include "llviewermessage.h"
+#include "llsidepanelappearance.h"
 
 ///----------------------------------------------------------------------------
 /// Helper class to store special inventory item names 
@@ -880,12 +880,14 @@ void WearOnAvatarCallback::fire(const LLUUID& inv_item)
 void ModifiedCOFCallback::fire(const LLUUID& inv_item)
 {
 	LLAppearanceMgr::instance().updateAppearanceFromCOF();
-	if( CAMERA_MODE_CUSTOMIZE_AVATAR == gAgentCamera.getCameraMode() )
+	// TODO: camera mode may not be changed if a debug setting is tweaked
+	if( gAgentCamera.cameraCustomizeAvatar() )
 	{
 		// If we're in appearance editing mode, the current tab may need to be refreshed
-		if (gFloaterCustomize)
+		LLSidepanelAppearance *panel = dynamic_cast<LLSidepanelAppearance*>(LLSideTray::getInstance()->getPanel("sidepanel_appearance"));
+		if (panel)
 		{
-			gFloaterCustomize->switchToDefaultSubpart();
+			panel->showDefaultSubpart();
 		}
 	}
 }
@@ -1580,7 +1582,6 @@ LLWearableType::EType LLViewerInventoryItem::getWearableType() const
 {
 	if (!isWearableType())
 	{
-		llwarns << "item is not a wearable" << llendl;
 		return LLWearableType::WT_INVALID;
 	}
 	return LLWearableType::EType(getFlags() & LLInventoryItemFlags::II_FLAGS_WEARABLES_MASK);
diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp
index e5c5a607dd8902098e95c07bf687bd65b39daf1a..14e58f416766c75c2d60974e98e78021012f23ab 100644
--- a/indra/newview/llviewermedia.cpp
+++ b/indra/newview/llviewermedia.cpp
@@ -2795,42 +2795,6 @@ bool LLViewerMediaImpl::isPlayable() const
 	return false;
 }
 
-////////////////////////////////////////////////////////////////////////////////
-// static 
-bool LLViewerMediaImpl::onClickLinkExternalTarget(const LLSD& notification, const LLSD& response )
-{
-	S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
-	if ( 0 == option )
-	{
-		LLSD payload = notification["payload"];
-		std::string url = payload["url"].asString();
-		S32 target_type = payload["target_type"].asInteger();
-		clickLinkWithTarget(url, target_type);
-	}
-	return false;
-}
-
-
-////////////////////////////////////////////////////////////////////////////////
-// static 
-void LLViewerMediaImpl::clickLinkWithTarget(const std::string& url, const S32& target_type )
-{
-	if (target_type == LLPluginClassMedia::TARGET_EXTERNAL)
-	{
-		// load target in an external browser
-		LLWeb::loadURLExternal(url);
-	}
-	else if (target_type == LLPluginClassMedia::TARGET_BLANK)
-	{
-		// load target in the user's preferred browser
-		LLWeb::loadURL(url);
-	}
-	else {
-		// unsupported link target - shouldn't happen
-		LL_WARNS("LinkTarget") << "Unsupported link target type" << LL_ENDL;
-	}
-}
-
 //////////////////////////////////////////////////////////////////////////////////////////
 void LLViewerMediaImpl::handleMediaEvent(LLPluginClassMedia* plugin, LLPluginClassMediaOwner::EMediaEvent event)
 {
@@ -2851,21 +2815,23 @@ void LLViewerMediaImpl::handleMediaEvent(LLPluginClassMedia* plugin, LLPluginCla
 			std::string url = plugin->getClickURL();
 			U32 target_type = plugin->getClickTargetType();
 			
-			// is there is a target specified for the link?
-			if (target_type == LLPluginClassMedia::TARGET_EXTERNAL ||
-				target_type == LLPluginClassMedia::TARGET_BLANK )
+			switch (target_type)
 			{
-				if (gSavedSettings.getBOOL("UseExternalBrowser"))
-				{
-					LLSD payload;
-					payload["url"] = url;
-					payload["target_type"] = LLSD::Integer(target_type);
-					LLNotificationsUtil::add( "WebLaunchExternalTarget", LLSD(), payload, onClickLinkExternalTarget);
-				}
-				else
-				{
-					clickLinkWithTarget(url, target_type);
-				}
+			case LLPluginClassMedia::TARGET_EXTERNAL:
+				// force url to external browser
+				LLWeb::loadURLExternal(url);
+				break;
+			case LLPluginClassMedia::TARGET_BLANK:
+				// open in SL media browser or external browser based on user pref
+				LLWeb::loadURL(url);
+				break;
+			case LLPluginClassMedia::TARGET_NONE:
+				// ignore this click and let media plugin handle it
+				break;
+			case LLPluginClassMedia::TARGET_OTHER:
+				LL_WARNS("LinkTarget") << "Unsupported link target type" << LL_ENDL;
+				break;
+			default: break;
 			}
 		};
 		break;
diff --git a/indra/newview/llviewermedia.h b/indra/newview/llviewermedia.h
index 754d0851c361692dbd3a35aa6d0695aa02d0e3ba..8626f4469e332fcda197cc801bf55db2d68960f0 100644
--- a/indra/newview/llviewermedia.h
+++ b/indra/newview/llviewermedia.h
@@ -391,8 +391,6 @@ class LLViewerMediaImpl
 	bool shouldShowBasedOnClass() const;
 	static bool isObjectAttachedToAnotherAvatar(LLVOVolume *obj);
 	static bool isObjectInAgentParcel(LLVOVolume *obj);
-	static bool onClickLinkExternalTarget( const LLSD&, const LLSD& );
-	static void clickLinkWithTarget(const std::string& url, const S32& target_type );
 	
 private:
 	// a single media url with some data and an impl.
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index d0ac103f5654e103c8dd221f50779a0557e2a379..69352e6685c25def809808351ffc5133c689a3ec 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -54,7 +54,6 @@
 #include "llfloaterbuy.h"
 #include "llfloaterbuycontents.h"
 #include "llbuycurrencyhtml.h"
-#include "llfloatercustomize.h"
 #include "llfloatergodtools.h"
 #include "llfloaterinventory.h"
 #include "llfloaterland.h"
@@ -3736,17 +3735,15 @@ void reset_view_final( BOOL proceed );
 
 void handle_reset_view()
 {
-	if( (CAMERA_MODE_CUSTOMIZE_AVATAR == gAgentCamera.getCameraMode()) && gFloaterCustomize )
+	if (gAgentCamera.cameraCustomizeAvatar())
 	{
-		// Show dialog box if needed.
-		gFloaterCustomize->askToSaveIfDirty( reset_view_final );
-	}
-	else
-	{
-		gAgentCamera.switchCameraPreset(CAMERA_PRESET_REAR_VIEW);
-		reset_view_final( TRUE );
-		LLFloaterCamera::resetCameraMode();
+		// switching to outfit selector should automagically save any currently edited wearable
+		LLSideTray::getInstance()->showPanel("sidepanel_appearance", LLSD().with("type", "my_outfits"));
 	}
+
+	gAgentCamera.switchCameraPreset(CAMERA_PRESET_REAR_VIEW);
+	reset_view_final( TRUE );
+	LLFloaterCamera::resetCameraMode();
 }
 
 class LLViewResetView : public view_listener_t
diff --git a/indra/newview/llviewernetwork.cpp b/indra/newview/llviewernetwork.cpp
index c76eee80f79cd293f07b87c060f0dee180a9aedf..fec112b9e7e6c3b9235a6c1f0fee3add1c6cc512 100644
--- a/indra/newview/llviewernetwork.cpp
+++ b/indra/newview/llviewernetwork.cpp
@@ -226,11 +226,11 @@ void LLGridManager::initialize(const std::string& grid_file)
 					LLSD grid = grid_itr->second;
 					// TODO:  Make sure gridfile specified label is not 
 					// a system grid label
-					LL_INFOS("GridManager") << "reading: " << key_name << LL_ENDL;
+					LL_DEBUGS("GridManager") << "reading: " << key_name << LL_ENDL;
 					if (mGridList.has(key_name) &&
 						mGridList[key_name].has(GRID_IS_SYSTEM_GRID_VALUE))
 					{
-						LL_INFOS("GridManager") << "Cannot override grid " << key_name << " as it's a system grid" << LL_ENDL;
+						LL_DEBUGS("GridManager") << "Cannot override grid " << key_name << " as it's a system grid" << LL_ENDL;
 						// If the system grid does exist in the grids file, and it's marked as a favorite, set it as a favorite.
 						if(grid_itr->second.has(GRID_IS_FAVORITE_VALUE) && grid_itr->second[GRID_IS_FAVORITE_VALUE].asBoolean() )
 						{
@@ -242,7 +242,7 @@ void LLGridManager::initialize(const std::string& grid_file)
 						try
 						{
 							addGrid(grid);
-							LL_INFOS("GridManager") << "Added grid: " << key_name << LL_ENDL;
+							LL_DEBUGS("GridManager") << "Added grid: " << key_name << LL_ENDL;
 						}
 						catch (...)
 						{
@@ -260,84 +260,60 @@ void LLGridManager::initialize(const std::string& grid_file)
 	std::string cmd_line_grid = gSavedSettings.getString("CmdLineGridChoice");
 	if(!cmd_line_grid.empty())
 	{
+		// try to find the grid assuming the command line parameter is
+		// the case-insensitive 'label' of the grid.  ie 'Agni'
 		mGrid = getGridByLabel(cmd_line_grid);
+		if(mGrid.empty())
+		{
+			// if we couldn't find it, assume the
+			// requested grid is the actual grid 'name' or index,
+			// which would be the dns name of the grid (for non
+			// linden hosted grids)
+			// If the grid isn't there, that's ok, as it will be
+			// automatically added later.
+			mGrid = cmd_line_grid;
+		}
+		
+	}
+	else
+	{
+		// if a grid was not passed in via the command line, grab it from the CurrentGrid setting.
+		// if there's no current grid, that's ok as it'll be either set by the value passed
+		// in via the login uri if that's specified, or will default to maingrid
+		mGrid = gSavedSettings.getString("CurrentGrid");
 	}
-	LL_INFOS("GridManager") << "Grid Name: " << mGrid << LL_ENDL;		
 	
-	// If a command line login URI was passed in, so we should add the command
-	// line grid to the list of grids
-
-	LLSD cmd_line_login_uri = gSavedSettings.getLLSD("CmdLineLoginURI");
-	if (cmd_line_login_uri.isString())
+	if(mGrid.empty())
 	{
-		LL_INFOS("GridManager") << "adding cmd line login uri" << LL_ENDL;
-		// grab the other related URI values
-		std::string cmd_line_helper_uri = gSavedSettings.getString("CmdLineHelperURI");
-		std::string cmd_line_login_page = gSavedSettings.getString("LoginPage");
+		// no grid was specified so default to maingrid
+		LL_DEBUGS("GridManager") << "Setting grid to MAINGRID as no grid has been specified " << LL_ENDL;
+		mGrid = MAINGRID;
 		
-		// we've a cmd line login, so add a grid for the command line,
-		// overwriting any existing grids
-		LLSD grid = LLSD::emptyMap();
-		grid[GRID_LOGIN_URI_VALUE] = LLSD::emptyArray();
-		grid[GRID_LOGIN_URI_VALUE].append(cmd_line_login_uri);
-		LL_INFOS("GridManager") << "cmd line login uri: " << cmd_line_login_uri.asString() << LL_ENDL;
-		LLURI uri(cmd_line_login_uri.asString());
-		if (mGrid.empty())
-		{
-			// if a grid name was not passed in via the command line,
-			// then set the grid name based on the hostname of the 
-			// login uri
-			mGrid = uri.hostName();
-		}
-
-		grid[GRID_VALUE] = mGrid;
-
-		if (mGridList.has(mGrid) && mGridList[mGrid].has(GRID_LABEL_VALUE))
-		{
-			grid[GRID_LABEL_VALUE] = mGridList[mGrid][GRID_LABEL_VALUE];
-		}
-		else
-		{
-			grid[GRID_LABEL_VALUE] = mGrid;			
-		}
-		if(!cmd_line_helper_uri.empty())
-		{
-			grid[GRID_HELPER_URI_VALUE] = cmd_line_helper_uri;
-		}
-
-		if(!cmd_line_login_page.empty())
-		{
-			grid[GRID_LOGIN_PAGE_VALUE] = cmd_line_login_page;
-		}
-		// if the login page, helper URI value, and so on are not specified,
-		// add grid will generate them.
-
-		// Also, we will override a system grid if values are passed in via the command
-		// line, for testing.  These values will not be remembered though.
-		if (mGridList.has(mGrid) && mGridList[mGrid].has(GRID_IS_SYSTEM_GRID_VALUE))
-		{
-			grid[GRID_IS_SYSTEM_GRID_VALUE] = TRUE;
-		}
-		addGrid(grid);
 	}
 	
-	// if a grid was not passed in via the command line, grab it from the CurrentGrid setting.
-	if (mGrid.empty())
+	// generate a 'grid list' entry for any command line parameter overrides
+	// or setting overides that we'll add to the grid list or override
+	// any grid list entries with.
+	LLSD grid = LLSD::emptyMap();	
+	
+	if(mGridList.has(mGrid))
 	{
-
-		mGrid = gSavedSettings.getString("CurrentGrid");
+		grid = mGridList[mGrid];
 	}
-
-	if (mGrid.empty() || !mGridList.has(mGrid))
+	else
 	{
-		// the grid name was empty, or the grid isn't actually in the list, then set it to the
-		// appropriate default.
-		LL_INFOS("GridManager") << "Resetting grid as grid name " << mGrid << " is not in the list" << LL_ENDL;
-		mGrid = MAINGRID;
+		grid[GRID_VALUE] = mGrid;
+		// add the grid with the additional values, or update the
+		// existing grid if it exists with the given values
+		addGrid(grid);		
 	}
-	LL_INFOS("GridManager") << "Selected grid is " << mGrid << LL_ENDL;		
-	gSavedSettings.setString("CurrentGrid", mGrid);
 
+	LL_DEBUGS("GridManager") << "Selected grid is " << mGrid << LL_ENDL;		
+	setGridChoice(mGrid);
+	if(mGridList[mGrid][GRID_LOGIN_URI_VALUE].isArray())
+	{
+		llinfos << "is array" << llendl;
+	}
 }
 
 LLGridManager::~LLGridManager()
@@ -345,6 +321,36 @@ LLGridManager::~LLGridManager()
 	saveFavorites();
 }
 
+void LLGridManager::getGridInfo(const std::string &grid, LLSD& grid_info)
+{
+	
+	grid_info = mGridList[grid]; 
+	
+	// override any grid data with the command line info.
+	
+	LLSD cmd_line_login_uri = gSavedSettings.getLLSD("CmdLineLoginURI");
+	if (cmd_line_login_uri.isString())
+	{	
+		grid_info[GRID_LOGIN_URI_VALUE] = LLSD::emptyArray();
+		grid_info[GRID_LOGIN_URI_VALUE].append(cmd_line_login_uri);
+	}
+	
+	// override the helper uri if it was passed in
+	std::string cmd_line_helper_uri = gSavedSettings.getString("CmdLineHelperURI");
+	if(!cmd_line_helper_uri.empty())
+	{
+		grid_info[GRID_HELPER_URI_VALUE] = cmd_line_helper_uri;	
+	}
+	
+	// override the login page if it was passed in
+	std::string cmd_line_login_page = gSavedSettings.getString("LoginPage");
+	if(!cmd_line_login_page.empty())
+	{
+		grid_info[GRID_LOGIN_PAGE_VALUE] = cmd_line_login_page;
+	}	
+}
+
+
 //
 // LLGridManager::addGrid - add a grid to the grid list, populating the needed values
 // if they're not populated yet.
@@ -401,7 +407,7 @@ void LLGridManager::addGrid(LLSD& grid_data)
 			grid_data[GRID_LOGIN_IDENTIFIER_TYPES].append(CRED_IDENTIFIER_TYPE_ACCOUNT);
 		}
 		
-		LL_INFOS("GridManager") << "ADDING: " << grid << LL_ENDL;
+		LL_DEBUGS("GridManager") << "ADDING: " << grid << LL_ENDL;
 		mGridList[grid] = grid_data;		
 	}
 }
@@ -467,6 +473,7 @@ std::map<std::string, std::string> LLGridManager::getKnownGrids(bool favorite_on
 	return result;
 }
 
+
 void LLGridManager::setGridChoice(const std::string& grid)
 {
 	// Set the grid choice based on a string.
@@ -477,35 +484,37 @@ void LLGridManager::setGridChoice(const std::string& grid)
 
 	// loop through.  We could do just a hash lookup but we also want to match
 	// on label
-	for(LLSD::map_iterator grid_iter = mGridList.beginMap();
-		grid_iter != mGridList.endMap();
-		grid_iter++) 
+	std::string grid_name = grid;
+	if(!mGridList.has(grid_name))
 	{
-		if((grid == grid_iter->first) || 
-		   (grid == grid_iter->second[GRID_LABEL_VALUE].asString()))
-		{
-			mGrid = grid_iter->second[GRID_VALUE].asString();
-			gSavedSettings.setString("CurrentGrid", grid_iter->second[GRID_VALUE]);			
-			return; 
-
-		}
+		// case insensitive
+		grid_name = getGridByLabel(grid);
+	}
+	
+	if(grid_name.empty())
+	{
+		// the grid was not in the list of grids.
+		LLSD grid_data = LLSD::emptyMap();
+		grid_data[GRID_VALUE] = grid;
+		addGrid(grid_data);		
 	}
-	LLSD grid_data = LLSD::emptyMap();
-	grid_data[GRID_VALUE] = grid;
-	addGrid(grid_data);
 	mGrid = grid;
 	gSavedSettings.setString("CurrentGrid", grid);
 }
 
-std::string LLGridManager::getGridByLabel( const std::string &grid_label)
+std::string LLGridManager::getGridByLabel( const std::string &grid_label, bool case_sensitive)
 {
 	for(LLSD::map_iterator grid_iter = mGridList.beginMap();
 		grid_iter != mGridList.endMap();
 		grid_iter++) 
 	{
-		if (grid_iter->second.has(GRID_LABEL_VALUE) && (grid_iter->second[GRID_LABEL_VALUE].asString() == grid_label))
+		if (grid_iter->second.has(GRID_LABEL_VALUE))
 		{
-			return grid_iter->first;
+			if (0 == (case_sensitive?LLStringUtil::compareStrings(grid_label, grid_iter->second[GRID_LABEL_VALUE].asString()):
+				LLStringUtil::compareInsensitive(grid_label, grid_iter->second[GRID_LABEL_VALUE].asString())))
+			{
+				return grid_iter->first;
+			}
 		}
 	}
 	return std::string();
@@ -514,6 +523,12 @@ std::string LLGridManager::getGridByLabel( const std::string &grid_label)
 void LLGridManager::getLoginURIs(std::vector<std::string>& uris)
 {
 	uris.clear();
+	LLSD cmd_line_login_uri = gSavedSettings.getLLSD("CmdLineLoginURI");
+	if (cmd_line_login_uri.isString())
+	{	
+		uris.push_back(cmd_line_login_uri);
+		return;
+	}
 	for (LLSD::array_iterator llsd_uri = mGridList[mGrid][GRID_LOGIN_URI_VALUE].beginArray();
 		 llsd_uri != mGridList[mGrid][GRID_LOGIN_URI_VALUE].endArray();
 		 llsd_uri++)
@@ -522,6 +537,28 @@ void LLGridManager::getLoginURIs(std::vector<std::string>& uris)
 	}
 }
 
+std::string LLGridManager::getHelperURI() 
+{
+	std::string cmd_line_helper_uri = gSavedSettings.getString("CmdLineHelperURI");
+	if(!cmd_line_helper_uri.empty())
+	{
+		return cmd_line_helper_uri;	
+	}
+	return mGridList[mGrid][GRID_HELPER_URI_VALUE];
+}
+
+std::string LLGridManager::getLoginPage() 
+{
+	// override the login page if it was passed in
+	std::string cmd_line_login_page = gSavedSettings.getString("LoginPage");
+	if(!cmd_line_login_page.empty())
+	{
+		return cmd_line_login_page;
+	}	
+	
+	return mGridList[mGrid][GRID_LOGIN_PAGE_VALUE];
+}
+
 bool LLGridManager::isInProductionGrid()
 {
 	// *NOTE:Mani This used to compare GRID_INFO_AGNI to gGridChoice,
diff --git a/indra/newview/llviewernetwork.h b/indra/newview/llviewernetwork.h
index 0271e7a7a559305d134e869fe308f4091ddfe34c..8c3a15b7cf08bcaea86a51c2bde3a1b69b35c116 100644
--- a/indra/newview/llviewernetwork.h
+++ b/indra/newview/llviewernetwork.h
@@ -89,17 +89,7 @@ class LLGridManager : public LLSingleton<LLGridManager>
 	// by default only return the user visible grids
 	std::map<std::string, std::string> getKnownGrids(bool favorites_only=FALSE);
 	
-	LLSD getGridInfo(const std::string& grid)
-	{
-		if(mGridList.has(grid))
-		{
-			return mGridList[grid];
-		}
-		else
-		{
-			return LLSD();
-		}
-	}
+	void getGridInfo(const std::string& grid, LLSD &grid_info);
 	
 	// current grid management
 
@@ -112,8 +102,8 @@ class LLGridManager : public LLSingleton<LLGridManager>
 	std::string getGridLabel() { return mGridList[mGrid][GRID_LABEL_VALUE]; } 	
 	std::string getGrid() const { return mGrid; }
 	void getLoginURIs(std::vector<std::string>& uris);
-	std::string getHelperURI() {return mGridList[mGrid][GRID_HELPER_URI_VALUE];}
-	std::string getLoginPage() {return mGridList[mGrid][GRID_LOGIN_PAGE_VALUE];}
+	std::string getHelperURI();
+	std::string getLoginPage();
 	std::string getGridLoginID() { return mGridList[mGrid][GRID_ID_VALUE]; }	
 	std::string getLoginPage(const std::string& grid) { return mGridList[grid][GRID_LOGIN_PAGE_VALUE]; }
 	void        getLoginIdentifierTypes(LLSD& idTypes) { idTypes = mGridList[mGrid][GRID_LOGIN_IDENTIFIER_TYPES]; }
@@ -125,9 +115,9 @@ class LLGridManager : public LLSingleton<LLGridManager>
 	std::string getAppSLURLBase(const std::string& grid);
 	std::string getAppSLURLBase() { return getAppSLURLBase(mGrid); }	
 	
-	LLSD getGridInfo() { return mGridList[mGrid]; }
+	void getGridInfo(LLSD &grid_info) { getGridInfo(mGrid, grid_info); }
 	
-	std::string getGridByLabel( const std::string &grid_label);
+	std::string getGridByLabel( const std::string &grid_label, bool case_sensitive = false);
 	
 	bool isSystemGrid(const std::string& grid) 
 	{ 
diff --git a/indra/newview/llviewertexture.h b/indra/newview/llviewertexture.h
index 74c46f30703f54a339355d7cef8934a09f06558e..1bd4cc793d8624e9d6a337a1c387443bbe6bdb2d 100644
--- a/indra/newview/llviewertexture.h
+++ b/indra/newview/llviewertexture.h
@@ -293,8 +293,8 @@ class LLViewerTexture : public LLTexture
 		INACTIVE,            //not be used for the last certain period (i.e., 30 seconds).
 		ACTIVE,              //just being used, can become inactive if not being used for a certain time (10 seconds).
 		NO_DELETE = 99       //stay in memory, can not be removed.
-	} LLGLTexureState;
-	LLGLTexureState  mTextureState ;
+	} LLGLTextureState;
+	LLGLTextureState  mTextureState ;
 
 public:
 	static const U32 sCurrentFileVersion;	
diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp
index d8918bdb73f09fcf47474ac2a8f2f10f160d14da..1e3311dafeb77585cff6675b17f06963fb4a64fc 100644
--- a/indra/newview/llviewertexturelist.cpp
+++ b/indra/newview/llviewertexturelist.cpp
@@ -478,7 +478,7 @@ LLViewerFetchedTexture* LLViewerTextureList::createImage(const LLUUID &image_id,
 	}
 	else
 	{
-		//by default, the texure can not be removed from memory even if it is not used.
+		//by default, the texture can not be removed from memory even if it is not used.
 		//here turn this off
 		//if this texture should be set to NO_DELETE, call setNoDelete() afterwards.
 		imagep->forceActive() ;
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 9773275ede27ce4ea3b522befd5f073e0611d038..d91f232f0e9f0f1fae38d508b4484fcd468b8019 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -106,7 +106,6 @@
 #include "llfloaterbuildoptions.h"
 #include "llfloaterbuyland.h"
 #include "llfloatercamera.h"
-#include "llfloatercustomize.h"
 #include "llfloaterland.h"
 #include "llfloaterinspect.h"
 #include "llfloatermap.h"
@@ -1433,6 +1432,7 @@ LLViewerWindow::LLViewerWindow(
 
 	if (LLFeatureManager::getInstance()->isSafe()
 		|| (gSavedSettings.getS32("LastFeatureVersion") != LLFeatureManager::getInstance()->getVersion())
+		|| (gSavedSettings.getS32("LastGPUClass") != LLFeatureManager::getInstance()->getGPUClass())
 		|| (gSavedSettings.getBOOL("ProbeHardwareOnStartup")))
 	{
 		LLFeatureManager::getInstance()->applyRecommendedSettings();
@@ -4551,7 +4551,7 @@ void LLViewerWindow::restoreGL(const std::string& progress_message)
 		
 		gResizeScreenTexture = TRUE;
 
-		if (gFloaterCustomize && gFloaterCustomize->getVisible())
+		if (gAgentCamera.cameraCustomizeAvatar())
 		{
 			LLVisualParamHint::requestHintUpdates();
 		}
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index a72d7f9227225012525d6d66b511005a209c4d9f..7a232afba6fde88fc29091b8137159fcc20a16ed 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -95,6 +95,12 @@
 #include "llvoiceclient.h"
 #include "llvoicevisualizer.h" // Ventrella
 
+#include "lldebugmessagebox.h"
+extern F32 SPEED_ADJUST_MAX;
+extern F32 SPEED_ADJUST_MAX_SEC;
+extern F32 ANIM_SPEED_MAX;
+extern F32 ANIM_SPEED_MIN;
+
 #if LL_MSVC
 // disable boost::lexical_cast warning
 #pragma warning (disable:4702)
@@ -1138,6 +1144,17 @@ void LLVOAvatar::initClass()
 	{
 		llerrs << "Error parsing skeleton node in avatar XML file: " << skeleton_path << llendl;
 	}
+
+	gAnimLibrary.animStateSetString(ANIM_AGENT_BODY_NOISE,"body_noise");
+	gAnimLibrary.animStateSetString(ANIM_AGENT_BREATHE_ROT,"breathe_rot");
+	gAnimLibrary.animStateSetString(ANIM_AGENT_EDITING,"editing");
+	gAnimLibrary.animStateSetString(ANIM_AGENT_EYE,"eye");
+	gAnimLibrary.animStateSetString(ANIM_AGENT_FLY_ADJUST,"fly_adjust");
+	gAnimLibrary.animStateSetString(ANIM_AGENT_HAND_MOTION,"hand_motion");
+	gAnimLibrary.animStateSetString(ANIM_AGENT_HEAD_ROT,"head_rot");
+	gAnimLibrary.animStateSetString(ANIM_AGENT_PELVIS_FIX,"pelvis_fix");
+	gAnimLibrary.animStateSetString(ANIM_AGENT_TARGET,"target");
+	gAnimLibrary.animStateSetString(ANIM_AGENT_WALK_ADJUST,"walk_adjust");
 }
 
 
@@ -1249,7 +1266,11 @@ void LLVOAvatar::initInstance(void)
 		registerMotion( ANIM_AGENT_EXPRESS_TOOTHSMILE,		LLEmote::create );
 		registerMotion( ANIM_AGENT_EXPRESS_WINK,			LLEmote::create );
 		registerMotion( ANIM_AGENT_EXPRESS_WORRY,			LLEmote::create );
+		registerMotion( ANIM_AGENT_FEMALE_RUN_NEW,			LLKeyframeWalkMotion::create );
+		registerMotion( ANIM_AGENT_FEMALE_WALK,				LLKeyframeWalkMotion::create );
+		registerMotion( ANIM_AGENT_FEMALE_WALK_NEW,			LLKeyframeWalkMotion::create );
 		registerMotion( ANIM_AGENT_RUN,						LLKeyframeWalkMotion::create );
+		registerMotion( ANIM_AGENT_RUN_NEW,					LLKeyframeWalkMotion::create );
 		registerMotion( ANIM_AGENT_STAND,					LLKeyframeStandMotion::create );
 		registerMotion( ANIM_AGENT_STAND_1,					LLKeyframeStandMotion::create );
 		registerMotion( ANIM_AGENT_STAND_2,					LLKeyframeStandMotion::create );
@@ -1259,6 +1280,7 @@ void LLVOAvatar::initInstance(void)
 		registerMotion( ANIM_AGENT_TURNLEFT,				LLKeyframeWalkMotion::create );
 		registerMotion( ANIM_AGENT_TURNRIGHT,				LLKeyframeWalkMotion::create );
 		registerMotion( ANIM_AGENT_WALK,					LLKeyframeWalkMotion::create );
+		registerMotion( ANIM_AGENT_WALK_NEW,				LLKeyframeWalkMotion::create );
 		
 		// motions without a start/stop bit
 		registerMotion( ANIM_AGENT_BODY_NOISE,				LLBodyNoiseMotion::create );
@@ -2155,6 +2177,33 @@ S32 LLVOAvatar::setTETexture(const U8 te, const LLUUID& uuid)
 static LLFastTimer::DeclareTimer FTM_AVATAR_UPDATE("Update Avatar");
 static LLFastTimer::DeclareTimer FTM_JOINT_UPDATE("Update Joints");
 
+//------------------------------------------------------------------------
+// LLVOAvatar::dumpAnimationState()
+//------------------------------------------------------------------------
+void LLVOAvatar::dumpAnimationState()
+{
+	llinfos << "==============================================" << llendl;
+	for (LLVOAvatar::AnimIterator it = mSignaledAnimations.begin(); it != mSignaledAnimations.end(); ++it)
+	{
+		LLUUID id = it->first;
+		std::string playtag = "";
+		if (mPlayingAnimations.find(id) != mPlayingAnimations.end())
+		{
+			playtag = "*";
+		}
+		llinfos << gAnimLibrary.animationName(id) << playtag << llendl;
+	}
+	for (LLVOAvatar::AnimIterator it = mPlayingAnimations.begin(); it != mPlayingAnimations.end(); ++it)
+	{
+		LLUUID id = it->first;
+		bool is_signaled = mSignaledAnimations.find(id) != mSignaledAnimations.end();
+		if (!is_signaled)
+		{
+			llinfos << gAnimLibrary.animationName(id) << "!S" << llendl;
+		}
+	}
+}
+
 //------------------------------------------------------------------------
 // idleUpdate()
 //------------------------------------------------------------------------
@@ -2258,6 +2307,7 @@ BOOL LLVOAvatar::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
 	idleUpdateNameTag( root_pos_last );
 	idleUpdateRenderCost();
 	idleUpdateTractorBeam();
+
 	return TRUE;
 }
 
@@ -4434,34 +4484,79 @@ void LLVOAvatar::resetAnimations()
 	flushAllMotions();
 }
 
-//-----------------------------------------------------------------------------
-// startMotion()
-// id is the asset if of the animation to start
-// time_offset is the offset into the animation at which to start playing
-//-----------------------------------------------------------------------------
-BOOL LLVOAvatar::startMotion(const LLUUID& id, F32 time_offset)
+// Override selectively based on avatar sex and whether we're using new
+// animations.
+LLUUID LLVOAvatar::remapMotionID(const LLUUID& id)
 {
-	LLMemType mt(LLMemType::MTYPE_AVATAR);
-	
+	BOOL use_new_walk_run = gSavedSettings.getBOOL("UseNewWalkRun");
+	LLUUID result = id;
+
 	// start special case female walk for female avatars
 	if (getSex() == SEX_FEMALE)
 	{
 		if (id == ANIM_AGENT_WALK)
 		{
-			return LLCharacter::startMotion(ANIM_AGENT_FEMALE_WALK, time_offset);
+			if (use_new_walk_run)
+				result = ANIM_AGENT_FEMALE_WALK_NEW;
+			else
+				result = ANIM_AGENT_FEMALE_WALK;
+		}
+		else if (id == ANIM_AGENT_RUN)
+		{
+			// There is no old female run animation, so only override
+			// in one case.
+			if (use_new_walk_run)
+				result = ANIM_AGENT_FEMALE_RUN_NEW;
 		}
 		else if (id == ANIM_AGENT_SIT)
 		{
-			return LLCharacter::startMotion(ANIM_AGENT_SIT_FEMALE, time_offset);
+			result = ANIM_AGENT_SIT_FEMALE;
 		}
 	}
+	else
+	{
+		// Male avatar.
+		if (id == ANIM_AGENT_WALK)
+		{
+			if (use_new_walk_run)
+				result = ANIM_AGENT_WALK_NEW;
+		}
+		else if (id == ANIM_AGENT_RUN)
+		{
+			if (use_new_walk_run)
+				result = ANIM_AGENT_RUN_NEW;
+		}
+	
+	}
+
+	return result;
 
-	if (isSelf() && id == ANIM_AGENT_AWAY)
+}
+
+//-----------------------------------------------------------------------------
+// startMotion()
+// id is the asset if of the animation to start
+// time_offset is the offset into the animation at which to start playing
+//-----------------------------------------------------------------------------
+BOOL LLVOAvatar::startMotion(const LLUUID& id, F32 time_offset)
+{
+	LLMemType mt(LLMemType::MTYPE_AVATAR);
+
+	lldebugs << "motion requested " << id.asString() << " " << gAnimLibrary.animationName(id) << llendl;
+
+	LLUUID remap_id = remapMotionID(id);
+
+	if (remap_id != id)
+	{
+		lldebugs << "motion resultant " << remap_id.asString() << " " << gAnimLibrary.animationName(remap_id) << llendl;
+	}
+
+	if (isSelf() && remap_id == ANIM_AGENT_AWAY)
 	{
 		gAgent.setAFK();
 	}
 
-	return LLCharacter::startMotion(id, time_offset);
+	return LLCharacter::startMotion(remap_id, time_offset);
 }
 
 //-----------------------------------------------------------------------------
@@ -4469,21 +4564,21 @@ BOOL LLVOAvatar::startMotion(const LLUUID& id, F32 time_offset)
 //-----------------------------------------------------------------------------
 BOOL LLVOAvatar::stopMotion(const LLUUID& id, BOOL stop_immediate)
 {
-	if (isSelf())
-	{
-		gAgent.onAnimStop(id);
-	}
+	lldebugs << "motion requested " << id.asString() << " " << gAnimLibrary.animationName(id) << llendl;
 
-	if (id == ANIM_AGENT_WALK)
+	LLUUID remap_id = remapMotionID(id);
+	
+	if (remap_id != id)
 	{
-		LLCharacter::stopMotion(ANIM_AGENT_FEMALE_WALK, stop_immediate);
+		lldebugs << "motion resultant " << remap_id.asString() << " " << gAnimLibrary.animationName(remap_id) << llendl;
 	}
-	else if (id == ANIM_AGENT_SIT)
+
+	if (isSelf())
 	{
-		LLCharacter::stopMotion(ANIM_AGENT_SIT_FEMALE, stop_immediate);
+		gAgent.onAnimStop(remap_id);
 	}
 
-	return LLCharacter::stopMotion(id, stop_immediate);
+	return LLCharacter::stopMotion(remap_id, stop_immediate);
 }
 
 //-----------------------------------------------------------------------------
@@ -5940,10 +6035,9 @@ void LLVOAvatar::updateRuthTimer(bool loading)
 		mRuthDebugTimer.reset();
 	}
 	
-	const F32 LOADING_TIMEOUT = 120.f;
-	if (mRuthTimer.getElapsedTimeF32() > LOADING_TIMEOUT)
+	const F32 LOADING_TIMEOUT__SECONDS = 120.f;
+	if (mRuthTimer.getElapsedTimeF32() > LOADING_TIMEOUT__SECONDS)
 	{
-		
 		llinfos << "Ruth Timer timeout: Missing texture data for '" << getFullname() << "' "
 				<< "( Params loaded : " << !visualParamWeightsAreDefault() << " ) "
 				<< "( Lower : " << isTextureDefined(TEX_LOWER_BAKED) << " ) "
@@ -7899,7 +7993,7 @@ BOOL LLVOAvatar::isTextureVisible(LLVOAvatarDefines::ETextureIndex type, U32 ind
 		// baked textures can use TE images directly
 		return ((isTextureDefined(type) || isSelf())
 				&& (getTEImage(type)->getID() != IMG_INVISIBLE 
-					|| LLDrawPoolAlpha::sShowDebugAlpha));
+				|| LLDrawPoolAlpha::sShowDebugAlpha));
 	}
 }
 
diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h
index df47e9ba1d3769122e4b009968d09beb4ef01c2c..3c940e03c0915739cfaf9f5ab45f10a6c8cfa96f 100644
--- a/indra/newview/llvoavatar.h
+++ b/indra/newview/llvoavatar.h
@@ -158,12 +158,14 @@ class LLVOAvatar :
 	virtual LLJoint*		getCharacterJoint(U32 num);
 	virtual BOOL			allocateCharacterJoints(U32 num);
 
+	virtual LLUUID			remapMotionID(const LLUUID& id);
 	virtual BOOL			startMotion(const LLUUID& id, F32 time_offset = 0.f);
 	virtual BOOL			stopMotion(const LLUUID& id, BOOL stop_immediate = FALSE);
 	virtual void			stopMotionFromSource(const LLUUID& source_id);
 	virtual void			requestStopMotion(LLMotion* motion);
 	LLMotion*				findMotion(const LLUUID& id) const;
 	void					startDefaultMotions();
+	void					dumpAnimationState();
 
 	virtual LLJoint*		getJoint(const std::string &name);
 	virtual LLJoint*     	getRootJoint() { return &mRoot; }
@@ -920,6 +922,8 @@ class LLVOAvatar :
 	//--------------------------------------------------------------------
 	// Avatar Rez Metrics
 	//--------------------------------------------------------------------
+public:
+	F32				debugGetExistenceTimeElapsedF32() const { return mDebugExistenceTimer.getElapsedTimeF32(); }
 protected:
 	LLFrameTimer	mRuthDebugTimer; // For tracking how long it takes for av to rez
 	LLFrameTimer	mDebugExistenceTimer; // Debugging for how long the avatar has been in memory.
diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp
index a8e2f446c2133c601a91640c8a97d5fac0d8b16d..ce8f64404e494792a6710e2be91022ef826a7726 100644
--- a/indra/newview/llvoavatarself.cpp
+++ b/indra/newview/llvoavatarself.cpp
@@ -137,7 +137,9 @@ LLVOAvatarSelf::LLVOAvatarSelf(const LLUUID& id,
 	mRegionCrossingCount(0)
 {
 	gAgentWearables.setAvatarObject(this);
-	
+
+	mMotionController.mIsSelf = TRUE;
+
 	lldebugs << "Marking avatar as self " << id << llendl;
 }
 
@@ -1300,6 +1302,32 @@ BOOL LLVOAvatarSelf::isLocalTextureDataFinal(const LLTexLayerSet* layerset) cons
 	return FALSE;
 }
 
+BOOL LLVOAvatarSelf::isAllLocalTextureDataFinal() const
+{
+	const U32 override_tex_discard_level = gSavedSettings.getU32("TextureDiscardLevel");
+
+	for (U32 i = 0; i < mBakedTextureDatas.size(); i++)
+	{
+		const LLVOAvatarDictionary::BakedEntry *baked_dict = LLVOAvatarDictionary::getInstance()->getBakedTexture((EBakedTextureIndex)i);
+		for (texture_vec_t::const_iterator local_tex_iter = baked_dict->mLocalTextures.begin();
+			 local_tex_iter != baked_dict->mLocalTextures.end();
+			 ++local_tex_iter)
+		{
+			const ETextureIndex tex_index = *local_tex_iter;
+			const LLWearableType::EType wearable_type = LLVOAvatarDictionary::getTEWearableType(tex_index);
+			const U32 wearable_count = gAgentWearables.getWearableCount(wearable_type);
+			for (U32 wearable_index = 0; wearable_index < wearable_count; wearable_index++)
+			{
+				if (getLocalDiscardLevel(*local_tex_iter, wearable_index) > (S32)(override_tex_discard_level))
+				{
+					return FALSE;
+				}
+			}
+		}
+	}
+	return TRUE;
+}
+
 BOOL LLVOAvatarSelf::isTextureDefined(LLVOAvatarDefines::ETextureIndex type, U32 index) const
 {
 	LLUUID id;
@@ -1337,7 +1365,7 @@ BOOL LLVOAvatarSelf::isTextureVisible(LLVOAvatarDefines::ETextureIndex type, U32
 {
 	if (isIndexBakedTexture(type))
 	{
-		return LLVOAvatar::isTextureVisible(type);
+		return LLVOAvatar::isTextureVisible(type, (U32)0);
 	}
 
 	LLUUID tex_id = getLocalTextureID(type,index);
@@ -1372,7 +1400,7 @@ void LLVOAvatarSelf::requestLayerSetUploads()
 void LLVOAvatarSelf::requestLayerSetUpload(LLVOAvatarDefines::EBakedTextureIndex i)
 {
 	ETextureIndex tex_index = mBakedTextureDatas[i].mTextureIndex;
-	bool  layer_baked = isTextureDefined(tex_index, gAgentWearables.getWearableCount(tex_index));
+	const BOOL layer_baked = isTextureDefined(tex_index, gAgentWearables.getWearableCount(tex_index));
 	if (!layer_baked && mBakedTextureDatas[i].mTexLayerSet)
 	{
 		mBakedTextureDatas[i].mTexLayerSet->requestUpload();
@@ -1389,8 +1417,8 @@ bool LLVOAvatarSelf::hasPendingBakedUploads() const
 {
 	for (U32 i = 0; i < mBakedTextureDatas.size(); i++)
 	{
-		BOOL upload_pending = (mBakedTextureDatas[i].mTexLayerSet && mBakedTextureDatas[i].mTexLayerSet->getComposite()->uploadPending());
-		if (upload_pending)
+		LLTexLayerSet* layerset = mBakedTextureDatas[i].mTexLayerSet;
+		if (layerset && layerset->getComposite() && layerset->getComposite()->uploadPending())
 		{
 			return true;
 		}
@@ -1404,7 +1432,7 @@ void LLVOAvatarSelf::invalidateComposite( LLTexLayerSet* layerset, BOOL upload_r
 	{
 		return;
 	}
-	// llinfos << "LLVOAvatar::invalidComposite() " << layerset->getBodyRegion() << llendl;
+	// llinfos << "LLVOAvatar::invalidComposite() " << layerset->getBodyRegionName() << llendl;
 
 	layerset->requestUpdate();
 	layerset->invalidateMorphMasks();
@@ -1829,6 +1857,74 @@ void LLVOAvatarSelf::debugBakedTextureUpload(EBakedTextureIndex index, BOOL fini
 	mDebugBakedTextureTimes[index][done] = mDebugSelfLoadTimer.getElapsedTimeF32();
 }
 
+const std::string LLVOAvatarSelf::debugDumpLocalTextureDataInfo(const LLTexLayerSet* layerset) const
+{
+	std::string text="";
+
+	text = llformat("[Final:%d Avail:%d] ",isLocalTextureDataFinal(layerset), isLocalTextureDataAvailable(layerset));
+
+	/* if (layerset == mBakedTextureDatas[BAKED_HEAD].mTexLayerSet)
+	   return getLocalDiscardLevel(TEX_HEAD_BODYPAINT) >= 0; */
+	for (LLVOAvatarDictionary::BakedTextures::const_iterator baked_iter = LLVOAvatarDictionary::getInstance()->getBakedTextures().begin();
+		 baked_iter != LLVOAvatarDictionary::getInstance()->getBakedTextures().end();
+		 ++baked_iter)
+	{
+		const EBakedTextureIndex baked_index = baked_iter->first;
+		if (layerset == mBakedTextureDatas[baked_index].mTexLayerSet)
+		{
+			const LLVOAvatarDictionary::BakedEntry *baked_dict = baked_iter->second;
+			text += llformat("[%d] '%s' ( ",baked_index, baked_dict->mName.c_str());
+			for (texture_vec_t::const_iterator local_tex_iter = baked_dict->mLocalTextures.begin();
+				 local_tex_iter != baked_dict->mLocalTextures.end();
+				 ++local_tex_iter)
+			{
+				const ETextureIndex tex_index = *local_tex_iter;
+				const LLWearableType::EType wearable_type = LLVOAvatarDictionary::getTEWearableType(tex_index);
+				const U32 wearable_count = gAgentWearables.getWearableCount(wearable_type);
+				if (wearable_count > 0)
+				{
+					text += LLWearableType::getTypeName(wearable_type) + ":";
+					for (U32 wearable_index = 0; wearable_index < wearable_count; wearable_index++)
+					{
+						const U32 discard_level = getLocalDiscardLevel(tex_index, wearable_index);
+						std::string discard_str = llformat("%d ",discard_level);
+						text += llformat("%d ",discard_level);
+					}
+				}
+			}
+			text += ")";
+			break;
+		}
+	}
+	return text;
+}
+
+const std::string LLVOAvatarSelf::debugDumpAllLocalTextureDataInfo() const
+{
+	std::string text;
+	const U32 override_tex_discard_level = gSavedSettings.getU32("TextureDiscardLevel");
+
+	for (U32 i = 0; i < mBakedTextureDatas.size(); i++)
+	{
+		const LLVOAvatarDictionary::BakedEntry *baked_dict = LLVOAvatarDictionary::getInstance()->getBakedTexture((EBakedTextureIndex)i);
+		BOOL is_texture_final = TRUE;
+		for (texture_vec_t::const_iterator local_tex_iter = baked_dict->mLocalTextures.begin();
+			 local_tex_iter != baked_dict->mLocalTextures.end();
+			 ++local_tex_iter)
+		{
+			const ETextureIndex tex_index = *local_tex_iter;
+			const LLWearableType::EType wearable_type = LLVOAvatarDictionary::getTEWearableType(tex_index);
+			const U32 wearable_count = gAgentWearables.getWearableCount(wearable_type);
+			for (U32 wearable_index = 0; wearable_index < wearable_count; wearable_index++)
+			{
+				is_texture_final &= (getLocalDiscardLevel(*local_tex_iter, wearable_index) <= (S32)(override_tex_discard_level));
+			}
+		}
+		text += llformat("%s:%d ",baked_dict->mName.c_str(),is_texture_final);
+	}
+	return text;
+}
+
 const LLUUID& LLVOAvatarSelf::grabBakedTexture(EBakedTextureIndex baked_index) const
 {
 	if (canGrabBakedTexture(baked_index))
@@ -2010,7 +2106,15 @@ void LLVOAvatarSelf::setNewBakedTexture( ETextureIndex te, const LLUUID& uuid )
 			LLSD args;
 			args["EXISTENCE"] = llformat("%d",(U32)mDebugExistenceTimer.getElapsedTimeF32());
 			args["TIME"] = llformat("%d",(U32)mDebugSelfLoadTimer.getElapsedTimeF32());
-			LLNotificationsUtil::add("AvatarRezSelfNotification",args);
+			if (isAllLocalTextureDataFinal())
+			{
+				LLNotificationsUtil::add("AvatarRezSelfBakedDoneNotification",args);
+			}
+			else
+			{
+				args["STATUS"] = debugDumpAllLocalTextureDataInfo();
+				LLNotificationsUtil::add("AvatarRezSelfBakedUpdateNotification",args);
+			}
 		}
 
 		outputRezDiagnostics();
@@ -2055,6 +2159,18 @@ void LLVOAvatarSelf::outputRezDiagnostics() const
 	{
 		llinfos << "\t\t (" << i << ") \t" << (S32)mDebugBakedTextureTimes[i][0] << " / " << (S32)mDebugBakedTextureTimes[i][1] << llendl;
 	}
+
+	for (LLVOAvatarDefines::LLVOAvatarDictionary::BakedTextures::const_iterator baked_iter = LLVOAvatarDefines::LLVOAvatarDictionary::getInstance()->getBakedTextures().begin();
+		 baked_iter != LLVOAvatarDefines::LLVOAvatarDictionary::getInstance()->getBakedTextures().end();
+		 ++baked_iter)
+	{
+		const LLVOAvatarDefines::EBakedTextureIndex baked_index = baked_iter->first;
+		const LLTexLayerSet *layerset = debugGetLayerSet(baked_index);
+		if (!layerset) continue;
+		const LLTexLayerSetBuffer *layerset_buffer = layerset->getComposite();
+		if (!layerset_buffer) continue;
+		llinfos << layerset_buffer->dumpTextureInfo() << llendl;
+	}
 }
 
 //-----------------------------------------------------------------------------
@@ -2153,7 +2269,6 @@ void LLVOAvatarSelf::forceBakeAllTextures(bool slam_for_debug)
 
 	// Don't know if this is needed
 	updateMeshTextures();
-
 }
 
 //-----------------------------------------------------------------------------
diff --git a/indra/newview/llvoavatarself.h b/indra/newview/llvoavatarself.h
index 189c1ac80805cab0cb0553c7815428baa2791817..e461dc07da80f22cdab83ab974f390e3c6052f62 100644
--- a/indra/newview/llvoavatarself.h
+++ b/indra/newview/llvoavatarself.h
@@ -218,8 +218,6 @@ class LLVOAvatarSelf :
 	static void			processRebakeAvatarTextures(LLMessageSystem* msg, void**);
 protected:
 	/*virtual*/ void	removeMissingBakedTextures();
-private:
-	LLFrameTimer    	mBakeTimeoutTimer;
 
 	//--------------------------------------------------------------------
 	// Layers
@@ -351,18 +349,24 @@ class LLVOAvatarSelf :
 		LLUUID			mAvatarID;
 		LLVOAvatarDefines::ETextureIndex	mIndex;
 	};
-	void debugWearablesLoaded() { mDebugTimeWearablesLoaded = mDebugSelfLoadTimer.getElapsedTimeF32(); }
-	void debugAvatarVisible() { mDebugTimeAvatarVisible = mDebugSelfLoadTimer.getElapsedTimeF32(); }
-	void outputRezDiagnostics() const;
-	void debugBakedTextureUpload(LLVOAvatarDefines::EBakedTextureIndex index, BOOL finished);
-	static void		debugOnTimingLocalTexLoaded(BOOL success, LLViewerFetchedTexture *src_vi, LLImageRaw* src, LLImageRaw* aux_src, S32 discard_level, BOOL final, void* userdata);
+	void 					debugWearablesLoaded() { mDebugTimeWearablesLoaded = mDebugSelfLoadTimer.getElapsedTimeF32(); }
+	void 					debugAvatarVisible() { mDebugTimeAvatarVisible = mDebugSelfLoadTimer.getElapsedTimeF32(); }
+	void 					outputRezDiagnostics() const;
+	void 					debugBakedTextureUpload(LLVOAvatarDefines::EBakedTextureIndex index, BOOL finished);
+	static void				debugOnTimingLocalTexLoaded(BOOL success, LLViewerFetchedTexture *src_vi, LLImageRaw* src, LLImageRaw* aux_src, S32 discard_level, BOOL final, void* userdata);
+
+	BOOL					isAllLocalTextureDataFinal() const;
+
+	const LLTexLayerSet*  	debugGetLayerSet(LLVOAvatarDefines::EBakedTextureIndex index) const { return mBakedTextureDatas[index].mTexLayerSet; }
+	const std::string		debugDumpLocalTextureDataInfo(const LLTexLayerSet* layerset) const; // Lists out state of this particular baked texture layer
+	const std::string		debugDumpAllLocalTextureDataInfo() const; // Lists out which baked textures are at highest LOD
 private:
-	LLFrameTimer    mDebugSelfLoadTimer;
-	F32				mDebugTimeWearablesLoaded;
-	F32 			mDebugTimeAvatarVisible;
-	F32 			mDebugTextureLoadTimes[LLVOAvatarDefines::TEX_NUM_INDICES][MAX_DISCARD_LEVEL+1]; // load time for each texture at each discard level
-	F32 			mDebugBakedTextureTimes[LLVOAvatarDefines::BAKED_NUM_INDICES][2]; // time to start upload and finish upload of each baked texture
-	void			debugTimingLocalTexLoaded(BOOL success, LLViewerFetchedTexture *src_vi, LLImageRaw* src, LLImageRaw* aux_src, S32 discard_level, BOOL final, void* userdata);
+	LLFrameTimer    		mDebugSelfLoadTimer;
+	F32						mDebugTimeWearablesLoaded;
+	F32 					mDebugTimeAvatarVisible;
+	F32 					mDebugTextureLoadTimes[LLVOAvatarDefines::TEX_NUM_INDICES][MAX_DISCARD_LEVEL+1]; // load time for each texture at each discard level
+	F32 					mDebugBakedTextureTimes[LLVOAvatarDefines::BAKED_NUM_INDICES][2]; // time to start upload and finish upload of each baked texture
+	void					debugTimingLocalTexLoaded(BOOL success, LLViewerFetchedTexture *src_vi, LLImageRaw* src, LLImageRaw* aux_src, S32 discard_level, BOOL final, void* userdata);
 
 /**                    Diagnostics
  **                                                                            **
diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp
index 91353281a86719ba44e1eacb84f8e8bd7d897f81..42e44634b66285c29795d633464ca9a6d279d8e8 100644
--- a/indra/newview/llvoiceclient.cpp
+++ b/indra/newview/llvoiceclient.cpp
@@ -81,8 +81,10 @@ std::string LLVoiceClientStatusObserver::status2string(LLVoiceClientStatusObserv
 ///////////////////////////////////////////////////////////////////////////////////////////////
 
 LLVoiceClient::LLVoiceClient()
+	:
+	mVoiceModule(NULL),
+	m_servicePump(NULL)
 {
-	mVoiceModule = NULL;
 }
 
 //---------------------------------------------------
diff --git a/indra/newview/llvoicevivox.cpp b/indra/newview/llvoicevivox.cpp
index 159769134757778d951584fbd64b5da361f8e081..c6c155f0f0fa6368b3b97478e25a7caf80167864 100644
--- a/indra/newview/llvoicevivox.cpp
+++ b/indra/newview/llvoicevivox.cpp
@@ -4088,7 +4088,9 @@ LLVivoxVoiceClient::participantState::participantState(const std::string &uri) :
 	 mLastSpokeTimestamp(0.f), 
 	 mPower(0.f), 
 	 mVolume(LLVoiceClient::VOLUME_DEFAULT), 
+	 mUserVolume(0),
 	 mOnMuteList(false), 
+	 mVolumeSet(false),
 	 mVolumeDirty(false), 
 	 mAvatarIDValid(false),
 	 mIsSelf(false)
@@ -5538,6 +5540,7 @@ LLVivoxVoiceClient::sessionState::sessionState() :
 	mVoiceEnabled(false),
 	mReconnect(false),
 	mVolumeDirty(false),
+	mMuteDirty(false),
 	mParticipantsChanged(false)
 {
 }
diff --git a/indra/newview/llwearable.cpp b/indra/newview/llwearable.cpp
index 10b9a18fa8ef6061cc46f9b18d7b49daedc0572d..9e9b46473e8e758f0c39ffcebfaa5619d28bf243 100644
--- a/indra/newview/llwearable.cpp
+++ b/indra/newview/llwearable.cpp
@@ -33,23 +33,25 @@
 #include "llviewerprecompiledheaders.h"
 
 #include "llagent.h"
+#include "llagentcamera.h"
 #include "llagentwearables.h"
-#include "llfloatercustomize.h"
+#include "lldictionary.h"
 #include "lllocaltextureobject.h"
 #include "llnotificationsutil.h"
 #include "llviewertexturelist.h"
 #include "llinventorymodel.h"
 #include "llinventoryobserver.h"
+#include "llsidepanelappearance.h"
+#include "llsidetray.h"
+#include "lltexlayer.h"
+#include "lltexglobalcolor.h"
+#include "lltrans.h"
 #include "llviewerregion.h"
+#include "llvisualparam.h"
 #include "llvoavatar.h"
 #include "llvoavatarself.h"
 #include "llvoavatardefines.h"
 #include "llwearable.h"
-#include "lldictionary.h"
-#include "lltrans.h"
-#include "lltexlayer.h"
-#include "llvisualparam.h"
-#include "lltexglobalcolor.h"
 
 using namespace LLVOAvatarDefines;
 
@@ -576,14 +578,6 @@ BOOL LLWearable::isDirty() const
 		}
 	}
 
-	//if( gFloaterCustomize )
-	//{
-	//	if( mDescription != gFloaterCustomize->getWearableDescription( mType ) )
-	//	{
-	//		return TRUE;
-	//	}
-	//}
-
 	return FALSE;
 }
 
@@ -705,9 +699,9 @@ void LLWearable::removeFromAvatar( LLWearableType::EType type, BOOL upload_bake
 		}
 	}
 
-	if( gFloaterCustomize )
+	if( gAgentCamera.cameraCustomizeAvatar() )
 	{
-		gFloaterCustomize->setWearable(type, NULL, PERM_ALL, TRUE);
+		LLSideTray::getInstance()->showPanel("sidepanel_appearance", LLSD().with("type", "edit_outfit"));
 	}
 
 	gAgentAvatarp->updateVisualParams();
@@ -976,9 +970,11 @@ void LLWearable::revertValues()
 
 	syncImages(mSavedTEMap, mTEMap);
 
-	if( gFloaterCustomize )
+
+	LLSidepanelAppearance *panel = dynamic_cast<LLSidepanelAppearance*>(LLSideTray::getInstance()->getPanel("sidepanel_appearance"));
+	if( panel )
 	{
-		gFloaterCustomize->updateScrollingPanelList(TRUE);
+		panel->updateScrollingPanelList();
 	}
 }
 
@@ -1015,9 +1011,11 @@ void LLWearable::saveValues()
 	// Deep copy of mTEMap (copies only those tes that are current, filling in defaults where needed)
 	syncImages(mTEMap, mSavedTEMap);
 
-	if( gFloaterCustomize )
+
+	LLSidepanelAppearance *panel = dynamic_cast<LLSidepanelAppearance*>(LLSideTray::getInstance()->getPanel("sidepanel_appearance"));
+	if( panel )
 	{
-		gFloaterCustomize->updateScrollingPanelList(TRUE);
+		panel->updateScrollingPanelList();
 	}
 }
 
diff --git a/indra/newview/llwearabletype.cpp b/indra/newview/llwearabletype.cpp
index c692df06adeb2a386e3cb3fc9b9dc27ab515a25d..2a14ace38c5d73dd528c4f4138322d754bd56a7d 100644
--- a/indra/newview/llwearabletype.cpp
+++ b/indra/newview/llwearabletype.cpp
@@ -85,7 +85,7 @@ LLWearableDictionary::LLWearableDictionary()
 	addEntry(LLWearableType::WT_TATTOO,       new WearableEntry("tattoo",      "New Tattoo",		LLAssetType::AT_CLOTHING, 	LLInventoryIcon::ICONNAME_CLOTHING_TATTOO));
 	addEntry(LLWearableType::WT_INVALID,      new WearableEntry("invalid",     "Invalid Wearable", 	LLAssetType::AT_NONE, 		LLInventoryIcon::ICONNAME_NONE));
 	addEntry(LLWearableType::WT_NONE,      	  new WearableEntry("none",        "Invalid Wearable", 	LLAssetType::AT_NONE, 		LLInventoryIcon::ICONNAME_NONE));
-	addEntry(LLWearableType::WT_COUNT,        NULL);
+	addEntry(LLWearableType::WT_COUNT,        new WearableEntry("count",        "Invalid Wearable", 	LLAssetType::AT_NONE, 		LLInventoryIcon::ICONNAME_NONE));
 }
 
 // static
diff --git a/indra/newview/llweb.cpp b/indra/newview/llweb.cpp
index aa03b1afd1b80e12897514a91fb65633f29cb580..5c9633c03688ecfb74106ed5a7ddffa649043d3b 100644
--- a/indra/newview/llweb.cpp
+++ b/indra/newview/llweb.cpp
@@ -54,6 +54,10 @@
 #include "llviewerparcelmgr.h"
 #include "llviewerregion.h"
 #include "llviewerwindow.h"
+#include "llnotificationsutil.h"
+
+bool on_load_url_external_response(const LLSD& notification, const LLSD& response, bool async );
+
 
 class URLLoader : public LLToastAlertPanel::URLLoader
 {
@@ -110,11 +114,26 @@ void LLWeb::loadURLExternal(const std::string& url)
 // static
 void LLWeb::loadURLExternal(const std::string& url, bool async)
 {
-	std::string escaped_url = escapeURL(url);
-	if (gViewerWindow)
+	LLSD payload;
+	payload["url"] = url;
+	LLNotificationsUtil::add( "WebLaunchExternalTarget", LLSD(), payload, boost::bind(on_load_url_external_response, _1, _2, async));
+}
+
+// static 
+bool on_load_url_external_response(const LLSD& notification, const LLSD& response, bool async )
+{
+	S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
+	if ( 0 == option )
 	{
-		gViewerWindow->getWindow()->spawnWebBrowser(escaped_url, async);
+		LLSD payload = notification["payload"];
+		std::string url = payload["url"].asString();
+		std::string escaped_url = LLWeb::escapeURL(url);
+		if (gViewerWindow)
+		{
+			gViewerWindow->getWindow()->spawnWebBrowser(escaped_url, async);
+		}
 	}
+	return false;
 }
 
 
diff --git a/indra/newview/llxmlrpctransaction.cpp b/indra/newview/llxmlrpctransaction.cpp
index bc7f8ec854a02a9839ce1fe54110e6b807a01321..a8ac0c0c90e93631ea16b7ae99933c17c9a43d2b 100644
--- a/indra/newview/llxmlrpctransaction.cpp
+++ b/indra/newview/llxmlrpctransaction.cpp
@@ -248,7 +248,8 @@ int LLXMLRPCTransaction::Impl::_sslCertVerifyCallback(X509_STORE_CTX *ctx, void
 	validation_params[CERT_HOSTNAME] = uri.hostName();
 	try
 	{
-		chain->validate(VALIDATION_POLICY_SSL, store, validation_params);
+		// don't validate hostname.  Let libcurl do it instead.  That way, it'll handle redirects
+		store->validate(VALIDATION_POLICY_SSL & (~VALIDATION_POLICY_HOSTNAME), chain, validation_params);
 	}
 	catch (LLCertValidationTrustException& cert_exception)
 	{
@@ -512,7 +513,6 @@ void LLXMLRPCTransaction::Impl::setStatus(EStatus status,
 				// Usually this means that there's a problem with the login server,
 				// not with the client.  Direct user to status page.
 				mStatusMessage = LLTrans::getString("server_is_down");
-
 				mStatusURI = "http://secondlife.com/status/";
 		}
 	}
@@ -547,7 +547,7 @@ void LLXMLRPCTransaction::Impl::setCurlStatus(CURLcode code)
 				"Often this means that your computer\'s clock is set incorrectly.\n"
 				"Please go to Control Panels and make sure the time and date\n"
 				"are set correctly.\n"
-				"\n"
+				"Also check that your network and firewall are set up correctly.\n"
 				"If you continue to receive this error, please go\n"
 				"to the Support section of the SecondLife.com web site\n"
 				"and report the problem.";
diff --git a/indra/newview/macview_Prefix.h b/indra/newview/macview_Prefix.h
index a71362a139edd1a87f72de4949b8763f82338f8d..07f80934268e3e27c35a1ed2947a9aaba2ee3c30 100644
--- a/indra/newview/macview_Prefix.h
+++ b/indra/newview/macview_Prefix.h
@@ -65,7 +65,6 @@
 #include "llfloater.h"
 #include "llfloaterbuildoptions.h"
 #include "llfloaterchat.h"
-#include "llfloatercustomize.h"
 #include "llfloatergroups.h"
 #include "llfloaterworldmap.h"
 #include "llfloatermute.h"
diff --git a/indra/newview/skins/default/xui/de/floater_buy_currency.xml b/indra/newview/skins/default/xui/de/floater_buy_currency.xml
index 1f79889bb7875ba275fb947b23bf1099f7ed635f..f978b24d0d14ac6b86d9f491b72d2cf0957b0fd7 100644
--- a/indra/newview/skins/default/xui/de/floater_buy_currency.xml
+++ b/indra/newview/skins/default/xui/de/floater_buy_currency.xml
@@ -59,7 +59,7 @@
 	</text>
 	<button label="Jetzt kaufen" name="buy_btn"/>
 	<button label="Abbrechen" name="cancel_btn"/>
-	<text height="40" left="160" name="info_cannot_buy" width="200">
+	<text name="info_cannot_buy">
 		Kauf nicht möglich
 	</text>
 	<button label="Weiter zur Kontoseite" name="error_web"/>
diff --git a/indra/newview/skins/default/xui/en/floater_camera.xml b/indra/newview/skins/default/xui/en/floater_camera.xml
index 75b0457c90979b01bf0d14afb8ea2a9fa83aa4e2..8c3aa2c9a40570f99dc3f805ca67366e96b4f78b 100644
--- a/indra/newview/skins/default/xui/en/floater_camera.xml
+++ b/indra/newview/skins/default/xui/en/floater_camera.xml
@@ -1,282 +1,282 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater
- legacy_header_height="18"
- can_dock="true"
- can_minimize="true"
- can_close="false"
- follows="bottom"
- height="164"
- layout="topleft"
- name="camera_floater"
- help_topic="camera_floater"
- save_rect="true"
- save_visibility="true"
- save_dock_state="true"
- single_instance="true"
- width="228">
-    <floater.string
-     name="rotate_tooltip">
-        Rotate Camera Around Focus
-    </floater.string>
-    <floater.string
-     name="zoom_tooltip">
-        Zoom Camera Towards Focus
-    </floater.string>
-    <floater.string
-     name="move_tooltip">
-        Move Camera Up and Down, Left and Right
-    </floater.string>
-    <floater.string
-     name="camera_modes_title">
-        Camera modes
-    </floater.string>
-    <floater.string
-     name="pan_mode_title">
-       Orbit Zoom Pan
-    </floater.string>
-    <floater.string
-     name="presets_mode_title">
-        Preset Views
-    </floater.string>
-    <floater.string
-     name="free_mode_title">
-        View Object
-    </floater.string>
-    <panel
-     border="false"
-     height="123"
-     layout="topleft"
-     left="2"
-     top="0"
-     mouse_opaque="false"
-     name="controls"
-     width="226">
-       <panel
-         color="Transparent"
-         follows="all"
-         height="102"
-         layout="topleft"
-         left="8"
-         name="preset_views_list"
-         opaque="true"
-         top="24"
-         width="212"
-         visible="false">
-        <panel_camera_item
-          name="front_view">
-          <panel_camera_item.mousedown_callback
-            function="CameraPresets.ChangeView"
-            parameter="front_view" />
-          <panel_camera_item.picture
-            image_name="Cam_Preset_Front_Off" />
-          <panel_camera_item.selected_picture
-            image_name="Cam_Preset_Front_On" />
-          <panel_camera_item.text>
-            Front View
-          </panel_camera_item.text>
-        </panel_camera_item>
-        <panel_camera_item
-          name="group_view"
-          top_pad="4">
-          <panel_camera_item.mousedown_callback
-            function="CameraPresets.ChangeView"
-            parameter="group_view" />
-          <panel_camera_item.picture
-            image_name="Cam_Preset_Side_Off" />
-          <panel_camera_item.selected_picture
-            image_name="Cam_Preset_Side_On" />
-          <panel_camera_item.text>
-            Side View
-          </panel_camera_item.text>
-        </panel_camera_item>
-        <panel_camera_item
-          name="rear_view"
-          layout="topleft"
-          top_pad="4">
-          <panel_camera_item.mousedown_callback
-            function="CameraPresets.ChangeView"
-            parameter="rear_view" />
-          <panel_camera_item.picture
-            image_name="Cam_Preset_Back_Off" />
-          <panel_camera_item.selected_picture
-            image_name="Cam_Preset_Back_On" />
-          <panel_camera_item.text>
-            Rear View
-          </panel_camera_item.text>
-        </panel_camera_item>
-      </panel>
-      <panel
-          color="Transparent"
-          follows="all"
-          height="68"
-          item_pad="4"
-          layout="topleft"
-          left="8"
-          name="camera_modes_list"
-          opaque="true"
-          top="24"
-          width="212"
-          visible="false">
-        <panel_camera_item
-          name="object_view">
-          <panel_camera_item.mousedown_callback
-            function="CameraPresets.ChangeView"
-            parameter="object_view" />
-          <panel_camera_item.text>
-            Object View
-          </panel_camera_item.text>
-          <panel_camera_item.picture
-            image_name="Object_View_Off" />
-          <panel_camera_item.selected_picture
-            image_name="Object_View_On" />
-        </panel_camera_item>
-        <panel_camera_item
-          name="mouselook_view"
-          layout="topleft">
-          <panel_camera_item.mousedown_callback
-            function="CameraPresets.ChangeView"
-            parameter="mouselook_view" />
-          <panel_camera_item.text>
-            Mouselook View
-          </panel_camera_item.text>
-          <panel_camera_item.picture
-            image_name="MouseLook_View_Off" />
-          <panel_camera_item.selected_picture
-            image_name="MouseLook_View_On" />
-        </panel_camera_item>
-      </panel>
-         <!--TODO: replace + - images -->
-         <panel
-            border="false"
-            class="camera_zoom_panel"
-            height="114"
-            layout="topleft"
-            left="0"
-            mouse_opaque="false"
-            name="zoom"
-            top="20"
-            width="226">
-           <joystick_rotate
-              follows="top|left"
-              height="78"
-              image_selected="Cam_Rotate_In"
-              image_unselected="Cam_Rotate_Out"
-              layout="topleft"
-              left="7"
-              mouse_opaque="false"
-              name="cam_rotate_stick"
-              quadrant="left"
-              scale_image="false"
-              sound_flags="3"
-              visible="true"
-              tool_tip="Orbit camera around focus"
-              top="20"
-              width="78" />                      
-           <button
-              follows="top|left"
-              height="18"
-              image_disabled="AddItem_Disabled"
-              image_selected="AddItem_Press"
-              image_unselected="AddItem_Off"
-              layout="topleft"
-              left_pad="14" 
-              name="zoom_plus_btn"
-              width="18"
-              top="18">
-             <commit_callback
-                function="Zoom.plus" />
-             <mouse_held_callback
-                function="Zoom.plus" />
-           </button>
-           <slider_bar
-              height="50"
-              layout="topleft"
-              name="zoom_slider"
-              orientation="vertical"
-              tool_tip="Zoom camera toward focus"
-              top_pad="0"
-              min_val="0"
-              max_val="1" 
-              width="18">
-             <commit_callback function="Slider.value_changed"/>
-           </slider_bar>
-           <button
-              follows="top|left"
-              height="18"
-              image_disabled="MinusItem_Disabled"
-              image_selected="MinusItem_Press"
-              image_unselected="MinusItem_Off"
-              layout="topleft"
-              name="zoom_minus_btn"
-              top_pad="0"
-              width="18">
-             <commit_callback
-                function="Zoom.minus" />
-             <mouse_held_callback
-                function="Zoom.minus" />
-           </button>
-         <joystick_track
-         follows="top|left"
-         height="78"
-         image_selected="Cam_Tracking_In"
-         image_unselected="Cam_Tracking_Out"
-         layout="topleft"
-         left="133"
-         name="cam_track_stick"
-         quadrant="left"
-         scale_image="false"
-         sound_flags="3"
-         tool_tip="Move camera up and down, left and right"
-         top="20"
-         width="78"/>
-        </panel>
-    </panel>
-    <panel
-     border="false"
-     height="42"
-     layout="topleft"
-     left="2"
-     top_pad="0"
-     name="buttons"
-     width="226">
-        <button
-         height="23"
-         label=""
-         layout="topleft"
-         left="70"
-         is_toggle="true"
-         image_overlay="Cam_Avatar_Off"
-         image_selected="PushButton_Selected_Press"
-         name="presets_btn"
-         tab_stop="false"
-         tool_tip="Preset Views"
-         top="13" 
-         width="25">
-        </button>
-        <button
-         height="23"
-         label=""
-         layout="topleft"
-         left_pad="1"
-         is_toggle="true"
-         image_overlay="PanOrbit_Off"
-         image_selected="PushButton_Selected_Press"
-         name="pan_btn"
-         tab_stop="false"
-         tool_tip="Orbit Zoom Pan"
-         width="25">
-        </button>
-        <button
-         height="23"
-         label=""
-         layout="topleft"
-         left_pad="1"
-         image_overlay="Cam_FreeCam_Off"
-         image_selected="PushButton_Selected_Press"
-         name="avatarview_btn"
-         tab_stop="false"
-         tool_tip="Camera modes"
-         width="25">
-        </button>
-    </panel>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<floater
+ legacy_header_height="18"
+ can_dock="true"
+ can_minimize="true"
+ can_close="false"
+ follows="bottom"
+ height="164"
+ layout="topleft"
+ name="camera_floater"
+ help_topic="camera_floater"
+ save_rect="true"
+ save_visibility="true"
+ save_dock_state="true"
+ single_instance="true"
+ width="228">
+    <floater.string
+     name="rotate_tooltip">
+        Rotate Camera Around Focus
+    </floater.string>
+    <floater.string
+     name="zoom_tooltip">
+        Zoom Camera Towards Focus
+    </floater.string>
+    <floater.string
+     name="move_tooltip">
+        Move Camera Up and Down, Left and Right
+    </floater.string>
+    <floater.string
+     name="camera_modes_title">
+        Camera modes
+    </floater.string>
+    <floater.string
+     name="pan_mode_title">
+       Orbit Zoom Pan
+    </floater.string>
+    <floater.string
+     name="presets_mode_title">
+        Preset Views
+    </floater.string>
+    <floater.string
+     name="free_mode_title">
+        View Object
+    </floater.string>
+    <panel
+     border="false"
+     height="123"
+     layout="topleft"
+     left="2"
+     top="0"
+     mouse_opaque="false"
+     name="controls"
+     width="226">
+       <panel
+         color="Transparent"
+         follows="all"
+         height="102"
+         layout="topleft"
+         left="8"
+         name="preset_views_list"
+         opaque="true"
+         top="24"
+         width="212"
+         visible="false">
+        <panel_camera_item
+          name="front_view">
+          <panel_camera_item.mousedown_callback
+            function="CameraPresets.ChangeView"
+            parameter="front_view" />
+          <panel_camera_item.picture
+            image_name="Cam_Preset_Front_Off" />
+          <panel_camera_item.selected_picture
+            image_name="Cam_Preset_Front_On" />
+          <panel_camera_item.text>
+            Front View
+          </panel_camera_item.text>
+        </panel_camera_item>
+        <panel_camera_item
+          name="group_view"
+          top_pad="4">
+          <panel_camera_item.mousedown_callback
+            function="CameraPresets.ChangeView"
+            parameter="group_view" />
+          <panel_camera_item.picture
+            image_name="Cam_Preset_Side_Off" />
+          <panel_camera_item.selected_picture
+            image_name="Cam_Preset_Side_On" />
+          <panel_camera_item.text>
+            Side View
+          </panel_camera_item.text>
+        </panel_camera_item>
+        <panel_camera_item
+          name="rear_view"
+          layout="topleft"
+          top_pad="4">
+          <panel_camera_item.mousedown_callback
+            function="CameraPresets.ChangeView"
+            parameter="rear_view" />
+          <panel_camera_item.picture
+            image_name="Cam_Preset_Back_Off" />
+          <panel_camera_item.selected_picture
+            image_name="Cam_Preset_Back_On" />
+          <panel_camera_item.text>
+            Rear View
+          </panel_camera_item.text>
+        </panel_camera_item>
+      </panel>
+      <panel
+          color="Transparent"
+          follows="all"
+          height="68"
+          item_pad="4"
+          layout="topleft"
+          left="8"
+          name="camera_modes_list"
+          opaque="true"
+          top="24"
+          width="212"
+          visible="false">
+        <panel_camera_item
+          name="object_view">
+          <panel_camera_item.mousedown_callback
+            function="CameraPresets.ChangeView"
+            parameter="object_view" />
+          <panel_camera_item.text>
+            Object View
+          </panel_camera_item.text>
+          <panel_camera_item.picture
+            image_name="Object_View_Off" />
+          <panel_camera_item.selected_picture
+            image_name="Object_View_On" />
+        </panel_camera_item>
+        <panel_camera_item
+          name="mouselook_view"
+          layout="topleft">
+          <panel_camera_item.mousedown_callback
+            function="CameraPresets.ChangeView"
+            parameter="mouselook_view" />
+          <panel_camera_item.text>
+            Mouselook View
+          </panel_camera_item.text>
+          <panel_camera_item.picture
+            image_name="MouseLook_View_Off" />
+          <panel_camera_item.selected_picture
+            image_name="MouseLook_View_On" />
+        </panel_camera_item>
+      </panel>
+         <!--TODO: replace + - images -->
+         <panel
+            border="false"
+            class="camera_zoom_panel"
+            height="114"
+            layout="topleft"
+            left="0"
+            mouse_opaque="false"
+            name="zoom"
+            top="20"
+            width="226">
+           <joystick_rotate
+              follows="top|left"
+              height="78"
+              image_selected="Cam_Rotate_In"
+              image_unselected="Cam_Rotate_Out"
+              layout="topleft"
+              left="7"
+              mouse_opaque="false"
+              name="cam_rotate_stick"
+              quadrant="left"
+              scale_image="false"
+              sound_flags="3"
+              visible="true"
+              tool_tip="Orbit camera around focus"
+              top="20"
+              width="78" />                      
+           <button
+              follows="top|left"
+              height="18"
+              image_disabled="AddItem_Disabled"
+              image_selected="AddItem_Press"
+              image_unselected="AddItem_Off"
+              layout="topleft"
+              left_pad="14" 
+              name="zoom_plus_btn"
+              width="18"
+              top="18">
+             <commit_callback
+                function="Zoom.plus" />
+             <mouse_held_callback
+                function="Zoom.plus" />
+           </button>
+           <slider_bar
+              height="50"
+              layout="topleft"
+              name="zoom_slider"
+              orientation="vertical"
+              tool_tip="Zoom camera toward focus"
+              top_pad="0"
+              min_val="0"
+              max_val="1" 
+              width="18">
+             <commit_callback function="Slider.value_changed"/>
+           </slider_bar>
+           <button
+              follows="top|left"
+              height="18"
+              image_disabled="MinusItem_Disabled"
+              image_selected="MinusItem_Press"
+              image_unselected="MinusItem_Off"
+              layout="topleft"
+              name="zoom_minus_btn"
+              top_pad="0"
+              width="18">
+             <commit_callback
+                function="Zoom.minus" />
+             <mouse_held_callback
+                function="Zoom.minus" />
+           </button>
+         <joystick_track
+         follows="top|left"
+         height="78"
+         image_selected="Cam_Tracking_In"
+         image_unselected="Cam_Tracking_Out"
+         layout="topleft"
+         left="133"
+         name="cam_track_stick"
+         quadrant="left"
+         scale_image="false"
+         sound_flags="3"
+         tool_tip="Move camera up and down, left and right"
+         top="20"
+         width="78"/>
+        </panel>
+    </panel>
+    <panel
+     border="false"
+     height="42"
+     layout="topleft"
+     left="2"
+     top_pad="0"
+     name="buttons"
+     width="226">
+        <button
+         height="23"
+         label=""
+         layout="topleft"
+         left="70"
+         is_toggle="true"
+         image_overlay="Cam_Avatar_Off"
+         image_selected="PushButton_Selected_Press"
+         name="presets_btn"
+         tab_stop="false"
+         tool_tip="Preset Views"
+         top="13" 
+         width="25">
+        </button>
+        <button
+         height="23"
+         label=""
+         layout="topleft"
+         left_pad="1"
+         is_toggle="true"
+         image_overlay="PanOrbit_Off"
+         image_selected="PushButton_Selected_Press"
+         name="pan_btn"
+         tab_stop="false"
+         tool_tip="Orbit Zoom Pan"
+         width="25">
+        </button>
+        <button
+         height="23"
+         label=""
+         layout="topleft"
+         left_pad="1"
+         image_overlay="Cam_FreeCam_Off"
+         image_selected="PushButton_Selected_Press"
+         name="avatarview_btn"
+         tab_stop="false"
+         tool_tip="Camera modes"
+         width="25">
+        </button>
+    </panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_snapshot.xml b/indra/newview/skins/default/xui/en/floater_snapshot.xml
index 7dcf2aab990ebee5364ec816c9561075953cc8e6..f3d297c303d63ae6992b9d9a62015dfbe3096f0a 100644
--- a/indra/newview/skins/default/xui/en/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/en/floater_snapshot.xml
@@ -62,6 +62,7 @@
    name="share_to_web" 
    top_delta="0" 
    left="10" 
+   visible="false"
    width="130"/>
   <button
    label="Save to My Inventory" 
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 0bf71844bfa6a37818659107dbc2f713ce4bdb79..079d029eab81b18b2695e2ea8d9ebd19035bb5ad 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -6130,15 +6130,24 @@ Deed to group failed.
    name="AvatarRezNotification"
    type="notifytip">
 ( [EXISTENCE] seconds alive )
-Avatar '[NAME]' declouded in [TIME] seconds.
+Avatar '[NAME]' declouded after [TIME] seconds.
   </notification>
 
   <notification
    icon="notifytip.tga"
-   name="AvatarRezSelfNotification"
+   name="AvatarRezSelfBakedDoneNotification"
    type="notifytip">
 ( [EXISTENCE] seconds alive )
-You finished baking your outfit in [TIME] seconds.
+You finished baking your outfit after [TIME] seconds.
+  </notification>
+
+  <notification
+   icon="notifytip.tga"
+   name="AvatarRezSelfBakedUpdateNotification"
+   type="notifytip">
+( [EXISTENCE] seconds alive )
+You sent out an update of your appearance after [TIME] seconds.
+[STATUS]
   </notification>
 
 
@@ -6182,6 +6191,37 @@ Avatar '[NAME]' entered appearance mode.
 Avatar '[NAME]' left appearance mode.
   </notification>
 
+    <notification
+   icon="alertmodal.tga"
+   name="NoConnect"
+   type="alertmodal">
+        We're having trouble connecting using [PROTOCOL] [HOSTID].
+        Please check your network and firewall setup.
+        <form name="form">
+            <button
+               default="true"
+               index="0"
+               name="OK"
+               text="OK"/>
+        </form>
+    </notification>
+
+    <notification
+          icon="alertmodal.tga"
+          name="NoVoiceConnect"
+          type="alertmodal">
+        We're having trouble connecting your voiceserver using [HOSTID].
+        Voice communications will not be available.
+        Please check your network and firewall setup.
+        <form name="form">
+            <button
+               default="true"
+               index="0"
+               name="OK"
+               text="OK"/>
+        </form>
+    </notification>
+
   <notification
    icon="notifytip.tga"
    name="AvatarRezLeftNotification"
@@ -6190,6 +6230,14 @@ Avatar '[NAME]' left appearance mode.
 Avatar '[NAME]' left as fully loaded.
   </notification>
 
+  <notification
+   icon="notifytip.tga"
+   name="AvatarRezSelfBakeNotification"
+   type="notifytip">
+( [EXISTENCE] seconds alive )
+You uploaded a [RESOLUTION] baked texture for '[BODYREGION]' after [TIME] seconds.
+  </notification>
+
   <notification
    icon="alertmodal.tga"
    name="ConfirmLeaveCall"
diff --git a/indra/newview/skins/default/xui/en/panel_edit_wearable.xml b/indra/newview/skins/default/xui/en/panel_edit_wearable.xml
index 71f740590b9c373bc15060fba932a314a3790618..0455086ef33a13df3c1981f05b6c5a1add3d3c66 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_wearable.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_wearable.xml
@@ -107,7 +107,7 @@ left="0"
 		Jacket:
 	</string>
 	<string
-		name="skirt_skirt_desc_text">
+		name="skirt_desc_text">
 		Skirt:
 	</string>
 	<string
diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index 9247e3f74ce319e9c9ad46c9128ab367ab658aa1..078426d3d92294ca1149b665ce04f1db68060f1c 100644
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -48,12 +48,10 @@
 	<string name="LoginDownloadingClothing">Downloading clothing...</string>
         <string name="InvalidCertificate">The server returned an invalid or corrupt certificate. Please contact the Grid administrator.</string>
         <string name="CertInvalidHostname">An invalid hostname was used to access the server, please check your SLURL or Grid hostname.</string>
-        <string name="CertExpired">The certificate returned by the Grid appears to be expired.  Please check your system clock, or contact your Grid administr\
-ator.</string>
+        <string name="CertExpired">The certificate returned by the Grid appears to be expired.  Please check your system clock, or contact your Grid administrator.</string>
         <string name="CertKeyUsage">The certificate returned by the server could not be used for SSL.  Please contact your Grid administrator.</string>
         <string name="CertBasicConstraints">Too many certificates were in the servers Certificate chain.  Please contact your Grid administrator.</string>
-        <string name="CertInvalidSignature">The certificate signature returned by the Grid server could not be verified.  Please contact your Grid administrat
-or.</string>
+        <string name="CertInvalidSignature">The certificate signature returned by the Grid server could not be verified.  Please contact your Grid administrator.</string>
 
 	<string name="LoginFailedNoNetwork">Network Error: Could not establish connection, please check your network connection.</string>
 	<string name="LoginFailed">Login failed.</string>
@@ -3180,7 +3178,8 @@ Abuse Report</string>
   <string name="server_is_down">
 	Despite our best efforts, something unexpected has gone wrong.
 
-	Please check secondlife.com/status to see if there is a known problem with the service.
+	Please check secondlife.com/status to see if there is a known problem with the service.  
+        If you continue to experience problems, please check your network and firewall setup.
   </string>
 
   <!-- overriding datetime formating. 
diff --git a/indra/newview/skins/default/xui/en/widgets/panel_camera_item.xml b/indra/newview/skins/default/xui/en/widgets/panel_camera_item.xml
index a77b81f76f7fcd76988bd92429910f2c362af49a..98707b84957005e3148e88319b2dcdb3ef7886d4 100644
--- a/indra/newview/skins/default/xui/en/widgets/panel_camera_item.xml
+++ b/indra/newview/skins/default/xui/en/widgets/panel_camera_item.xml
@@ -1,70 +1,70 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel_camera_item
- background_visible="false"
- height="30"
- layout="topleft"
- width="212">
-  <panel_camera_item.icon_over
-   follows="top|left"
-     height="30"
-     image_name="ListItem_Over"
-     left="0"
-     mouse_opaque="false"
-     layout="topleft"
-     name="hovered_icon"
-     top="30"
-     scale_image="true"
-     visible="false"
-     width="212" />
-  <panel_camera_item.icon_selected
-   follows="top|left"
-     height="30"
-     image_name="ListItem_Select"
-     layout="topleft"
-     left="0"
-     mouse_opaque="false"
-     name="selected_icon"
-     top="30"
-     scale_image="true"
-     visible="false"
-     width="212" />
-  <panel_camera_item.picture
-     follows="top|left"
-     height="30"
-     image_name="Icon_For_Sale"
-     layout="topleft"
-     left="0"
-     mouse_opaque="false"
-     name="picture"
-     tab_stop="false"
-     top="30"
-     top_pad="10"
-     width="30" />
-  <panel_camera_item.selected_picture
-     follows="top|left"
-     height="30"
-     image_name="Cam_Rotate_In"
-     layout="topleft"
-     left="0"
-     mouse_opaque="false"
-     name="selected_picture"
-     tab_stop="false"
-     top="30"
-     top_pad="8"
-     visible="false" 
-     width="30" />
-  <panel_camera_item.text
-   follows="top|left|right"
-     font="SansSerifMedium"
-     height="15"
-     layout="topleft"
-     left ="38"
-     name="picture_name"
-     text_color="white"
-     top="21"
-     use_ellipses="true"
-     width="170"
-     word_wrap="false" >
-   Text
-   </panel_camera_item.text>
-</panel_camera_item>
\ No newline at end of file
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel_camera_item
+ background_visible="false"
+ height="30"
+ layout="topleft"
+ width="212">
+  <panel_camera_item.icon_over
+   follows="top|left"
+     height="30"
+     image_name="ListItem_Over"
+     left="0"
+     mouse_opaque="false"
+     layout="topleft"
+     name="hovered_icon"
+     top="30"
+     scale_image="true"
+     visible="false"
+     width="212" />
+  <panel_camera_item.icon_selected
+   follows="top|left"
+     height="30"
+     image_name="ListItem_Select"
+     layout="topleft"
+     left="0"
+     mouse_opaque="false"
+     name="selected_icon"
+     top="30"
+     scale_image="true"
+     visible="false"
+     width="212" />
+  <panel_camera_item.picture
+     follows="top|left"
+     height="30"
+     image_name="Icon_For_Sale"
+     layout="topleft"
+     left="0"
+     mouse_opaque="false"
+     name="picture"
+     tab_stop="false"
+     top="30"
+     top_pad="10"
+     width="30" />
+  <panel_camera_item.selected_picture
+     follows="top|left"
+     height="30"
+     image_name="Cam_Rotate_In"
+     layout="topleft"
+     left="0"
+     mouse_opaque="false"
+     name="selected_picture"
+     tab_stop="false"
+     top="30"
+     top_pad="8"
+     visible="false" 
+     width="30" />
+  <panel_camera_item.text
+   follows="top|left|right"
+     font="SansSerifMedium"
+     height="15"
+     layout="topleft"
+     left ="38"
+     name="picture_name"
+     text_color="white"
+     top="21"
+     use_ellipses="true"
+     width="170"
+     word_wrap="false" >
+   Text
+   </panel_camera_item.text>
+</panel_camera_item>
diff --git a/indra/newview/skins/default/xui/es/floater_about.xml b/indra/newview/skins/default/xui/es/floater_about.xml
index ebd0bdb3d725ad4584abc63a1fe85a4921afcf53..1af089cfaf9e93dc68040421a2a9d6e00b9bcbdb 100644
--- a/indra/newview/skins/default/xui/es/floater_about.xml
+++ b/indra/newview/skins/default/xui/es/floater_about.xml
@@ -29,7 +29,7 @@ Versión de libcurl: [LIBCURL_VERSION]
 Versión de J2C Decoder: [J2C_VERSION]
 Versión de Audio Driver: [AUDIO_DRIVER_VERSION]
 Versión de Qt Webkit: [QT_WEBKIT_VERSION]
-Versión de Vivox: [VIVOX_VERSION]
+Versión del servidor de voz: [VOICE_VERSION]
 	</floater.string>
 	<floater.string name="none">
 		(no hay)
diff --git a/indra/newview/skins/default/xui/es/floater_about_land.xml b/indra/newview/skins/default/xui/es/floater_about_land.xml
index f3a278945c5483036072aee7fc0e5e1121ccb075..c672f68c5cbf15d251433dac24e302846284f73f 100644
--- a/indra/newview/skins/default/xui/es/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/es/floater_about_land.xml
@@ -63,6 +63,9 @@
 				No se ha seleccionado una parcela.
 Vaya al menú Mundo &gt; Acerca del terreno o seleccione otra parcela para ver sus características.
 			</panel.string>
+			<panel.string name="time_stamp_template">
+				[wkday,datetime,local] [mth,datetime,local] [day,datetime,local] [hour,datetime,local]:[min,datetime,local]:[second,datetime,local] [year,datetime,local]
+			</panel.string>
 			<text name="Name:">
 				Nombre:
 			</text>
diff --git a/indra/newview/skins/default/xui/es/floater_avatar_textures.xml b/indra/newview/skins/default/xui/es/floater_avatar_textures.xml
index 089ff3cd682561dcbdd270d786a26383af3221fa..54ef34264c8a70985f49e1cb360ed7f2d36e6742 100644
--- a/indra/newview/skins/default/xui/es/floater_avatar_textures.xml
+++ b/indra/newview/skins/default/xui/es/floater_avatar_textures.xml
@@ -3,41 +3,46 @@
 	<floater.string name="InvalidAvatar">
 		AVATAR NO VÁLIDO
 	</floater.string>
-	<text name="composite_label">
-		Texturas compuestas
-	</text>
-	<button label="Soltar" label_selected="Soltar" name="Dump"/>
 	<scroll_container name="profile_scroll">
 		<panel name="scroll_content_panel">
-			<texture_picker label="Pelo" name="hair-baked"/>
-			<texture_picker label="Pelo" name="hair_grain"/>
-			<texture_picker label="Alfa del pelo" name="hair_alpha"/>
-			<texture_picker label="Cabeza" name="head-baked"/>
-			<texture_picker label="Maquillaje" name="head_bodypaint"/>
-			<texture_picker label="Alfa de la cabeza" name="head_alpha"/>
-			<texture_picker label="Tatuaje de la cabeza" name="head_tattoo"/>
-			<texture_picker label="Ojos" name="eyes-baked"/>
-			<texture_picker label="Ojo" name="eyes_iris"/>
-			<texture_picker label="Alfa de los ojos" name="eyes_alpha"/>
-			<texture_picker label="Parte superior del cuerpo" name="upper-baked"/>
-			<texture_picker label="Pintura corporal: parte superior del cuerpo" name="upper_bodypaint"/>
-			<texture_picker label="Camiseta" name="upper_undershirt"/>
-			<texture_picker label="Guantes" name="upper_gloves"/>
-			<texture_picker label="Camisa" name="upper_shirt"/>
-			<texture_picker label="Parte superior de la chaqueta" name="upper_jacket"/>
-			<texture_picker label="Alfa superior" name="upper_alpha"/>
-			<texture_picker label="Tatuaje superior" name="upper_tattoo"/>
-			<texture_picker label="Parte inferior del cuerpo" name="lower-baked"/>
-			<texture_picker label="Pintura corporal: parte inferior del cuerpo" name="lower_bodypaint"/>
-			<texture_picker label="Ropa interior" name="lower_underpants"/>
-			<texture_picker label="Calcetines" name="lower_socks"/>
-			<texture_picker label="Zapatos" name="lower_shoes"/>
-			<texture_picker label="Pantalones" name="lower_pants"/>
-			<texture_picker label="Chaqueta" name="lower_jacket"/>
-			<texture_picker label="Alfa inferior" name="lower_alpha"/>
-			<texture_picker label="Tatuaje inferior" name="lower_tattoo"/>
-			<texture_picker label="Falda" name="skirt-baked"/>
-			<texture_picker label="Falda" name="skirt"/>
+			<text name="label">
+				Texturas obtenidas mediante bake
+			</text>
+			<text name="composite_label">
+				Texturas compuestas
+			</text>
+			<button label="Volcar IDs a la consola" label_selected="Volcado" name="Dump"/>
+			<panel name="scroll_content_panel">
+				<texture_picker label="Pelo" name="hair-baked"/>
+				<texture_picker label="Pelo" name="hair_grain"/>
+				<texture_picker label="Alfa del pelo" name="hair_alpha"/>
+				<texture_picker label="Cabeza" name="head-baked"/>
+				<texture_picker label="Maquillaje" name="head_bodypaint"/>
+				<texture_picker label="Alfa de la cabeza" name="head_alpha"/>
+				<texture_picker label="Tatuaje de la cabeza" name="head_tattoo"/>
+				<texture_picker label="Ojos" name="eyes-baked"/>
+				<texture_picker label="Ojo" name="eyes_iris"/>
+				<texture_picker label="Alfa de los ojos" name="eyes_alpha"/>
+				<texture_picker label="Parte superior del cuerpo" name="upper-baked"/>
+				<texture_picker label="Pintura corporal superior" name="upper_bodypaint"/>
+				<texture_picker label="Camiseta" name="upper_undershirt"/>
+				<texture_picker label="Guantes" name="upper_gloves"/>
+				<texture_picker label="Camisa" name="upper_shirt"/>
+				<texture_picker label="Parte superior de la chaqueta" name="upper_jacket"/>
+				<texture_picker label="Alfa superior" name="upper_alpha"/>
+				<texture_picker label="Tatuaje superior" name="upper_tattoo"/>
+				<texture_picker label="Parte inferior del cuerpo" name="lower-baked"/>
+				<texture_picker label="Pintura corporal inferior" name="lower_bodypaint"/>
+				<texture_picker label="Ropa interior" name="lower_underpants"/>
+				<texture_picker label="Calcetines" name="lower_socks"/>
+				<texture_picker label="Zapatos" name="lower_shoes"/>
+				<texture_picker label="Pantalones" name="lower_pants"/>
+				<texture_picker label="Chaqueta" name="lower_jacket"/>
+				<texture_picker label="Alfa inferior" name="lower_alpha"/>
+				<texture_picker label="Tatuaje inferior" name="lower_tattoo"/>
+				<texture_picker label="Falda" name="skirt-baked"/>
+				<texture_picker label="Falda" name="skirt"/>
+			</panel>
 		</panel>
 	</scroll_container>
 </floater>
diff --git a/indra/newview/skins/default/xui/es/floater_buy_currency_html.xml b/indra/newview/skins/default/xui/es/floater_buy_currency_html.xml
new file mode 100644
index 0000000000000000000000000000000000000000..08ea67d4cb82c10aa8e6070e4f6aee2af5128a4e
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/floater_buy_currency_html.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_buy_currency_html" title="COMPRAR DINERO"/>
diff --git a/indra/newview/skins/default/xui/es/floater_map.xml b/indra/newview/skins/default/xui/es/floater_map.xml
index fde4d37caf12f7dbfdf4359f302caac8a060bd23..7588380148cb1f3dcc00dabdd1faf4d94c259a7f 100644
--- a/indra/newview/skins/default/xui/es/floater_map.xml
+++ b/indra/newview/skins/default/xui/es/floater_map.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Map" title="Minimapa">
+<floater name="Map" title="">
 	<floater.string name="mini_map_north">
 		N
 	</floater.string>
diff --git a/indra/newview/skins/default/xui/es/floater_moveview.xml b/indra/newview/skins/default/xui/es/floater_moveview.xml
index 7cb41d3f5bf402489d385552d7310da1d1f46246..258f84c36193e26ccab433cc809250aa7daeebe1 100644
--- a/indra/newview/skins/default/xui/es/floater_moveview.xml
+++ b/indra/newview/skins/default/xui/es/floater_moveview.xml
@@ -6,18 +6,48 @@
 	<string name="walk_back_tooltip">
 		Caminar de espaldas (cursor abajo o S)
 	</string>
+	<string name="walk_left_tooltip">
+		Caminar a la izq. (pulsa Mayúsculas + cursor izq. o A)
+	</string>
+	<string name="walk_right_tooltip">
+		Caminar a la der. (pulsa Mayúsculas + cursor der. o D)
+	</string>
 	<string name="run_forward_tooltip">
 		Correr hacia adelante (cursor arriba o W)
 	</string>
 	<string name="run_back_tooltip">
 		Correr de espaldas (cursor abajo o S)
 	</string>
+	<string name="run_left_tooltip">
+		Correr a la izq. (pulsa Mayúsculas + cursor izq. o A)
+	</string>
+	<string name="run_right_tooltip">
+		Correr a la der. (pulsa Mayúsculas + cursor der. o D)
+	</string>
 	<string name="fly_forward_tooltip">
 		Volar hacia adelante (cursor arriba o W)
 	</string>
 	<string name="fly_back_tooltip">
 		Volar hacia atrás (cursor abajo o S)
 	</string>
+	<string name="fly_left_tooltip">
+		Volar a la izq. (pulsa Mayúsculas + cursor izq. o A)
+	</string>
+	<string name="fly_right_tooltip">
+		Volar a la der. (pulsa Mayúsculas + cursor der. o D)
+	</string>
+	<string name="fly_up_tooltip">
+		Volar (pulsa E para subir)
+	</string>
+	<string name="fly_down_tooltip">
+		Volar (pulsa C para descender)
+	</string>
+	<string name="jump_tooltip">
+		Saltar (pulsa E)
+	</string>
+	<string name="crouch_tooltip">
+		Agacharse (pulsa C)
+	</string>
 	<string name="walk_title">
 		Caminar
 	</string>
@@ -28,10 +58,12 @@
 		Volar
 	</string>
 	<panel name="panel_actions">
+		<button label="" label_selected="" name="move up btn" tool_tip="Volar (pulsa E para subir)"/>
 		<button label="" label_selected="" name="turn left btn" tool_tip="Girar a la izq. (cursor izq. o A)"/>
+		<joystick_slide name="move left btn" tool_tip="Caminar a la izq. (pulsa Mayúsculas + cursor izq. o A)"/>
+		<button label="" label_selected="" name="move down btn" tool_tip="Volar (pulsa C para descender)"/>
 		<button label="" label_selected="" name="turn right btn" tool_tip="Girar a la der. (cursor der. o D)"/>
-		<button label="" label_selected="" name="move up btn" tool_tip="Volar: pulsa E para subir"/>
-		<button label="" label_selected="" name="move down btn" tool_tip="Volar: pulsa C para descender"/>
+		<joystick_slide name="move right btn" tool_tip="Caminar a la der. (pulsa Mayúsculas + cursor der. o D)"/>
 		<joystick_turn name="forward btn" tool_tip="Caminar hacia adelante (cursor arriba o W)"/>
 		<joystick_turn name="backward btn" tool_tip="Caminar de espaldas (cursor abajo o S)"/>
 	</panel>
diff --git a/indra/newview/skins/default/xui/es/floater_preview_notecard.xml b/indra/newview/skins/default/xui/es/floater_preview_notecard.xml
index 57ec5eb7b47b8468d4da70af203df70e54ac0260..d05a023279c4f1a5e6ce6078a69bb071b0e13adf 100644
--- a/indra/newview/skins/default/xui/es/floater_preview_notecard.xml
+++ b/indra/newview/skins/default/xui/es/floater_preview_notecard.xml
@@ -9,9 +9,6 @@
 	<floater.string name="Title">
 		Nota: [NAME]
 	</floater.string>
-	<floater.string label="Guardar" label_selected="Guardar" name="Save">
-		Guardar
-	</floater.string>
 	<text name="desc txt">
 		Descripción:
 	</text>
@@ -19,4 +16,5 @@
 		Cargando...
 	</text_editor>
 	<button label="Guardar" label_selected="Guardar" name="Save"/>
+	<button label="Borrar" label_selected="Borrar" name="Delete"/>
 </floater>
diff --git a/indra/newview/skins/default/xui/es/floater_tools.xml b/indra/newview/skins/default/xui/es/floater_tools.xml
index 5dc527c29a423870a9cb8cef7831d00986907383..9637544f4e01bdc96426424b849b9edd0ea9dc02 100644
--- a/indra/newview/skins/default/xui/es/floater_tools.xml
+++ b/indra/newview/skins/default/xui/es/floater_tools.xml
@@ -67,8 +67,8 @@
 	<text name="RenderingCost" tool_tip="Muestra cuánto se calcula que cuesta renderizar este objeto">
 		þ: [COUNT]
 	</text>
-	<check_box name="checkbox uniform"/>
-	<text name="checkbox uniform label">
+	<check_box label="" name="checkbox uniform"/>
+	<text label="Estirar ambos lados" name="checkbox uniform label">
 		Estirar ambos lados
 	</text>
 	<check_box initial_value="true" label="Estirar las texturas" name="checkbox stretch textures"/>
@@ -397,8 +397,7 @@
 			<text name="glow label">
 				Resplandor
 			</text>
-			<check_box bottom_delta="-21" label="Brillo al 
-máximo" name="checkbox fullbright"/>
+			<check_box bottom_delta="-21" label="Brillo al  máximo" name="checkbox fullbright"/>
 			<text name="tex gen">
 				Detallado
 			</text>
@@ -479,14 +478,7 @@ máximo" name="checkbox fullbright"/>
 			Área: [AREA] m²
 		</text>
 		<button label="Acerca del terreno" label_selected="Acerca del terreno" name="button about land"/>
-		<check_box label="Mostrar los propietarios" name="checkbox show owners" tool_tip="El color de las parcelas es según su propietario: 
-
-Verde = Su terreno 
-Agua = Terreno de sus grupos 
-Rojo = Propiedad de otros 
-Amarillo = En venta 
-Morado = Para subasta 
-Gris = Público"/>
+		<check_box label="Mostrar los propietarios" name="checkbox show owners" tool_tip="El color de las parcelas es según su propietario:   Verde = Su terreno  Agua = Terreno de sus grupos  Rojo = Propiedad de otros  Amarillo = En venta  Morado = Para subasta  Gris = Público"/>
 		<text name="label_parcel_modify">
 			Modificar la parcela
 		</text>
diff --git a/indra/newview/skins/default/xui/es/menu_attachment_self.xml b/indra/newview/skins/default/xui/es/menu_attachment_self.xml
index 650ac7885513952de9cb40bc7cee150c5fcd6180..afac8d7fe904579b2e363b46a4d3b88b42d56b49 100644
--- a/indra/newview/skins/default/xui/es/menu_attachment_self.xml
+++ b/indra/newview/skins/default/xui/es/menu_attachment_self.xml
@@ -5,7 +5,7 @@
 	<menu_item_call label="Quitar" name="Detach"/>
 	<menu_item_call label="Soltar" name="Drop"/>
 	<menu_item_call label="Levantarme" name="Stand Up"/>
-	<menu_item_call label="Mi apariencia" name="Appearance..."/>
+	<menu_item_call label="Cambiar vestuario" name="Change Outfit"/>
 	<menu_item_call label="Mis amigos" name="Friends..."/>
 	<menu_item_call label="Mis grupos" name="Groups..."/>
 	<menu_item_call label="Mi perfil" name="Profile..."/>
diff --git a/indra/newview/skins/default/xui/es/menu_avatar_self.xml b/indra/newview/skins/default/xui/es/menu_avatar_self.xml
index 5b7249843937e4a19337cf9be37e17d6edf76788..d347a7d0c4de6782e16d35fe0b3037f021179bd5 100644
--- a/indra/newview/skins/default/xui/es/menu_avatar_self.xml
+++ b/indra/newview/skins/default/xui/es/menu_avatar_self.xml
@@ -20,7 +20,9 @@
 		<context_menu label="Desanexar  â–¶" name="Object Detach"/>
 		<menu_item_call label="Quitarse todo" name="Detach All"/>
 	</context_menu>
-	<menu_item_call label="Mi apariencia" name="Appearance..."/>
+	<menu_item_call label="Cambiar vestuario" name="Chenge Outfit"/>
+	<menu_item_call label="Editar mi vestuario" name="Edit Outfit"/>
+	<menu_item_call label="Editar mi anatomía" name="Edit My Shape"/>
 	<menu_item_call label="Mis amigos" name="Friends..."/>
 	<menu_item_call label="Mis grupos" name="Groups..."/>
 	<menu_item_call label="Mi perfil" name="Profile..."/>
diff --git a/indra/newview/skins/default/xui/es/menu_bottomtray.xml b/indra/newview/skins/default/xui/es/menu_bottomtray.xml
index 816956388226cdf46f132ad148fac4d3b34044f8..62683f3076b2b596e4dfc48842119618d4b26955 100644
--- a/indra/newview/skins/default/xui/es/menu_bottomtray.xml
+++ b/indra/newview/skins/default/xui/es/menu_bottomtray.xml
@@ -4,6 +4,11 @@
 	<menu_item_check label="Botón Moverse" name="ShowMoveButton"/>
 	<menu_item_check label="Botón Vista" name="ShowCameraButton"/>
 	<menu_item_check label="Botón Foto" name="ShowSnapshotButton"/>
+	<menu_item_check label="Botón Barra lateral" name="ShowSidebarButton"/>
+	<menu_item_check label="Botón Construir" name="ShowBuildButton"/>
+	<menu_item_check label="Botón Buscar" name="ShowSearchButton"/>
+	<menu_item_check label="Botón Mapa" name="ShowWorldMapButton"/>
+	<menu_item_check label="Botón Minimapa" name="ShowMiniMapButton"/>
 	<menu_item_call label="Cortar" name="NearbyChatBar_Cut"/>
 	<menu_item_call label="Copiar" name="NearbyChatBar_Copy"/>
 	<menu_item_call label="Pegar" name="NearbyChatBar_Paste"/>
diff --git a/indra/newview/skins/default/xui/es/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/es/menu_inspect_self_gear.xml
index af5c17d7cbdcd8cc688f1ba9e99e764548e7dceb..4b56984541a18b3bf520c28d3699e9797d18ff7b 100644
--- a/indra/newview/skins/default/xui/es/menu_inspect_self_gear.xml
+++ b/indra/newview/skins/default/xui/es/menu_inspect_self_gear.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <menu name="Gear Menu">
 	<menu_item_call label="Levantarme" name="stand_up"/>
-	<menu_item_call label="Mi apariencia" name="my_appearance"/>
+	<menu_item_call label="Cambiar vestuario" name="change_outfit"/>
 	<menu_item_call label="Mi perfil" name="my_profile"/>
 	<menu_item_call label="Mis amigos" name="my_friends"/>
 	<menu_item_call label="Mis grupos" name="my_groups"/>
diff --git a/indra/newview/skins/default/xui/es/menu_inventory.xml b/indra/newview/skins/default/xui/es/menu_inventory.xml
index ca992fd525da9316e3ef1f79d95215a3a3798112..bbee88f600b5ff137e136272b3e0943263009e46 100644
--- a/indra/newview/skins/default/xui/es/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/es/menu_inventory.xml
@@ -54,6 +54,7 @@
 	<menu_item_call label="Eliminar el ítem" name="Purge Item"/>
 	<menu_item_call label="Restaurar el ítem" name="Restore Item"/>
 	<menu_item_call label="Abrir" name="Open"/>
+	<menu_item_call label="Abrir original" name="Open Original"/>
 	<menu_item_call label="Propiedades" name="Properties"/>
 	<menu_item_call label="Renombrar" name="Rename"/>
 	<menu_item_call label="Copiar la UUID" name="Copy Asset UUID"/>
diff --git a/indra/newview/skins/default/xui/es/menu_login.xml b/indra/newview/skins/default/xui/es/menu_login.xml
index 101cddc6aa990aab824e94ead5f94f3d0f647044..5386f82ee5e8302d79cad0e193c9c39f14faab7f 100644
--- a/indra/newview/skins/default/xui/es/menu_login.xml
+++ b/indra/newview/skins/default/xui/es/menu_login.xml
@@ -2,7 +2,7 @@
 <menu_bar name="Login Menu">
 	<menu label="Yo" name="File">
 		<menu_item_call label="Preferencias" name="Preferences..."/>
-		<menu_item_call label="Salir" name="Quit"/>
+		<menu_item_call label="Salir de [APP_NAME]" name="Quit"/>
 	</menu>
 	<menu label="Ayuda" name="Help">
 		<menu_item_call label="Ayuda de [SECOND_LIFE]" name="Second Life Help"/>
diff --git a/indra/newview/skins/default/xui/es/menu_participant_list.xml b/indra/newview/skins/default/xui/es/menu_participant_list.xml
index 0985f308ae71748c05e4f1b460e9a9e93ca753a9..fd8bd05230482a68b2e5b3b05e7b015626cc7f54 100644
--- a/indra/newview/skins/default/xui/es/menu_participant_list.xml
+++ b/indra/newview/skins/default/xui/es/menu_participant_list.xml
@@ -14,8 +14,8 @@
 	<context_menu label="Opciones del moderador &gt;" name="Moderator Options">
 		<menu_item_check label="Permitir el chat de texto" name="AllowTextChat"/>
 		<menu_item_call label="Ignorar a este participante" name="ModerateVoiceMuteSelected"/>
-		<menu_item_call label="Silenciar a todos los demás" name="ModerateVoiceMuteOthers"/>
 		<menu_item_call label="Quitar el silencio a este participante" name="ModerateVoiceUnMuteSelected"/>
-		<menu_item_call label="Quitar el silencio a todos los demás" name="ModerateVoiceUnMuteOthers"/>
+		<menu_item_call label="Silenciar a todos" name="ModerateVoiceMute"/>
+		<menu_item_call label="Quitar el silencio a todos" name="ModerateVoiceUnmute"/>
 	</context_menu>
 </context_menu>
diff --git a/indra/newview/skins/default/xui/es/menu_viewer.xml b/indra/newview/skins/default/xui/es/menu_viewer.xml
index c9ae4def46eef1d9166333e10dc07ab55ddb05f8..1bc3e981ce3cb8247980c8528e93e13539af4ebd 100644
--- a/indra/newview/skins/default/xui/es/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/es/menu_viewer.xml
@@ -7,7 +7,7 @@
 		</menu_item_call>
 		<menu_item_call label="Comprar L$" name="Buy and Sell L$"/>
 		<menu_item_call label="Mi perfil" name="Profile"/>
-		<menu_item_call label="Mi apariencia" name="Appearance"/>
+		<menu_item_call label="Cambiar vestuario" name="ChangeOutfit"/>
 		<menu_item_check label="Mi Inventario" name="Inventory"/>
 		<menu_item_check label="Mi Inventario" name="ShowSidetrayInventory"/>
 		<menu_item_check label="Mis gestos" name="Gestures"/>
@@ -162,6 +162,7 @@
 			<menu_item_check label="Objetos flexibles" name="Flexible Objects"/>
 		</menu>
 		<menu_item_check label="Ejecutar múltiples temas" name="Run Multiple Threads"/>
+		<menu_item_check label="Usar Plugin Read Thread" name="Use Plugin Read Thread"/>
 		<menu_item_call label="Vaciar la caché de grupo" name="ClearGroupCache"/>
 		<menu_item_check label="Vista subjetiva suavizada" name="Mouse Smoothing"/>
 		<menu label="Atajos de teclado" name="Shortcuts">
@@ -188,7 +189,6 @@
 			<menu_item_call label="Acercar el zoom" name="Zoom In"/>
 			<menu_item_call label="Zoom por defecto" name="Zoom Default"/>
 			<menu_item_call label="Alejar el zoom" name="Zoom Out"/>
-			<menu_item_call label="Pantalla completa" name="Toggle Fullscreen"/>
 		</menu>
 		<menu_item_call label="Mostrar las configuraciones del depurador" name="Debug Settings"/>
 		<menu_item_check label="Mostrar el menú &apos;Develop&apos;" name="Debug Mode"/>
diff --git a/indra/newview/skins/default/xui/es/notifications.xml b/indra/newview/skins/default/xui/es/notifications.xml
index 49f30ae8077249c93b43c3f1043592daf1007032..47dc31f5f4f59bf8225725cf2498a11b69c9a280 100644
--- a/indra/newview/skins/default/xui/es/notifications.xml
+++ b/indra/newview/skins/default/xui/es/notifications.xml
@@ -323,6 +323,9 @@ Necesitas una cuenta para entrar en [SECOND_LIFE]. ¿Quieres crear una ahora?
 		</url>
 		<usetemplate name="okcancelbuttons" notext="Volver a intentarlo" yestext="Crear una cuenta nueva"/>
 	</notification>
+	<notification name="InvalidCredentialFormat">
+		Escribe el nombre y apellido de tu avatar en el campo Nombre de usuario e inicia sesión otra vez.
+	</notification>
 	<notification name="AddClassified">
 		Los anuncios clasificados aparecen durante una semana en la sección &apos;Clasificados&apos; de la búsqueda y en [http://secondlife.com/community/classifieds secondlife.com].
 Rellena tu anuncio y pulsa &apos;Publicar...&apos; para añadirlo al directorio.
@@ -611,6 +614,11 @@ Podría ser [VALIDS]
 	<notification name="CannotEncodeFile">
 		No se puede codificar el archivo: [FILE]
 	</notification>
+	<notification name="CorruptedProtectedDataStore">
+		No se pueden leer los datos protegidos, por lo que se están restaurando.
+   Esto puede deberse a un cambio de configuración de la red.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
 	<notification name="CorruptResourceFile">
 		Archivo con los recursos corruptos: [FILE]
 	</notification>
@@ -973,6 +981,12 @@ en TODO EL TERRENO de este sim?
 
 Por favor, elige un pago mayor.
 	</notification>
+	<notification name="ConfirmItemDeleteHasLinks">
+		Por lo menos uno  de los elementos seleccionados contiene vínculos que le señalan. Si eliminas este elemento, los vínculos dejarán de funcionar permanentemente. Lo más recomendable es eliminar primero los vínculos.
+
+¿Estás seguro de que quieres eliminar los elementos?
+		<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
+	</notification>
 	<notification name="ConfirmObjectDeleteLock">
 		Al menos uno de los ítems que has seleccionado está bloqueado.
 
@@ -1124,6 +1138,42 @@ Por favor, elige el avatar masculino o femenino.
 Puedes cambiar más adelante tu elección.
 		<usetemplate name="okcancelbuttons" notext="Mujer" yestext="Varón"/>
 	</notification>
+	<notification name="CantTeleportToGrid">
+		No se puede hacer el teleporte a [SLURL] porque se encuentra en una cuadrícula ([GRID]) diferente de la actual ([CURRENT_GRID]). Cierra el visor y vuelve a intentarlo.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="GeneralCertificateError">
+		No se puede establecer la conexión con el servidor.
+[REASON]
+
+Nombre del asunto: [SUBJECT_NAME_STRING]
+Nombre del emisor: [ISSUER_NAME_STRING]
+Válido desde: [VALID_FROM]
+Válido hasta: [VALID_TO]
+Huella digital MD5: [SHA1_DIGEST]
+Huella digital SHA1: [MD5_DIGEST]
+Uso de la clave: [KEYUSAGE]
+Uso de clave extendida: [EXTENDEDKEYUSAGE]
+Identificador de clave de asunto: [SUBJECTKEYIDENTIFIER]
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="TrustCertificateError">
+		La autoridad de certificación de este servidor se desconoce.
+
+Información del certificado:
+Nombre del asunto: [SUBJECT_NAME_STRING]
+Nombre del emisor: [ISSUER_NAME_STRING]
+Válido desde: [VALID_FROM]
+Válido hasta: [VALID_TO]
+Huella digital MD5: [SHA1_DIGEST]
+Huella digital SHA1: [MD5_DIGEST]
+Uso de la clave: [KEYUSAGE]
+Uso de clave extendida: [EXTENDEDKEYUSAGE]
+Identificador de clave de asunto: [SUBJECTKEYIDENTIFIER]
+
+¿Deseas confiar en esta autoridad?
+		<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Confiar"/>
+	</notification>
 	<notification name="NotEnoughCurrency">
 		[NAME] cuesta [PRICE] L$. No tienes suficientes L$ para hacer eso.
 	</notification>
@@ -1519,7 +1569,7 @@ Por favor, comprueba que tienes instalado el último visor, y dirígete a la Bas
 	<notification name="RegionEntryAccessBlocked_Change">
 		No estás autorizado en esta región por tus preferencias sobre el nivel de calificación.
 
-Puedes pulsar &apos;Cambiar las Preferencias&apos; para incrementar las preferencias del nivel de calificación y, así, poder entrar. En adelante, podrás buscar y acceder a contenido [REGIONMATURITY]. Si más adelante quieres deshacer este cambio, ve a Yo &gt; Preferencias &gt; General.
+Pulsa &apos;Cambiar las preferencias&apos; para incrementar las preferencias del nivel de calificación y obtener acceso inmediato. Esto te permitirá buscar contenidos [REGIONMATURITY] y tener acceso a ellos. Si prefieres cambiar esta opción más adelante, puedes hacerlo desde Yo &gt; Preferencias &gt; General.
 		<form name="form">
 			<button name="OK" text="Cambiar las preferencias"/>
 			<button default="true" name="Cancel" text="Cerrar"/>
@@ -1527,7 +1577,7 @@ Puedes pulsar &apos;Cambiar las Preferencias&apos; para incrementar las preferen
 		</form>
 	</notification>
 	<notification name="PreferredMaturityChanged">
-		Tu preferencia actual de calificación es [RATING].
+		Tu preferencia de nivel de calificación actual es [RATING].
 	</notification>
 	<notification name="LandClaimAccessBlocked">
 		No puedes reclamar este terreno por su nivel de calificación. Puede deberse a que no hay información validada de tu edad.
@@ -2281,15 +2331,6 @@ Por favor, vuelve a intentarlo en unos momentos.
 	</notification>
 	<notification name="ObjectGiveItem">
 		Un objeto de nombre [OBJECTFROMNAME], propiedad de [NAME_SLURL], te ha dado este [OBJECTTYPE]:
-[ITEM_SLURL]
-		<form name="form">
-			<button name="Keep" text="Guardar"/>
-			<button name="Discard" text="Descartar"/>
-			<button name="Mute" text="Ignorar"/>
-		</form>
-	</notification>
-	<notification name="ObjectGiveItemUnknownUser">
-		Un objeto de nombre [OBJECTFROMNAME] propiedad de (un Residente desconocido) te ha dado este [OBJECTTYPE]:
 [ITEM_SLURL]
 		<form name="form">
 			<button name="Keep" text="Guardar"/>
@@ -2608,8 +2649,51 @@ Se mostrará cuando haya suficiente espacio.
 	<notification name="ShareNotification">
 		Arrastrar ítems desde el inventario hasta una persona en el perfil del residente.
 	</notification>
+	<notification name="DeedToGroupFail">
+		Error de transferencia a grupo.
+	</notification>
 	<notification name="AvatarRezNotification">
-		Avatar de &apos;[NAME]&apos; obtenido en [TIME] segs.
+		( [EXISTENCE] segundos vivo)
+El avatar &apos;[NAME]&apos; tardó [TIME] segundos en dejar de aparecer como nube.
+	</notification>
+	<notification name="AvatarRezSelfNotification">
+		( [EXISTENCE] segundos vivo)
+Has terminado de texturizar tu vestuario en [TIME] segundos.
+	</notification>
+	<notification name="AvatarRezCloudNotification">
+		( [EXISTENCE] segundos vivo)
+El avatar &apos;[NAME]&apos; se convirtió en nube.
+	</notification>
+	<notification name="AvatarRezArrivedNotification">
+		( [EXISTENCE] segundos vivo)
+Apareció el avatar &apos;[NAME]&apos;.
+	</notification>
+	<notification name="AvatarRezLeftCloudNotification">
+		( [EXISTENCE] segundos vivo)
+El avatar &apos;[NAME]&apos; salió al cabo de [TIME] segundos como nube.
+	</notification>
+	<notification name="AvatarRezEnteredAppearanceNotification">
+		( [EXISTENCE] segundos vivo)
+El avatar &apos;[NAME]&apos; ya está en modo de edición de apariencia.
+	</notification>
+	<notification name="AvatarRezLeftAppearanceNotification">
+		( [EXISTENCE] segundos vivo)
+El avatar &apos;[NAME]&apos; desactivó el modo de apariencia.
+	</notification>
+	<notification name="AvatarRezLeftNotification">
+		( [EXISTENCE] segundos vivo)
+El avatar &apos;[NAME]&apos; ya estaba totalmente cargado al salir.
+	</notification>
+	<notification name="ConfirmLeaveCall">
+		¿Estás seguro de que deseas salir de esta multiconferencia?
+		<usetemplate ignoretext="Confirma antes de salir de la llamada" name="okcancelignore" notext="No" yestext="Sí"/>
+	</notification>
+	<notification name="ConfirmMuteAll">
+		Has seleccionado silenciar a todos los participantes en una multiconferencia.
+Si lo haces, todos los residentes que se unan posteriormente a la llamada también serán silenciados, incluso cuando abandones la conferencia.
+
+¿Deseas silenciar a todos?
+		<usetemplate ignoretext="Confirma que deseas silenciar a todos los participantes en una multiconferencia." name="okcancelignore" notext="OK" yestext="Cancelar"/>
 	</notification>
 	<global name="UnsupportedCPU">
 		- La velocidad de tu CPU no cumple los requerimientos mínimos.
diff --git a/indra/newview/skins/default/xui/es/panel_body_parts_list_item.xml b/indra/newview/skins/default/xui/es/panel_body_parts_list_item.xml
new file mode 100644
index 0000000000000000000000000000000000000000..de764d802536dff05f2ee19232c0e22f96c295ca
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/panel_body_parts_list_item.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="wearable_item">
+	<text name="item_name" value="..."/>
+</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_bodyparts_list_button_bar.xml b/indra/newview/skins/default/xui/es/panel_bodyparts_list_button_bar.xml
new file mode 100644
index 0000000000000000000000000000000000000000..66ae7d868bf7329bfc290d76e8d34facd67884cd
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/panel_bodyparts_list_button_bar.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="clothing_list_button_bar_panel">
+	<button label="Cambiar" name="switch_btn"/>
+	<button label="Comprar &gt;" name="bodyparts_shop_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_bottomtray.xml b/indra/newview/skins/default/xui/es/panel_bottomtray.xml
index 74dc17f3de0d3e0638c79495587576f8b4d9488e..5ea09ed79580b3119cccbadc36430a8e7ce5a8ec 100644
--- a/indra/newview/skins/default/xui/es/panel_bottomtray.xml
+++ b/indra/newview/skins/default/xui/es/panel_bottomtray.xml
@@ -1,11 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="bottom_tray">
-	<string name="SpeakBtnToolTip">
-		Activa/Desactiva el micrófono
-	</string>
-	<string name="VoiceControlBtnToolTip">
-		Muestra/Oculta el panel del control de voz
-	</string>
+	<string name="SpeakBtnToolTip" value="Activa/Desactiva el micrófono"/>
+	<string name="VoiceControlBtnToolTip" value="Muestra/Oculta el panel del control de voz"/>
 	<layout_stack name="toolbar_stack">
 		<layout_panel name="speak_panel">
 			<talk_button name="talk">
@@ -24,6 +20,21 @@
 		<layout_panel name="snapshot_panel">
 			<button label="" name="snapshots" tool_tip="Hacer una foto"/>
 		</layout_panel>
+		<layout_panel name="sidebar_btn_panel">
+			<button label="Barra lateral" name="sidebar_btn" tool_tip="Muestra/Oculta la barra lateral"/>
+		</layout_panel>
+		<layout_panel name="build_btn_panel">
+			<button label="Construir" name="build_btn" tool_tip="Muestra/Oculta las herramientas de construcción"/>
+		</layout_panel>
+		<layout_panel name="search_btn_panel">
+			<button label="Buscar" name="search_btn" tool_tip="Muestra/Oculta la búsqueda"/>
+		</layout_panel>
+		<layout_panel name="world_map_btn_panel">
+			<button label="Mapa" name="world_map_btn" tool_tip="Muestra/Oculta el mapa del mundo"/>
+		</layout_panel>
+		<layout_panel name="mini_map_btn_panel">
+			<button label="Minimapa" name="mini_map_btn" tool_tip="Muestra/Oculta el minimapa"/>
+		</layout_panel>
 		<layout_panel name="im_well_panel">
 			<chiclet_im_well name="im_well">
 				<button name="Unread IM messages" tool_tip="Conversaciones"/>
diff --git a/indra/newview/skins/default/xui/es/panel_clothing_list_button_bar.xml b/indra/newview/skins/default/xui/es/panel_clothing_list_button_bar.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d3b3d31bd92509b4b38c5fa31951bbff6a0536a3
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/panel_clothing_list_button_bar.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="clothing_list_button_bar_panel">
+	<button label="Añadir +" name="add_btn"/>
+	<button label="Comprar &gt;" name="clothing_shop_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_clothing_list_item.xml b/indra/newview/skins/default/xui/es/panel_clothing_list_item.xml
new file mode 100644
index 0000000000000000000000000000000000000000..de764d802536dff05f2ee19232c0e22f96c295ca
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/panel_clothing_list_item.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="wearable_item">
+	<text name="item_name" value="..."/>
+</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_cof_wearables.xml b/indra/newview/skins/default/xui/es/panel_cof_wearables.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a2994894c1facfe171df410147cb9c553fbbe404
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/panel_cof_wearables.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="cof_wearables">
+	<accordion name="cof_wearables_accordion">
+		<accordion_tab name="tab_attachments" title="Adjuntos"/>
+		<accordion_tab name="tab_clothing" title="Ropa"/>
+		<accordion_tab name="tab_body_parts" title="Partes del cuerpo"/>
+	</accordion>
+</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_deletable_wearable_list_item.xml b/indra/newview/skins/default/xui/es/panel_deletable_wearable_list_item.xml
new file mode 100644
index 0000000000000000000000000000000000000000..91d90a5660a1af9dce63ce2a245c8e1859f8107d
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/panel_deletable_wearable_list_item.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="deletable_wearable_item">
+	<text name="item_name" value="..."/>
+</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_dummy_clothing_list_item.xml b/indra/newview/skins/default/xui/es/panel_dummy_clothing_list_item.xml
new file mode 100644
index 0000000000000000000000000000000000000000..6af84de0c7bb9b6b09bcc86345aa13564e2ca26e
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/panel_dummy_clothing_list_item.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="dummy_clothing_item">
+	<text name="item_name" value="..."/>
+</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_edit_shape.xml b/indra/newview/skins/default/xui/es/panel_edit_shape.xml
index 1a13f928a29f06952044bad7376048c502554a2c..e64ec9ab7ce018315768f042d85338272351f60d 100644
--- a/indra/newview/skins/default/xui/es/panel_edit_shape.xml
+++ b/indra/newview/skins/default/xui/es/panel_edit_shape.xml
@@ -1,14 +1,8 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="edit_shape_panel">
-	<panel name="avatar_sex_panel">
-		<text name="gender_text">
-			Sexo:
-		</text>
-		<radio_group name="sex_radio">
-			<radio_item label="Mujer" name="radio"/>
-			<radio_item label="Varón" name="radio2"/>
-		</radio_group>
-	</panel>
+	<text name="avatar_height">
+		[HEIGHT] metros de alto
+	</text>
 	<panel label="Camisa" name="accordion_panel">
 		<accordion name="wearable_accordion">
 			<accordion_tab name="shape_body_tab" title="Cuerpo"/>
diff --git a/indra/newview/skins/default/xui/es/panel_edit_tattoo.xml b/indra/newview/skins/default/xui/es/panel_edit_tattoo.xml
index e5e72a11e496adae57a778fa91858b4a898e6d50..8776dd6c1030f16bc3c9be9b4f20ff32c7281468 100644
--- a/indra/newview/skins/default/xui/es/panel_edit_tattoo.xml
+++ b/indra/newview/skins/default/xui/es/panel_edit_tattoo.xml
@@ -4,5 +4,6 @@
 		<texture_picker label="Tatuaje de la cabeza" name="Head Tattoo" tool_tip="Pulsa para elegir una imagen"/>
 		<texture_picker label="Tatuaje superior" name="Upper Tattoo" tool_tip="Pulsa para elegir una imagen"/>
 		<texture_picker label="Tatuaje inferior" name="Lower Tattoo" tool_tip="Pulsa para elegir una imagen"/>
+		<color_swatch label="Color/Tinte" name="Color/Tint" tool_tip="Pulsa para abrir el selector de color"/>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/es/panel_edit_wearable.xml b/indra/newview/skins/default/xui/es/panel_edit_wearable.xml
index 97ab566f4da859277f90ddf19c4031ac10ef13f8..8bafe0f29a90e52ba1ce9ac71cdc6e8d9228ff66 100644
--- a/indra/newview/skins/default/xui/es/panel_edit_wearable.xml
+++ b/indra/newview/skins/default/xui/es/panel_edit_wearable.xml
@@ -93,6 +93,12 @@
 	<text name="edit_wearable_title" value="Modificando la anatomía"/>
 	<panel label="Camisa" name="wearable_type_panel">
 		<text name="description_text" value="Anatomía:"/>
+		<radio_group name="sex_radio">
+			<radio_item label="" name="sex_male" tool_tip="Varón" value="1"/>
+			<radio_item label="" name="sex_female" tool_tip="Mujer" value="0"/>
+		</radio_group>
+		<icon name="male_icon" tool_tip="Varón"/>
+		<icon name="female_icon" tool_tip="Mujer"/>
 	</panel>
 	<panel label="gear_buttom_panel" name="gear_buttom_panel">
 		<button name="friends_viewsort_btn" tool_tip="Opciones"/>
diff --git a/indra/newview/skins/default/xui/es/panel_group_land_money.xml b/indra/newview/skins/default/xui/es/panel_group_land_money.xml
index b763e2e74d3aca3806206045b7dcb3839a603fcd..f307126b03f4b190678aef8937383c9b913e7046 100644
--- a/indra/newview/skins/default/xui/es/panel_group_land_money.xml
+++ b/indra/newview/skins/default/xui/es/panel_group_land_money.xml
@@ -6,6 +6,9 @@
 	<panel.string name="cant_view_group_land_text">
 		No tienes permiso para ver el terreno propiedad del grupo
 	</panel.string>
+	<panel.string name="epmty_view_group_land_text">
+		No hay entradas
+	</panel.string>
 	<panel.string name="cant_view_group_accounting_text">
 		No tienes permiso para ver la información de la cuenta del grupo.
 	</panel.string>
diff --git a/indra/newview/skins/default/xui/es/panel_group_notices.xml b/indra/newview/skins/default/xui/es/panel_group_notices.xml
index 58e19197825191c29a2f73157f757e5b4b1d5ff3..7a3dbad59e96a04e1a16865cdac33d2960c7d0bd 100644
--- a/indra/newview/skins/default/xui/es/panel_group_notices.xml
+++ b/indra/newview/skins/default/xui/es/panel_group_notices.xml
@@ -36,6 +36,7 @@ El máximo es de 200 por día y grupo.
 		<text name="string">
 			Arrastra y suelta aquí un ítem para adjuntarlo:
 		</text>
+		<button label="Inventario" name="open_inventory" tool_tip="Abrir inventario"/>
 		<button label="Quitar" label_selected="Remover lo anexado" name="remove_attachment" tool_tip="Quita el adjunto de tu aviso"/>
 		<button label="Enviar" label_selected="Enviar" name="send_notice"/>
 		<group_drop_target name="drop_target" tool_tip="Para enviar un ítem con el aviso, arrástralo desde tu inventario hasta este cajetín. Para poder adjuntarlo, debes tener permiso para copiarlo y transferirlo."/>
diff --git a/indra/newview/skins/default/xui/es/panel_login.xml b/indra/newview/skins/default/xui/es/panel_login.xml
index 0e4f118605011260936471819ad8952797c11f19..4b45a6f7b871346ee75d1a640f2e2e99407de950 100644
--- a/indra/newview/skins/default/xui/es/panel_login.xml
+++ b/indra/newview/skins/default/xui/es/panel_login.xml
@@ -8,18 +8,15 @@
 	</panel.string>
 	<layout_stack name="login_widgets">
 		<layout_panel name="login">
-			<text name="first_name_text">
-				Nombre:
+			<text name="username_text">
+				Nombre de usuario:
 			</text>
-			<line_editor label="Nombre" name="first_name_edit" tool_tip="[SECOND_LIFE] First Name"/>
-			<text name="last_name_text">
-				Apellido:
-			</text>
-			<line_editor label="Apellido" name="last_name_edit" tool_tip="[SECOND_LIFE] Last Name"/>
+			<line_editor label="Nombre de usuario" name="username_edit" tool_tip="Nombre de usuario de [SECOND_LIFE]"/>
 			<text name="password_text">
 				Contraseña:
 			</text>
 			<check_box label="Recordar la contraseña" name="remember_check"/>
+			<button label="Iniciar sesión" name="connect_btn"/>
 			<text name="start_location_text">
 				Empezar en:
 			</text>
@@ -27,7 +24,6 @@
 				<combo_box.item label="Mi última posición" name="MyLastLocation"/>
 				<combo_box.item label="Mi Base" name="MyHome"/>
 			</combo_box>
-			<button label="Iniciar sesión" name="connect_btn"/>
 		</layout_panel>
 		<layout_panel name="links">
 			<text name="create_new_account_text">
diff --git a/indra/newview/skins/default/xui/es/panel_main_inventory.xml b/indra/newview/skins/default/xui/es/panel_main_inventory.xml
index 3a1e96a82196362beabef4615d24a16c78baa0f9..7e318a150bc0d77f2e5aee4e5b4084125a15a3c2 100644
--- a/indra/newview/skins/default/xui/es/panel_main_inventory.xml
+++ b/indra/newview/skins/default/xui/es/panel_main_inventory.xml
@@ -9,62 +9,20 @@
 	<text name="ItemcountText">
 		Ítems:
 	</text>
-	<menu_bar name="Inventory Menu">
-		<menu label="Archivo" name="File">
-			<menu_item_call label="Abrir" name="Open"/>
-			<menu label="Subir" name="upload">
-				<menu_item_call label="Imagen ([COST] L$)..." name="Upload Image"/>
-				<menu_item_call label="Sonido ([COST] L$)..." name="Upload Sound"/>
-				<menu_item_call label="Animación ([COST] L$)..." name="Upload Animation"/>
-				<menu_item_call label="Masivo ([COST] L$ por archivo)..." name="Bulk Upload"/>
-			</menu>
-			<menu_item_call label="Ventana nueva" name="New Window"/>
-			<menu_item_call label="Ver los filtros" name="Show Filters"/>
-			<menu_item_call label="Restablecer los filtros" name="Reset Current"/>
-			<menu_item_call label="Cerrar todas las carpetas" name="Close All Folders"/>
-			<menu_item_call label="Vaciar la Papelera" name="Empty Trash"/>
-			<menu_item_call label="Vaciar Objetos Perdidos" name="Empty Lost And Found"/>
-		</menu>
-		<menu label="Crear" name="Create">
-			<menu_item_call label="Carpeta nueva" name="New Folder"/>
-			<menu_item_call label="Script nuevo" name="New Script"/>
-			<menu_item_call label="Nota nueva" name="New Note"/>
-			<menu_item_call label="Gesto nuevo" name="New Gesture"/>
-			<menu label="Ropas nuevas" name="New Clothes">
-				<menu_item_call label="Camisa nueva" name="New Shirt"/>
-				<menu_item_call label="Pantalón nuevo" name="New Pants"/>
-				<menu_item_call label="Zapatos nuevos" name="New Shoes"/>
-				<menu_item_call label="Calcetines nuevos" name="New Socks"/>
-				<menu_item_call label="Chaqueta nueva" name="New Jacket"/>
-				<menu_item_call label="Falda nueva" name="New Skirt"/>
-				<menu_item_call label="Guantes nuevos" name="New Gloves"/>
-				<menu_item_call label="Camiseta nueva" name="New Undershirt"/>
-				<menu_item_call label="Ropa interior nueva" name="New Underpants"/>
-				<menu_item_call label="Nueva Alfa" name="New Alpha"/>
-				<menu_item_call label="Tatuaje nuevo" name="New Tattoo"/>
-			</menu>
-			<menu label="Nuevas partes del cuerpo" name="New Body Parts">
-				<menu_item_call label="Forma nueva" name="New Shape"/>
-				<menu_item_call label="Piel nueva" name="New Skin"/>
-				<menu_item_call label="Pelo nuevo" name="New Hair"/>
-				<menu_item_call label="Ojos nuevos" name="New Eyes"/>
-			</menu>
-		</menu>
-		<menu label="Ordenar" name="Sort">
-			<menu_item_check label="Alfabéticamente" name="By Name"/>
-			<menu_item_check label="Cronológicamente" name="By Date"/>
-			<menu_item_check label="Las carpetas siempre alfabéticamente" name="Folders Always By Name"/>
-			<menu_item_check label="Las carpetas del sistema, arriba" name="System Folders To Top"/>
-		</menu>
-	</menu_bar>
 	<filter_editor label="Filtrar" name="inventory search editor"/>
 	<tab_container name="inventory filter tabs">
 		<inventory_panel label="Todos los ítems" name="All Items"/>
-		<inventory_panel label="Ítems recientes" name="Recent Items"/>
+		<recent_inventory_panel label="Ítems recientes" name="Recent Items"/>
 	</tab_container>
-	<panel name="bottom_panel">
-		<button name="options_gear_btn" tool_tip="Mostrar más opciones"/>
-		<button name="add_btn" tool_tip="Añadir un ítem nuevo"/>
-		<dnd_button name="trash_btn" tool_tip="Quitar el ítem seleccionado"/>
-	</panel>
+	<layout_stack name="bottom_panel">
+		<layout_panel name="options_gear_btn_panel">
+			<button name="options_gear_btn" tool_tip="Ver más opciones"/>
+		</layout_panel>
+		<layout_panel name="add_btn_panel">
+			<button name="add_btn" tool_tip="Añadir un ítem nuevo"/>
+		</layout_panel>
+		<layout_panel name="trash_btn_panel">
+			<dnd_button name="trash_btn" tool_tip="Quitar el ítem seleccionado"/>
+		</layout_panel>
+	</layout_stack>
 </panel>
diff --git a/indra/newview/skins/default/xui/es/panel_outfit_edit.xml b/indra/newview/skins/default/xui/es/panel_outfit_edit.xml
index 484f51569b88468b147eb1f00b58840b0f20de31..b7c0e840b21d566c43cdd839a70adc1193562d34 100644
--- a/indra/newview/skins/default/xui/es/panel_outfit_edit.xml
+++ b/indra/newview/skins/default/xui/es/panel_outfit_edit.xml
@@ -2,6 +2,8 @@
 <!-- Side tray Outfit Edit panel -->
 <panel label="Editar el vestuario" name="outfit_edit">
 	<string name="No Outfit" value="No hay vestuario"/>
+	<string name="unsaved_changes" value="Cambios sin guardar"/>
+	<string name="now_editing" value="Editando"/>
 	<panel.string name="not_available">
 		(No disp.)
 	</panel.string>
@@ -21,18 +23,13 @@
 	</panel>
 	<layout_stack name="im_panels">
 		<layout_panel label="Panel de control de los MI" name="outfit_wearables_panel">
-			<scroll_list name="look_items_list">
-				<scroll_list.columns label="Vestuario" name="look_item"/>
-				<scroll_list.columns label="Orden de los ítems del vestuario" name="look_item_sort"/>
-			</scroll_list>
 			<panel label="bottom_panel" name="edit_panel"/>
 		</layout_panel>
 		<layout_panel name="add_wearables_panel">
-			<filter_editor label="Filtrar" name="look_item_filter"/>
+			<text name="add_to_outfit_label" value="Añadir a vestuario:"/>
 			<layout_stack name="filter_panels">
-				<layout_panel label="Panel de control de los MI" name="filter_button_panel">
-					<text name="add_to_outfit_label" value="Añadir al vestuario:"/>
-					<button label="o" name="filter_button"/>
+				<layout_panel label="Panel de control de MI" name="filter_panel">
+					<filter_editor label="Filtrar" name="look_item_filter"/>
 				</layout_panel>
 			</layout_stack>
 			<panel label="add_wearables_button_bar" name="add_wearables_button_bar">
diff --git a/indra/newview/skins/default/xui/es/panel_people.xml b/indra/newview/skins/default/xui/es/panel_people.xml
index ad14d8ac9dfce2fa2bac0b4cb2c282e47e54bd14..13f584ff28e5d2ca33d46403407879eefe9cb7b1 100644
--- a/indra/newview/skins/default/xui/es/panel_people.xml
+++ b/indra/newview/skins/default/xui/es/panel_people.xml
@@ -2,9 +2,9 @@
 <!-- Side tray panel -->
 <panel label="Gente" name="people_panel">
 	<string name="no_recent_people" value="No hay nadie reciente. ¿Buscas gente con la que pasar el rato? Prueba la [secondlife:///app/search/people Búsqueda] o el [secondlife:///app/worldmap Mapa del mundo]."/>
-	<string name="no_filtered_recent_people" value="¿No encontraste lo que buscabas? Prueba la [secondlife:///app/search/people Búsqueda]."/>
+	<string name="no_filtered_recent_people" value="¿No encuentras lo que buscas? Prueba con [secondlife:///app/search/people/[SEARCH_TERM] Buscar]."/>
 	<string name="no_one_near" value="No hay nadie cerca. ¿Buscas gente con la que pasar el rato? Prueba la [secondlife:///app/search/people Búsqueda] o el [secondlife:///app/worldmap Mapa del mundo]."/>
-	<string name="no_one_filtered_near" value="¿No encontraste lo que buscabas? Prueba la [secondlife:///app/search/people Búsqueda]."/>
+	<string name="no_one_filtered_near" value="¿No encuentras lo que buscas? Prueba con [secondlife:///app/search/people/[SEARCH_TERM] Buscar]."/>
 	<string name="no_friends_online" value="No hay amigos conectados"/>
 	<string name="no_friends" value="No hay amigos"/>
 	<string name="no_friends_msg">
@@ -12,11 +12,11 @@
 ¿Buscas gente con la que pasar el rato? Prueba el [secondlife:///app/worldmap Mapa del mundo].
 	</string>
 	<string name="no_filtered_friends_msg">
-		¿No encontraste lo que buscabas? Prueba la [secondlife:///app/search/people Búsqueda].
+		¿No encuentras lo que buscas? Prueba con [secondlife:///app/search/people/[SEARCH_TERM] Buscar].
 	</string>
 	<string name="people_filter_label" value="Filtrar a la gente"/>
 	<string name="groups_filter_label" value="Filtrar a los grupos"/>
-	<string name="no_filtered_groups_msg" value="¿No encontraste lo que buscabas? Prueba la [secondlife:///app/search/groups Búsqueda]."/>
+	<string name="no_filtered_groups_msg" value="¿No encuentras lo que buscas? Prueba con [secondlife:///app/search/groups/[SEARCH_TERM] Buscar]."/>
 	<string name="no_groups_msg" value="¿Buscas grupos en que participar? Prueba la [secondlife:///app/search/groups Búsqueda]."/>
 	<filter_editor label="Filtrar" name="filter_input"/>
 	<tab_container name="tabs">
@@ -55,7 +55,7 @@
 		<button label="Perfil" name="view_profile_btn" tool_tip="Mostrar imágenes, grupos y otra información del Residente"/>
 		<button label="MI" name="im_btn" tool_tip="Abrir un mensaje instantáneo"/>
 		<button label="Llamar" name="call_btn" tool_tip="Llamar a este Residente"/>
-		<button label="Compartir" name="share_btn"/>
+		<button label="Compartir" name="share_btn" tool_tip="Compartir un objeto del inventario"/>
 		<button label="Teleportar" name="teleport_btn" tool_tip="Ofrecer teleporte"/>
 		<button label="Perfil del grupo" name="group_info_btn" tool_tip="Ver la información del grupo"/>
 		<button label="Chat de grupo" name="chat_btn" tool_tip="Abrir el chat"/>
diff --git a/indra/newview/skins/default/xui/es/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/es/panel_preferences_advanced.xml
index e0ce03d09afa9154a02007386c5a5a1692116d2d..c3a23c74c4c048fd22c41847f58fdd0f1331c5f9 100644
--- a/indra/newview/skins/default/xui/es/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/es/panel_preferences_advanced.xml
@@ -13,6 +13,7 @@
 	</text>
 	<check_box label="Construir/Editar" name="edit_camera_movement" tool_tip="Usar el posicionamiento automático de la cámara al entrar en o salir del modo de edición"/>
 	<check_box label="Apariencia" name="appearance_camera_movement" tool_tip="Usar el posicionamiento automático de la cámara mientras se está editando"/>
+	<check_box initial_value="1" label="Barra lateral" name="appearance_sidebar_positioning" tool_tip="Usar el posicionamiento automático de la cámara para la barra lateral"/>
 	<check_box label="Verme en vista subjetiva" name="first_person_avatar_visible"/>
 	<check_box label="Las teclas del cursor siempre para moverme" name="arrow_keys_move_avatar_check"/>
 	<check_box label="Correr siempre: atajo de teclado" name="tap_tap_hold_to_run"/>
diff --git a/indra/newview/skins/default/xui/es/panel_preferences_chat.xml b/indra/newview/skins/default/xui/es/panel_preferences_chat.xml
index 7a65eb32bc2c2482847ee47f65ce05619109457c..fc8c9087889b9eccb63dae97221d8cc1b0406c07 100644
--- a/indra/newview/skins/default/xui/es/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/es/panel_preferences_chat.xml
@@ -45,11 +45,12 @@
 	</text>
 	<check_box initial_value="true" label="Ejecutar la animación de escribir al hacerlo en el chat" name="play_typing_animation"/>
 	<check_box label="Cuando estoy desconectado, enviarme los MI al correo-e" name="send_im_to_email"/>
+	<check_box label="Permitir el historial de MI y chat en texto sin formato" name="plain_text_chat_history"/>
 	<text name="show_ims_in_label">
-		Mostrar los MI en: 
+		Mostrar los MI en:
 	</text>
 	<text name="requires_restart_label">
-		 (requiere reiniciar)
+		(requiere reiniciar)
 	</text>
 	<radio_group name="chat_window" tool_tip="Muestra tus mensajes instantáneos en varias ventanas flotantes o en una sola con varias pestañas (requiere que reinicies)">
 		<radio_item label="Varias ventanas" name="radio" value="0"/>
diff --git a/indra/newview/skins/default/xui/es/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/es/panel_preferences_graphics1.xml
index 56d473e87222e99f20a5d46806ed25154f628e87..183c007a0cfa48b42a1124100ec301beade0bf7b 100644
--- a/indra/newview/skins/default/xui/es/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/es/panel_preferences_graphics1.xml
@@ -1,8 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel label="Gráficos" name="Display panel">
-	<text name="UI Size:">
-		Tamaño de la UI:
-	</text>
 	<text name="QualitySpeed">
 		Calidad y velocidad:
 	</text>
@@ -52,6 +49,10 @@
 			m
 		</text>
 		<slider label="Núm. máx. de partículas:" name="MaxParticleCount"/>
+		<slider label="Distancia de dibujo máxima del avatar:" name="MaxAvatarDrawDistance"/>
+		<text name="DrawDistanceMeterText3">
+			m
+		</text>
 		<slider label="Calidad de procesamiento:" name="RenderPostProcess"/>
 		<text name="MeshDetailText">
 			Detalle de la malla:
@@ -87,8 +88,8 @@
 			Detalles de iluminación:
 		</text>
 		<radio_group name="LightingDetailRadio">
-			<radio_item label="Sólo el Sol y la Luna" name="SunMoon"/>
-			<radio_item label="Puntos de luz cercanos" name="LocalLights"/>
+			<radio_item label="Sólo el Sol y la Luna" name="SunMoon" value="0"/>
+			<radio_item label="Puntos de luz cercanos" name="LocalLights" value="1"/>
 		</radio_group>
 		<text name="TerrainDetailText">
 			Detalle del terreno:
diff --git a/indra/newview/skins/default/xui/es/sidepanel_appearance.xml b/indra/newview/skins/default/xui/es/sidepanel_appearance.xml
index 0c7f63d662d83899701d4790b244f1743867602c..db5d47c11e61c68f01647ff948bb0ad3d38f2406 100644
--- a/indra/newview/skins/default/xui/es/sidepanel_appearance.xml
+++ b/indra/newview/skins/default/xui/es/sidepanel_appearance.xml
@@ -1,9 +1,13 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel label="Vestuarios" name="appearance panel">
 	<string name="No Outfit" value="No hay vestuario"/>
+	<string name="Unsaved Changes" value="Cambios sin guardar"/>
+	<string name="Now Wearing" value="Llevas puesto..."/>
 	<panel name="panel_currentlook">
-		<text name="currentlook_title">
-			(sin guardar)
+		<button label="F" name="editappearance_btn"/>
+		<button label="O" name="openoutfit_btn"/>
+		<text name="currentlook_status">
+			(Estado)
 		</text>
 	</panel>
 	<filter_editor label="Filtrar los vestuarios" name="Filter"/>
diff --git a/indra/newview/skins/default/xui/es/sidepanel_inventory.xml b/indra/newview/skins/default/xui/es/sidepanel_inventory.xml
index ff4d201d01a73b8ce9a32792a6e47167b4092da8..dcaddd8e42d49693d0c3d35c76108d221a7e4b80 100644
--- a/indra/newview/skins/default/xui/es/sidepanel_inventory.xml
+++ b/indra/newview/skins/default/xui/es/sidepanel_inventory.xml
@@ -4,6 +4,7 @@
 		<panel name="button_panel">
 			<button label="Perfil" name="info_btn"/>
 			<button label="Compartir" name="share_btn"/>
+			<button label="Comprar" name="shop_btn"/>
 			<button label="Ponerme" name="wear_btn"/>
 			<button label="Play" name="play_btn"/>
 			<button label="Teleporte" name="teleport_btn"/>
diff --git a/indra/newview/skins/default/xui/es/strings.xml b/indra/newview/skins/default/xui/es/strings.xml
index 27700b2efe31e4eb86ad59ed67c0db067c902fe0..885e974b3b7750013949abbd39601c6ded1a01dd 100644
--- a/indra/newview/skins/default/xui/es/strings.xml
+++ b/indra/newview/skins/default/xui/es/strings.xml
@@ -88,6 +88,24 @@
 	<string name="LoginDownloadingClothing">
 		Descargando la ropa...
 	</string>
+	<string name="InvalidCertificate">
+		El servidor devolvió un certificado no válido o dañado. Ponte en contacto con el administrador de la cuadrícula.
+	</string>
+	<string name="CertInvalidHostname">
+		El nombre de host utilizado para acceder al servidor no es válido. Comprueba tu SLURL o el nombre de host de la cuadrícula.
+	</string>
+	<string name="CertExpired">
+		Parece que el certificado que devolvió la cuadrícula está caducado. Comprueba el reloj del sistema o consulta al administrador de la cuadrícula.
+	</string>
+	<string name="CertKeyUsage">
+		El certificado que devolvió el servidor no puede utilizarse para SSL. Ponte en contacto con el administrador de la cuadrícula.
+	</string>
+	<string name="CertBasicConstraints">
+		La cadena de certificado del servidor contenía demasiados certificados. Ponte en contacto con el administrador de la cuadrícula.
+	</string>
+	<string name="CertInvalidSignature">
+		No se pudo verificar la firma del certificado devuelta por el servidor de la cuadrícula. Ponte en contacto con el administrador de la cuadrícula.
+	</string>
 	<string name="LoginFailedNoNetwork">
 		Error de red: no se ha podido conectar; por favor, revisa tu conexión a Internet.
 	</string>
@@ -819,6 +837,42 @@
 	<string name="invalid">
 		inválido/a
 	</string>
+	<string name="shirt_not_worn">
+		Camisa no puesta
+	</string>
+	<string name="pants_not_worn">
+		Pantalones no puestos
+	</string>
+	<string name="shoes_not_worn">
+		Zapatos no puestos
+	</string>
+	<string name="socks_not_worn">
+		Calcetines no puestos
+	</string>
+	<string name="jacket_not_worn">
+		Chaqueta no puesta
+	</string>
+	<string name="gloves_not_worn">
+		Guantes no puestos
+	</string>
+	<string name="undershirt_not_worn">
+		Camiseta no puesta
+	</string>
+	<string name="underpants_not_worn">
+		Ropa interior no puesta
+	</string>
+	<string name="skirt_not_worn">
+		Falda no puesta
+	</string>
+	<string name="alpha_not_worn">
+		Alfa no puesta
+	</string>
+	<string name="tattoo_not_worn">
+		Tatuaje no puesto
+	</string>
+	<string name="invalid_not_worn">
+		no válido/a
+	</string>
 	<string name="NewWearable">
 		Nuevo [WEARABLE_ITEM]
 	</string>
@@ -889,7 +943,10 @@
 		Pulsa ESC para salir de la vista subjetiva
 	</string>
 	<string name="InventoryNoMatchingItems">
-		¿No encontraste lo que buscabas? Prueba en la [secondlife:///app/search/all Búsqueda].
+		¿No encuentras lo que buscas? Prueba con [secondlife:///app/search/all/[SEARCH_TERM] Buscar].
+	</string>
+	<string name="PlacesNoMatchingItems">
+		¿No encuentras lo que buscas? Prueba con [secondlife:///app/search/places/[SEARCH_TERM] Buscar].
 	</string>
 	<string name="FavoritesNoMatchingItems">
 		Arrastra aquí un hito para tenerlo en tus favoritos.
@@ -919,6 +976,7 @@
 	<string name="Wave" value="Onda"/>
 	<string name="HelloAvatar" value="¡Hola, avatar!"/>
 	<string name="ViewAllGestures" value="Ver todos &gt;&gt;"/>
+	<string name="GetMoreGestures" value="Obtener más &gt;&gt;"/>
 	<string name="Animations" value="Animaciones,"/>
 	<string name="Calling Cards" value="Tarjetas de visita,"/>
 	<string name="Clothing" value="Ropa,"/>
@@ -1531,16 +1589,19 @@
 		El Residente al que has enviado un mensaje ha solicitado que no se le moleste porque está en modo ocupado.    Podrá ver tu mensaje más adelante, ya que éste aparecerá en su panel de MI.
 	</string>
 	<string name="MuteByName">
-		(por el nombre)
+		(Por el nombre)
 	</string>
 	<string name="MuteAgent">
 		(Residente)
 	</string>
 	<string name="MuteObject">
-		(objeto)
+		(Objeto)
 	</string>
 	<string name="MuteGroup">
-		(grupo)
+		(Grupo)
+	</string>
+	<string name="MuteExternal">
+		(Externo)
 	</string>
 	<string name="RegionNoCovenant">
 		No se ha aportado un contrato para este estado.
@@ -3300,11 +3361,14 @@ Si sigues recibiendo este mensaje, contacta con [SUPPORT_SITE].
 	<string name="answered_call">
 		Han respondido a tu llamada
 	</string>
-	<string name="started_call">
-		Llamada de voz iniciada
+	<string name="you_started_call">
+		Has iniciado una llamada de voz
+	</string>
+	<string name="you_joined_call">
+		Has entrado en la llamada de voz
 	</string>
-	<string name="joined_call">
-		Entrando a la llamada de voz
+	<string name="name_started_call">
+		[NAME] inició una llamada de voz
 	</string>
 	<string name="ringing-im">
 		Haciendo la llamada de voz...
@@ -3503,6 +3567,90 @@ Denuncia de infracción
 	<string name="Contents">
 		Contenidos
 	</string>
+	<string name="Gesture">
+		Gestos
+	</string>
+	<string name="Male Gestures">
+		Gestos de hombre
+	</string>
+	<string name="Female Gestures">
+		Gestos de mujer
+	</string>
+	<string name="Other Gestures">
+		Otros gestos
+	</string>
+	<string name="Speech Gestures">
+		Gestos al hablar
+	</string>
+	<string name="Common Gestures">
+		Gestos corrientes
+	</string>
+	<string name="Male - Excuse me">
+		Varón - Disculpa
+	</string>
+	<string name="Male - Get lost">
+		Varón – Déjame en paz
+	</string>
+	<string name="Male - Blow kiss">
+		Varón - Lanzar un beso
+	</string>
+	<string name="Male - Boo">
+		Varón - Abucheo
+	</string>
+	<string name="Male - Bored">
+		Varón - Aburrido
+	</string>
+	<string name="Male - Hey">
+		Varón – ¡Eh!
+	</string>
+	<string name="Male - Laugh">
+		Varón - Risa
+	</string>
+	<string name="Male - Repulsed">
+		Varón - Rechazo
+	</string>
+	<string name="Male - Shrug">
+		Varón - Encogimiento de hombros
+	</string>
+	<string name="Male - Stick tougue out">
+		Varón - Sacando la lengua
+	</string>
+	<string name="Male - Wow">
+		Varón - Admiración
+	</string>
+	<string name="FeMale - Excuse me">
+		Mujer - Disculpa
+	</string>
+	<string name="FeMale - Get lost">
+		Mujer – Déjame en paz
+	</string>
+	<string name="FeMale - Blow kiss">
+		Mujer - Lanzar un beso
+	</string>
+	<string name="FeMale - Boo">
+		Mujer - Abucheo
+	</string>
+	<string name="Female - Bored">
+		Mujer - Aburrida
+	</string>
+	<string name="Female - Hey">
+		Mujer - ¡Eh!
+	</string>
+	<string name="Female - Laugh">
+		Mujer - Risa
+	</string>
+	<string name="Female - Repulsed">
+		Mujer - Rechazo
+	</string>
+	<string name="Female - Shrug">
+		Mujer - Encogimiento de hombros
+	</string>
+	<string name="Female - Stick tougue out">
+		Mujer - Sacando la lengua
+	</string>
+	<string name="Female - Wow">
+		Mujer - Admiración
+	</string>
 	<string name="AvatarBirthDateFormat">
 		[day,datetime,slt]/[mthnum,datetime,slt]/[year,datetime,slt]
 	</string>
diff --git a/indra/newview/skins/default/xui/fr/floater_preview_gesture.xml b/indra/newview/skins/default/xui/fr/floater_preview_gesture.xml
index 7133f8754caeeb4330103e5a86e48ff17f2e6576..1d164ac661a7a75e70c6f291c5d1af74554d35e3 100644
--- a/indra/newview/skins/default/xui/fr/floater_preview_gesture.xml
+++ b/indra/newview/skins/default/xui/fr/floater_preview_gesture.xml
@@ -31,10 +31,10 @@
 		Description :
 	</text>
 	<text name="trigger_label">
-		Déclencheur :
+		Déclench. :
 	</text>
 	<text name="replace_text" tool_tip="Remplacer les raccourcis avec ces mots. Par exemple, remplacer le mot-clé « salut » par « bonjour » fera dire « je venais dire bonjour » au lieu de « je venais dire salut » dans le chat, et déclenchera le geste.">
-		Remplacer par :
+		Rempl. par :
 	</text>
 	<line_editor left="310" name="replace_editor" tool_tip="Remplacer les raccourcis avec ces mots. Par exemple, remplacer le mot-clé « salut » par « bonjour » fera dire « je venais dire bonjour » au lieu de « je venais dire salut » dans le chat, et déclenchera le geste" width="120"/>
 	<text name="key_label">
@@ -50,20 +50,20 @@
 	<text name="steps_label">
 		Étapes :
 	</text>
-	<button label="Vers le haut" name="up_btn"/>
-	<button label="Vers le bas" name="down_btn"/>
+	<button label="Haut" name="up_btn"/>
+	<button label="Bas" name="down_btn"/>
 	<button label="Supprimer" name="delete_btn"/>
 	<radio_group name="animation_trigger_type">
 		<radio_item label="Lancer" name="start"/>
 		<radio_item label="Arrêter" name="stop"/>
 	</radio_group>
 	<check_box label="jusqu&apos;à la fin des animations" name="wait_anim_check"/>
-	<check_box label="temps en secondes" name="wait_time_check"/>
+	<check_box label="temps (sec)" name="wait_time_check"/>
 	<line_editor left_delta="130" name="wait_time_editor"/>
 	<text name="help_label">
 		Toutes les étapes ont lieu en même temps si vous n&apos;ajoutez pas d&apos;étapes d&apos;attente.
 	</text>
-	<check_box label="Actifs" name="active_check" tool_tip="Les gestes actifs peuvent être déclenchés en saisissant leur raccourci dans le chat ou en appuyant sur les raccourcis. Les gestes deviennent généralement inactifs lorsqu&apos;il y a un conflit entre les raccourcis."/>
+	<check_box label="Actif" name="active_check" tool_tip="Les gestes actifs peuvent être déclenchés en saisissant leur raccourci dans le chat ou en appuyant sur les raccourcis. Les gestes deviennent généralement inactifs lorsqu&apos;il y a un conflit entre les raccourcis."/>
 	<button label="Prévisualiser" name="preview_btn" width="86"/>
 	<button label="Enregistrer" left_delta="96" name="save_btn" width="86"/>
 </floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_tools.xml b/indra/newview/skins/default/xui/fr/floater_tools.xml
index c9b8c42dfb06f052ce3fb203b721a080c9433f85..26d097d5493477d8eeb7510b02f9e6a88622af21 100644
--- a/indra/newview/skins/default/xui/fr/floater_tools.xml
+++ b/indra/newview/skins/default/xui/fr/floater_tools.xml
@@ -37,7 +37,7 @@
 		Référence
 	</floater.string>
 	<floater.string name="grid_attachment_text">
-		Pièce-jointe
+		Pièce jointe
 	</floater.string>
 	<button label="" label_selected="" name="button focus" tool_tip="Mise au point"/>
 	<button label="" label_selected="" name="button move" tool_tip="Déplacer"/>
diff --git a/indra/newview/skins/default/xui/fr/notifications.xml b/indra/newview/skins/default/xui/fr/notifications.xml
index 4c4c01f34a032bce046b303f8eb04ec539b1f493..bb1c4242ee3ae96f767e10d3cb8b60ec433f6123 100644
--- a/indra/newview/skins/default/xui/fr/notifications.xml
+++ b/indra/newview/skins/default/xui/fr/notifications.xml
@@ -1831,7 +1831,7 @@ Linden Lab
 		Les composantes requises suivantes ne se trouvent pas dans [FLOATER]:
 [COMPONENTS]
 	</notification>
-	<notification label="Remplacer la pièce-jointe existante" name="ReplaceAttachment">
+	<notification label="Remplacer la pièce jointe existante" name="ReplaceAttachment">
 		Vous avez déjà un objet sur cette partie du corps.
 Voulez-vous le remplacer par l&apos;objet sélectionné ?
 		<form name="form">
diff --git a/indra/newview/skins/default/xui/fr/panel_edit_pick.xml b/indra/newview/skins/default/xui/fr/panel_edit_pick.xml
index 0bbcbe833fb478f3ab9525e62b06324bd66740ee..5872b01fb0da419e98df6cbe35aadaf8a91176f4 100644
--- a/indra/newview/skins/default/xui/fr/panel_edit_pick.xml
+++ b/indra/newview/skins/default/xui/fr/panel_edit_pick.xml
@@ -1,10 +1,10 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Modifier la préférence" name="panel_edit_pick">
+<panel label="Modifier le favori" name="panel_edit_pick">
 	<panel.string name="location_notice">
 		(mise à jour après enregistrement)
 	</panel.string>
 	<text name="title">
-		Modifier la préférence
+		Modifier le favori
 	</text>
 	<scroll_container name="profile_scroll">
 		<panel name="scroll_content_panel">
diff --git a/indra/newview/skins/default/xui/fr/panel_group_control_panel.xml b/indra/newview/skins/default/xui/fr/panel_group_control_panel.xml
index 69403939aa2c22746cae945eb93087aac2280637..3e66b3c72a14ba7cada610b9669fd1dc72959472 100644
--- a/indra/newview/skins/default/xui/fr/panel_group_control_panel.xml
+++ b/indra/newview/skins/default/xui/fr/panel_group_control_panel.xml
@@ -11,7 +11,7 @@
 			<button label="Quitter l&apos;appel" name="end_call_btn"/>
 		</layout_panel>
 		<layout_panel name="voice_ctrls_btn_panel">
-			<button label="Ouvrir les contrôles vocaux" name="voice_ctrls_btn"/>
+			<button label="Ouvrir contrôles vocaux" name="voice_ctrls_btn"/>
 		</layout_panel>
 	</layout_stack>
 </panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_group_notices.xml b/indra/newview/skins/default/xui/fr/panel_group_notices.xml
index bcb6abcac69ded2a77b903f5462ac000d4acedb4..5ea7ba192bb01b7ce997c5a7e89dd979319e970e 100644
--- a/indra/newview/skins/default/xui/fr/panel_group_notices.xml
+++ b/indra/newview/skins/default/xui/fr/panel_group_notices.xml
@@ -36,14 +36,14 @@ Vous pouvez désactiver la réception des notices dans l&apos;onglet Général.
 		</text>
 		<text_editor name="create_message"/>
 		<text name="lbl5">
-			Pièce-jointe :
+			Pièce jointe :
 		</text>
 		<line_editor name="create_inventory_name"/>
 		<text name="string">
 			Faire glisser l&apos;objet et le déposer ici pour le joindre :
 		</text>
 		<button label="Inventaire" name="open_inventory" tool_tip="Ouvrir l&apos;inventaire"/>
-		<button label="Supprimer" label_selected="Supprimer pièce-jointe" name="remove_attachment" tool_tip="Supprimer la pièce jointe de votre notification"/>
+		<button label="Supprimer" label_selected="Supprimer pièce jointe" name="remove_attachment" tool_tip="Supprimer la pièce jointe de votre notification"/>
 		<button label="Envoyer" label_selected="Envoyer" left="200" name="send_notice" width="100"/>
 		<group_drop_target name="drop_target" tool_tip="Faites glisser un objet de l&apos;inventaire jusqu&apos;à cette case pour l&apos;envoyer avec la notice. Vous devez avoir l&apos;autorisation de copier et transférer l&apos;objet pour pouvoir le joindre."/>
 	</panel>
@@ -61,6 +61,6 @@ Vous pouvez désactiver la réception des notices dans l&apos;onglet Général.
 			Message :
 		</text>
 		<line_editor left="128" name="view_inventory_name" width="256"/>
-		<button label="Ouvrir la pièce jointe" label_selected="Ouvrir pièce-jointe" name="open_attachment" width="118"/>
+		<button label="Ouvrir pièce jointe" label_selected="Ouvrir pièce jointe" name="open_attachment" width="118"/>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_notes.xml b/indra/newview/skins/default/xui/fr/panel_notes.xml
index f4e4f8a4aba64bcdbfbb6d65933c4aa3330970f5..1609b6c9d37d10855e00a924c355e7a6129514ee 100644
--- a/indra/newview/skins/default/xui/fr/panel_notes.xml
+++ b/indra/newview/skins/default/xui/fr/panel_notes.xml
@@ -17,7 +17,7 @@
 			<button label="IM" name="im" width="30" tool_tip="Ouvrir une session IM"/>
 			<button label="Appeler" name="call" width="60" tool_tip="Appeler ce résident"/>
 			<button label="Carte" name="show_on_map_btn" tool_tip="Afficher le résident sur la carte"/>
-			<button label="Téléporter" name="teleport" tool_tip="Proposez une téléportation"/>
+			<button label="Téléporter" name="teleport" tool_tip="Proposer une téléportation"/>
 		</layout_panel>
 	</layout_stack>
 </panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_people.xml b/indra/newview/skins/default/xui/fr/panel_people.xml
index 186ca517721844a6a69f8220b4147fd83efbfe19..f7eb803d4a9f832ec425a91a60294b55f39462dd 100644
--- a/indra/newview/skins/default/xui/fr/panel_people.xml
+++ b/indra/newview/skins/default/xui/fr/panel_people.xml
@@ -56,7 +56,7 @@ Pour rechercher des résidents avec qui passer du temps, utilisez [secondlife://
 		<button label="IM" name="im_btn" tool_tip="Ouvrir une session IM"/>
 		<button label="Appeler" name="call_btn" tool_tip="Appeler ce résident"/>
 		<button label="Partager" name="share_btn" tool_tip="Partager un article d&apos;inventaire"/>
-		<button label="Téléporter" name="teleport_btn" tool_tip="Proposez une téléportation"/>
+		<button label="Téléporter" name="teleport_btn" tool_tip="Proposer une téléportation"/>
 		<button label="Profil" name="group_info_btn" tool_tip="Voir le profil du groupe"/>
 		<button label="Chat" name="chat_btn" tool_tip="Ouvrir une session de chat"/>
 		<button label="Appel" name="group_call_btn" tool_tip="Appeler ce groupe"/>
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/fr/panel_preferences_advanced.xml
index 2a7691ea0af913ddc54215d73612babf819b7be2..9bae9878e2995a32cde495cf15b45228614c3848 100644
--- a/indra/newview/skins/default/xui/fr/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_advanced.xml
@@ -11,7 +11,7 @@
 	<text name="heading2">
 		Positionnement automatique pour :
 	</text>
-	<check_box label="Construire/Éditer" name="edit_camera_movement" tool_tip="Utilisez le positionnement automatique de la caméra quand vous accédez au mode de modification et quand vous le quittez"/>
+	<check_box label="Construire/Modifier" name="edit_camera_movement" tool_tip="Utilisez le positionnement automatique de la caméra quand vous accédez au mode de modification et quand vous le quittez"/>
 	<check_box label="Apparence" name="appearance_camera_movement" tool_tip="Utiliser le positionnement automatique de la caméra quand je suis en mode Édition"/>
 	<check_box initial_value="1" label="Panneau latéral" name="appearance_sidebar_positioning" tool_tip="Positionnement auto de la caméra pour le panneau latéral"/>
 	<check_box label="Afficher en vue subjective" name="first_person_avatar_visible"/>
diff --git a/indra/newview/skins/default/xui/fr/panel_profile.xml b/indra/newview/skins/default/xui/fr/panel_profile.xml
index f801aee312ba648bd813124ffb31d46de2f8eb1d..f1c12c9feeb6dd9436183d3d702400701dbd767c 100644
--- a/indra/newview/skins/default/xui/fr/panel_profile.xml
+++ b/indra/newview/skins/default/xui/fr/panel_profile.xml
@@ -45,7 +45,7 @@
 			<button label="IM" name="im" tool_tip="Ouvrir une session IM"/>
 			<button label="Appeler" name="call" tool_tip="Appeler ce résident"/>
 			<button label="Carte" name="show_on_map_btn" tool_tip="Afficher le résident sur la carte"/>
-			<button label="Téléporter" name="teleport" tool_tip="Proposez une téléportation"/>
+			<button label="Téléporter" name="teleport" tool_tip="Proposer une téléportation"/>
 			<button label="▼" name="overflow_btn" tool_tip="Payer ou partager l&apos;inventaire avec le résident"/>
 		</layout_panel>
 		<layout_panel name="profile_me_buttons_panel">
diff --git a/indra/newview/skins/default/xui/fr/strings.xml b/indra/newview/skins/default/xui/fr/strings.xml
index 742f024d0d78103fb5c4f2dfd242b163a54fa469..15d5847c5850a4f616a47790716f196a8314516e 100644
--- a/indra/newview/skins/default/xui/fr/strings.xml
+++ b/indra/newview/skins/default/xui/fr/strings.xml
@@ -919,7 +919,7 @@
 		Consultez les notices précédentes ou choisissez de ne plus recevoir ces messages ici.
 	</string>
 	<string name="GroupNotifyOpenAttachment">
-		Ouvrir la pièce jointe
+		Ouvrir pièce jointe
 	</string>
 	<string name="GroupNotifySaveAttachment">
 		Enregistrer la pièce jointe
diff --git a/indra/newview/skins/default/xui/ja/floater_about.xml b/indra/newview/skins/default/xui/ja/floater_about.xml
index 31cfb5c339f4ba6d95bf34e3c2d084ee42a35871..d2765eb0c87885e484290a23c28c90928dfd31bc 100644
--- a/indra/newview/skins/default/xui/ja/floater_about.xml
+++ b/indra/newview/skins/default/xui/ja/floater_about.xml
@@ -29,7 +29,7 @@ libcurl バージョン: [LIBCURL_VERSION]
 J2C デコーダバージョン: [J2C_VERSION]
 オーディオドライババージョン: [AUDIO_DRIVER_VERSION]
 Qt Webkit バージョン: [QT_WEBKIT_VERSION]
-Vivox バージョン: [VIVOX_VERSION]
+ボイスサーバーバージョン: [VOICE_VERSION]
 	</floater.string>
 	<floater.string name="none">
 		(なし)
diff --git a/indra/newview/skins/default/xui/ja/floater_about_land.xml b/indra/newview/skins/default/xui/ja/floater_about_land.xml
index 10c27a2b33eacec3de3ddff7c80d574ada640ab5..2f5065c05fd7507c744142cc10d2beba2016f389 100644
--- a/indra/newview/skins/default/xui/ja/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/ja/floater_about_land.xml
@@ -62,6 +62,9 @@
 			<panel.string name="no_selection_text">
 				区画が選択されていません。
 			</panel.string>
+			<panel.string name="time_stamp_template">
+				[year,datetime,local] [mth,datetime,local] [day,datetime,local] [wkday,datetime,local] [hour,datetime,local]:[min,datetime,local]:[second,datetime,local]
+			</panel.string>
 			<text name="Name:">
 				名前:
 			</text>
diff --git a/indra/newview/skins/default/xui/ja/floater_avatar_textures.xml b/indra/newview/skins/default/xui/ja/floater_avatar_textures.xml
index 0ea913e66aa6816a00831f1488afa1ab5fe83d08..5c23b77498950fe0e156bd38e90f86dedd7a089c 100644
--- a/indra/newview/skins/default/xui/ja/floater_avatar_textures.xml
+++ b/indra/newview/skins/default/xui/ja/floater_avatar_textures.xml
@@ -3,44 +3,48 @@
 	<floater.string name="InvalidAvatar">
 		無効なアバター
 	</floater.string>
-	<text name="label" width="100">
-		ベークドテクスチャ
-	</text>
-	<text name="composite_label" width="128">
-		合成テクスチャ
-	</text>
-	<button label="テクスチャID一覧をコンソールに書き込む" label_selected="捨てる" name="Dump" width="200"/>
 	<scroll_container name="profile_scroll">
 		<panel name="scroll_content_panel">
-			<texture_picker label="髪" name="hair-baked"/>
-			<texture_picker label="髪" name="hair_grain"/>
-			<texture_picker label="髪のアルファ" name="hair_alpha"/>
-			<texture_picker label="é ­" name="head-baked"/>
-			<texture_picker label="メイクアップ" name="head_bodypaint"/>
-			<texture_picker label="頭部のアルファ" name="head_alpha"/>
-			<texture_picker label="頭部のタトゥー" name="head_tattoo"/>
-			<texture_picker label="ç›®" name="eyes-baked"/>
-			<texture_picker label="ç›®" name="eyes_iris"/>
-			<texture_picker label="目のアルファ" name="eyes_alpha"/>
-			<texture_picker label="上半身" name="upper-baked"/>
-			<texture_picker label="上半身のボディペイント" name="upper_bodypaint"/>
-			<texture_picker label="下着シャツ" name="upper_undershirt"/>
-			<texture_picker label="手袋" name="upper_gloves"/>
-			<texture_picker label="シャツ" name="upper_shirt"/>
-			<texture_picker label="上着" name="upper_jacket"/>
-			<texture_picker label="アルファ(上)" name="upper_alpha"/>
-			<texture_picker label="上部のタトゥー" name="upper_tattoo"/>
-			<texture_picker label="下半身" name="lower-baked"/>
-			<texture_picker label="下半身のボディペイント" name="lower_bodypaint"/>
-			<texture_picker label="下着パンツ" name="lower_underpants"/>
-			<texture_picker label="靴下" name="lower_socks"/>
-			<texture_picker label="靴" name="lower_shoes"/>
-			<texture_picker label="パンツ" name="lower_pants"/>
-			<texture_picker label="ジャケット" name="lower_jacket"/>
-			<texture_picker label="アルファ(下)" name="lower_alpha"/>
-			<texture_picker label="下部のタトゥー" name="lower_tattoo"/>
-			<texture_picker label="スカート" name="skirt-baked"/>
-			<texture_picker label="スカート" name="skirt"/>
+			<text name="label">
+				ベークド
+テクスチャ
+			</text>
+			<text name="composite_label">
+				合成
+テクスチャ
+			</text>
+			<button label="ID をコンソールにダンプ" label_selected="ダンプ" name="Dump"/>
+			<panel name="scroll_content_panel">
+				<texture_picker label="髪" name="hair-baked"/>
+				<texture_picker label="髪" name="hair_grain"/>
+				<texture_picker label="髪のアルファ" name="hair_alpha"/>
+				<texture_picker label="é ­" name="head-baked"/>
+				<texture_picker label="メイクアップ" name="head_bodypaint"/>
+				<texture_picker label="頭部のアルファ" name="head_alpha"/>
+				<texture_picker label="頭部のタトゥー" name="head_tattoo"/>
+				<texture_picker label="ç›®" name="eyes-baked"/>
+				<texture_picker label="ç›®" name="eyes_iris"/>
+				<texture_picker label="目のアルファ" name="eyes_alpha"/>
+				<texture_picker label="上半身" name="upper-baked"/>
+				<texture_picker label="ボディペイント(上)" name="upper_bodypaint"/>
+				<texture_picker label="下着シャツ" name="upper_undershirt"/>
+				<texture_picker label="手袋" name="upper_gloves"/>
+				<texture_picker label="シャツ" name="upper_shirt"/>
+				<texture_picker label="上着" name="upper_jacket"/>
+				<texture_picker label="アルファ(上)" name="upper_alpha"/>
+				<texture_picker label="上部のタトゥー" name="upper_tattoo"/>
+				<texture_picker label="下半身" name="lower-baked"/>
+				<texture_picker label="ボディペイント(下)" name="lower_bodypaint"/>
+				<texture_picker label="下着パンツ" name="lower_underpants"/>
+				<texture_picker label="靴下" name="lower_socks"/>
+				<texture_picker label="靴" name="lower_shoes"/>
+				<texture_picker label="パンツ" name="lower_pants"/>
+				<texture_picker label="ジャケット" name="lower_jacket"/>
+				<texture_picker label="アルファ(下)" name="lower_alpha"/>
+				<texture_picker label="下部のタトゥー" name="lower_tattoo"/>
+				<texture_picker label="スカート" name="skirt-baked"/>
+				<texture_picker label="スカート" name="skirt"/>
+			</panel>
 		</panel>
 	</scroll_container>
 </floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_buy_currency_html.xml b/indra/newview/skins/default/xui/ja/floater_buy_currency_html.xml
new file mode 100644
index 0000000000000000000000000000000000000000..37fd6826e5dff61d24bd40af3625f8b7420dde1e
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/floater_buy_currency_html.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_buy_currency_html" title="通貨の購入"/>
diff --git a/indra/newview/skins/default/xui/ja/floater_god_tools.xml b/indra/newview/skins/default/xui/ja/floater_god_tools.xml
index ffea9474b02b7314422071cee522a543032d0701..9e5d473db7c5126775069dcb36709683455e2c82 100644
--- a/indra/newview/skins/default/xui/ja/floater_god_tools.xml
+++ b/indra/newview/skins/default/xui/ja/floater_god_tools.xml
@@ -14,7 +14,7 @@
 			<check_box label="可視" name="check visible" tool_tip="この設定により、この地域をゴッド・モード以外でも可視にします。"/>
 			<check_box label="ダメージ" name="check damage" tool_tip="この設定により、この地域内でダメージを有効化します。"/>
 			<check_box label="トラフィック・トラッキングをブロック" name="block dwell" tool_tip="この設定により、この地域内のトラフィック計算をオフにします。"/>
-			<check_box label="土地整備をブロック" name="block terraform" tool_tip="この設定により、この地域内での土地整備を禁止"/>
+			<check_box label="地形編集をブロック" name="block terraform" tool_tip="この設定により、この地域内での土地整備を禁止"/>
 			<check_box label="サンドボックス" name="is sandbox" tool_tip="これがサンドボックス地域でも切り替え"/>
 			<button label="地形を構築する" label_selected="地形を構築する" name="Bake Terrain" tool_tip="現在の地形をデフォルトとして保存します。"/>
 			<button label="地形を元に戻す" label_selected="地形を元に戻す" name="Revert Terrain" tool_tip="現在の地形をデフォルトに置換します。"/>
diff --git a/indra/newview/skins/default/xui/ja/floater_map.xml b/indra/newview/skins/default/xui/ja/floater_map.xml
index 8d920a3c3f6f3ba9df83dbc8512de732d8431ab2..79e211c31e9d804bb6e80553db7abb267b1f11b6 100644
--- a/indra/newview/skins/default/xui/ja/floater_map.xml
+++ b/indra/newview/skins/default/xui/ja/floater_map.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Map" title="ミニマップ">
+<floater name="Map" title="">
 	<floater.string name="mini_map_north">
 		北
 	</floater.string>
diff --git a/indra/newview/skins/default/xui/ja/floater_moveview.xml b/indra/newview/skins/default/xui/ja/floater_moveview.xml
index 20aec4854171bb3d1c564be236e3e7e867fe9bdf..57ab32f486c433da80291397493c6621757db122 100644
--- a/indra/newview/skins/default/xui/ja/floater_moveview.xml
+++ b/indra/newview/skins/default/xui/ja/floater_moveview.xml
@@ -6,18 +6,48 @@
 	<string name="walk_back_tooltip">
 		後ろに歩く(下矢印か S を押す)
 	</string>
+	<string name="walk_left_tooltip">
+		左に水平移動(Shift + 左矢印か A を押す)
+	</string>
+	<string name="walk_right_tooltip">
+		右に水平移動(Shift + 右矢印か D を押す)
+	</string>
 	<string name="run_forward_tooltip">
 		前に走る(上矢印か W を押す)
 	</string>
 	<string name="run_back_tooltip">
 		後ろに走る(下矢印か S を押す)
 	</string>
+	<string name="run_left_tooltip">
+		左に水平移動(Shift + 左矢印か A を押す)
+	</string>
+	<string name="run_right_tooltip">
+		右に水平移動(Shift + 右矢印か D を押す)
+	</string>
 	<string name="fly_forward_tooltip">
 		前に飛ぶ(上矢印か W を押す)
 	</string>
 	<string name="fly_back_tooltip">
 		後ろに飛ぶ(下矢印か S を押す)
 	</string>
+	<string name="fly_left_tooltip">
+		左に水平移動(Shift + 左矢印か A を押す)
+	</string>
+	<string name="fly_right_tooltip">
+		右に水平移動(Shift + 右矢印か D を押す)
+	</string>
+	<string name="fly_up_tooltip">
+		上に移動(E を押す)
+	</string>
+	<string name="fly_down_tooltip">
+		下に移動(C を押す)
+	</string>
+	<string name="jump_tooltip">
+		ジャンプ(E を押す)
+	</string>
+	<string name="crouch_tooltip">
+		かがむ(C を押す)
+	</string>
 	<string name="walk_title">
 		歩く
 	</string>
@@ -28,10 +58,12 @@
 		飛ぶ
 	</string>
 	<panel name="panel_actions">
+		<button label="" label_selected="" name="move up btn" tool_tip="上に移動(E を押す)"/>
 		<button label="" label_selected="" name="turn left btn" tool_tip="左を向く(左矢印か A を押す)"/>
+		<joystick_slide name="move left btn" tool_tip="左に歩く(Shift + 左矢印か A を押す)"/>
+		<button label="" label_selected="" name="move down btn" tool_tip="下に移動(C を押す)"/>
 		<button label="" label_selected="" name="turn right btn" tool_tip="右を向く(右矢印か D を押す)"/>
-		<button label="" label_selected="" name="move up btn" tool_tip="飛ぶ・E を押す"/>
-		<button label="" label_selected="" name="move down btn" tool_tip="着地・C を押す"/>
+		<joystick_slide name="move right btn" tool_tip="右に歩く(Shift + 右矢印か D を押す)"/>
 		<joystick_turn name="forward btn" tool_tip="前に進む(上矢印か W を押す)"/>
 		<joystick_turn name="backward btn" tool_tip="後ろに歩く(下矢印か S を押す)"/>
 	</panel>
diff --git a/indra/newview/skins/default/xui/ja/floater_preview_notecard.xml b/indra/newview/skins/default/xui/ja/floater_preview_notecard.xml
index 6e6e04c7d82831988f14978bf292f671cf4b2ec2..ae8ae9f7b5960756796e24801e64c4c94af64a15 100644
--- a/indra/newview/skins/default/xui/ja/floater_preview_notecard.xml
+++ b/indra/newview/skins/default/xui/ja/floater_preview_notecard.xml
@@ -9,9 +9,6 @@
 	<floater.string name="Title">
 		ノートカード: [NAME]
 	</floater.string>
-	<floater.string label="保存" label_selected="保存" name="Save">
-		保存
-	</floater.string>
 	<text name="desc txt">
 		説明:
 	</text>
@@ -19,4 +16,5 @@
 		ローディング...
 	</text_editor>
 	<button label="保存" label_selected="保存" name="Save"/>
+	<button label="削除" label_selected="削除" name="Delete"/>
 </floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_tools.xml b/indra/newview/skins/default/xui/ja/floater_tools.xml
index 6c3ad99fa786d820303ebfc8fb941d7ea32b4ef8..d095dee974c541d2817cee498654420b3f565d63 100644
--- a/indra/newview/skins/default/xui/ja/floater_tools.xml
+++ b/indra/newview/skins/default/xui/ja/floater_tools.xml
@@ -67,9 +67,9 @@
 	<text name="RenderingCost" tool_tip="このオブジェクトにかかるレンダリングコストを表示">
 		þ: [COUNT]
 	</text>
-	<check_box left="116" name="checkbox uniform"/>
-	<text name="checkbox uniform label">
-		両側を引き延ばす
+	<check_box label="" left="116" name="checkbox uniform"/>
+	<text label="両側を延ばす" name="checkbox uniform label">
+		両側を延ばす
 	</text>
 	<check_box initial_value="true" label="テクスチャを引き延ばす" name="checkbox stretch textures"/>
 	<check_box initial_value="true" label="グリッドにスナップ" left_delta="27" name="checkbox snap to grid"/>
diff --git a/indra/newview/skins/default/xui/ja/menu_attachment_self.xml b/indra/newview/skins/default/xui/ja/menu_attachment_self.xml
index 72c91da47900c84b5c76dafb7e80cccfdac966b2..48200cb53f1475b3f5b19ea57e418f64bb604ed7 100644
--- a/indra/newview/skins/default/xui/ja/menu_attachment_self.xml
+++ b/indra/newview/skins/default/xui/ja/menu_attachment_self.xml
@@ -5,7 +5,7 @@
 	<menu_item_call label="取り外す" name="Detach"/>
 	<menu_item_call label="下に落とす" name="Drop"/>
 	<menu_item_call label="立ち上がる" name="Stand Up"/>
-	<menu_item_call label="容姿" name="Appearance..."/>
+	<menu_item_call label="アウトフィットを変更" name="Change Outfit"/>
 	<menu_item_call label="フレンド" name="Friends..."/>
 	<menu_item_call label="グループ" name="Groups..."/>
 	<menu_item_call label="プロフィール" name="Profile..."/>
diff --git a/indra/newview/skins/default/xui/ja/menu_avatar_self.xml b/indra/newview/skins/default/xui/ja/menu_avatar_self.xml
index c856cdccb9941debdb1b9188e6804cc6efc3daf0..6899a819b81b7e8a0b876be591babe38349db24c 100644
--- a/indra/newview/skins/default/xui/ja/menu_avatar_self.xml
+++ b/indra/newview/skins/default/xui/ja/menu_avatar_self.xml
@@ -20,7 +20,9 @@
 		<context_menu label="取り外す  ▶" name="Object Detach"/>
 		<menu_item_call label="すべて取り外す" name="Detach All"/>
 	</context_menu>
-	<menu_item_call label="容姿" name="Appearance..."/>
+	<menu_item_call label="アウトフィットを変更" name="Chenge Outfit"/>
+	<menu_item_call label="アウトフィットを編集" name="Edit Outfit"/>
+	<menu_item_call label="シェイプを編集" name="Edit My Shape"/>
 	<menu_item_call label="フレンド" name="Friends..."/>
 	<menu_item_call label="グループ" name="Groups..."/>
 	<menu_item_call label="プロフィール" name="Profile..."/>
diff --git a/indra/newview/skins/default/xui/ja/menu_bottomtray.xml b/indra/newview/skins/default/xui/ja/menu_bottomtray.xml
index ea7ba1b74129219bf815fb93c5c5efb3b797b3ef..0e69671f06e89652cdb0ca97a8a466e89c00ce21 100644
--- a/indra/newview/skins/default/xui/ja/menu_bottomtray.xml
+++ b/indra/newview/skins/default/xui/ja/menu_bottomtray.xml
@@ -4,6 +4,11 @@
 	<menu_item_check label="移動ボタン" name="ShowMoveButton"/>
 	<menu_item_check label="視界ボタン" name="ShowCameraButton"/>
 	<menu_item_check label="スナップショットボタン" name="ShowSnapshotButton"/>
+	<menu_item_check label="サイドバーのボタン" name="ShowSidebarButton"/>
+	<menu_item_check label="制作のボタン" name="ShowBuildButton"/>
+	<menu_item_check label="検索のボタン" name="ShowSearchButton"/>
+	<menu_item_check label="地図のボタン" name="ShowWorldMapButton"/>
+	<menu_item_check label="ミニマップのボタン" name="ShowMiniMapButton"/>
 	<menu_item_call label="切り取り" name="NearbyChatBar_Cut"/>
 	<menu_item_call label="コピー" name="NearbyChatBar_Copy"/>
 	<menu_item_call label="貼り付け" name="NearbyChatBar_Paste"/>
diff --git a/indra/newview/skins/default/xui/ja/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/ja/menu_inspect_self_gear.xml
index 8867e5ccd60151adb12a76bc54d8873dda536022..ee054673c590fd83160b6321ec97ef8508d690bd 100644
--- a/indra/newview/skins/default/xui/ja/menu_inspect_self_gear.xml
+++ b/indra/newview/skins/default/xui/ja/menu_inspect_self_gear.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <menu name="Gear Menu">
 	<menu_item_call label="立ち上がる" name="stand_up"/>
-	<menu_item_call label="容姿" name="my_appearance"/>
+	<menu_item_call label="アウトフィットを変更" name="change_outfit"/>
 	<menu_item_call label="プロフィール" name="my_profile"/>
 	<menu_item_call label="フレンド" name="my_friends"/>
 	<menu_item_call label="グループ" name="my_groups"/>
diff --git a/indra/newview/skins/default/xui/ja/menu_inventory.xml b/indra/newview/skins/default/xui/ja/menu_inventory.xml
index bfb5023cf76ab70aec5a13c7045f83d5f2019ff5..452d0567da243e4d1776851866f20c52e580b5fe 100644
--- a/indra/newview/skins/default/xui/ja/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/ja/menu_inventory.xml
@@ -54,6 +54,7 @@
 	<menu_item_call label="アイテムを除外する" name="Purge Item"/>
 	<menu_item_call label="アイテムを復元する" name="Restore Item"/>
 	<menu_item_call label="開く" name="Open"/>
+	<menu_item_call label="オリジナルを開きます" name="Open Original"/>
 	<menu_item_call label="プロパティ" name="Properties"/>
 	<menu_item_call label="名前を変更する" name="Rename"/>
 	<menu_item_call label="UUID をコピーする" name="Copy Asset UUID"/>
diff --git a/indra/newview/skins/default/xui/ja/menu_participant_list.xml b/indra/newview/skins/default/xui/ja/menu_participant_list.xml
index 4555bad9bacf073037cb8568962ecf2f912852c7..3ef83756cbca5a4275b3c54f4595c4093cd993e6 100644
--- a/indra/newview/skins/default/xui/ja/menu_participant_list.xml
+++ b/indra/newview/skins/default/xui/ja/menu_participant_list.xml
@@ -14,8 +14,8 @@
 	<context_menu label="モデレーターのオプション &gt;" name="Moderator Options">
 		<menu_item_check label="文字チャットを許可" name="AllowTextChat"/>
 		<menu_item_call label="この参加者をミュートする" name="ModerateVoiceMuteSelected"/>
-		<menu_item_call label="他の人全員をミュートする" name="ModerateVoiceMuteOthers"/>
 		<menu_item_call label="この参加者のミュートを解除する" name="ModerateVoiceUnMuteSelected"/>
-		<menu_item_call label="他の人全員のミュートを解除する" name="ModerateVoiceUnMuteOthers"/>
+		<menu_item_call label="全員をミュート" name="ModerateVoiceMute"/>
+		<menu_item_call label="全員のミュート解除" name="ModerateVoiceUnmute"/>
 	</context_menu>
 </context_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_viewer.xml b/indra/newview/skins/default/xui/ja/menu_viewer.xml
index 760128408dccb7167200138765c0947afd972a96..f6695d2d13608235b268c94577f78a664d49e310 100644
--- a/indra/newview/skins/default/xui/ja/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/ja/menu_viewer.xml
@@ -7,7 +7,7 @@
 		</menu_item_call>
 		<menu_item_call label="L$ の購入" name="Buy and Sell L$"/>
 		<menu_item_call label="プロフィール" name="Profile"/>
-		<menu_item_call label="容姿" name="Appearance"/>
+		<menu_item_call label="アウトフィットを変更" name="ChangeOutfit"/>
 		<menu_item_check label="持ち物" name="Inventory"/>
 		<menu_item_check label="持ち物" name="ShowSidetrayInventory"/>
 		<menu_item_check label="ジェスチャー" name="Gestures"/>
@@ -163,6 +163,7 @@
 			<menu_item_check label="フレキシブルオブジェクト" name="Flexible Objects"/>
 		</menu>
 		<menu_item_check label="マルチスレッド処理" name="Run Multiple Threads"/>
+		<menu_item_check label="Use Plugin Read Thread" name="Use Plugin Read Thread"/>
 		<menu_item_call label="グループキャッシュのクリア" name="ClearGroupCache"/>
 		<menu_item_check label="マウスの平滑化" name="Mouse Smoothing"/>
 		<menu label="ショートカット" name="Shortcuts">
@@ -189,7 +190,6 @@
 			<menu_item_call label="ズームイン" name="Zoom In"/>
 			<menu_item_call label="ズーム(デフォルト)" name="Zoom Default"/>
 			<menu_item_call label="ズームアウト" name="Zoom Out"/>
-			<menu_item_call label="全画面表示" name="Toggle Fullscreen"/>
 		</menu>
 		<menu_item_call label="デバッグ設定を表示する" name="Debug Settings"/>
 		<menu_item_check label="開発メニューを表示する" name="Debug Mode"/>
diff --git a/indra/newview/skins/default/xui/ja/notifications.xml b/indra/newview/skins/default/xui/ja/notifications.xml
index f734bcde42ba6f18eed0f7a6df6dca6933e5d6de..5d162eb80fbbd2626f67085d5202f2ce0d784e5a 100644
--- a/indra/newview/skins/default/xui/ja/notifications.xml
+++ b/indra/newview/skins/default/xui/ja/notifications.xml
@@ -348,6 +348,9 @@ L$ が不足しているのでこのグループに参加することができ
 		</url>
 		<usetemplate name="okcancelbuttons" notext="もう一度試す" yestext="新しいアカウントを作成"/>
 	</notification>
+	<notification name="InvalidCredentialFormat">
+		「ユーザー名」欄にアバターのファーストネームとラストネーム両方を入力してからログインしてください。
+	</notification>
 	<notification name="AddClassified">
 		クラシファイド広告は、検索ディレクトリと [http://secondlife.com/community/classifieds secondlife.com] の「クラシファイド広告」セクションに一週間掲載されます。
 広告を記入したら、「掲載...」をクリックしてディレクトリに追加してください。
@@ -635,6 +638,11 @@ L$ が不足しているのでこのグループに参加することができ
 	<notification name="CannotEncodeFile">
 		次のファイルのエンコードができません: [FILE]
 	</notification>
+	<notification name="CorruptedProtectedDataStore">
+		あなたの保護されたデータを読みとることが出来ないためリセットされます。
+   ネットワーク設定を変更すると起こることがあります。
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
 	<notification name="CorruptResourceFile">
 		破損したリソースファイル: [FILE]
 	</notification>
@@ -1000,6 +1008,12 @@ L$ は返金されません。
 
 金額を増やしてください。
 	</notification>
+	<notification name="ConfirmItemDeleteHasLinks">
+		ここにリンクされたアイテムが少なくとも1つあります。  このアイテムを削除するとここにリンクされたものが機能しなくなります。  リンクを先に削除することを強くお勧めします。
+
+これらのアイテムを削除しますか?
+		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
+	</notification>
 	<notification name="ConfirmObjectDeleteLock">
 		選択したアイテムのうち、少なくとも 1 つがロックされています。
 
@@ -1157,6 +1171,42 @@ F1 キーを押してください。
 あなたの決定は後で変更できます。
 		<usetemplate name="okcancelbuttons" notext="女性" yestext="男性"/>
 	</notification>
+	<notification name="CantTeleportToGrid">
+		現在のグリッド([CURRENT_GRID])とはグリッド([GRID])が異なるため、[SLURL] にテレポートできませんでした。   ビューワを閉じてからもう一度お試しください。
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="GeneralCertificateError">
+		サーバーに接続できませんでした。
+[REASON]
+
+サブジェクト名: [SUBJECT_NAME_STRING]
+発行元: [ISSUER_NAME_STRING]
+有効日: [VALID_FROM]
+次の更新日: [VALID_TO]
+MD5 フィンガープリント: [SHA1_DIGEST]
+SHA1 フィンガープリント: [MD5_DIGEST]
+キー使用法: [KEYUSAGE]
+拡張キー使用法: [EXTENDEDKEYUSAGE]
+サブジェクトキー認識別子: [SUBJECTKEYIDENTIFIER]
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="TrustCertificateError">
+		このサーバーの認証機関は不明です。
+
+認証情報:
+サブジェクト名: [SUBJECT_NAME_STRING]
+発行元: [ISSUER_NAME_STRING]
+有効日: [VALID_FROM]
+次の更新日: [VALID_TO]
+MD5 フィンガープリント: [SHA1_DIGEST]
+SHA1 フィンガープリント: [MD5_DIGEST]
+キー使用法: [KEYUSAGE]
+拡張キー使用法: [EXTENDEDKEYUSAGE]
+サブジェクトキー認識別子: [SUBJECTKEYIDENTIFIER]
+
+この認証局を信頼しますか?
+		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="信用する"/>
+	</notification>
 	<notification name="NotEnoughCurrency">
 		[NAME] L$[PRICE] 残高不足のため実行不可です。
 	</notification>
@@ -1552,9 +1602,9 @@ F1 キーを押してください。
 		あなたのレーティング区分により、そのリージョン(地域)へは入ることができません。
 	</notification>
 	<notification name="RegionEntryAccessBlocked_Change">
-		あなたのレーティング区分設定により、そのリージョン(地域)へは入ることができません。
+		あなたのレーティング区分設定に基づいて、そのリージョンへは入ることができません。
 
-「設定を変更」をクリックしてあなたのレーティング区分を上げると、入れるようになります。 あなたは今後 [REGIONMATURITY] コンテンツの検索及びアクセスが可能となります。 あとで設定を元に戻したい場合は、「編集」>「環境設定」をご覧ください。
+「設定を変更」をクリックしてレーティング区分の設定を変更すればすぐに入れます。 変更に伴って [REGIONMATURITY] コンテンツの検索やアクセスが可能になります。 あとで設定を変更したい場合は ミー &gt; 環境設定 &gt; 一般 からどうぞ。
 		<form name="form">
 			<button name="OK" text="環境設定の変更"/>
 			<button default="true" name="Cancel" text="閉じる"/>
@@ -2332,15 +2382,6 @@ Web ページにリンクすると、他人がこの場所に簡単にアクセ
 	</notification>
 	<notification name="ObjectGiveItem">
 		[NAME_SLURL] が所有する [OBJECTFROMNAME] という名前のオブジェクトが、あなたに [OBJECTTYPE] を渡しました:
-[ITEM_SLURL]
-		<form name="form">
-			<button name="Keep" text="受け取る"/>
-			<button name="Discard" text="破棄"/>
-			<button name="Mute" text="ブロック"/>
-		</form>
-	</notification>
-	<notification name="ObjectGiveItemUnknownUser">
-		(不明の住人)が所有する [OBJECTFROMNAME] という名前のオブジェクトが、あなたに [OBJECTTYPE] を渡しました:
 [ITEM_SLURL]
 		<form name="form">
 			<button name="Keep" text="受け取る"/>
@@ -2661,8 +2702,52 @@ M キーを押して変更します。
 	<notification name="ShareNotification">
 		住人選択画面に表示された人に「持ち物」からアイテムをドラッグしてください
 	</notification>
+	<notification name="DeedToGroupFail">
+		グループへの譲渡に失敗しました。
+	</notification>
 	<notification name="AvatarRezNotification">
-		アバター「 [NAME] 」が [TIME] 秒で出現します。
+		( [EXISTENCE] 秒)
+アバター「 [NAME] 」が [TIME] 秒で出現します。
+	</notification>
+	<notification name="AvatarRezSelfNotification">
+		( [EXISTENCE] 秒)
+[TIME] 秒でアウトフィットのベーキングが完了しました。
+	</notification>
+	<notification name="AvatarRezCloudNotification">
+		( [EXISTENCE] 秒)
+アバター「 NAME 」がクラウドになりました。
+	</notification>
+	<notification name="AvatarRezArrivedNotification">
+		( [EXISTENCE] 秒)
+アバター「 NAME 」が現れました。
+	</notification>
+	<notification name="AvatarRezLeftCloudNotification">
+		( [EXISTENCE] 秒)
+アバター「 [NAME] 」が [TIME] 秒でクラウド状態から出現します。
+	</notification>
+	<notification name="AvatarRezEnteredAppearanceNotification">
+		( [EXISTENCE] 秒)
+アバター「 NAME 」が容姿編集モードに入りました。
+	</notification>
+	<notification name="AvatarRezLeftAppearanceNotification">
+		( [EXISTENCE] 秒)
+アバター「 NAME 」が容姿編集モードを解除しました。
+	</notification>
+	<notification name="AvatarRezLeftNotification">
+		( [EXISTENCE] 秒)
+アバター「 NAME 」が完全に読み込まれました。
+	</notification>
+	<notification name="ConfirmLeaveCall">
+		このコールから抜けますか?
+		<usetemplate ignoretext="コールから抜ける前の確認" name="okcancelignore" notext="いいえ" yestext="はい"/>
+	</notification>
+	<notification name="ConfirmMuteAll">
+		グループコールの参加者全員をミュートしました。
+あとからこのコールに参加する住人も
+ミュートされます。あなたがコールを終了しても他の参加者のミュート状態が続きます。
+
+全員をミュートしますか?
+		<usetemplate ignoretext="グループコールの参加者全員をミュートする前の確認" name="okcancelignore" notext="Ok" yestext="キャンセル"/>
 	</notification>
 	<global name="UnsupportedCPU">
 		- あなたの CPU の速度は必須動作環境の条件を満たしていません。
diff --git a/indra/newview/skins/default/xui/ja/panel_body_parts_list_item.xml b/indra/newview/skins/default/xui/ja/panel_body_parts_list_item.xml
new file mode 100644
index 0000000000000000000000000000000000000000..de764d802536dff05f2ee19232c0e22f96c295ca
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/panel_body_parts_list_item.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="wearable_item">
+	<text name="item_name" value="..."/>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_bodyparts_list_button_bar.xml b/indra/newview/skins/default/xui/ja/panel_bodyparts_list_button_bar.xml
new file mode 100644
index 0000000000000000000000000000000000000000..42d8a21660d9fb78e7cde00ee188a9e921d014ee
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/panel_bodyparts_list_button_bar.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="clothing_list_button_bar_panel">
+	<button label="交換" name="switch_btn"/>
+	<button label="買い物 &gt;" name="bodyparts_shop_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_bottomtray.xml b/indra/newview/skins/default/xui/ja/panel_bottomtray.xml
index f12f07f3e97154474f2fbd8ef31302747c65d6ef..04b489302644caf9ddb6b8e2d5c87727c28d90d6 100644
--- a/indra/newview/skins/default/xui/ja/panel_bottomtray.xml
+++ b/indra/newview/skins/default/xui/ja/panel_bottomtray.xml
@@ -1,11 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="bottom_tray">
-	<string name="SpeakBtnToolTip">
-		マイクのオン・オフ
-	</string>
-	<string name="VoiceControlBtnToolTip">
-		ボイスコントロールパネルの表示・非表示
-	</string>
+	<string name="SpeakBtnToolTip" value="マイクのオン・オフ"/>
+	<string name="VoiceControlBtnToolTip" value="ボイスコントロールパネルの表示・非表示"/>
 	<layout_stack name="toolbar_stack">
 		<layout_panel name="speak_panel">
 			<talk_button name="talk">
@@ -24,6 +20,21 @@
 		<layout_panel name="snapshot_panel">
 			<button label="" name="snapshots" tool_tip="スナップショットを撮ります"/>
 		</layout_panel>
+		<layout_panel name="sidebar_btn_panel">
+			<button label="サイドバー" name="sidebar_btn" tool_tip="サイドバーの表示・非表示"/>
+		</layout_panel>
+		<layout_panel name="build_btn_panel">
+			<button label="制作" name="build_btn" tool_tip="制作ツールの表示・非表示"/>
+		</layout_panel>
+		<layout_panel name="search_btn_panel">
+			<button label="検索" name="search_btn" tool_tip="検索の表示・非表示"/>
+		</layout_panel>
+		<layout_panel name="world_map_btn_panel">
+			<button label="地図" name="world_map_btn" tool_tip="世界地図の表示・非表示"/>
+		</layout_panel>
+		<layout_panel name="mini_map_btn_panel">
+			<button label="ミニマップ" name="mini_map_btn" tool_tip="ミニマップの表示・非表示"/>
+		</layout_panel>
 		<layout_panel name="im_well_panel">
 			<chiclet_im_well name="im_well">
 				<button name="Unread IM messages" tool_tip="会話"/>
diff --git a/indra/newview/skins/default/xui/ja/panel_clothing_list_button_bar.xml b/indra/newview/skins/default/xui/ja/panel_clothing_list_button_bar.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2159f17fec8bdfda34bf0ff76672956cf9b16903
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/panel_clothing_list_button_bar.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="clothing_list_button_bar_panel">
+	<button label="追加 +" name="add_btn"/>
+	<button label="買い物 &gt;" name="clothing_shop_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_clothing_list_item.xml b/indra/newview/skins/default/xui/ja/panel_clothing_list_item.xml
new file mode 100644
index 0000000000000000000000000000000000000000..de764d802536dff05f2ee19232c0e22f96c295ca
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/panel_clothing_list_item.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="wearable_item">
+	<text name="item_name" value="..."/>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_cof_wearables.xml b/indra/newview/skins/default/xui/ja/panel_cof_wearables.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b9bc10c22027e134ab64027cd35b25f2896e53c7
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/panel_cof_wearables.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="cof_wearables">
+	<accordion name="cof_wearables_accordion">
+		<accordion_tab name="tab_attachments" title="アタッチメント"/>
+		<accordion_tab name="tab_clothing" title="衣類"/>
+		<accordion_tab name="tab_body_parts" title="身体部位"/>
+	</accordion>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_deletable_wearable_list_item.xml b/indra/newview/skins/default/xui/ja/panel_deletable_wearable_list_item.xml
new file mode 100644
index 0000000000000000000000000000000000000000..91d90a5660a1af9dce63ce2a245c8e1859f8107d
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/panel_deletable_wearable_list_item.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="deletable_wearable_item">
+	<text name="item_name" value="..."/>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_dummy_clothing_list_item.xml b/indra/newview/skins/default/xui/ja/panel_dummy_clothing_list_item.xml
new file mode 100644
index 0000000000000000000000000000000000000000..6af84de0c7bb9b6b09bcc86345aa13564e2ca26e
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/panel_dummy_clothing_list_item.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="dummy_clothing_item">
+	<text name="item_name" value="..."/>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_edit_shape.xml b/indra/newview/skins/default/xui/ja/panel_edit_shape.xml
index e60534a54e896d2ce5b10b40c1b1a6fb000f4426..5d3bc79e2f2db5e001535f2bd64e7530702e9cf7 100644
--- a/indra/newview/skins/default/xui/ja/panel_edit_shape.xml
+++ b/indra/newview/skins/default/xui/ja/panel_edit_shape.xml
@@ -1,14 +1,8 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="edit_shape_panel">
-	<panel name="avatar_sex_panel">
-		<text name="gender_text">
-			性別:
-		</text>
-		<radio_group name="sex_radio">
-			<radio_item label="女性" name="radio"/>
-			<radio_item label="男性" name="radio2"/>
-		</radio_group>
-	</panel>
+	<text name="avatar_height">
+		身長 [HEIGHT] メートル
+	</text>
 	<panel label="シャツ" name="accordion_panel">
 		<accordion name="wearable_accordion">
 			<accordion_tab name="shape_body_tab" title="身体"/>
@@ -18,7 +12,7 @@
 			<accordion_tab name="shape_nose_tab" title="é¼»"/>
 			<accordion_tab name="shape_mouth_tab" title="口"/>
 			<accordion_tab name="shape_chin_tab" title="あご"/>
-			<accordion_tab name="shape_torso_tab" title="é ­"/>
+			<accordion_tab name="shape_torso_tab" title="上半身"/>
 			<accordion_tab name="shape_legs_tab" title="è„š"/>
 		</accordion>
 	</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_edit_tattoo.xml b/indra/newview/skins/default/xui/ja/panel_edit_tattoo.xml
index 78ddae47f9a3a0f2cb501d40356ffd1a439e29d0..c3f8c1262005e14033f332f82a805b82210ad3dd 100644
--- a/indra/newview/skins/default/xui/ja/panel_edit_tattoo.xml
+++ b/indra/newview/skins/default/xui/ja/panel_edit_tattoo.xml
@@ -4,5 +4,6 @@
 		<texture_picker label="頭部のタトゥー" name="Head Tattoo" tool_tip="クリックして写真を選択" width="70"/>
 		<texture_picker label="上部のタトゥー" name="Upper Tattoo" tool_tip="クリックして写真を選択" width="70"/>
 		<texture_picker label="下部のタトゥー" name="Lower Tattoo" tool_tip="クリックして写真を選択" width="70"/>
+		<color_swatch label="色・色彩配合" name="Color/Tint" tool_tip="クリックしてカラーピッカーを開きます"/>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_edit_wearable.xml b/indra/newview/skins/default/xui/ja/panel_edit_wearable.xml
index 67828af6c2c831333858607fe50aae2d2df39a2f..5e3342699bbf7911d98009eece3ea459b5d19e2c 100644
--- a/indra/newview/skins/default/xui/ja/panel_edit_wearable.xml
+++ b/indra/newview/skins/default/xui/ja/panel_edit_wearable.xml
@@ -93,6 +93,12 @@
 	<text name="edit_wearable_title" value="シェイプを編集中"/>
 	<panel label="シャツ" name="wearable_type_panel">
 		<text name="description_text" value="シェイプ:"/>
+		<radio_group name="sex_radio">
+			<radio_item label="" name="sex_male" tool_tip="男性" value="1"/>
+			<radio_item label="" name="sex_female" tool_tip="女性" value="0"/>
+		</radio_group>
+		<icon name="male_icon" tool_tip="男性"/>
+		<icon name="female_icon" tool_tip="女性"/>
 	</panel>
 	<panel label="gear_buttom_panel" name="gear_buttom_panel">
 		<button name="friends_viewsort_btn" tool_tip="オプション"/>
diff --git a/indra/newview/skins/default/xui/ja/panel_group_land_money.xml b/indra/newview/skins/default/xui/ja/panel_group_land_money.xml
index ef6d8cce47234e3b8f36a27f6f3aec9448da43c5..4b3a7f880b70620cdeba726ab4af166074eedc3a 100644
--- a/indra/newview/skins/default/xui/ja/panel_group_land_money.xml
+++ b/indra/newview/skins/default/xui/ja/panel_group_land_money.xml
@@ -6,6 +6,9 @@
 	<panel.string name="cant_view_group_land_text">
 		グループ所有地を確認する権限がありません。
 	</panel.string>
+	<panel.string name="epmty_view_group_land_text">
+		なし
+	</panel.string>
 	<panel.string name="cant_view_group_accounting_text">
 		グループの会計情報を確認する権限がありません。
 	</panel.string>
diff --git a/indra/newview/skins/default/xui/ja/panel_group_notices.xml b/indra/newview/skins/default/xui/ja/panel_group_notices.xml
index e9e676f3bd6b7d2295a3c396ac9dc8bb9478a8ef..0b508bd79d32a59faa992292f347f277954b2da6 100644
--- a/indra/newview/skins/default/xui/ja/panel_group_notices.xml
+++ b/indra/newview/skins/default/xui/ja/panel_group_notices.xml
@@ -39,6 +39,7 @@
 		<text name="string">
 			ここにアイテムをドラッグ&ドロップして添付してください:
 		</text>
+		<button label="持ち物" name="open_inventory" tool_tip="持ち物を開きます"/>
 		<button label="取り外す" label_selected="添付物を削除" name="remove_attachment" tool_tip="あなたの通知から添付されたアイテムを削除します"/>
 		<button label="送信" label_selected="送信" name="send_notice"/>
 		<group_drop_target name="drop_target" tool_tip="持ち物のアイテムをこのボックスにドラッグして、通知と一緒に送ります。 添付するには、そのアイテムのコピーと再販・プレゼントの権限があなたにある必要があります。"/>
diff --git a/indra/newview/skins/default/xui/ja/panel_login.xml b/indra/newview/skins/default/xui/ja/panel_login.xml
index c217af38ba5edd1ff4dd33c9083271b7296ef2f1..f0ebc67ef540fba21b8280005497d0fd1f0f2380 100644
--- a/indra/newview/skins/default/xui/ja/panel_login.xml
+++ b/indra/newview/skins/default/xui/ja/panel_login.xml
@@ -8,18 +8,15 @@
 	</panel.string>
 	<layout_stack name="login_widgets">
 		<layout_panel name="login">
-			<text name="first_name_text">
-				ファーストネーム:
+			<text name="username_text">
+				ユーザー名:
 			</text>
-			<line_editor label="最初" name="first_name_edit" tool_tip="[SECOND_LIFE] ファーストネーム"/>
-			<text name="last_name_text">
-				ラストネーム:
-			</text>
-			<line_editor label="最後" name="last_name_edit" tool_tip="[SECOND_LIFE] ラストネーム"/>
+			<line_editor label="ユーザー名" name="username_edit" tool_tip="[SECOND_LIFE] ユーザー名"/>
 			<text name="password_text">
 				パスワード:
 			</text>
 			<check_box label="パスワードを記憶" name="remember_check"/>
+			<button label="ログイン" left_pad="30" name="connect_btn" width="60"/>
 			<text name="start_location_text">
 				開始地点:
 			</text>
@@ -28,7 +25,6 @@
 				<combo_box.item label="ホーム" name="MyHome"/>
 				<combo_box.item label="<地域名を入力>" name="Typeregionname"/>
 			</combo_box>
-			<button label="ログイン" left_pad="30" name="connect_btn" width="60"/>
 		</layout_panel>
 		<layout_panel name="links">
 			<text name="create_new_account_text">
diff --git a/indra/newview/skins/default/xui/ja/panel_main_inventory.xml b/indra/newview/skins/default/xui/ja/panel_main_inventory.xml
index 9981d13bbb37ec462d9b65aa099cb91006c8c8ee..ff968696b7bb61007a35cf612da9a03281afc66d 100644
--- a/indra/newview/skins/default/xui/ja/panel_main_inventory.xml
+++ b/indra/newview/skins/default/xui/ja/panel_main_inventory.xml
@@ -9,62 +9,20 @@
 	<text name="ItemcountText">
 		アイテム:
 	</text>
-	<menu_bar name="Inventory Menu">
-		<menu label="ファイル" name="File">
-			<menu_item_call label="開く" name="Open"/>
-			<menu label="アップロード" name="upload">
-				<menu_item_call label="画像 (L$ [COST] )..." name="Upload Image"/>
-				<menu_item_call label="サウンド (L$[COST] )..." name="Upload Sound"/>
-				<menu_item_call label="アニメーション (L$ [COST] )..." name="Upload Animation"/>
-				<menu_item_call label="一括 (ファイルにつき L$[COST] )..." name="Bulk Upload"/>
-			</menu>
-			<menu_item_call label="新しいウィンドウ" name="New Window"/>
-			<menu_item_call label="フィルターを表示" name="Show Filters"/>
-			<menu_item_call label="フィルターをリセット" name="Reset Current"/>
-			<menu_item_call label="すべてのフォルダを閉じる" name="Close All Folders"/>
-			<menu_item_call label="ごみ箱を空にする" name="Empty Trash"/>
-			<menu_item_call label="紛失物を空にする" name="Empty Lost And Found"/>
-		</menu>
-		<menu label="新規作成" name="Create">
-			<menu_item_call label="フォルダ" name="New Folder"/>
-			<menu_item_call label="スクリプト" name="New Script"/>
-			<menu_item_call label="ノートカード" name="New Note"/>
-			<menu_item_call label="ジェスチャー" name="New Gesture"/>
-			<menu label="衣類" name="New Clothes">
-				<menu_item_call label="シャツ" name="New Shirt"/>
-				<menu_item_call label="パンツ" name="New Pants"/>
-				<menu_item_call label="靴" name="New Shoes"/>
-				<menu_item_call label="靴下" name="New Socks"/>
-				<menu_item_call label="ジャケット" name="New Jacket"/>
-				<menu_item_call label="スカート" name="New Skirt"/>
-				<menu_item_call label="手袋" name="New Gloves"/>
-				<menu_item_call label="下着(上)" name="New Undershirt"/>
-				<menu_item_call label="下着(下)" name="New Underpants"/>
-				<menu_item_call label="アルファ" name="New Alpha"/>
-				<menu_item_call label="タトゥ" name="New Tattoo"/>
-			</menu>
-			<menu label="身体部位" name="New Body Parts">
-				<menu_item_call label="シェイプ(体型)" name="New Shape"/>
-				<menu_item_call label="スキン" name="New Skin"/>
-				<menu_item_call label="髪" name="New Hair"/>
-				<menu_item_call label="ç›®" name="New Eyes"/>
-			</menu>
-		</menu>
-		<menu label="並べ替え" name="Sort">
-			<menu_item_check label="名前順" name="By Name"/>
-			<menu_item_check label="日付順" name="By Date"/>
-			<menu_item_check label="フォルダを常に名前順に並べる" name="Folders Always By Name"/>
-			<menu_item_check label="システムフォルダを上に並べる" name="System Folders To Top"/>
-		</menu>
-	</menu_bar>
 	<filter_editor label="持ち物をフィルター" name="inventory search editor"/>
 	<tab_container name="inventory filter tabs">
 		<inventory_panel label="持ち物" name="All Items"/>
-		<inventory_panel label="最新" name="Recent Items"/>
+		<recent_inventory_panel label="最新" name="Recent Items"/>
 	</tab_container>
-	<panel name="bottom_panel">
-		<button name="options_gear_btn" tool_tip="その他のオプションを表示します"/>
-		<button name="add_btn" tool_tip="新しいアイテムを追加します"/>
-		<dnd_button name="trash_btn" tool_tip="選択したアイテムを削除します"/>
-	</panel>
+	<layout_stack name="bottom_panel">
+		<layout_panel name="options_gear_btn_panel">
+			<button name="options_gear_btn" tool_tip="オプションを表示します"/>
+		</layout_panel>
+		<layout_panel name="add_btn_panel">
+			<button name="add_btn" tool_tip="新しいアイテムを追加します"/>
+		</layout_panel>
+		<layout_panel name="trash_btn_panel">
+			<dnd_button name="trash_btn" tool_tip="選択したアイテムを削除します"/>
+		</layout_panel>
+	</layout_stack>
 </panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_outfit_edit.xml b/indra/newview/skins/default/xui/ja/panel_outfit_edit.xml
index d0089b46aab213eed079e0cc23d295e45fe7ab64..cf6e6eaae37e019db8ed23c787fe3192027dbe0d 100644
--- a/indra/newview/skins/default/xui/ja/panel_outfit_edit.xml
+++ b/indra/newview/skins/default/xui/ja/panel_outfit_edit.xml
@@ -2,6 +2,8 @@
 <!-- Side tray Outfit Edit panel -->
 <panel label="アウトフットの編集" name="outfit_edit">
 	<string name="No Outfit" value="アウトフィットなし"/>
+	<string name="unsaved_changes" value="保存されていない変更"/>
+	<string name="now_editing" value="編集しています..."/>
 	<panel.string name="not_available">
 		(該当なし)
 	</panel.string>
@@ -15,24 +17,19 @@
 	<text name="title" value="アウトフットの編集"/>
 	<panel label="bottom_panel" name="header_panel">
 		<panel label="bottom_panel" name="outfit_name_and_status">
-			<text name="status" value="編集中..."/>
+			<text name="status" value="編集しています..."/>
 			<text name="curr_outfit_name" value="[Current Outfit]"/>
 		</panel>
 	</panel>
 	<layout_stack name="im_panels">
 		<layout_panel label="IM コントロールパネル" name="outfit_wearables_panel">
-			<scroll_list name="look_items_list">
-				<scroll_list.columns label="アイテムを確認" name="look_item"/>
-				<scroll_list.columns label="アウトフィットアイテムの並べ替え" name="look_item_sort"/>
-			</scroll_list>
 			<panel label="bottom_panel" name="edit_panel"/>
 		</layout_panel>
 		<layout_panel name="add_wearables_panel">
-			<filter_editor label="フィルター" name="look_item_filter"/>
+			<text name="add_to_outfit_label" value="アウトフィットに追加:"/>
 			<layout_stack name="filter_panels">
-				<layout_panel label="IM コントロールパネル" name="filter_button_panel">
-					<text name="add_to_outfit_label" value="アウトフィットに追加:"/>
-					<button label="O" name="filter_button"/>
+				<layout_panel label="IM コントロールパネル" name="filter_panel">
+					<filter_editor label="フィルター" name="look_item_filter"/>
 				</layout_panel>
 			</layout_stack>
 			<panel label="add_wearables_button_bar" name="add_wearables_button_bar">
diff --git a/indra/newview/skins/default/xui/ja/panel_people.xml b/indra/newview/skins/default/xui/ja/panel_people.xml
index 5af578b640c449c0534524da24523887e18bfaeb..68af19910a1832eaba49a264b0d4dde00aa8d786 100644
--- a/indra/newview/skins/default/xui/ja/panel_people.xml
+++ b/indra/newview/skins/default/xui/ja/panel_people.xml
@@ -2,9 +2,9 @@
 <!-- Side tray panel -->
 <panel label="人" name="people_panel">
 	<string name="no_recent_people" value="最近交流した人はいません。 一緒に何かする仲間をお探しですか? [secondlife:///app/search/people 検索] か [secondlife:///app/worldmap 世界地図] をお試しください。"/>
-	<string name="no_filtered_recent_people" value="お探しのものは見つかりましたか? [secondlife:///app/search/people 検索] をお試しください。"/>
+	<string name="no_filtered_recent_people" value="お探しのものは見つかりましたか? [secondlife:///app/search/people/[SEARCH_TERM] 検索] をお試しください。"/>
 	<string name="no_one_near" value="近くに誰もいません。 一緒に何かする仲間をお探しですか? [secondlife:///app/search/people 検索] か [secondlife:///app/worldmap 世界地図] をお試しください。"/>
-	<string name="no_one_filtered_near" value="お探しのものは見つかりましたか? [secondlife:///app/search/people 検索] をお試しください。"/>
+	<string name="no_one_filtered_near" value="お探しのものは見つかりましたか? [secondlife:///app/search/people/[SEARCH_TERM] 検索] をお試しください。"/>
 	<string name="no_friends_online" value="オンラインのフレンドはいません"/>
 	<string name="no_friends" value="フレンドはいません"/>
 	<string name="no_friends_msg">
@@ -12,11 +12,11 @@
 一緒に何かする仲間をお探しですか? [secondlife:///app/worldmap 世界地図] をお試しください。
 	</string>
 	<string name="no_filtered_friends_msg">
-		お探しのものは見つかりましたか? [secondlife:///app/search/people 検索] をお試しください。
+		お探しのものは見つかりましたか? [secondlife:///app/search/people/[SEARCH_TERM] 検索] をお試しください。
 	</string>
 	<string name="people_filter_label" value="人をフィルター"/>
 	<string name="groups_filter_label" value="グループをフィルター"/>
-	<string name="no_filtered_groups_msg" value="お探しのものは見つかりましたか? [secondlife:///app/search/groups 検索] をお試しください。"/>
+	<string name="no_filtered_groups_msg" value="お探しのものは見つかりましたか? [secondlife:///app/search/groups/[SEARCH_TERM] 検索] をお試しください。"/>
 	<string name="no_groups_msg" value="グループをお探しですか? [secondlife:///app/search/groups 検索] をお試しください。"/>
 	<filter_editor label="フィルター" name="filter_input"/>
 	<tab_container name="tabs">
@@ -55,7 +55,7 @@
 		<button label="プロフィール" name="view_profile_btn" tool_tip="写真、グループ、その他住人情報を表示します"/>
 		<button label="IM" name="im_btn" tool_tip="インスタントメッセージを開きます"/>
 		<button label="コール" name="call_btn" tool_tip="この住人にコールします"/>
-		<button label="共有" name="share_btn"/>
+		<button label="共有" name="share_btn" tool_tip="持ち物アイテムを共有"/>
 		<button label="テレポート" name="teleport_btn" tool_tip="テレポートを送ります"/>
 		<button label="グループ情報" name="group_info_btn" tool_tip="グループ情報を表示します"/>
 		<button label="グループチャット" name="chat_btn" tool_tip="チャットを開始します"/>
diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/ja/panel_preferences_advanced.xml
index 753951e2822af1ac3920b534c5130b184d96655c..94ee5c6ff40cd12afed667e3671c8f80ef6af03d 100644
--- a/indra/newview/skins/default/xui/ja/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/ja/panel_preferences_advanced.xml
@@ -13,6 +13,7 @@
 	</text>
 	<check_box label="制作・編集" name="edit_camera_movement" tool_tip="編集モードのオン・オフの切り替えに、自動カメラポジションを使います"/>
 	<check_box label="容姿" name="appearance_camera_movement" tool_tip="編集モードに入ったときに、自動カメラポジションを使います"/>
+	<check_box initial_value="1" label="サイドバー" name="appearance_sidebar_positioning" tool_tip="サイドバーの切り替え時に自動カメラポジションを使います"/>
 	<check_box label="一人称視点で表示する" name="first_person_avatar_visible"/>
 	<check_box label="常にキー操作で動くようにする" name="arrow_keys_move_avatar_check"/>
 	<check_box label="上矢印キー2度押し+長押しで走る" name="tap_tap_hold_to_run"/>
diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml b/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml
index e5780697b19fa54f2246b5144d82a3f9be4c88c0..86f880de0916e5ff0aecb2059d15b825d8b4bc84 100644
--- a/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml
@@ -45,7 +45,7 @@
 	</text>
 	<check_box initial_value="true" label="チャット中にタイピング動作のアニメーションを再生" name="play_typing_animation"/>
 	<check_box label="オフライン時に受け取った IM をメールで受信" name="send_im_to_email"/>
-	<check_box label="チャット履歴に文字だけ表示する" name="plain_text_chat_history"/>
+	<check_box label="IM とチャット履歴に文字だけ表示する" name="plain_text_chat_history"/>
 	<text name="show_ims_in_label">
 		IM の表示方法:
 	</text>
diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/ja/panel_preferences_graphics1.xml
index 8df829c2961607b956bbf99f66d9da8d2e7ef8b3..75de7733662c591686c8441bd0009a3097a5a243 100644
--- a/indra/newview/skins/default/xui/ja/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/ja/panel_preferences_graphics1.xml
@@ -1,19 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel label="表示" name="Display panel">
-	<text name="WindowSizeLabel">
-		ウィンドウ・サイズ:
-	</text>
-	<check_box label="全画面" name="windowed mode"/>
-	<combo_box name="windowsize combo">
-		<combo_box.item label="640x480" name="640x480"/>
-		<combo_box.item label="800x600" name="800x600"/>
-		<combo_box.item label="720x480 (NTSC)" name="720x480"/>
-		<combo_box.item label="768x576 (PAL)" name="768x576"/>
-		<combo_box.item label="1024x768" name="1024x768"/>
-	</combo_box>
-	<text name="UI Size:">
-		UI サイズ:
-	</text>
 	<text name="QualitySpeed">
 		クオリティとスピード:
 	</text>
@@ -63,6 +49,10 @@
 			m
 		</text>
 		<slider label="最大パーティクル数:" name="MaxParticleCount"/>
+		<slider label="アバター最大描画距離:" name="MaxAvatarDrawDistance"/>
+		<text name="DrawDistanceMeterText3">
+			m
+		</text>
 		<slider label="ポストプロセス品質:" name="RenderPostProcess"/>
 		<text name="MeshDetailText">
 			メッシュ詳細:
@@ -98,8 +88,8 @@
 			ライティング詳細:
 		</text>
 		<radio_group name="LightingDetailRadio">
-			<radio_item label="太陽と月のみ" name="SunMoon"/>
-			<radio_item label="近くのローカルサイト" name="LocalLights"/>
+			<radio_item label="太陽と月のみ" name="SunMoon" value="0"/>
+			<radio_item label="近くのローカルサイト" name="LocalLights" value="1"/>
 		</radio_group>
 		<text name="TerrainDetailText">
 			地形詳細:
diff --git a/indra/newview/skins/default/xui/ja/panel_region_general.xml b/indra/newview/skins/default/xui/ja/panel_region_general.xml
index b72fac1a7c5e87f82d5e3824869c343b84345b71..54ec24773f0fe55132c7eafb5930348d3c016ac3 100644
--- a/indra/newview/skins/default/xui/ja/panel_region_general.xml
+++ b/indra/newview/skins/default/xui/ja/panel_region_general.xml
@@ -18,7 +18,7 @@
 	<text left_delta="70" name="region_type">
 		不明
 	</text>
-	<check_box label="土地整備をブロック" name="block_terraform_check"/>
+	<check_box label="地形編集をブロック" name="block_terraform_check"/>
 	<check_box label="飛行をブロック" name="block_fly_check"/>
 	<check_box label="ダメージを許可" name="allow_damage_check"/>
 	<check_box label="プッシュを制限" name="restrict_pushobject"/>
diff --git a/indra/newview/skins/default/xui/ja/panel_region_texture.xml b/indra/newview/skins/default/xui/ja/panel_region_texture.xml
index 14fc0b4c22ce63f15ac6cfb776f171707a978464..9e442ce09132c2dfc6623049517c86bb4b70046f 100644
--- a/indra/newview/skins/default/xui/ja/panel_region_texture.xml
+++ b/indra/newview/skins/default/xui/ja/panel_region_texture.xml
@@ -22,7 +22,7 @@
 		4(高)
 	</text>
 	<text name="height_text_lbl5">
-		テクスチャ標高範囲
+		地形テクスチャの隆起範囲
 	</text>
 	<text name="height_text_lbl6">
 		北西
@@ -45,7 +45,7 @@
 	<spinner label="高" name="height_range_spin_2"/>
 	<spinner label="高" name="height_range_spin_3"/>
 	<text name="height_text_lbl10">
-		数値は上のテクスチャのブレンド範囲を示します。
+		数値は上のテクスチャが調和する範囲を示します。
 	</text>
 	<text name="height_text_lbl11">
 		計測単位はメートルで、「低」の値は、1番のテクスチャの高さの
diff --git a/indra/newview/skins/default/xui/ja/sidepanel_appearance.xml b/indra/newview/skins/default/xui/ja/sidepanel_appearance.xml
index 94be8ba73dcb230a7be4fded11aeac5197ae52ec..c453699c57b87b241bd50422d3a1679bd07691e7 100644
--- a/indra/newview/skins/default/xui/ja/sidepanel_appearance.xml
+++ b/indra/newview/skins/default/xui/ja/sidepanel_appearance.xml
@@ -1,16 +1,17 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel label="アウトフィット" name="appearance panel">
 	<string name="No Outfit" value="アウトフィットなし"/>
+	<string name="Unsaved Changes" value="保存されていない変更"/>
+	<string name="Now Wearing" value="着用しています..."/>
 	<panel name="panel_currentlook">
-		<button label="編集" name="editappearance_btn"/>
-		<text name="currentlook_title">
-			(保存されていません)
+		<button label="E" name="editappearance_btn"/>
+		<button label="O" name="openoutfit_btn"/>
+		<text name="currentlook_status">
+			(状態)
 		</text>
 		<text name="currentlook_name">
 			MyOutfit With a really Long Name like MOOSE
 		</text>
 	</panel>
 	<filter_editor label="アウトフィットをフィルター" name="Filter"/>
-	<button label="装着" name="wear_btn"/>
-	<button label="新しいアウトフィット" name="newlook_btn"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/ja/sidepanel_inventory.xml b/indra/newview/skins/default/xui/ja/sidepanel_inventory.xml
index f82c6136a6f2595604b08e517d41887b3ede37c0..a0f44d9de9a3f30a00e4952a5e1080137d06fbe6 100644
--- a/indra/newview/skins/default/xui/ja/sidepanel_inventory.xml
+++ b/indra/newview/skins/default/xui/ja/sidepanel_inventory.xml
@@ -4,6 +4,7 @@
 		<panel name="button_panel">
 			<button label="プロフィール" name="info_btn"/>
 			<button label="共有" name="share_btn"/>
+			<button label="ショッピング" name="shop_btn"/>
 			<button label="装着" name="wear_btn"/>
 			<button label="プレイ" name="play_btn"/>
 			<button label="テレポート" name="teleport_btn"/>
diff --git a/indra/newview/skins/default/xui/ja/strings.xml b/indra/newview/skins/default/xui/ja/strings.xml
index a06dcc54e4f16700b3b529a8e72b0c3177aed465..dfc12bc1cbe462f058828f0845c76ec4e2ab904e 100644
--- a/indra/newview/skins/default/xui/ja/strings.xml
+++ b/indra/newview/skins/default/xui/ja/strings.xml
@@ -100,6 +100,24 @@
 	<string name="LoginDownloadingClothing">
 		衣類をダウンロードしています...
 	</string>
+	<string name="InvalidCertificate">
+		証明書が無効または壊れています。 グリッド管理者にご連絡ください。
+	</string>
+	<string name="CertInvalidHostname">
+		無効なホストネームがサーバーにアクセスしていました。SLURL かグリッドのホストネームをご確認ください。
+	</string>
+	<string name="CertExpired">
+		証明書の有効期限が切れています。  システムの時計を確認するかグリッド管理者にご連絡ください。
+	</string>
+	<string name="CertKeyUsage">
+		SSL 証明書のエラーが発生しました。  グリッド管理者にご連絡ください。
+	</string>
+	<string name="CertBasicConstraints">
+		サーバーの証明書チェーンに証明書が多すぎます。  グリッド管理者にご連絡ください。
+	</string>
+	<string name="CertInvalidSignature">
+		証明書署名を認証できませんでした。  グリッド管理者にご連絡ください。
+	</string>
 	<string name="LoginFailedNoNetwork">
 		ネットワークエラー: 接続を確立できませんでした。お使いのネットワーク接続をご確認ください。
 	</string>
@@ -840,6 +858,42 @@
 	<string name="invalid">
 		無効
 	</string>
+	<string name="shirt_not_worn">
+		シャツ未着用
+	</string>
+	<string name="pants_not_worn">
+		パンツ未着用
+	</string>
+	<string name="shoes_not_worn">
+		靴未着用
+	</string>
+	<string name="socks_not_worn">
+		靴下未着用
+	</string>
+	<string name="jacket_not_worn">
+		ジャケット未着用
+	</string>
+	<string name="gloves_not_worn">
+		手袋未着用
+	</string>
+	<string name="undershirt_not_worn">
+		下着(上)未着用
+	</string>
+	<string name="underpants_not_worn">
+		下着(下)未着用
+	</string>
+	<string name="skirt_not_worn">
+		スカート未着用
+	</string>
+	<string name="alpha_not_worn">
+		アルファ未着用
+	</string>
+	<string name="tattoo_not_worn">
+		タトゥー未着用
+	</string>
+	<string name="invalid_not_worn">
+		無効
+	</string>
 	<string name="NewWearable">
 		新しい [WEARABLE_ITEM]
 	</string>
@@ -910,7 +964,10 @@
 		ESC キーを押してワールドビューに戻ります
 	</string>
 	<string name="InventoryNoMatchingItems">
-		お探しのものは見つかりましたか? [secondlife:///app/search/all 検索] をお試しください。
+		お探しのものは見つかりましたか? [secondlife:///app/search/all/[SEARCH_TERM] 検索] をお試しください。
+	</string>
+	<string name="PlacesNoMatchingItems">
+		お探しのものは見つかりましたか? [secondlife:///app/search/places/[SEARCH_TERM] 検索] をお試しください。
 	</string>
 	<string name="FavoritesNoMatchingItems">
 		ここにランドマークをドラッグしてお気に入りに追加します。
@@ -946,6 +1003,7 @@
 	<string name="Wave" value=" 手を振る"/>
 	<string name="HelloAvatar" value=" やあ、アバター!"/>
 	<string name="ViewAllGestures" value="  すべて表示 &gt;&gt;"/>
+	<string name="GetMoreGestures" value="ショッピング &gt;&gt;"/>
 	<string name="Animations" value="アニメーション、"/>
 	<string name="Calling Cards" value="コーリングカード、"/>
 	<string name="Clothing" value="衣類、"/>
@@ -1575,6 +1633,9 @@
 	<string name="MuteGroup">
 		(グループ)
 	</string>
+	<string name="MuteExternal">
+		(外部)
+	</string>
 	<string name="RegionNoCovenant">
 		この不動産には約款がありません。
 	</string>
@@ -3390,12 +3451,15 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ
 	<string name="answered_call">
 		相手がコールを受けました
 	</string>
-	<string name="started_call">
+	<string name="you_started_call">
 		ボイスコールを開始します
 	</string>
-	<string name="joined_call">
+	<string name="you_joined_call">
 		ボイスコールに参加しました
 	</string>
+	<string name="name_started_call">
+		[NAME] はボイスコールを開始します
+	</string>
 	<string name="ringing-im">
 		ボイスコールに参加...
 	</string>
@@ -3605,6 +3669,90 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ
 	<string name="Contents">
 		コンテンツ
 	</string>
+	<string name="Gesture">
+		ジェスチャー
+	</string>
+	<string name="Male Gestures">
+		男性用ジェスチャー
+	</string>
+	<string name="Female Gestures">
+		女性用ジェスチャー
+	</string>
+	<string name="Other Gestures">
+		その他のジェスチャー
+	</string>
+	<string name="Speech Gestures">
+		会話ジェスチャー
+	</string>
+	<string name="Common Gestures">
+		一般的ジェスチャー
+	</string>
+	<string name="Male - Excuse me">
+		男性 - すみません
+	</string>
+	<string name="Male - Get lost">
+		男性 - Get lost
+	</string>
+	<string name="Male - Blow kiss">
+		男性 - 投げキッス
+	</string>
+	<string name="Male - Boo">
+		男性 - Boo
+	</string>
+	<string name="Male - Bored">
+		男性 - 退屈
+	</string>
+	<string name="Male - Hey">
+		男性 - Hey
+	</string>
+	<string name="Male - Laugh">
+		男性 - 笑う
+	</string>
+	<string name="Male - Repulsed">
+		男性 - 拒絶
+	</string>
+	<string name="Male - Shrug">
+		男性 - 肩をすくめる
+	</string>
+	<string name="Male - Stick tougue out">
+		男性 - 舌を出す
+	</string>
+	<string name="Male - Wow">
+		男性 - Wow
+	</string>
+	<string name="FeMale - Excuse me">
+		女性 - すみません
+	</string>
+	<string name="FeMale - Get lost">
+		女性 - Get lost
+	</string>
+	<string name="FeMale - Blow kiss">
+		女性 - 投げキッス
+	</string>
+	<string name="FeMale - Boo">
+		女性 - Boo
+	</string>
+	<string name="Female - Bored">
+		女性 - 退屈
+	</string>
+	<string name="Female - Hey">
+		女性 - Hey
+	</string>
+	<string name="Female - Laugh">
+		女性 - 笑う
+	</string>
+	<string name="Female - Repulsed">
+		女性 - 拒絶
+	</string>
+	<string name="Female - Shrug">
+		女性 - 肩をすくめる
+	</string>
+	<string name="Female - Stick tougue out">
+		女性 - 舌を出す
+	</string>
+	<string name="Female - Wow">
+		女性 - Wow
+	</string>
 	<string name="AvatarBirthDateFormat">
 		[year,datetime,slt]/[mthnum,datetime,slt]/[day,datetime,slt]
 	</string>
diff --git a/indra/newview/tests/llsechandler_basic_test.cpp b/indra/newview/tests/llsechandler_basic_test.cpp
index fd680b24f0dd7e871438b3f2f8a53e8525ea1194..fa9fff3ac978f8670374622d5e5be46e3db3a8d4 100644
--- a/indra/newview/tests/llsechandler_basic_test.cpp
+++ b/indra/newview/tests/llsechandler_basic_test.cpp
@@ -54,7 +54,7 @@
 #include <openssl/asn1.h>
 #include <openssl/rand.h>
 #include <openssl/err.h>
-
+#include "../llmachineid.h"
 
 #define ensure_throws(str, exc_type, cert, func, ...) \
 try \
@@ -115,6 +115,15 @@ void LLCredential::authenticatorType(std::string &idType)
 LLControlGroup gSavedSettings("test");
 unsigned char gMACAddress[MAC_ADDRESS_BYTES] = {77,21,46,31,89,2};
 
+
+S32 LLMachineID::getUniqueID(unsigned char *unique_id, size_t len)
+{
+	memcpy(unique_id, gMACAddress, len);
+	return 1;
+}
+S32 LLMachineID::init() { return 1; }
+	
+
 // -------------------------------------------------------------------------------------------
 // TUT
 // -------------------------------------------------------------------------------------------
@@ -129,6 +138,7 @@ namespace tut
 
 		sechandler_basic_test()
 		{
+            LLMachineID::init();
 			OpenSSL_add_all_algorithms();
 			OpenSSL_add_all_ciphers();
 			OpenSSL_add_all_digests();	
@@ -328,7 +338,8 @@ namespace tut
 		
 		ensure_equals("Der Format is correct", memcmp(buffer, mDerFormat.c_str(), mDerFormat.length()), 0);
 		
-		LLSD llsd_cert = test_cert->getLLSD();
+		LLSD llsd_cert;
+		test_cert->getLLSD(llsd_cert);
 		std::ostringstream llsd_value;
 		llsd_value << LLSDOStreamer<LLSDNotationFormatter>(llsd_cert) << std::endl;
 		std::string llsd_cert_str = llsd_value.str();
@@ -376,8 +387,6 @@ namespace tut
 	void sechandler_basic_test_object::test<2>()
 
 	{
-		unsigned char MACAddress[MAC_ADDRESS_BYTES];
-		LLUUID::getNodeID(MACAddress);
 		
 		std::string protected_data = "sUSh3wj77NG9oAMyt3XIhaej3KLZhLZWFZvI6rIGmwUUOmmelrRg0NI9rkOj8ZDpTPxpwToaBT5u"
 		"GQhakdaGLJznr9bHr4/6HIC1bouKj4n2rs4TL6j2WSjto114QdlNfLsE8cbbE+ghww58g8SeyLQO"
@@ -390,7 +399,9 @@ namespace tut
 
 		LLXORCipher cipher(gMACAddress, MAC_ADDRESS_BYTES);
 		cipher.decrypt(&binary_data[0], 16);
-		LLXORCipher cipher2(MACAddress, MAC_ADDRESS_BYTES);
+		unsigned char unique_id[MAC_ADDRESS_BYTES];
+        LLMachineID::getUniqueID(unique_id, sizeof(unique_id));
+		LLXORCipher cipher2(unique_id, sizeof(unique_id));
 		cipher2.encrypt(&binary_data[0], 16);
 		std::ofstream temp_file("sechandler_settings.tmp", std::ofstream::binary);
 		temp_file.write((const char *)&binary_data[0], binary_data.size());
@@ -571,11 +582,11 @@ namespace tut
 		int length = apr_base64_decode_len(hashed_password.c_str());
 		std::vector<char> decoded_password(length);
 		apr_base64_decode(&decoded_password[0], hashed_password.c_str());
-		unsigned char MACAddress[MAC_ADDRESS_BYTES];
-		LLUUID::getNodeID(MACAddress);
 		LLXORCipher cipher(gMACAddress, MAC_ADDRESS_BYTES);
 		cipher.decrypt((U8*)&decoded_password[0], length);
-		LLXORCipher cipher2(MACAddress, MAC_ADDRESS_BYTES);
+		unsigned char unique_id[MAC_ADDRESS_BYTES];
+		LLMachineID::getUniqueID(unique_id, sizeof(unique_id));
+		LLXORCipher cipher2(unique_id, sizeof(unique_id));
 		cipher2.encrypt((U8*)&decoded_password[0], length);
 		llofstream password_file("test_password.dat", std::ofstream::binary);
 		password_file.write(&decoded_password[0], length); 
@@ -950,31 +961,38 @@ namespace tut
 
 		test_chain->add(new LLBasicCertificate(mX509IntermediateCert));
 
-		test_chain->validate(0, test_store, validation_params);
+		test_store->validate(0, test_chain, validation_params);
 
 		// add the root certificate to the chain and revalidate
 		test_chain->add(new LLBasicCertificate(mX509RootCert));	
-		test_chain->validate(0, test_store, validation_params);
+		test_store->validate(0, test_chain, validation_params);
 
 		// add the child cert at the head of the chain, and revalidate (3 deep chain)
 		test_chain->insert(test_chain->begin(), new LLBasicCertificate(mX509ChildCert));
-		test_chain->validate(0, test_store, validation_params);
+		test_store->validate(0, test_chain, validation_params);
 
 		// basic failure cases
 		test_chain = new LLBasicCertificateChain(NULL);
-		//validate with only the child cert
+		//validate with only the child cert in chain, but child cert was previously
+		// trusted
 		test_chain->add(new LLBasicCertificate(mX509ChildCert));
+		
+		// validate without the trust flag.
+		test_store->validate(VALIDATION_POLICY_TRUSTED, test_chain, validation_params);	
+		
+		// Validate with child cert but no parent, and no parent in CA store
+		test_store = new LLBasicCertificateStore("mycertstore.pem");
 		ensure_throws("no CA, with only a child cert", 
 					  LLCertValidationTrustException, 
 					  (*test_chain)[0],
-					  test_chain->validate, 
+					  test_store->validate, 
 					  VALIDATION_POLICY_TRUSTED, 
-					  test_store, 
+					  test_chain, 
 					  validation_params);
 
 
 		// validate without the trust flag.
-		test_chain->validate(0, test_store, validation_params);		
+		test_store->validate(0, test_chain, validation_params);		
 
 		// clear out the store
 		test_store = new LLBasicCertificateStore("mycertstore.pem");
@@ -983,18 +1001,19 @@ namespace tut
 		ensure_throws("no CA, with child and intermediate certs", 
 					  LLCertValidationTrustException, 
 					  (*test_chain)[1],
-					  test_chain->validate, 
+					  test_store->validate, 
 					  VALIDATION_POLICY_TRUSTED, 
-					  test_store, 
+					  test_chain, 
 					  validation_params);
 		// validate without the trust flag
-		test_chain->validate(0, test_store, validation_params);
+		test_store->validate(0, test_chain, validation_params);
 
 		// Test time validity
-		LLSD child_info = (*test_chain)[0]->getLLSD();
+		LLSD child_info;
+		((*test_chain)[0])->getLLSD(child_info);
 		validation_params = LLSD::emptyMap();
 		validation_params[CERT_VALIDATION_DATE] = LLDate(child_info[CERT_VALID_FROM].asDate().secondsSinceEpoch() + 1.0);  
-		test_chain->validate(VALIDATION_POLICY_TIME, test_store, validation_params);
+		test_store->validate(VALIDATION_POLICY_TIME, test_chain, validation_params);
 
 		validation_params = LLSD::emptyMap();		
 		validation_params[CERT_VALIDATION_DATE] = child_info[CERT_VALID_FROM].asDate();
@@ -1005,9 +1024,9 @@ namespace tut
 		ensure_throws("Child cert not yet valid" , 
 					  LLCertValidationExpirationException, 
 					  (*test_chain)[0],
-					  test_chain->validate, 
+					  test_store->validate, 
 					  VALIDATION_POLICY_TIME, 
-					  test_store, 
+					  test_chain, 
 					  validation_params);	
 		validation_params = LLSD::emptyMap();		
 		validation_params[CERT_VALIDATION_DATE] = LLDate(child_info[CERT_VALID_TO].asDate().secondsSinceEpoch() + 1.0);
@@ -1016,9 +1035,9 @@ namespace tut
 		ensure_throws("Child cert expired", 
 					  LLCertValidationExpirationException, 
 					  (*test_chain)[0],
-					  test_chain->validate, 
+					  test_store->validate, 
 					  VALIDATION_POLICY_TIME, 
-					  test_store, 
+					  test_chain, 
 					  validation_params);
 
 		// test SSL KU
@@ -1026,17 +1045,18 @@ namespace tut
 		test_chain = new LLBasicCertificateChain(NULL);
 		test_chain->add(new LLBasicCertificate(mX509ChildCert));
 		test_chain->add(new LLBasicCertificate(mX509IntermediateCert));
-		test_chain->validate(VALIDATION_POLICY_SSL_KU, test_store, validation_params);	
+		test_store->validate(VALIDATION_POLICY_SSL_KU, test_chain, validation_params);	
 
 		test_chain = new LLBasicCertificateChain(NULL);
 		test_chain->add(new LLBasicCertificate(mX509TestCert));
 
+		test_store = new LLBasicCertificateStore("mycertstore.pem");		
 		ensure_throws("Cert doesn't have ku", 
 					  LLCertKeyUsageValidationException, 
 					  (*test_chain)[0],
-					  test_chain->validate, 
+					  test_store->validate, 
 					  VALIDATION_POLICY_SSL_KU, 
-					  test_store, 
+					  test_chain, 
 					  validation_params);
 		
 		// test sha1RSA validation
@@ -1044,7 +1064,7 @@ namespace tut
 		test_chain->add(new LLBasicCertificate(mSha1RSATestCert));	
 		test_chain->add(new LLBasicCertificate(mSha1RSATestCA));
 
-		test_chain->validate(0, test_store, validation_params);	
+		test_store->validate(0, test_chain, validation_params);	
 	}
 	
 };
diff --git a/indra/newview/tests/llviewernetwork_test.cpp b/indra/newview/tests/llviewernetwork_test.cpp
index d819b445645546ba9b9cd36f169423c6bf0fb717..5fba5eb69c348fe394fb9e3f3e9b30cc754eb335 100644
--- a/indra/newview/tests/llviewernetwork_test.cpp
+++ b/indra/newview/tests/llviewernetwork_test.cpp
@@ -148,7 +148,8 @@ namespace tut
 					  known_grids[std::string("util.agni.lindenlab.com")], std::string("Agni"));
 		ensure_equals("None exists", known_grids[""], "None");
 		
-		LLSD grid = LLGridManager::getInstance()->getGridInfo("util.agni.lindenlab.com");
+		LLSD grid;
+		LLGridManager::getInstance()->getGridInfo("util.agni.lindenlab.com", grid);
 		ensure("Grid info for agni is a map", grid.isMap());
 		ensure_equals("name is correct for agni", 
 					  grid[GRID_VALUE].asString(), std::string("util.agni.lindenlab.com"));
@@ -190,7 +191,8 @@ namespace tut
 	
 		
 		// assure Agni doesn't get overwritten
-		LLSD grid = LLGridManager::getInstance()->getGridInfo("util.agni.lindenlab.com");
+		LLSD grid;
+		LLGridManager::getInstance()->getGridInfo("util.agni.lindenlab.com", grid);
 
 		ensure_equals("Agni grid label was not modified by grid file", 
 					  grid[GRID_LABEL_VALUE].asString(), std::string("Agni"));
@@ -215,7 +217,7 @@ namespace tut
 		
 		ensure_equals("Grid file adds to name<->label map", 
 					  known_grids["grid1"], std::string("mylabel"));
-		grid = LLGridManager::getInstance()->getGridInfo("grid1");
+		LLGridManager::getInstance()->getGridInfo("grid1", grid);
 		ensure_equals("grid file grid name is set",
 					  grid[GRID_VALUE].asString(), std::string("grid1"));
 		ensure_equals("grid file label is set", 
@@ -244,35 +246,20 @@ namespace tut
 	template<> template<>
 	void viewerNetworkTestObject::test<3>()
 	{	
-		gCmdLineLoginURI = "https://my.login.uri/cgi-bin/login.cgi";
-		
+		// USE --grid command line
+		// initialize with a known grid
+		LLSD grid;
+		gCmdLineGridChoice = "Aditi";
 		LLGridManager::getInstance()->initialize("grid_test.xml");
 		// with single login uri specified.
 		std::map<std::string, std::string> known_grids = LLGridManager::getInstance()->getKnownGrids();
-		ensure_equals("adding a command line grid increases known grid size", 
-					  known_grids.size(), 24);
-		ensure_equals("Command line grid is added to the list of grids", 
-					  known_grids["my.login.uri"], std::string("my.login.uri"));
-		LLSD grid = LLGridManager::getInstance()->getGridInfo("my.login.uri");
-		ensure_equals("Command line grid name is set",
-					  grid[GRID_VALUE].asString(), std::string("my.login.uri"));
-		ensure_equals("Command line grid label is set", 
-					  grid[GRID_LABEL_VALUE].asString(), std::string("my.login.uri"));
-		ensure("Command line grid login uri is an array",
-			   grid[GRID_LOGIN_URI_VALUE].isArray());
-		ensure_equals("Command line grid login uri is set",
-					  grid[GRID_LOGIN_URI_VALUE][0].asString(), 
-					  std::string("https://my.login.uri/cgi-bin/login.cgi"));
-		ensure_equals("Command line grid helper uri is set",
-					  grid[GRID_HELPER_URI_VALUE].asString(), 
-					  std::string("https://my.login.uri/helpers/"));
-		ensure_equals("Command line grid login page is set",
-					  grid[GRID_LOGIN_PAGE_VALUE].asString(), 
-					  std::string("http://my.login.uri/app/login/"));
-		ensure("Command line grid favorite is set",
-			   !grid.has(GRID_IS_FAVORITE_VALUE));
-		ensure("Command line grid isn't a system grid",
-			   !grid.has(GRID_IS_SYSTEM_GRID_VALUE));		
+		ensure_equals("Using a known grid via command line doesn't increase number of known grids", 
+					  known_grids.size(), 23);
+		ensure_equals("getGridLabel", LLGridManager::getInstance()->getGridLabel(), std::string("Aditi"));
+		// initialize with a known grid in lowercase
+		gCmdLineGridChoice = "agni";
+		LLGridManager::getInstance()->initialize("grid_test.xml");
+		ensure_equals("getGridLabel", LLGridManager::getInstance()->getGridLabel(), std::string("Agni"));		
 		
 		// now try a command line with a custom grid identifier
 		gCmdLineGridChoice = "mycustomgridchoice";		
@@ -282,7 +269,7 @@ namespace tut
 					  known_grids.size(), 24);
 		ensure_equals("Custom Command line grid is added to the list of grids", 
 					  known_grids["mycustomgridchoice"], std::string("mycustomgridchoice"));
-		grid = LLGridManager::getInstance()->getGridInfo("mycustomgridchoice");
+		LLGridManager::getInstance()->getGridInfo("mycustomgridchoice", grid);
 		ensure_equals("Custom Command line grid name is set",
 					  grid[GRID_VALUE].asString(), std::string("mycustomgridchoice"));
 		ensure_equals("Custom Command line grid label is set", 
@@ -290,27 +277,166 @@ namespace tut
 		ensure("Custom Command line grid login uri is an array",
 			   grid[GRID_LOGIN_URI_VALUE].isArray());
 		ensure_equals("Custom Command line grid login uri is set",
+					  grid[GRID_LOGIN_URI_VALUE][0].asString(), 
+					  std::string("https://mycustomgridchoice/cgi-bin/login.cgi"));
+		ensure_equals("Custom Command line grid helper uri is set",
+					  grid[GRID_HELPER_URI_VALUE].asString(), 
+					  std::string("https://mycustomgridchoice/helpers/"));
+		ensure_equals("Custom Command line grid login page is set",
+					  grid[GRID_LOGIN_PAGE_VALUE].asString(), 
+					  std::string("http://mycustomgridchoice/app/login/"));
+	}
+	
+	// validate override of login uri with cmd line
+	template<> template<>
+	void viewerNetworkTestObject::test<4>()
+	{			
+		// Override with loginuri
+		// override known grid
+		LLSD grid;
+		gCmdLineGridChoice = "Aditi";
+		gCmdLineLoginURI = "https://my.login.uri/cgi-bin/login.cgi";		
+		LLGridManager::getInstance()->initialize("grid_test.xml");		
+		std::map<std::string, std::string> known_grids = LLGridManager::getInstance()->getKnownGrids();		
+		ensure_equals("Override known grid login uri: No grids are added", 
+					  known_grids.size(), 23);
+		LLGridManager::getInstance()->getGridInfo(grid);
+		ensure("Override known grid login uri: login uri is an array",
+			   grid[GRID_LOGIN_URI_VALUE].isArray());
+		ensure_equals("Override known grid login uri: Command line grid login uri is set",
 					  grid[GRID_LOGIN_URI_VALUE][0].asString(), 
 					  std::string("https://my.login.uri/cgi-bin/login.cgi"));
+		ensure_equals("Override known grid login uri: helper uri is not changed",
+					  grid[GRID_HELPER_URI_VALUE].asString(), 
+					  std::string("http://aditi-secondlife.webdev.lindenlab.com/helpers/"));
+		ensure_equals("Override known grid login uri: login page is not set",
+					  grid[GRID_LOGIN_PAGE_VALUE].asString(), 
+					  std::string("http://secondlife.com/app/login/"));		
 		
-		// add a helperuri
-		gCmdLineHelperURI = "myhelperuri";
-		LLGridManager::getInstance()->initialize("grid_test.xml");
-		grid = LLGridManager::getInstance()->getGridInfo("mycustomgridchoice");		
-		ensure_equals("Validate command line helper uri", 
-					  grid[GRID_HELPER_URI_VALUE].asString(), std::string("myhelperuri"));		
+		// Override with loginuri
+		// override custom grid
+		gCmdLineGridChoice = "mycustomgridchoice";
+		gCmdLineLoginURI = "https://my.login.uri/cgi-bin/login.cgi";		
+		LLGridManager::getInstance()->initialize("grid_test.xml");		
+		known_grids = LLGridManager::getInstance()->getKnownGrids();
+		LLGridManager::getInstance()->getGridInfo(grid);
+		ensure_equals("Override custom grid login uri: Grid is added", 
+					  known_grids.size(), 24);		
+		ensure("Override custom grid login uri: login uri is an array",
+			   grid[GRID_LOGIN_URI_VALUE].isArray());
+		ensure_equals("Override custom grid login uri: login uri is set",
+					  grid[GRID_LOGIN_URI_VALUE][0].asString(), 
+					  std::string("https://my.login.uri/cgi-bin/login.cgi"));
+		ensure_equals("Override custom grid login uri: Helper uri is not set",
+					  grid[GRID_HELPER_URI_VALUE].asString(), 
+					  std::string("https://mycustomgridchoice/helpers/"));
+		ensure_equals("Override custom grid login uri: Login page is not set",
+					  grid[GRID_LOGIN_PAGE_VALUE].asString(), 
+					  std::string("http://mycustomgridchoice/app/login/"));
+	}
+	
+	// validate override of helper uri with cmd line
+	template<> template<>
+	void viewerNetworkTestObject::test<5>()
+	{	
+		// Override with helperuri
+		// override known grid
+		LLSD grid;
+		gCmdLineGridChoice = "Aditi";
+		gCmdLineLoginURI = "";
+		gCmdLineHelperURI = "https://my.helper.uri/mycustomhelpers";		
+		LLGridManager::getInstance()->initialize("grid_test.xml");		
+		std::map<std::string, std::string> known_grids = LLGridManager::getInstance()->getKnownGrids();		
+		ensure_equals("Override known grid helper uri: No grids are added", 
+					  known_grids.size(), 23);
+		LLGridManager::getInstance()->getGridInfo(grid);
+		ensure("Override known known helper uri: login uri is an array",
+			   grid[GRID_LOGIN_URI_VALUE].isArray());
+		ensure_equals("Override known grid helper uri: login uri is not changed",
+					  grid[GRID_LOGIN_URI_VALUE][0].asString(), 
+					  std::string("https://login.aditi.lindenlab.com/cgi-bin/login.cgi"));
+		ensure_equals("Override known grid helper uri: helper uri is changed",
+					  grid[GRID_HELPER_URI_VALUE].asString(), 
+					  std::string("https://my.helper.uri/mycustomhelpers"));
+		ensure_equals("Override known grid helper uri: login page is not changed",
+					  grid[GRID_LOGIN_PAGE_VALUE].asString(), 
+					  std::string("http://secondlife.com/app/login/"));		
+		
+		// Override with helperuri
+		// override custom grid
+		gCmdLineGridChoice = "mycustomgridchoice";
+		gCmdLineHelperURI = "https://my.helper.uri/mycustomhelpers";		
+		LLGridManager::getInstance()->initialize("grid_test.xml");	
+		known_grids = LLGridManager::getInstance()->getKnownGrids();
+		ensure_equals("Override custom grid helper uri: grids is added", 
+					  known_grids.size(), 24);
+		LLGridManager::getInstance()->getGridInfo(grid);
+		ensure("Override custom helper uri: login uri is an array",
+			   grid[GRID_LOGIN_URI_VALUE].isArray());
+		ensure_equals("Override custom grid helper uri: login uri is not changed",
+					  grid[GRID_LOGIN_URI_VALUE][0].asString(), 
+					  std::string("https://mycustomgridchoice/cgi-bin/login.cgi"));
+		ensure_equals("Override custom grid helper uri: helper uri is changed",
+					  grid[GRID_HELPER_URI_VALUE].asString(), 
+					  std::string("https://my.helper.uri/mycustomhelpers"));
+		ensure_equals("Override custom grid helper uri: login page is not changed",
+					  grid[GRID_LOGIN_PAGE_VALUE].asString(), 
+					  std::string("http://mycustomgridchoice/app/login/"));
+	}
+	
+	// validate overriding of login page via cmd line
+	template<> template<>
+	void viewerNetworkTestObject::test<6>()
+	{	
+		// Override with login page
+		// override known grid
+		LLSD grid;
+		gCmdLineGridChoice = "Aditi";
+		gCmdLineHelperURI = "";
+		gLoginPage = "myloginpage";		
+		LLGridManager::getInstance()->initialize("grid_test.xml");		
+		std::map<std::string, std::string> known_grids = LLGridManager::getInstance()->getKnownGrids();				
+		ensure_equals("Override known grid login page: No grids are added", 
+					  known_grids.size(), 23);
+		LLGridManager::getInstance()->getGridInfo(grid);
+		ensure("Override known grid login page: Command line grid login uri is an array",
+			   grid[GRID_LOGIN_URI_VALUE].isArray());
+		ensure_equals("Override known grid login page: login uri is not changed",
+					  grid[GRID_LOGIN_URI_VALUE][0].asString(), 
+					  std::string("https://login.aditi.lindenlab.com/cgi-bin/login.cgi"));
+		ensure_equals("Override known grid login page: helper uri is not changed",
+					  grid[GRID_HELPER_URI_VALUE].asString(), 
+					  std::string("http://aditi-secondlife.webdev.lindenlab.com/helpers/"));
+		ensure_equals("Override known grid login page: login page is changed",
+					  grid[GRID_LOGIN_PAGE_VALUE].asString(), 
+					  std::string("myloginpage"));		
 		
-		// add a login page
+		// Override with login page
+		// override custom grid
+		gCmdLineGridChoice = "mycustomgridchoice";
 		gLoginPage = "myloginpage";
-		LLGridManager::getInstance()->initialize("grid_test.xml");
-		grid = LLGridManager::getInstance()->getGridInfo("mycustomgridchoice");		
-		ensure_equals("Validate command line helper uri", 
-					  grid[GRID_LOGIN_PAGE_VALUE].asString(), std::string("myloginpage"));			
+		LLGridManager::getInstance()->initialize("grid_test.xml");		
+		known_grids = LLGridManager::getInstance()->getKnownGrids();
+		ensure_equals("Override custom grid login page: grids are added", 
+					  known_grids.size(), 24);
+		LLGridManager::getInstance()->getGridInfo(grid);
+		ensure("Override custom grid login page: Command line grid login uri is an array",
+			   grid[GRID_LOGIN_URI_VALUE].isArray());
+		ensure_equals("Override custom grid login page: login uri is not changed",
+					  grid[GRID_LOGIN_URI_VALUE][0].asString(), 
+					  std::string("https://mycustomgridchoice/cgi-bin/login.cgi"));
+		ensure_equals("Override custom grid login page: helper uri is not changed",
+					  grid[GRID_HELPER_URI_VALUE].asString(), 
+					  std::string("https://mycustomgridchoice/helpers/"));
+		ensure_equals("Override custom grid login page: login page is changed",
+					  grid[GRID_LOGIN_PAGE_VALUE].asString(), 
+					  std::string("myloginpage"));	
+		
 	}
 	
 	// validate grid selection
 	template<> template<>
-	void viewerNetworkTestObject::test<4>()
+	void viewerNetworkTestObject::test<7>()
 	{	
 		LLSD loginURI = LLSD::emptyArray();
 		LLSD grid = LLSD::emptyMap();
@@ -340,20 +466,20 @@ namespace tut
 		ensure("Is myaddedgrid a production grid", !LLGridManager::getInstance()->isInProductionGrid());
 		
 		LLGridManager::getInstance()->setFavorite();
-		grid = LLGridManager::getInstance()->getGridInfo("myaddedgrid");
+		LLGridManager::getInstance()->getGridInfo("myaddedgrid", grid);
 		ensure("setting favorite", grid.has(GRID_IS_FAVORITE_VALUE));
 	}
 	
 	// name based grid population
 	template<> template<>
-	void viewerNetworkTestObject::test<5>()
+	void viewerNetworkTestObject::test<8>()
 	{
 		LLGridManager::getInstance()->initialize("grid_test.xml");
 		LLSD grid = LLSD::emptyMap();
 		// adding a grid with simply a name will populate the values.
 		grid[GRID_VALUE] = "myaddedgrid";
 		LLGridManager::getInstance()->addGrid(grid);
-		grid = LLGridManager::getInstance()->getGridInfo("myaddedgrid");
+		LLGridManager::getInstance()->getGridInfo("myaddedgrid", grid);
 		
 		ensure_equals("name based grid has name value", 
 					  grid[GRID_VALUE].asString(),
@@ -386,7 +512,7 @@ namespace tut
 	
 	// persistence of the grid list with an empty gridfile.
 	template<> template<>
-	void viewerNetworkTestObject::test<6>()
+	void viewerNetworkTestObject::test<9>()
 	{
 		// try with initial grid list without a grid file,
 		// without setting the grid to a saveable favorite.
@@ -420,7 +546,7 @@ namespace tut
 	
 	// persistence of the grid file with existing gridfile
 	template<> template<>
-	void viewerNetworkTestObject::test<7>()
+	void viewerNetworkTestObject::test<10>()
 	{
 		
 		llofstream gridfile("grid_test.xml");
diff --git a/install.xml b/install.xml
index c6b6ffda810edb6c2914c6dc5b5dd70d0ed29dda..ccebe2fe50064546e61d30b7c0bbe05db863894b 100644
--- a/install.xml
+++ b/install.xml
@@ -118,9 +118,9 @@
           <key>linux</key>
           <map>
             <key>md5sum</key>
-            <string>946c2e106f14f7a1e521d4a14e0e146f</string>
+            <string>91694429e391efeea1de974df26032a2</string>
             <key>url</key>
-            <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ares-1.4.0-linux-20081202.tar.bz2</uri>
+            <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ares-1.7.1-linux-20100527.tar.bz2</uri>
           </map>
           <key>linux64</key>
           <map>
@@ -240,9 +240,9 @@
           <key>linux</key>
           <map>
             <key>md5sum</key>
-            <string>0f366e421ae9c72d9659bd20a2a326d6</string>
+            <string>a20e73f2e7d6a032ff25a5161b1b7394</string>
             <key>url</key>
-            <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/curl-7.16.4a-linux-20090303a.tar.bz2</uri>
+            <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/curl-7.20.1-linux-20100527.tar.bz2</uri>
           </map>
           <key>linux64</key>
           <map>
@@ -1386,23 +1386,23 @@ anguage Infrstructure (CLI) international standard</string>
           <key>darwin</key>
           <map>
             <key>md5sum</key>
-            <string>4d29351a842fafe617de65a8183da160</string>
+            <string>aa144917d0e33453d3c2cc2c05c6c47c</string>
             <key>url</key>
-            <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/vivox-3.1.0001.8744-darwin-20100519.tar.bz2</uri>
+            <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/vivox-3.1.0001.8821-darwin-20100529.tar.bz2</uri>
           </map>
           <key>linux</key>
           <map>
             <key>md5sum</key>
-            <string>7541138c439b1c0312610d18968f27d2</string>
+            <string>98f7945755f3ee8e52f685a3eff4d7be</string>
             <key>url</key>
-            <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/vivox-3.1.0001.8744-linux-20100519.tar.bz2</uri>
+            <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/vivox-3.1.0001.8821-linux-20100529.tar.bz2</uri>
           </map>
           <key>windows</key>
           <map>
             <key>md5sum</key>
-            <string>5d2b049ca5239da2dcebde91f7f25a43</string>
+            <string>e8fdd46cb026c2ec72c4489eb3bf39c1</string>
             <key>url</key>
-            <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/vivox-3.1.0001.8744-windows-20100519.tar.bz2</uri>
+            <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/vivox-3.1.0001.8821-windows-20100529.tar.bz2</uri>
           </map>
         </map>
       </map>