diff --git a/indra/cmake/Copy3rdPartyLibs.cmake b/indra/cmake/Copy3rdPartyLibs.cmake
index b408702f045648262e18138e42c628d9d3dbc9e0..ff705101ded51485ee120cc69017823871d68899 100644
--- a/indra/cmake/Copy3rdPartyLibs.cmake
+++ b/indra/cmake/Copy3rdPartyLibs.cmake
@@ -129,6 +129,7 @@ if(WINDOWS)
             msvcp${MSVC_VER}.dll
             msvcr${MSVC_VER}.dll
             vcruntime${MSVC_VER}.dll
+            vcruntime${MSVC_VER}_1.dll
             )
         if(EXISTS "${registry_path}/${release_msvc_file}")
             to_staging_dirs(
diff --git a/indra/lib/python/indra/util/llmanifest.py b/indra/lib/python/indra/util/llmanifest.py
index 30b722828911625513ae31220e8fcf9ac35e41a4..aedd3b7ee45b9b9f9aface22f929753455faffb4 100755
--- a/indra/lib/python/indra/util/llmanifest.py
+++ b/indra/lib/python/indra/util/llmanifest.py
@@ -881,6 +881,49 @@ def try_path(src):
         # particular, let caller notice 0.
         return count
 
+    def path_optional(self, src, dst=None):
+        sys.stdout.flush()
+        if src == None:
+            raise ManifestError("No source file, dst is " + dst)
+        if dst == None:
+            dst = src
+        dst = os.path.join(self.get_dst_prefix(), dst)
+        sys.stdout.write("Processing %s => %s ... " % (src, self._relative_dst_path(dst)))
+
+        def try_path(src):
+            # expand globs
+            count = 0
+            if self.wildcard_pattern.search(src):
+                for s,d in self.expand_globs(src, dst):
+                    assert(s != d)
+                    count += self.process_file(s, d)
+            else:
+                # if we're specifying a single path (not a glob),
+                # we should error out if it doesn't exist
+                self.check_file_exists(src)
+                count += self.process_either(src, dst)
+            return count
+
+        try_prefixes = [self.get_src_prefix(), self.get_artwork_prefix(), self.get_build_prefix()]
+        for pfx in try_prefixes:
+            try:
+                count = try_path(os.path.join(pfx, src))
+            except MissingError:
+                # if we produce MissingError, just try the next prefix
+                continue
+            # If we actually found nonzero files, stop looking
+            if count:
+                break
+        else:
+            sys.stdout.write("Skipping %s\n" % (src))
+            return 0
+
+        print("%d files" % count)
+
+        # Let caller check whether we processed as many files as expected. In
+        # particular, let caller notice 0.
+        return count
+
     def do(self, *actions):
         self.actions = actions
         self.construct()
diff --git a/indra/llmath/lloctree.h b/indra/llmath/lloctree.h
index 2283df1e1a9a20336c56eb1d3e8b912b3ad38156..a9a54a8113ec64be5801ce80864b1239dc592a8d 100644
--- a/indra/llmath/lloctree.h
+++ b/indra/llmath/lloctree.h
@@ -73,7 +73,7 @@ template <class T>
 class LLOctreeTravelerDepthFirst : public LLOctreeTraveler<T>
 {
 public:
-	virtual void traverse(const LLOctreeNode<T>* node);
+	virtual void traverse(const LLOctreeNode<T>* node) override;
 };
 
 template <class T>
@@ -696,7 +696,7 @@ class LLOctreeRoot : public LLOctreeNode<T>
 	{
 	}
 	
-	bool balance()
+	bool balance() override
 	{	
         //LL_PROFILE_ZONE_NAMED_COLOR("Octree::balance()",OCTREE_DEBUG_COLOR_BALANCE);
 
@@ -732,7 +732,7 @@ class LLOctreeRoot : public LLOctreeNode<T>
 	}
 
 	// LLOctreeRoot::insert
-	bool insert(T* data)
+	bool insert(T* data) override
 	{
 		if (data == NULL) 
 		{
@@ -835,6 +835,12 @@ class LLOctreeRoot : public LLOctreeNode<T>
 
 		return false;
 	}
+
+    bool isLeaf() const override
+    {
+        // root can't be a leaf
+        return false;
+    }
 };
 
 //========================
diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp
index 3727ce85afab9d1ab2b99b8ec29eb57d8822829c..5099920f328c6fa1d38870392eabd5d7b1c18d55 100644
--- a/indra/llmath/llvolume.cpp
+++ b/indra/llmath/llvolume.cpp
@@ -414,7 +414,7 @@ class LLVolumeOctreeRebound : public LLOctreeTravelerDepthFirst<LLVolumeTriangle
 				max.setMax(max, *tri->mV[2]);
 			}
 		}
-		else if (!branch->isLeaf())
+		else if (branch->getChildCount() > 0)
 		{ //no data, but child nodes exist
 			LLVolumeOctreeListener* child = (LLVolumeOctreeListener*) branch->getChild(0)->getListener(0);
 
@@ -424,7 +424,7 @@ class LLVolumeOctreeRebound : public LLOctreeTravelerDepthFirst<LLVolumeTriangle
 		}
 		else
 		{
-			LL_ERRS() << "Empty leaf" << LL_ENDL;
+            llassert(!branch->isLeaf()); // Empty leaf
 		}
 
 		for (S32 i = 0; i < branch->getChildCount(); ++i)
diff --git a/indra/newview/VIEWER_VERSION.txt b/indra/newview/VIEWER_VERSION.txt
index 54358db763fa41582501e9fc9b6729d54ce7d1e2..09a7391e4e373ff475cb5093c88cbbbc7210dc27 100644
--- a/indra/newview/VIEWER_VERSION.txt
+++ b/indra/newview/VIEWER_VERSION.txt
@@ -1 +1 @@
-6.5.4
+6.6.1
diff --git a/indra/newview/app_settings/shaders/class1/deferred/fullbrightShinyV.glsl b/indra/newview/app_settings/shaders/class1/deferred/fullbrightShinyV.glsl
index 2c139430e7eff3a33b6552a5fabc4946bcee7dbc..3bd6b693fa29366e3669769282a95c1a5ada0feb 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/fullbrightShinyV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/fullbrightShinyV.glsl
@@ -25,6 +25,7 @@
 
 uniform mat3 normal_matrix;
 uniform mat4 texture_matrix0;
+uniform mat4 texture_matrix1;
 uniform mat4 modelview_matrix;
 uniform mat4 modelview_projection_matrix;
 
@@ -71,7 +72,7 @@ void main()
 	vec3 ref = reflect(pos.xyz, -norm);
 
 	vary_texcoord0 = (texture_matrix0 * vec4(texcoord0,0,1)).xy;
-	vary_texcoord1 = transpose(normal_matrix) * ref.xyz;
+	vary_texcoord1 = (texture_matrix1 * vec4(ref,1.0)).xyz;
 
 	calcAtmospherics(pos.xyz);
 
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightAlphaMaskF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightAlphaMaskF.glsl
index 1855cfceeb8c4b277e3fe3142d9a98791c4ecb3a..ad2170bbd3aa3f98f0032c221fd1f1be4cb77078 100644
--- a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightAlphaMaskF.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightAlphaMaskF.glsl
@@ -50,7 +50,7 @@ void fullbright_lighting()
 		discard;
 	}
 
-	color.rgb *= vertex_color.rgb;
+	color *= vertex_color;
 
 	color.rgb = pow(color.rgb, vec3(texture_gamma));
 
diff --git a/indra/newview/app_settings/shaders/class1/objects/fullbrightShinyV.glsl b/indra/newview/app_settings/shaders/class1/objects/fullbrightShinyV.glsl
index ace2574ac2aa97463e500b696d58a75330692fe8..891515ab1e2d39537a99161a2f2df8fd50f84439 100644
--- a/indra/newview/app_settings/shaders/class1/objects/fullbrightShinyV.glsl
+++ b/indra/newview/app_settings/shaders/class1/objects/fullbrightShinyV.glsl
@@ -25,6 +25,7 @@
 
 uniform mat3 normal_matrix;
 uniform mat4 texture_matrix0;
+uniform mat4 texture_matrix1;
 uniform mat4 modelview_matrix;
 uniform mat4 modelview_projection_matrix;
 
@@ -70,7 +71,7 @@ void main()
 	vec3 ref = reflect(pos.xyz, -norm);
 
 	vary_texcoord0 = (texture_matrix0 * vec4(texcoord0,0,1)).xy;
-	vary_texcoord1 = transpose(normal_matrix) * ref;
+	vary_texcoord1 = (texture_matrix1 * vec4(ref,1.0)).xyz;
 
 	calcAtmospherics(pos.xyz);
 
diff --git a/indra/newview/app_settings/shaders/class1/objects/shinyV.glsl b/indra/newview/app_settings/shaders/class1/objects/shinyV.glsl
index 097e42d2331820b1a77a2bd997a615e4c61c739c..3ad7bcaa50f7bb14f0ccf8cee61ece51c7e53f4b 100644
--- a/indra/newview/app_settings/shaders/class1/objects/shinyV.glsl
+++ b/indra/newview/app_settings/shaders/class1/objects/shinyV.glsl
@@ -25,6 +25,7 @@
 
 uniform mat3 normal_matrix;
 uniform mat4 texture_matrix0;
+uniform mat4 texture_matrix1;
 uniform mat4 modelview_matrix;
 uniform mat4 modelview_projection_matrix;
 
@@ -69,7 +70,7 @@ void main()
 	vec3 ref = reflect(pos.xyz, -norm);
 
 	vary_texcoord0 = (texture_matrix0*vec4(texcoord0,0,1)).xy;
-	vary_texcoord1 = transpose(normal_matrix) * ref;
+	vary_texcoord1 = (texture_matrix1 * vec4(ref,1.0)).xyz;
 
 	calcAtmospherics(pos.xyz);
 
diff --git a/indra/newview/lldrawpoolbump.cpp b/indra/newview/lldrawpoolbump.cpp
index 2892fc6f9f533c3bf2270e48016ad085d7bfdb03..8db6a10e2685a539369219ac4a0f241c64aad1fd 100644
--- a/indra/newview/lldrawpoolbump.cpp
+++ b/indra/newview/lldrawpoolbump.cpp
@@ -311,6 +311,7 @@ void LLDrawPoolBump::bindCubeMap(LLGLSLShader* shader, S32 shader_level, S32& di
 			shader->uniform4fv(LLViewerShaderMgr::SHINY_ORIGIN, 1, vec4.mV);			
 			if (shader_level > 1)
 			{
+                cube_map->setMatrix(1);
 				// Make sure that texture coord generation happens for tex unit 1, as that's the one we use for 
 				// the cube map in the one pass shiny shaders
 				cube_channel = shader->enableTexture(LLViewerShaderMgr::ENVIRONMENT_MAP, LLTexUnit::TT_CUBE_MAP);
@@ -319,6 +320,7 @@ void LLDrawPoolBump::bindCubeMap(LLGLSLShader* shader, S32 shader_level, S32& di
 			}
 			else
 			{
+                cube_map->setMatrix(0);
 				cube_channel = shader->enableTexture(LLViewerShaderMgr::ENVIRONMENT_MAP, LLTexUnit::TT_CUBE_MAP);
 				diffuse_channel = -1;
 				cube_map->enable(cube_channel);
@@ -332,6 +334,7 @@ void LLDrawPoolBump::bindCubeMap(LLGLSLShader* shader, S32 shader_level, S32& di
 			diffuse_channel = -1;
 			gGL.getTexUnit(0)->disable();
 			cube_map->enable(0);
+            cube_map->setMatrix(0);
 			gGL.getTexUnit(0)->bind(cube_map);
 		}
 	}
@@ -390,6 +393,7 @@ void LLDrawPoolBump::unbindCubeMap(LLGLSLShader* shader, S32 shader_level, S32&
         // Moved below shader->disableTexture call to avoid false alarms from auto-re-enable of textures on stage 0
         // MAINT-755
 		cube_map->disable();
+        cube_map->restoreMatrix();
 	}
 }
 
@@ -460,6 +464,7 @@ void LLDrawPoolBump::beginFullbrightShiny()
 		LLVector4 vec4(vec, gShinyOrigin.mV[3]);
 		shader->uniform4fv(LLViewerShaderMgr::SHINY_ORIGIN, 1, vec4.mV);
 
+        cube_map->setMatrix(1);
 		// Make sure that texture coord generation happens for tex unit 1, as that's the one we use for 
 		// the cube map in the one pass shiny shaders
 		gGL.getTexUnit(1)->disable();
@@ -520,6 +525,7 @@ void LLDrawPoolBump::endFullbrightShiny()
 	if( cube_map )
 	{
 		cube_map->disable();
+        cube_map->restoreMatrix();
 		shader->unbind();
 	}
 	
diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp
index d1e2b8b93d01deb35e0a7c76d1afd4a2143f610b..d0c26bc43ba1a6bcc9365ba604421b987682cb36 100644
--- a/indra/newview/llface.cpp
+++ b/indra/newview/llface.cpp
@@ -2377,7 +2377,7 @@ BOOL LLFace::calcPixelArea(F32& cos_angle_to_view_dir, F32& radius)
     {
         //override with avatar bounding box
         LLVOAvatar* avatar = mVObjp->getAvatar();
-        if (avatar)
+        if (avatar && avatar->mDrawable)
         {
             center.load3(avatar->getPositionAgent().mV);
             const LLVector4a* exts = avatar->mDrawable->getSpatialExtents();
diff --git a/indra/newview/llpanelgroupcreate.cpp b/indra/newview/llpanelgroupcreate.cpp
index 52be75072cad4104c7ef714451bc890c85312c99..01a4ab0455f0477d5b82ad9eaa532dc074eb9508 100644
--- a/indra/newview/llpanelgroupcreate.cpp
+++ b/indra/newview/llpanelgroupcreate.cpp
@@ -104,7 +104,7 @@ void LLPanelGroupCreate::onOpen(const LLSD& key)
     // populate list
     addMembershipRow("Base");
     addMembershipRow("Premium");
-    addMembershipRow("Premium Plus");
+    addMembershipRow("Premium_Plus");
     addMembershipRow("Internal");// Present only if you are already in one, needed for testing
 
     S32 cost = LLAgentBenefitsMgr::current().getCreateGroupCost();
diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp
index 5997d522c4fac606c25c448089ebda150565ecb6..e424d6b5f53aca781e76df28e7085fbd8e24da66 100644
--- a/indra/newview/llpanelpeople.cpp
+++ b/indra/newview/llpanelpeople.cpp
@@ -1090,9 +1090,9 @@ void LLPanelPeople::onGroupLimitInfo()
 	args["MAX_BASIC"] = max_basic;
 	args["MAX_PREMIUM"] = max_premium;
 
-	if (LLAgentBenefitsMgr::has("Premium Plus"))
+	if (LLAgentBenefitsMgr::has("Premium_Plus"))
 	{
-		S32 max_premium_plus = LLAgentBenefitsMgr::get("Premium Plus").getGroupMembershipLimit();
+		S32 max_premium_plus = LLAgentBenefitsMgr::get("Premium_Plus").getGroupMembershipLimit();
 		args["MAX_PREMIUM_PLUS"] = max_premium_plus;
 		LLNotificationsUtil::add("GroupLimitInfoPlus", args);
 	}
diff --git a/indra/newview/llspatialpartition.h b/indra/newview/llspatialpartition.h
index acfcd63686cde377bb93a6b622e33e23e86a05d6..6d3ef338013d09bbdf5cbdc99e81d945a9ec759d 100644
--- a/indra/newview/llspatialpartition.h
+++ b/indra/newview/llspatialpartition.h
@@ -255,6 +255,19 @@ class LLSpatialGroup : public LLOcclusionCullingGroup
 		}
 	};
 
+    struct CompareRenderOrder
+    {
+        bool operator()(const LLSpatialGroup* const& lhs, const LLSpatialGroup* const& rhs)
+        {
+            if (lhs->mAvatarp != rhs->mAvatarp)
+            {
+                return lhs->mAvatarp < rhs->mAvatarp;
+            }
+
+            return lhs->mRenderOrder > rhs->mRenderOrder;
+        }
+    };
+
 	typedef enum
 	{
 		GEOM_DIRTY				= LLViewerOctreeGroup::INVALID_STATE,
@@ -338,6 +351,10 @@ class LLSpatialGroup : public LLOcclusionCullingGroup
 	
 	F32 mPixelArea;
 	F32 mRadius;
+
+    //used by LLVOAVatar to set render order in alpha draw pool to preserve legacy render order behavior
+    LLVOAvatar* mAvatarp = nullptr;
+    U32 mRenderOrder = 0; 
 } LL_ALIGN_POSTFIX(64);
 
 class LLGeometryManager
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 6c074dfa08ea704d4428c108da89dbefa928334b..5aec579fd8b6bbac6c82bbb5a4b9ebacf92b2d84 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -3337,12 +3337,6 @@ bool init_benefits(LLSD& response)
 		succ = false;
 	}
 
-	// FIXME PREMIUM - for testing if login does not yet provide Premium Plus. Should be removed thereafter.
-	//if (succ && !LLAgentBenefitsMgr::has("Premium Plus"))
-	//{
-	//	LLAgentBenefitsMgr::init("Premium Plus", packages_sd["Premium"]["benefits"]);
-	//	llassert(LLAgentBenefitsMgr::has("Premium Plus"));
-	//}
 	return succ;
 }
 
diff --git a/indra/newview/llvieweroctree.cpp b/indra/newview/llvieweroctree.cpp
index 87e296012d3249fab20fca7249d274761afb02a6..12624ec3a20ed3dd626541fefc83b5ea4cf51e11 100644
--- a/indra/newview/llvieweroctree.cpp
+++ b/indra/newview/llvieweroctree.cpp
@@ -564,7 +564,7 @@ void LLViewerOctreeGroup::rebound()
 		
 		group->setState(SKIP_FRUSTUM_CHECK);
 	}
-	else if (mOctreeNode->isLeaf())
+	else if (mOctreeNode->getChildCount() == 0)
 	{ //copy object bounding box if this is a leaf
 		boundObjects(TRUE, mExtents[0], mExtents[1]);
 		mBounds[0] = mObjectBounds[0];
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 625fdf1977e143c8d28c519e0931a4a796ae7f43..f0c379f1ae7e1b8b8459bf74389b500b58405f5e 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -2813,6 +2813,7 @@ void LLVOAvatar::idleUpdateMisc(bool detailed_update)
 	// update attachments positions
 	if (detailed_update)
 	{
+        U32 draw_order = 0;
 		for (attachment_map_t::iterator iter = mAttachmentPoints.begin(); 
 			 iter != mAttachmentPoints.end();
 			 ++iter)
@@ -2851,9 +2852,17 @@ void LLVOAvatar::idleUpdateMisc(bool detailed_update)
                         }
                     }
 
-                    
-                    attached_object->mDrawable->makeActive();
-                    attached_object->mDrawable->updateXform(TRUE);
+                    // if selecting any attachments, update all of them as non-damped
+                    if (LLSelectMgr::getInstance()->getSelection()->getObjectCount() && LLSelectMgr::getInstance()->getSelection()->isAttachment())
+                    {
+                        gPipeline.updateMoveNormalAsync(attached_object->mDrawable);
+                    }
+                    else
+                    {
+                        // Note: SL-17415; While most objects follow joints,
+                        // some objects get position updates from server
+                        gPipeline.updateMoveDampedAsync(attached_object->mDrawable);
+                    }
 
                     // override_bbox calls movePartition() and getSpatialPartition(),
                     // so bridge might no longer be valid, get it again.
@@ -2871,6 +2880,13 @@ void LLVOAvatar::idleUpdateMisc(bool detailed_update)
                             bridge->setState(LLDrawable::MOVE_UNDAMPED);
                             bridge->updateMove();
                             bridge->setState(LLDrawable::EARLY_MOVE);
+
+                            LLSpatialGroup* group = attached_object->mDrawable->getSpatialGroup();
+                            if (group)
+                            { //set draw order of group
+                                group->mAvatarp = this;
+                                group->mRenderOrder = draw_order++;
+                            }
                         }
                     }
 
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index 545fe9642ad3f51aca6c9d538127e71abd2e044a..ee1f8eba9ceafe28838ccf689f810bc0283738a4 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -3883,7 +3883,11 @@ void LLPipeline::postSort(LLCamera& camera)
 
 	if (!sShadowRender)
 	{
+        // order alpha groups by distance
 		std::sort(sCull->beginAlphaGroups(), sCull->endAlphaGroups(), LLSpatialGroup::CompareDepthGreater());
+
+        // order rigged alpha groups by avatar attachment order
+        std::sort(sCull->beginRiggedAlphaGroups(), sCull->endRiggedAlphaGroups(), LLSpatialGroup::CompareRenderOrder());
 	}
 
 	LL_PUSH_CALLSTACKS();
diff --git a/indra/newview/skins/default/xui/de/strings.xml b/indra/newview/skins/default/xui/de/strings.xml
index f021e03dc759bd14927c9e0fe9ab73224d7045b4..ba26f721fe57b4323d7fb7964f2429ee87ca429b 100644
--- a/indra/newview/skins/default/xui/de/strings.xml
+++ b/indra/newview/skins/default/xui/de/strings.xml
@@ -5101,7 +5101,7 @@ Bitte überprüfen Sie http://status.secondlifegrid.net, um herauszufinden, ob e
 	<string name="PremiumMembership">
 		Premium
 	</string>
-	<string name="Premium PlusMembership">
+	<string name="Premium_PlusMembership">
 		Premium Plus
 	</string>
 	<string name="DeleteItems">
diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index 6ad49764103d4be9785d79ad1010ff6e418d53f6..be9ea71f4c69a3b344766edb9f6f2704d2463001 100644
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -3964,7 +3964,7 @@ Please check http://status.secondlifegrid.net to see if there is a known problem
   <!-- SL Membership -->
   <string name="BaseMembership">Base</string>
   <string name="PremiumMembership">Premium</string>
-  <string name="Premium PlusMembership">Premium Plus</string>
+  <string name="Premium_PlusMembership">Premium Plus</string>
   <string name="InternalMembership">Internal</string> <!-- No need to translate -->
 
   <string name="MembershipUpgradeText">Upgrade to Premium</string>
diff --git a/indra/newview/skins/default/xui/fr/strings.xml b/indra/newview/skins/default/xui/fr/strings.xml
index 9fde703d6cd3ed105ffd77b4548f32ce9eb7b7a8..f7545f08d2a11b08a9c56d8cc3b7fad25c2ac2d1 100644
--- a/indra/newview/skins/default/xui/fr/strings.xml
+++ b/indra/newview/skins/default/xui/fr/strings.xml
@@ -5102,7 +5102,7 @@ Veuillez vous reporter à http://status.secondlifegrid.net afin de déterminer s
 	<string name="PremiumMembership">
 		Premium
 	</string>
-	<string name="Premium PlusMembership">
+	<string name="Premium_PlusMembership">
 		Premium Plus
 	</string>
 	<string name="DeleteItems">
diff --git a/indra/newview/skins/default/xui/it/strings.xml b/indra/newview/skins/default/xui/it/strings.xml
index 3049828f46e05f0855ce6cb724ed5b10f3542825..7690e02692673df139e0a1892983511366d10f0c 100644
--- a/indra/newview/skins/default/xui/it/strings.xml
+++ b/indra/newview/skins/default/xui/it/strings.xml
@@ -5017,7 +5017,7 @@ Consulta la pagina http://status.secondlifegrid.net per determinare se il proble
 	<string name="PremiumMembership">
 		Premium
 	</string>
-	<string name="Premium PlusMembership">
+	<string name="Premium_PlusMembership">
 		Premium Plus
 	</string>
 	<string name="DeleteItems">
diff --git a/indra/newview/skins/default/xui/ja/strings.xml b/indra/newview/skins/default/xui/ja/strings.xml
index dcd6e65d34a871ac729f807b972b215141cdb517..b4bc36a80090de5d44d58e25ab5ec13e8aa16d9f 100644
--- a/indra/newview/skins/default/xui/ja/strings.xml
+++ b/indra/newview/skins/default/xui/ja/strings.xml
@@ -5100,7 +5100,7 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ
 	<string name="PremiumMembership">
 		プレミアム
 	</string>
-	<string name="Premium PlusMembership">
+	<string name="Premium_PlusMembership">
 		プレミアムプラス
 	</string>
 	<string name="DeleteItems">
diff --git a/indra/newview/skins/default/xui/ru/strings.xml b/indra/newview/skins/default/xui/ru/strings.xml
index 43a87b2b1863fa3ce993078074441845ee837e41..ee2dcfe9ccb296c717b4e997331a46385ba91d76 100644
--- a/indra/newview/skins/default/xui/ru/strings.xml
+++ b/indra/newview/skins/default/xui/ru/strings.xml
@@ -5096,7 +5096,7 @@ support@secondlife.com.
 	<string name="PremiumMembership">
 		Премиум
 	</string>
-	<string name="Premium PlusMembership">
+	<string name="Premium_PlusMembership">
 		Премиум Плюс
 	</string>
 	<string name="DeleteItems">
diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
index 76160b73ba978e4f8e9b88a30c219843e0174e61..de5ac5ed3da126099e5e37df294ee632d7c2f175 100755
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -527,6 +527,7 @@ def construct(self):
             # See http://msdn.microsoft.com/en-us/library/ms235291(VS.80).aspx
             self.path("msvcp140.dll")
             self.path("vcruntime140.dll")
+            self.path_optional("vcruntime140_1.dll")
 
             # SLVoice executable
             with self.prefix(src=os.path.join(pkgdir, 'bin', 'release')):
@@ -604,6 +605,7 @@ def construct(self):
                                               'sharedlibs', 'Release')):
                 self.path("msvcp140.dll")
                 self.path("vcruntime140.dll")
+                self.path_optional("vcruntime140_1.dll")
 
             # CEF files common to all configurations
             with self.prefix(src=os.path.join(pkgdir, 'resources')):