diff --git a/indra/llui/tests/llurlentry_stub.cpp b/indra/llui/tests/llurlentry_stub.cpp
index 75946b241685ba7923d45633b3c8ca56c9927610..26b3b17577b6549e34d7fbc0d4840e005eac8d28 100644
--- a/indra/llui/tests/llurlentry_stub.cpp
+++ b/indra/llui/tests/llurlentry_stub.cpp
@@ -127,7 +127,7 @@ namespace LLInitParam
 	bool BaseBlock::deserializeBlock(Parser& p, Parser::name_stack_range_t name_stack, S32 generation){ return true; }
 	void BaseBlock::serializeBlock(Parser& parser, Parser::name_stack_t name_stack, const LLInitParam::BaseBlock* diff_block) const {}
 	bool BaseBlock::inspectBlock(Parser& parser, Parser::name_stack_t name_stack, S32 min_value, S32 max_value) const { return true; }
-	bool BaseBlock::merge(BlockDescriptor& block_data, const BaseBlock& other, bool overwrite) { return true; }
+	bool BaseBlock::mergeBlock(BlockDescriptor& block_data, const BaseBlock& other, bool overwrite) { return true; }
 	bool BaseBlock::validateBlock(bool emit_errors) const { return true; }
 
 	ParamValue<LLUIColor, TypeValues<LLUIColor> >::ParamValue(const LLUIColor& color)
diff --git a/indra/llui/tests/llurlmatch_test.cpp b/indra/llui/tests/llurlmatch_test.cpp
index aea605c9f2ff0250f222e803aab90de7dae94fd1..e09ef33d4911d8e5bca022eabbcead4e4f1baac7 100644
--- a/indra/llui/tests/llurlmatch_test.cpp
+++ b/indra/llui/tests/llurlmatch_test.cpp
@@ -101,7 +101,7 @@ namespace LLInitParam
 	bool BaseBlock::deserializeBlock(Parser& p, Parser::name_stack_range_t name_stack, S32 generation){ return true; }
 	void BaseBlock::serializeBlock(Parser& parser, Parser::name_stack_t name_stack, const LLInitParam::BaseBlock* diff_block) const {}
 	bool BaseBlock::inspectBlock(Parser& parser, Parser::name_stack_t name_stack, S32 min_count, S32 max_count) const { return true; }
-	bool BaseBlock::merge(BlockDescriptor& block_data, const BaseBlock& other, bool overwrite) { return true; }
+	bool BaseBlock::mergeBlock(BlockDescriptor& block_data, const BaseBlock& other, bool overwrite) { return true; }
 	bool BaseBlock::validateBlock(bool emit_errors) const { return true; }
 
 	ParamValue<LLUIColor, TypeValues<LLUIColor> >::ParamValue(const LLUIColor& color)
diff --git a/indra/llxuixml/llinitparam.cpp b/indra/llxuixml/llinitparam.cpp
index 3c4eb70a5d985836d336ecc8d05184c4c84f2ab1..b3312798dddc283e6c000e8a3ed05be928d6afdb 100644
--- a/indra/llxuixml/llinitparam.cpp
+++ b/indra/llxuixml/llinitparam.cpp
@@ -375,7 +375,7 @@ namespace LLInitParam
 	//static 
 	void BaseBlock::addParam(BlockDescriptor& block_data, const ParamDescriptorPtr in_param, const char* char_name)
 	{
-		// create a copy of the paramdescriptor in allparams
+		// create a copy of the param descriptor in mAllParams
 		// so other data structures can store a pointer to it
 		block_data.mAllParams.push_back(in_param);
 		ParamDescriptorPtr param(block_data.mAllParams.back());
@@ -469,7 +469,7 @@ namespace LLInitParam
 
 	// take all provided params from other and apply to self
 	// NOTE: this requires that "other" is of the same derived type as this
-	bool BaseBlock::merge(BlockDescriptor& block_data, const BaseBlock& other, bool overwrite)
+	bool BaseBlock::mergeBlock(BlockDescriptor& block_data, const BaseBlock& other, bool overwrite)
 	{
 		bool some_param_changed = false;
 		BlockDescriptor::all_params_list_t::const_iterator end_it = block_data.mAllParams.end();
diff --git a/indra/llxuixml/llinitparam.h b/indra/llxuixml/llinitparam.h
index 858f8405b458525c000ecf99ae30b87b816ded91..35c3106198b0443ff7312d90ab36ef42545b8931 100644
--- a/indra/llxuixml/llinitparam.h
+++ b/indra/llxuixml/llinitparam.h
@@ -476,8 +476,12 @@ namespace LLInitParam
 		void init(BlockDescriptor& descriptor, BlockDescriptor& base_descriptor, size_t block_size);
 
 
+		bool mergeBlockParam(bool param_provided, BlockDescriptor& block_data, const BaseBlock& other, bool overwrite)
+		{
+			mergeBlock(block_data, other, overwrite);
+		}
 		// take all provided params from other and apply to self
-		bool merge(BlockDescriptor& block_data, const BaseBlock& other, bool overwrite);
+		bool mergeBlock(BlockDescriptor& block_data, const BaseBlock& other, bool overwrite);
 
 		// can be updated in getters
 		mutable S32				mChangeVersion;
@@ -896,12 +900,14 @@ namespace LLInitParam
 			const self_t& src_typed_param = static_cast<const self_t&>(src);
 			self_t& dst_typed_param = static_cast<self_t&>(dst);
 
-			if (src_typed_param.isProvided()
-				&& (overwrite || !dst_typed_param.isProvided()))
+			if (src_typed_param.anyProvided())
 			{
-				if (dst_typed_param.merge(param_value_t::selfBlockDescriptor(), src_typed_param, overwrite))
+				bool param_provided = src_typed_param.isProvided() && (overwrite || !dst_typed_param.isProvided());
+				if (dst_typed_param.mergeBlockParam(param_provided, param_value_t::selfBlockDescriptor(), src_typed_param, overwrite))
 				{
 					dst_typed_param.clearValueName();
+					dst_typed_param.setProvided(true);
+					dst_typed_param.enclosingBlock().paramChanged(dst_typed_param, true);
 					return true;
 				}
 			}
@@ -1082,6 +1088,12 @@ namespace LLInitParam
 				std::copy(dst_typed_param.begin(), dst_typed_param.end(), std::back_inserter(new_values));
 				std::swap(dst_typed_param.mValues, new_values);
 			}
+
+			if (src_typed_param.begin() != src_typed_param.end())
+			{
+				dst_typed_param.setProvided(true);
+				dst_typed_param.enclosingBlock().paramChanged(dst_typed_param, true);
+			}
 			return true;
 		}
 
@@ -1282,6 +1294,13 @@ namespace LLInitParam
 				std::copy(dst_typed_param.begin(), dst_typed_param.end(), std::back_inserter(new_values));
 				std::swap(dst_typed_param.mValues, new_values);
 			}
+
+			if (src_typed_param.begin() != src_typed_param.end())
+			{
+				dst_typed_param.setProvided(true);
+				dst_typed_param.enclosingBlock().paramChanged(dst_typed_param, true);
+			}
+
 			return true;
 		}
 
@@ -1301,24 +1320,28 @@ namespace LLInitParam
 		// take all provided params from other and apply to self
 		bool overwriteFrom(const self_t& other)
 		{
-			return merge(selfBlockDescriptor(), other, true);
+			return mergeBlock(selfBlockDescriptor(), other, true);
 		}
 
 		// take all provided params that are not already provided, and apply to self
 		bool fillFrom(const self_t& other)
 		{
-			return merge(selfBlockDescriptor(), other, false);
+			return mergeBlock(selfBlockDescriptor(), other, false);
 		}
 
-		// merge with other block
-		bool merge(BlockDescriptor& block_data, const self_t& other, bool overwrite)
+		bool mergeBlockParam(bool param_provided, BlockDescriptor& block_data, const self_t& other, bool overwrite)
 		{
-			// only merge a choice if we are overwriting with other's contents
-			if (overwrite)
+			if (param_provided)
 			{
-				mCurChoice = other.mCurChoice;
-				return BaseBlock::merge(selfBlockDescriptor(), other, overwrite);
+				mergeBlock(block_data, other, overwrite);
 			}
+		}
+
+		// merge with other block
+		bool mergeBlock(BlockDescriptor& block_data, const self_t& other, bool overwrite)
+		{
+			mCurChoice = other.mCurChoice;
+			return BaseBlock::mergeBlock(selfBlockDescriptor(), other, overwrite);
 			return false;
 		}
 
@@ -1445,13 +1468,13 @@ namespace LLInitParam
 		// take all provided params from other and apply to self
 		bool overwriteFrom(const self_t& other)
 		{
-			return static_cast<DERIVED_BLOCK*>(this)->merge(selfBlockDescriptor(), other, true);
+			return static_cast<DERIVED_BLOCK*>(this)->mergeBlock(selfBlockDescriptor(), other, true);
 		}
 
 		// take all provided params that are not already provided, and apply to self
 		bool fillFrom(const self_t& other)
 		{
-			return static_cast<DERIVED_BLOCK*>(this)->merge(selfBlockDescriptor(), other, false);
+			return static_cast<DERIVED_BLOCK*>(this)->mergeBlock(selfBlockDescriptor(), other, false);
 		}
 
 		virtual const BlockDescriptor& mostDerivedBlockDescriptor() const { return selfBlockDescriptor(); }
@@ -1862,7 +1885,15 @@ namespace LLInitParam
 			mValue = value;
 		}
 
-		bool merge(BlockDescriptor& block_data, const BaseBlock& other, bool overwrite)
+		bool mergeBlockParam(bool param_provided, BlockDescriptor& block_data, const BaseBlock& other, bool overwrite)
+		{
+			if (param_provided)
+			{
+				mergeBlock(block_data, other, overwrite);
+			}
+		}
+
+		bool mergeBlock(BlockDescriptor& block_data, const BaseBlock& other, bool overwrite)
 		{
 			const derived_t& src_typed_param = static_cast<const derived_t&>(other);
 
@@ -1875,7 +1906,7 @@ namespace LLInitParam
 			else
 			{
 				// merge individual parameters into destination
-				return block_t::merge(block_t::selfBlockDescriptor(), src_typed_param, overwrite);
+				return block_t::mergeBlock(block_t::selfBlockDescriptor(), src_typed_param, overwrite);
 			}
 		}
 
diff --git a/indra/newview/skins/default/xui/en/widgets/avatar_icon.xml b/indra/newview/skins/default/xui/en/widgets/avatar_icon.xml
index a1e32e44de6deaf02472939d0b6843685466c1f2..4d69dda7eb4457d0cd3793744ef3691502097fb8 100644
--- a/indra/newview/skins/default/xui/en/widgets/avatar_icon.xml
+++ b/indra/newview/skins/default/xui/en/widgets/avatar_icon.xml
@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 
 <avatar_icon
+    name="avatar_icon"
     default_icon_name="Generic_Person_Large"
     use_draw_context_alpha="false">
 </avatar_icon>
diff --git a/indra/newview/skins/default/xui/en/widgets/scroll_bar.xml b/indra/newview/skins/default/xui/en/widgets/scroll_bar.xml
index 830ea12e414b415e78ab31cba10230b36e5cc061..e6d4bff8b57521b3bd0b4ebf65753607cb369b8b 100644
--- a/indra/newview/skins/default/xui/en/widgets/scroll_bar.xml
+++ b/indra/newview/skins/default/xui/en/widgets/scroll_bar.xml
@@ -6,20 +6,24 @@
 			track_color="ScrollbarTrackColor"
             thumb_color="ScrollbarThumbColor"
             thickness="15">
-  <up_button image_unselected="ScrollArrow_Up"
+  <up_button name="up_button"
+             image_unselected="ScrollArrow_Up"
              image_selected="ScrollArrow_Up"
              scale_image="true"
              hover_glow_amount="0.35"/>
-  <down_button image_unselected="ScrollArrow_Down"
+  <down_button name="down_button"
+               image_unselected="ScrollArrow_Down"
                image_selected="ScrollArrow_Down"
                scale_image="true"
                hover_glow_amount="0.35"/>
-  <left_button image_unselected="ScrollArrow_Left"
+  <left_button name="left_button" 
+               image_unselected="ScrollArrow_Left"
                image_selected="ScrollArrow_Left"
                scale_image="true"
                hover_glow_amount="0.35"/>
-  <right_button image_unselected="ScrollArrow_Right"
-               image_selected="ScrollArrow_Right"
-               scale_image="true"
-               hover_glow_amount="0.35"/>
+  <right_button name="right_button"
+                image_unselected="ScrollArrow_Right"
+                image_selected="ScrollArrow_Right"
+                scale_image="true"
+                hover_glow_amount="0.35"/>
 </scroll_bar>