diff --git a/indra/llui/lltexteditor.cpp b/indra/llui/lltexteditor.cpp
index ad9f066539704ccbc3424975186de2fb0d7e52da..ce5f1bd08264926cccfd19d053593f12d70f1138 100644
--- a/indra/llui/lltexteditor.cpp
+++ b/indra/llui/lltexteditor.cpp
@@ -737,7 +737,7 @@ BOOL LLTextEditor::handleRightMouseDown(S32 x, S32 y, MASK mask)
 	}
 	if (!LLTextBase::handleRightMouseDown(x, y, mask))
 	{
-		if(getChowContextMenu())
+		if(getShowContextMenu())
 		{
 			showContextMenu(x, y);
 		}
diff --git a/indra/llui/lltexteditor.h b/indra/llui/lltexteditor.h
index 00c6a8b68a39c4af30ea59454bb045724656b71f..71d937b2c451253a7bcd39aaf6492211fa2cecbe 100644
--- a/indra/llui/lltexteditor.h
+++ b/indra/llui/lltexteditor.h
@@ -204,7 +204,7 @@ public:
 	void getSelectedSegments(segment_vec_t& segments) const;
 
 	void			setShowContextMenu(bool show) { mShowContextMenu = show; }
-	bool			getChowContextMenu() const { return mShowContextMenu; }
+	bool			getShowContextMenu() const { return mShowContextMenu; }
 
 protected:
 	void			showContextMenu(S32 x, S32 y);
diff --git a/indra/llui/lluicolortable.cpp b/indra/llui/lluicolortable.cpp
index 9be33483d0b0762d660122963057214d3f54941b..1b64ef3abeaea97a533eb76463d2eac2cc6b8090 100644
--- a/indra/llui/lluicolortable.cpp
+++ b/indra/llui/lluicolortable.cpp
@@ -56,7 +56,7 @@ LLUIColorTable::Params::Params()
 {
 }
 
-void LLUIColorTable::insertFromParams(const Params& p)
+void LLUIColorTable::insertFromParams(const Params& p, string_color_map_t& table)
 {
 	// this map will contain all color references after the following loop
 	typedef std::map<std::string, std::string> string_string_map_t;
@@ -69,14 +69,7 @@ void LLUIColorTable::insertFromParams(const Params& p)
 		ColorEntryParams color_entry = *it;
 		if(color_entry.color.value.isChosen())
 		{
-			if(mUserSetColors.find(color_entry.name)!=mUserSetColors.end())
-			{
-				setColor(color_entry.name, color_entry.color.value);
-			}
-			else
-			{
-				setColor(color_entry.name, color_entry.color.value, mLoadedColors);
-			}
+			setColor(color_entry.name, color_entry.color.value, table);
 		}
 		else
 		{
@@ -220,16 +213,16 @@ bool LLUIColorTable::loadFromSettings()
 	bool result = false;
 
 	std::string default_filename = gDirUtilp->getExpandedFilename(LL_PATH_DEFAULT_SKIN, "colors.xml");
-	result |= loadFromFilename(default_filename);
+	result |= loadFromFilename(default_filename, mLoadedColors);
 
 	std::string current_filename = gDirUtilp->getExpandedFilename(LL_PATH_TOP_SKIN, "colors.xml");
 	if(current_filename != default_filename)
 	{
-		result |= loadFromFilename(current_filename);
+		result |= loadFromFilename(current_filename, mLoadedColors);
 	}
 
 	std::string user_filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "colors.xml");
-	loadFromFilename(user_filename);
+	loadFromFilename(user_filename, mUserSetColors);
 
 	return result;
 }
@@ -299,7 +292,7 @@ void LLUIColorTable::setColor(const std::string& name, const LLColor4& color, st
 	}
 }
 
-bool LLUIColorTable::loadFromFilename(const std::string& filename)
+bool LLUIColorTable::loadFromFilename(const std::string& filename, string_color_map_t& table)
 {
 	LLXMLNodePtr root;
 
@@ -320,7 +313,7 @@ bool LLUIColorTable::loadFromFilename(const std::string& filename)
 
 	if(params.validateBlock())
 	{
-		insertFromParams(params);
+		insertFromParams(params, table);
 	}
 	else
 	{
@@ -330,3 +323,11 @@ bool LLUIColorTable::loadFromFilename(const std::string& filename)
 
 	return true;
 }
+
+void LLUIColorTable::insertFromParams(const Params& p)
+{
+	insertFromParams(p, mUserSetColors);
+}
+
+// EOF
+
diff --git a/indra/llui/lluicolortable.h b/indra/llui/lluicolortable.h
index c87695f456ad58018df616436036150e0941b9db..d401e5e72484369f1e55095571602a669e04dd44 100644
--- a/indra/llui/lluicolortable.h
+++ b/indra/llui/lluicolortable.h
@@ -45,6 +45,10 @@ class LLUIColor;
 class LLUIColorTable : public LLSingleton<LLUIColorTable>
 {
 LOG_CLASS(LLUIColorTable);
+
+	// consider using sorted vector, can be much faster
+	typedef std::map<std::string, LLUIColor>  string_color_map_t;
+
 public:
 	struct ColorParams : LLInitParam::Choice<ColorParams>
 	{
@@ -91,10 +95,9 @@ public:
 	void saveUserSettings() const;
 
 private:
-	bool loadFromFilename(const std::string& filename);
+	bool loadFromFilename(const std::string& filename, string_color_map_t& table);
 
-	// consider using sorted vector, can be much faster
-	typedef std::map<std::string, LLUIColor>  string_color_map_t;
+	void insertFromParams(const Params& p, string_color_map_t& table);
 	
 	void clearTable(string_color_map_t& table);
 	void setColor(const std::string& name, const LLColor4& color, string_color_map_t& table);
diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp
index bd987eac77c45a16ff146ce8e235d28727be4927..1d75374930a9e477381591e904ef9b92745fb8fb 100644
--- a/indra/newview/llavataractions.cpp
+++ b/indra/newview/llavataractions.cpp
@@ -181,7 +181,12 @@ void LLAvatarActions::startIM(const LLUUID& id)
 		return;
 
 	std::string name;
-	gCacheName->getFullName(id, name);
+	if (!gCacheName->getFullName(id, name))
+	{
+		gCacheName->get(id, FALSE, boost::bind(&LLAvatarActions::startIM, id));
+		return;
+	}
+
 	LLUUID session_id = gIMMgr->addSession(name, IM_NOTHING_SPECIAL, id);
 	if (session_id != LLUUID::null)
 	{
diff --git a/indra/newview/llcallingcard.cpp b/indra/newview/llcallingcard.cpp
index d988770f90531a9257b8b0a9b9555daff34114af..996139fcccd7589c3f9fcf065bbe1d2d5a70a102 100644
--- a/indra/newview/llcallingcard.cpp
+++ b/indra/newview/llcallingcard.cpp
@@ -56,6 +56,7 @@
 #include "llnotifications.h"
 #include "llnotificationsutil.h"
 #include "llresmgr.h"
+#include "llslurl.h"
 #include "llimview.h"
 #include "llviewercontrol.h"
 #include "llviewernetwork.h"
@@ -689,13 +690,8 @@ void LLAvatarTracker::processNotify(LLMessageSystem* msg, bool online)
 				setBuddyOnline(agent_id,online);
 				if(chat_notify)
 				{
-					std::string first, last;
-					if(gCacheName->getName(agent_id, first, last))
-					{
-						notify = TRUE;
-						args["FIRST"] = first;
-						args["LAST"] = last;
-					}
+					notify = TRUE;
+					args["NAME_SLURL"] = LLSLURL::buildCommand("agent", agent_id, "about");
 				}
 			}
 			else
diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp
index c125f84c58e1daa6f4c6cb007751945acbfc8e10..13a5df353d0797c465592bbf8072c6bcc3c7e226 100644
--- a/indra/newview/llchathistory.cpp
+++ b/indra/newview/llchathistory.cpp
@@ -289,7 +289,12 @@ public:
 
 		if(!chat.mFromID.isNull())
 		{
-			icon->setValue(chat.mFromID);
+			if(mSourceType != CHAT_SOURCE_AGENT)
+				icon->setValue(LLSD("OBJECT_Icon"));
+			else
+				icon->setValue(chat.mFromID);
+
+			
 		}
 		else if (userName->getValue().asString()==LLTrans::getString("SECOND_LIFE"))
 		{
diff --git a/indra/newview/llchatitemscontainerctrl.cpp b/indra/newview/llchatitemscontainerctrl.cpp
index f772aea4bd846d8ed8915fbed5f6ea192f68bb9b..e164aa8fc45f6cdcc8c9af0659b9f4b6617e95bf 100644
--- a/indra/newview/llchatitemscontainerctrl.cpp
+++ b/indra/newview/llchatitemscontainerctrl.cpp
@@ -321,7 +321,10 @@ void LLNearbyChatToastPanel::draw()
 		if(icon)
 		{
 			icon->setDrawTooltip(mSourceType == CHAT_SOURCE_AGENT);
-			icon->setValue(mFromID);
+			if(mSourceType == CHAT_SOURCE_AGENT)
+				icon->setValue(mFromID);
+			else
+				icon->setValue(LLSD("OBJECT_Icon"));
 		}
 		mIsDirty = false;
 	}
diff --git a/indra/newview/llpanelgroup.cpp b/indra/newview/llpanelgroup.cpp
index 469f1c1739a9dafc96a6378bf23bf56ed5e734fa..ce4078409ab8d004a21a9ab215eee9a868a0f696 100644
--- a/indra/newview/llpanelgroup.cpp
+++ b/indra/newview/llpanelgroup.cpp
@@ -90,6 +90,7 @@ LLPanelGroup::LLPanelGroup()
 :	LLPanel(),
 	LLGroupMgrObserver( LLUUID() ),
 	mSkipRefresh(FALSE),
+	mButtonJoin(NULL),
 	mShowingNotifyDialog(false)
 {
 	// Set up the factory callbacks.
@@ -159,10 +160,6 @@ BOOL LLPanelGroup::postBuild()
 	button = getChild<LLButton>("btn_chat");
 	button->setClickedCallback(onBtnGroupChatClicked, this);
 
-	button = getChild<LLButton>("btn_join");
-	button->setVisible(false);
-	button->setEnabled(true);
-
 	button = getChild<LLButton>("btn_cancel");
 	button->setVisible(false);	button->setEnabled(true);
 
@@ -174,7 +171,7 @@ BOOL LLPanelGroup::postBuild()
 	childSetCommitCallback("back",boost::bind(&LLPanelGroup::onBackBtnClick,this),NULL);
 
 	childSetCommitCallback("btn_create",boost::bind(&LLPanelGroup::onBtnCreate,this),NULL);
-	childSetCommitCallback("btn_join",boost::bind(&LLPanelGroup::onBtnJoin,this),NULL);
+	
 	childSetCommitCallback("btn_cancel",boost::bind(&LLPanelGroup::onBtnCancel,this),NULL);
 
 	LLPanelGroupTab* panel_general = findChild<LLPanelGroupTab>("group_general_tab_panel");
@@ -188,7 +185,17 @@ BOOL LLPanelGroup::postBuild()
 	if(panel_land)		mTabs.push_back(panel_land);
 
 	if(panel_general)
+	{
 		panel_general->setupCtrls(this);
+		button = panel_general->getChild<LLButton>("btn_join");
+		button->setVisible(false);
+		button->setEnabled(true);
+		
+		mButtonJoin = button;
+		mButtonJoin->setCommitCallback(boost::bind(&LLPanelGroup::onBtnJoin,this));
+
+		mJoinText = panel_general->getChild<LLUICtrl>("join_cost_text");
+	}
 
 	gVoiceClient->addObserver(this);
 	
@@ -326,16 +333,13 @@ void LLPanelGroup::update(LLGroupChange gc)
 	{
 		childSetValue("group_name", gdatap->mName);
 		childSetToolTip("group_name",gdatap->mName);
-
-		LLButton* btn_join = getChild<LLButton>("btn_join");
-		LLUICtrl* join_text = getChild<LLUICtrl>("join_cost_text");
-
+		
 		LLGroupData agent_gdatap;
 		bool is_member = gAgent.getGroupData(mID,agent_gdatap);
 		bool join_btn_visible = !is_member && gdatap->mOpenEnrollment;
 		
-		btn_join->setVisible(join_btn_visible);
-		join_text->setVisible(join_btn_visible);
+		mButtonJoin->setVisible(join_btn_visible);
+		mJoinText->setVisible(join_btn_visible);
 
 		if(join_btn_visible)
 		{
@@ -351,7 +355,7 @@ void LLPanelGroup::update(LLGroupChange gc)
 			{
 				fee_buff = getString("group_join_free", string_args);
 			}
-			childSetValue("join_cost_text",fee_buff);
+			mJoinText->setValue(fee_buff);
 		}
 	}
 }
@@ -380,7 +384,7 @@ void LLPanelGroup::setGroupID(const LLUUID& group_id)
 	LLButton* button_apply = findChild<LLButton>("btn_apply");
 	LLButton* button_refresh = findChild<LLButton>("btn_refresh");
 	LLButton* button_create = findChild<LLButton>("btn_create");
-	LLButton* button_join = findChild<LLButton>("btn_join");
+	
 	LLButton* button_cancel = findChild<LLButton>("btn_cancel");
 	LLButton* button_call = findChild<LLButton>("btn_call");
 	LLButton* button_chat = findChild<LLButton>("btn_chat");
@@ -417,8 +421,8 @@ void LLPanelGroup::setGroupID(const LLUUID& group_id)
 	if(!tab_general || !tab_roles || !tab_notices || !tab_land)
 		return;
 	
-	if(button_join)
-		button_join->setVisible(false);
+	if(mButtonJoin)
+		mButtonJoin->setVisible(false);
 
 
 	if(is_null_group_id)//creating new group
@@ -478,6 +482,7 @@ void LLPanelGroup::setGroupID(const LLUUID& group_id)
 	}
 
 	reposButtons();
+	update(GC_ALL);//show/hide "join" button if data is already ready
 }
 
 bool LLPanelGroup::apply(LLPanelGroupTab* tab)
diff --git a/indra/newview/llpanelgroup.h b/indra/newview/llpanelgroup.h
index 6e23eedffbe454c2136dbd1598f7fb9663a5d9e8..136868a60d26e98230de5eb134f7b7011a1f08cd 100644
--- a/indra/newview/llpanelgroup.h
+++ b/indra/newview/llpanelgroup.h
@@ -130,6 +130,9 @@ protected:
 
 	std::vector<LLPanelGroupTab* > mTabs;
 
+	LLButton*		mButtonJoin;
+	LLUICtrl*		mJoinText;
+
 };
 
 class LLPanelGroupTab : public LLPanel
diff --git a/indra/newview/llpanelgroupgeneral.cpp b/indra/newview/llpanelgroupgeneral.cpp
index 3b303eed0fce59e00776cee368bf35cbf710cd08..555e277ce55fcb09b832a7ad231cbd47def7bd6e 100644
--- a/indra/newview/llpanelgroupgeneral.cpp
+++ b/indra/newview/llpanelgroupgeneral.cpp
@@ -206,15 +206,19 @@ BOOL LLPanelGroupGeneral::postBuild()
 
 void LLPanelGroupGeneral::setupCtrls(LLPanel* panel_group)
 {
-	mInsignia = panel_group->getChild<LLTextureCtrl>("insignia");
+	mInsignia = getChild<LLTextureCtrl>("insignia");
 	if (mInsignia)
 	{
 		mInsignia->setCommitCallback(onCommitAny, this);
 		mDefaultIconID = mInsignia->getImageAssetID();
 	}
-	mFounderName = panel_group->getChild<LLNameBox>("founder_name");
+	mFounderName = getChild<LLNameBox>("founder_name");
+
+
 	mGroupNameEditor = panel_group->getChild<LLLineEditor>("group_name_editor");
 	mGroupNameEditor->setPrevalidate( LLTextValidate::validateASCII );
+	
+
 }
 
 // static
diff --git a/indra/newview/skins/default/textures/icons/object_icon.png b/indra/newview/skins/default/textures/icons/object_icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..223874e631ad021ce7617e6dcb4399d171081b09
Binary files /dev/null and b/indra/newview/skins/default/textures/icons/object_icon.png differ
diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml
index 309c2a5f30dbd98c5f01d025c8049fe798b8a503..18d1779702f0e5e506142b60494e6f325ff74b4f 100644
--- a/indra/newview/skins/default/textures/textures.xml
+++ b/indra/newview/skins/default/textures/textures.xml
@@ -515,6 +515,7 @@ with the same filename but different name
   <texture name="SliderThumb_Press" file_name="widgets/SliderThumb_Press.png" />
 
   <texture name="SL_Logo" file_name="icons/SL_Logo.png" preload="true" />
+  <texture name="OBJECT_Icon" file_name="icons/object_icon.png" preload="true" />
 
   <texture name="Snapshot_Off" file_name="bottomtray/Snapshot_Off.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" />
   <texture name="Snapshot_Over" file_name="bottomtray/Snapshot_Over.png" preload="false" />
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 90381c2af46b96970ff46e5e79f05c7aed5826bd..51f0f6839c6f685815e777dc16bf8519844f91fa 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -4307,14 +4307,14 @@ Topic: [SUBJECT], Message: [MESSAGE]
    icon="notifytip.tga"
    name="FriendOnline"
    type="notifytip">
-[FIRST] [LAST] is Online
+[NAME_SLURL] is Online
   </notification>
 
   <notification
    icon="notifytip.tga"
    name="FriendOffline"
    type="notifytip">
-[FIRST] [LAST] is Offline
+[NAME_SLURL] is Offline
   </notification>
 
   <notification
diff --git a/indra/newview/skins/default/xui/en/panel_group_general.xml b/indra/newview/skins/default/xui/en/panel_group_general.xml
index 618167181fba5351a82a918ecd765a97f332472c..662fd1ae73d1a12683b5e88ae8dd5e74f8ac54ce 100644
--- a/indra/newview/skins/default/xui/en/panel_group_general.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_general.xml
@@ -20,15 +20,84 @@ Hover your mouse over the options for more help.
      name="incomplete_member_data_str">
         Retrieving member data
     </panel.string>
+   <panel
+      name="group_info_top"
+      follows="top|left"
+      top="0"
+      left="0"
+      height="129"
+      width="313"
+      layout="topleft">
+    <texture_picker
+     follows="left|top"
+     height="110"
+     label=""
+     layout="topleft"
+     left="10"
+     name="insignia"
+     no_commit_on_selection="true"
+     tool_tip="Click to choose a picture"
+     top="5"
+     width="100" />
+    <text
+      font="SansSerifSmall"
+      text_color="White_50"
+      width="190"
+      follows="top|left"
+      layout="topleft"
+      mouse_opaque="false"
+     type="string"
+     height="16"
+     length="1"
+     left_pad="10"
+     name="prepend_founded_by"
+     top_delta="0">
+      Founder:
+    </text>
+    <name_box
+     follows="left|top"
+     height="16"
+     initial_value="(retrieving)"
+     layout="topleft"
+     left_delta="0"
+     link="true"
+     name="founder_name"
+     top_pad="2"
+     use_ellipses="true"
+     width="190" />
+    <text
+    font="SansSerifMedium"
+    text_color="EmphasisColor"
+     type="string"
+     follows="left|top"
+     height="16"
+     layout="topleft"
+     left_delta="0"
+     name="join_cost_text"
+     top_pad="10"
+     visible="true"
+     width="190">
+      Free
+    </text>
+    <button
+     follows="left|top"
+     left_delta="0"
+     top_pad="6"
+     height="23"
+     label="JOIN NOW!"
+     name="btn_join"
+     visible="true"
+     width="120" />
+    </panel>
     <text_editor
      type="string"
      follows="left|top|right"
      left="5"
-     height="150"
+     height="80"
      layout="topleft"
      max_length="511"
      name="charter"
-     top="5"
+     top="105"
      right="-1"
     bg_readonly_color="DkGray2"
     text_readonly_color="White"
@@ -40,7 +109,7 @@ Hover your mouse over the options for more help.
      draw_heading="true"
      follows="left|top|right"
      heading_height="23"
-     height="200"
+     height="160"
      layout="topleft"
      left="0"
      name="visible_members"
diff --git a/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml
index 9727c54c6be344e9d2a998daa3e78229c6269560..375de649237e40a07d4199d7184b67d6149a6da8 100644
--- a/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml
@@ -31,7 +31,7 @@ background_visible="true"
       follows="top|left"
       top="0"
       left="0"
-      height="129"
+      height="29"
       width="313"
       layout="topleft">
     <button
@@ -70,66 +70,6 @@ background_visible="true"
      width="270"
      height="20"
      visible="false" />
-    <texture_picker
-     follows="left|top"
-     height="113"
-     label=""
-     layout="topleft"
-     left="10"
-     name="insignia"
-     no_commit_on_selection="true"
-     tool_tip="Click to choose a picture"
-     top_pad="5"
-     width="100" />
-    <text
-      font="SansSerifSmall"
-      text_color="White_50"
-      width="190"
-      follows="top|left"
-      layout="topleft"
-      mouse_opaque="false"
-     type="string"
-     height="16"
-     length="1"
-     left_pad="10"
-     name="prepend_founded_by"
-     top_delta="0">
-      Founder:
-    </text>
-    <name_box
-     follows="left|top"
-     height="16"
-     initial_value="(retrieving)"
-     layout="topleft"
-     left_delta="0"
-     link="true"
-     name="founder_name"
-     top_pad="2"
-     use_ellipses="true"
-     width="190" />
-    <text
-    font="SansSerifMedium"
-    text_color="EmphasisColor"
-     type="string"
-     follows="left|top"
-     height="16"
-     layout="topleft"
-     left_delta="0"
-     name="join_cost_text"
-     top_pad="10"
-     visible="true"
-     width="190">
-      Free
-    </text>
-    <button
-     follows="left|top"
-     left_delta="0"
-     top_pad="6"
-     height="23"
-     label="JOIN NOW!"
-     name="btn_join"
-     visible="true"
-     width="120" />
     </panel>
    <layout_stack
      name="layout"
@@ -137,7 +77,7 @@ background_visible="true"
       follows="all"
      left="0"
      top_pad="0"
-     height="437"
+     height="537"
      width="313"
      border_size="0">
    <layout_panel