diff --git a/indra/newview/app_settings/settings_per_account.xml b/indra/newview/app_settings/settings_per_account.xml
index 4ff494fbfb3aa4ed419ea719c94e8e4b813f0557..68643283398f1d9fbf4d1d4d26808bd192a84f0c 100644
--- a/indra/newview/app_settings/settings_per_account.xml
+++ b/indra/newview/app_settings/settings_per_account.xml
@@ -270,7 +270,18 @@
         <key>Value</key>
             <integer>0</integer>
         </map>
-      <key>ShowFavoritesOnLogin</key>
+    <key>TranslatingEnabled</key>
+        <map>
+        <key>Comment</key>
+            <string>Translation prefs are set</string>
+        <key>Persist</key>
+            <integer>1</integer>
+        <key>Type</key>
+            <string>Boolean</string>
+        <key>Value</key>
+            <integer>0</integer>
+        </map>
+    <key>ShowFavoritesOnLogin</key>
         <map>
         <key>Comment</key>
              <string>Determines whether favorites of last logged in user will be saved on exit from viewer and shown on login screen</string>
diff --git a/indra/newview/llfloaterimsessiontab.cpp b/indra/newview/llfloaterimsessiontab.cpp
index d4eb03f95d113d5c87213d1ff432e0f68c8d00b5..06a79836db12e1afc58499101c9c912a3b6231d4 100644
--- a/indra/newview/llfloaterimsessiontab.cpp
+++ b/indra/newview/llfloaterimsessiontab.cpp
@@ -72,6 +72,12 @@ LLFloaterIMSessionTab::LLFloaterIMSessionTab(const LLSD& session_id)
 			boost::bind(&LLFloaterIMSessionTab::onIMShowModesMenuItemCheck,   this, _2));
 	mEnableCallbackRegistrar.add("IMSession.Menu.ShowModes.Enable",
 			boost::bind(&LLFloaterIMSessionTab::onIMShowModesMenuItemEnable,  this, _2));
+	mEnableCallbackRegistrar.add("Translating.Enabled",
+				boost::bind(&LLFloaterIMSessionTab::isTranslatingEnabled,  this, _2));
+	mEnableCallbackRegistrar.add("Translating.On",
+					boost::bind(&LLFloaterIMSessionTab::isTranslationOn,  this, _2));
+	mCommitCallbackRegistrar.add("Translating.Toggle",
+				boost::bind(&LLFloaterIMSessionTab::toggleTranslation,  this, _2));
 
 	// Right click menu handling
     mEnableCallbackRegistrar.add("Avatar.CheckItem",  boost::bind(&LLFloaterIMSessionTab::checkContextMenuItem,	this, _2));
@@ -552,6 +558,10 @@ void LLFloaterIMSessionTab::onIMSessionMenuItemClicked(const LLSD& userdata)
 	LLFloaterIMSessionTab::processChatHistoryStyleUpdate();
 }
 
+void LLFloaterIMSessionTab::toggleTranslation(const LLSD& userdata)
+{
+	gSavedSettings.setBOOL("TranslateChat", !gSavedSettings.getBOOL("TranslateChat"));
+}
 
 bool LLFloaterIMSessionTab::onIMCompactExpandedMenuItemCheck(const LLSD& userdata)
 {
@@ -576,6 +586,16 @@ bool LLFloaterIMSessionTab::onIMShowModesMenuItemEnable(const LLSD& userdata)
 	return (plain_text && (is_not_names || mIsP2PChat));
 }
 
+bool LLFloaterIMSessionTab::isTranslatingEnabled(const LLSD& userdata)
+{
+	return gSavedPerAccountSettings.getBOOL("TranslatingEnabled");
+}
+
+bool LLFloaterIMSessionTab::isTranslationOn(const LLSD& userdata)
+{
+	return gSavedSettings.getBOOL("TranslateChat");
+}
+
 void LLFloaterIMSessionTab::hideOrShowTitle()
 {
 	const LLFloater::Params& default_params = LLFloater::getDefaultParams();
diff --git a/indra/newview/llfloaterimsessiontab.h b/indra/newview/llfloaterimsessiontab.h
index 0fa99a46bea6d02f5a57f4b74e5e1b7e8361ed72..05da0f98bc97c7b7b5ec5fd059ead087cd1038a2 100644
--- a/indra/newview/llfloaterimsessiontab.h
+++ b/indra/newview/llfloaterimsessiontab.h
@@ -109,8 +109,12 @@ class LLFloaterIMSessionTab
 	//
 	bool onIMShowModesMenuItemCheck(const LLSD& userdata);
 	bool onIMShowModesMenuItemEnable(const LLSD& userdata);
+	bool isTranslatingEnabled(const LLSD& userdata);
+	bool isTranslationOn(const LLSD& userdata);
 	static void onSlide(LLFloaterIMSessionTab *self);
 
+	void toggleTranslation(const LLSD& userdata);
+
 	// refresh a visual state of the Call button
 	void updateCallBtnState(bool callIsActive);
 
diff --git a/indra/newview/llfloatertranslationsettings.cpp b/indra/newview/llfloatertranslationsettings.cpp
index 6a9236ce0c11deab09750e48544645bfd50f089d..33f2c352398ee31e7546632001c6ad2809583658 100644
--- a/indra/newview/llfloatertranslationsettings.cpp
+++ b/indra/newview/llfloatertranslationsettings.cpp
@@ -225,11 +225,10 @@ void LLFloaterTranslationSettings::updateControlsEnabledState()
 	mGoogleVerifyBtn->setEnabled(on && google_selected &&
 		!mGoogleKeyVerified && !getEnteredGoogleKey().empty());
 
-	mOKBtn->setEnabled(
-		!on || (
-		(bing_selected && mBingKeyVerified) ||
-		(google_selected && mGoogleKeyVerified)
-	));
+	bool service_verified = (bing_selected && mBingKeyVerified) || (google_selected && mGoogleKeyVerified);
+	gSavedPerAccountSettings.setBOOL("TranslatingEnabled", service_verified);
+
+	mOKBtn->setEnabled(!on || service_verified);
 }
 
 void LLFloaterTranslationSettings::verifyKey(int service, const std::string& key, bool alert)
@@ -285,7 +284,16 @@ void LLFloaterTranslationSettings::onBtnGoogleVerify()
 		verifyKey(LLTranslate::SERVICE_GOOGLE, key);
 	}
 }
+void LLFloaterTranslationSettings::onClose(bool app_quitting)
+{
+	std::string service = gSavedSettings.getString("TranslationService");
+	bool bing_selected = service == "bing";
+	bool google_selected = service == "google";
+
+	bool service_verified = (bing_selected && mBingKeyVerified) || (google_selected && mGoogleKeyVerified);
+	gSavedPerAccountSettings.setBOOL("TranslatingEnabled", service_verified);
 
+}
 void LLFloaterTranslationSettings::onBtnOK()
 {
 	gSavedSettings.setBOOL("TranslateChat", mMachineTranslationCB->getValue().asBoolean());
diff --git a/indra/newview/llfloatertranslationsettings.h b/indra/newview/llfloatertranslationsettings.h
index 9b47ad72ed20bc16b7300c4c999bd982768f63fc..b9bfd6265aff8f61845fd95ef8fe6dafca28f2c1 100644
--- a/indra/newview/llfloatertranslationsettings.h
+++ b/indra/newview/llfloatertranslationsettings.h
@@ -44,6 +44,7 @@ class LLFloaterTranslationSettings : public LLFloater
 
 	void setBingVerified(bool ok, bool alert);
 	void setGoogleVerified(bool ok, bool alert);
+	void onClose(bool app_quitting);
 
 private:
 	std::string getSelectedService() const;
diff --git a/indra/newview/skins/default/xui/en/menu_im_session_showmodes.xml b/indra/newview/skins/default/xui/en/menu_im_session_showmodes.xml
index 483f24afd06747aab5c66ece3b2dce11b9e02273..f2a8b39b046ba9e0b858792efd81ea59eff56ef8 100644
--- a/indra/newview/skins/default/xui/en/menu_im_session_showmodes.xml
+++ b/indra/newview/skins/default/xui/en/menu_im_session_showmodes.xml
@@ -44,7 +44,23 @@
          parameter="IMShowNamesForP2PConv" />
         <menu_item_check.on_enable
          function="IMSession.Menu.ShowModes.Enable"
-         parameter="IMShowNamesForP2PConv" />
-         
+         parameter="IMShowNamesForP2PConv" />    
     </menu_item_check>
+    <menu_item_separator layout="topleft" />
+    <menu_item_check name="Translate_chat" label="Translate chat">
+        <menu_item_check.on_click
+         function="Translating.Toggle" />
+        <menu_item_check.on_check
+         function="Translating.On" />
+        <menu_item_check.on_enable
+         function="Translating.Enabled" />
+    </menu_item_check>
+    <menu_item_check name="Translation_settings" label="Translation settings...">
+    <menu_item_check.on_check
+         function="Floater.Visible"
+         parameter="prefs_translation" />
+        <menu_item_check.on_click
+         function="Floater.Toggle"
+         parameter="prefs_translation" />
+    </menu_item_check>     
 </toggleable_menu>