diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp
index c5a1ffdcb3931a0f5f83ee71b5e6722f853b2826..651c66d0a756a8822cb1cf82cc6010149d6b33a7 100644
--- a/indra/newview/llavataractions.cpp
+++ b/indra/newview/llavataractions.cpp
@@ -333,6 +333,54 @@ void LLAvatarActions::pay(const LLUUID& id)
 	}
 }
 
+// static
+void LLAvatarActions::kick(const LLUUID& id)
+{
+	LLSD payload;
+	payload["avatar_id"] = id;
+	LLNotifications::instance().add("KickUser", LLSD(), payload, handleKick);
+}
+
+// static
+void LLAvatarActions::freeze(const LLUUID& id)
+{
+	LLSD payload;
+	payload["avatar_id"] = id;
+	LLNotifications::instance().add("FreezeUser", LLSD(), payload, handleFreeze);
+}
+
+// static
+void LLAvatarActions::unfreeze(const LLUUID& id)
+{
+	LLSD payload;
+	payload["avatar_id"] = id;
+	LLNotifications::instance().add("UnFreezeUser", LLSD(), payload, handleUnfreeze);
+}
+
+//static 
+void LLAvatarActions::csr(const LLUUID& id, std::string name)
+{
+	if (name.empty()) return;
+	
+	std::string url = "http://csr.lindenlab.com/agent/";
+	
+	// slow and stupid, but it's late
+	S32 len = name.length();
+	for (S32 i = 0; i < len; i++)
+	{
+		if (name[i] == ' ')
+		{
+			url += "%20";
+		}
+		else
+		{
+			url += name[i];
+		}
+	}
+	
+	LLWeb::loadURL(url);
+}
+
 //static 
 void LLAvatarActions::share(const LLUUID& id)
 {
@@ -456,6 +504,67 @@ bool LLAvatarActions::callbackAddFriendWithMessage(const LLSD& notification, con
 	return false;
 }
 
+// static
+bool LLAvatarActions::handleKick(const LLSD& notification, const LLSD& response)
+{
+	S32 option = LLNotification::getSelectedOption(notification, response);
+
+	if (option == 0)
+	{
+		LLUUID avatar_id = notification["payload"]["avatar_id"].asUUID();
+		LLMessageSystem* msg = gMessageSystem;
+
+		msg->newMessageFast(_PREHASH_GodKickUser);
+		msg->nextBlockFast(_PREHASH_UserInfo);
+		msg->addUUIDFast(_PREHASH_GodID,		gAgent.getID() );
+		msg->addUUIDFast(_PREHASH_GodSessionID, gAgent.getSessionID());
+		msg->addUUIDFast(_PREHASH_AgentID,   avatar_id );
+		msg->addU32("KickFlags", KICK_FLAGS_DEFAULT );
+		msg->addStringFast(_PREHASH_Reason,    response["message"].asString() );
+		gAgent.sendReliableMessage();
+	}
+	return false;
+}
+bool LLAvatarActions::handleFreeze(const LLSD& notification, const LLSD& response)
+{
+	S32 option = LLNotification::getSelectedOption(notification, response);
+
+	if (option == 0)
+	{
+		LLUUID avatar_id = notification["payload"]["avatar_id"].asUUID();
+		LLMessageSystem* msg = gMessageSystem;
+
+		msg->newMessageFast(_PREHASH_GodKickUser);
+		msg->nextBlockFast(_PREHASH_UserInfo);
+		msg->addUUIDFast(_PREHASH_GodID,		gAgent.getID() );
+		msg->addUUIDFast(_PREHASH_GodSessionID, gAgent.getSessionID());
+		msg->addUUIDFast(_PREHASH_AgentID,   avatar_id );
+		msg->addU32("KickFlags", KICK_FLAGS_FREEZE );
+		msg->addStringFast(_PREHASH_Reason, response["message"].asString() );
+		gAgent.sendReliableMessage();
+	}
+	return false;
+}
+bool LLAvatarActions::handleUnfreeze(const LLSD& notification, const LLSD& response)
+{
+	S32 option = LLNotification::getSelectedOption(notification, response);
+	std::string text = response["message"].asString();
+	if (option == 0)
+	{
+		LLUUID avatar_id = notification["payload"]["avatar_id"].asUUID();
+		LLMessageSystem* msg = gMessageSystem;
+
+		msg->newMessageFast(_PREHASH_GodKickUser);
+		msg->nextBlockFast(_PREHASH_UserInfo);
+		msg->addUUIDFast(_PREHASH_GodID,		gAgent.getID() );
+		msg->addUUIDFast(_PREHASH_GodSessionID, gAgent.getSessionID());
+		msg->addUUIDFast(_PREHASH_AgentID,   avatar_id );
+		msg->addU32("KickFlags", KICK_FLAGS_UNFREEZE );
+		msg->addStringFast(_PREHASH_Reason,    text );
+		gAgent.sendReliableMessage();
+	}
+	return false;
+}
 // static
 bool LLAvatarActions::callbackAddFriend(const LLSD& notification, const LLSD& response)
 {
diff --git a/indra/newview/llavataractions.h b/indra/newview/llavataractions.h
index 01c18d42285e5b8b6decfea1b4d6b144cd13bc60..a4504ae679b946b513670d19731b7c9e35e0c88c 100644
--- a/indra/newview/llavataractions.h
+++ b/indra/newview/llavataractions.h
@@ -138,11 +138,35 @@ class LLAvatarActions
 	 */	
 	static void inviteToGroup(const LLUUID& id);
 	
+	/**
+	 * Kick avatar off grid
+	 */	
+	static void kick(const LLUUID& id);
+
+	/**
+	 * Freeze avatar
+	 */	
+	static void freeze(const LLUUID& id);
+
+	/**
+	 * Unfreeze avatar
+	 */	
+	static void unfreeze(const LLUUID& id);
+
+	/**
+	 * Open csr page for avatar
+	 */	
+	static void csr(const LLUUID& id, std::string name);
+
+	
 private:
 	static bool callbackAddFriend(const LLSD& notification, const LLSD& response);
 	static bool callbackAddFriendWithMessage(const LLSD& notification, const LLSD& response);
 	static bool handleRemove(const LLSD& notification, const LLSD& response);
 	static bool handlePay(const LLSD& notification, const LLSD& response, LLUUID avatar_id);
+	static bool handleKick(const LLSD& notification, const LLSD& response);
+	static bool handleFreeze(const LLSD& notification, const LLSD& response);
+	static bool handleUnfreeze(const LLSD& notification, const LLSD& response);
 	static void callback_invite_to_group(LLUUID group_id, LLUUID id);
 
 	// Just request friendship, no dialog.
diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp
index ff568a11a92406fb3bf6acf4732c37391b230653..7e0e8bfaa70b865b80a1866ff85b36ed0c000022 100644
--- a/indra/newview/llfloaterpreference.cpp
+++ b/indra/newview/llfloaterpreference.cpp
@@ -760,8 +760,9 @@ void LLFloaterPreference::onClickResetCache()
 	{
 		gSavedSettings.setString("NewCacheLocation", "");
 		gSavedSettings.setString("NewCacheLocationTopFolder", "");
-		LLNotificationsUtil::add("CacheWillBeMoved");
 	}
+	
+	LLNotificationsUtil::add("CacheWillBeMoved");
 	std::string cache_location = gDirUtilp->getCacheDir(true);
 	gSavedSettings.setString("CacheLocation", cache_location);
 	std::string top_folder(gDirUtilp->getBaseFileName(cache_location));
diff --git a/indra/newview/llpanelavatar.cpp b/indra/newview/llpanelavatar.cpp
index ffe7f5716766a1e82511812abf4085263819b745..e9131a342e6327aebe10f6561bb53b832d93347e 100644
--- a/indra/newview/llpanelavatar.cpp
+++ b/indra/newview/llpanelavatar.cpp
@@ -403,6 +403,11 @@ void LLPanelProfileTab::updateButtons()
 //////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////
 
+bool enable_god()
+{
+	return gAgent.isGodlike();
+}
+
 LLPanelAvatarProfile::LLPanelAvatarProfile()
 : LLPanelProfileTab()
 {
@@ -423,6 +428,13 @@ BOOL LLPanelAvatarProfile::postBuild()
 	LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar;
 	registrar.add("Profile.Pay",  boost::bind(&LLPanelAvatarProfile::pay, this));
 	registrar.add("Profile.Share", boost::bind(&LLPanelAvatarProfile::share, this));
+	registrar.add("Profile.Kick", boost::bind(&LLPanelAvatarProfile::kick, this));
+	registrar.add("Profile.Freeze", boost::bind(&LLPanelAvatarProfile::freeze, this));
+	registrar.add("Profile.Unfreeze", boost::bind(&LLPanelAvatarProfile::unfreeze, this));
+	registrar.add("Profile.CSR", boost::bind(&LLPanelAvatarProfile::csr, this));
+
+	LLUICtrl::EnableCallbackRegistry::ScopedRegistrar enable;
+	enable.add("Profile.EnableGod", boost::bind(&enable_god));
 
 	mProfileMenu = LLUICtrlFactory::getInstance()->createFromFile<LLToggleableMenu>("menu_profile_overflow.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
 
@@ -622,6 +634,28 @@ void LLPanelAvatarProfile::share()
 	LLAvatarActions::share(getAvatarId());
 }
 
+void LLPanelAvatarProfile::kick()
+{
+	LLAvatarActions::kick(getAvatarId());
+}
+
+void LLPanelAvatarProfile::freeze()
+{
+	LLAvatarActions::freeze(getAvatarId());
+}
+
+void LLPanelAvatarProfile::unfreeze()
+{
+	LLAvatarActions::unfreeze(getAvatarId());
+}
+
+void LLPanelAvatarProfile::csr()
+{
+	std::string name;
+	gCacheName->getFullName(getAvatarId(), name);
+	LLAvatarActions::csr(getAvatarId(), name);
+}
+
 void LLPanelAvatarProfile::onUrlTextboxClicked(const std::string& url)
 {
 	LLWeb::loadURL(url);
diff --git a/indra/newview/llpanelavatar.h b/indra/newview/llpanelavatar.h
index b19c5cca49c8b1b48b055a5e82d754f3d190972e..8f07c67fb183dd1fd6aa40c715980427b7aef054 100644
--- a/indra/newview/llpanelavatar.h
+++ b/indra/newview/llpanelavatar.h
@@ -181,6 +181,15 @@ class LLPanelAvatarProfile
 	 */
 	void share();
 
+	void kick();
+	void freeze();
+	void unfreeze();
+	void csr();
+	
+
+	bool enableGod();
+
+
 	void onUrlTextboxClicked(const std::string& url);
 	void onHomepageTextboxClicked();
 	void onAddFriendButtonClick();
diff --git a/indra/newview/skins/default/xui/en/menu_profile_overflow.xml b/indra/newview/skins/default/xui/en/menu_profile_overflow.xml
index d0128d1c9a09a4c2f986f568f97b2c048d08b3b8..1dc1c610cfe09c086e9130c739a78995859e10db 100644
--- a/indra/newview/skins/default/xui/en/menu_profile_overflow.xml
+++ b/indra/newview/skins/default/xui/en/menu_profile_overflow.xml
@@ -19,4 +19,40 @@
         <menu_item_call.on_click
          function="Profile.Share" />
     </menu_item_call>
+  <menu_item_call
+   label="Kick"
+   layout="topleft"
+   name="kick">
+    <menu_item_call.on_click
+     function="Profile.Kick" />
+    <menu_item_call.on_visible
+     function="Profile.EnableGod" />
+  </menu_item_call>
+  <menu_item_call
+   label="Freeze"
+   layout="topleft"
+   name="freeze">
+    <menu_item_call.on_click
+     function="Profile.Freeze" />
+    <menu_item_call.on_visible
+     function="Profile.EnableGod" />
+  </menu_item_call>
+  <menu_item_call
+   label="Unfreeze"
+   layout="topleft"
+   name="unfreeze">
+    <menu_item_call.on_click
+     function="Profile.Unfreeze" />
+    <menu_item_call.on_visible
+     function="Profile.EnableGod" />
+  </menu_item_call>
+  <menu_item_call
+   label="CSR"
+   layout="topleft"
+   name="csr">
+    <menu_item_call.on_click
+     function="Profile.CSR" />
+    <menu_item_call.on_visible
+     function="Profile.EnableGod" />
+  </menu_item_call>
 </toggleable_menu>