diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp
index 204d7d23fa9bb91939b325b5eb9cbf5952135f34..ab685b69ade99b417b2d0b2a62670225191273e2 100644
--- a/indra/newview/llbottomtray.cpp
+++ b/indra/newview/llbottomtray.cpp
@@ -40,6 +40,7 @@
 #include "llimfloater.h" // for LLIMFloater
 #include "lllayoutstack.h"
 #include "llnearbychatbar.h"
+#include "llspeakbutton.h"
 #include "llsplitbutton.h"
 #include "llsyswellwindow.h"
 #include "llfloatercamera.h"
@@ -185,6 +186,28 @@ void LLBottomTray::sessionIDUpdated(const LLUUID& old_session_id, const LLUUID&
 	}
 }
 
+// virtual
+void LLBottomTray::onChange(EStatusType status, const std::string &channelURI, bool proximal)
+{
+	// Time it takes to connect to voice channel might be pretty long,
+	// so don't expect user login or STATUS_VOICE_ENABLED to be followed by STATUS_JOINED.
+	BOOL enable = FALSE;
+
+	switch (status)
+	{
+	// Do not add STATUS_VOICE_ENABLED because voice chat is 
+	// inactive until STATUS_JOINED
+	case STATUS_JOINED:
+		enable = TRUE;
+		break;
+	default:
+		enable = FALSE;
+		break;
+	}
+
+	mSpeakBtn->setEnabled(enable);
+}
+
 //virtual
 void LLBottomTray::onFocusLost()
 {
@@ -280,6 +303,19 @@ BOOL LLBottomTray::postBuild()
 	mSnapshotPanel = getChild<LLPanel>("snapshot_panel");
 	setRightMouseDownCallback(boost::bind(&LLBottomTray::showBottomTrayContextMenu,this, _2, _3,_4));
 
+	mSpeakBtn = getChild<LLSpeakButton>("talk");
+
+	// Speak button should be initially disabled because
+	// it takes some time between logging in to world and connecting to voice channel.
+	mSpeakBtn->setEnabled(FALSE);
+
+	// Localization tool doesn't understand custom buttons like <talk_button>
+	mSpeakBtn->setSpeakToolTip( getString("SpeakBtnToolTip") );
+	mSpeakBtn->setShowToolTip( getString("VoiceControlBtnToolTip") );
+
+	// Registering Chat Bar to receive Voice client status change notifications.
+	gVoiceClient->addObserver(this);
+
 	if (mChicletPanel && mToolbarStack && mNearbyChatBar)
 	{
 		verifyChildControlsSizes();
diff --git a/indra/newview/llbottomtray.h b/indra/newview/llbottomtray.h
index 6509fea63d466fde318e8b37a05028fa1573ada5..c88bdeda1c266894375c03f66ade419ed04f2c46 100644
--- a/indra/newview/llbottomtray.h
+++ b/indra/newview/llbottomtray.h
@@ -33,7 +33,7 @@
 #ifndef LL_LLBOTTOMPANEL_H
 #define LL_LLBOTTOMPANEL_H
 
-#include <llmenugl.h>
+#include "llmenugl.h"
 
 #include "llpanel.h"
 #include "llimview.h"
@@ -51,6 +51,7 @@ class LLBottomTray
 	: public LLSingleton<LLBottomTray>
 	, public LLPanel
 	, public LLIMSessionObserver
+	, public LLVoiceClientStatusObserver
 {
 	LOG_CLASS(LLBottomTray);
 	friend class LLSingleton<LLBottomTray>;
@@ -75,6 +76,10 @@ class LLBottomTray
 	virtual void onFocusLost();
 	virtual void setVisible(BOOL visible);
 
+	// Implements LLVoiceClientStatusObserver::onChange() to enable the speak
+	// button when voice is available
+	/*virtual*/ void onChange(EStatusType status, const std::string &channelURI, bool proximal);
+
 	void showBottomTrayContextMenu(S32 x, S32 y, MASK mask);
 
 	void showGestureButton(BOOL visible);
diff --git a/indra/newview/llnearbychatbar.cpp b/indra/newview/llnearbychatbar.cpp
index 39934313118de30ce7e915a37b2f5941b0f4c361..94b879114750249b064aff92b20fb31c31ab4491 100644
--- a/indra/newview/llnearbychatbar.cpp
+++ b/indra/newview/llnearbychatbar.cpp
@@ -36,7 +36,6 @@
 #include "lltrans.h"
 
 #include "llnearbychatbar.h"
-#include "llspeakbutton.h"
 #include "llbottomtray.h"
 #include "llagent.h"
 #include "llgesturemgr.h"
@@ -234,14 +233,6 @@ BOOL LLNearbyChatBar::postBuild()
 
 	mOutputMonitor = getChild<LLOutputMonitorCtrl>("chat_zone_indicator");
 	mOutputMonitor->setVisible(FALSE);
-	mSpeakBtn = getParent()->getChild<LLSpeakButton>("talk");
-
-	// Speak button should be initially disabled because
-	// it takes some time between logging in to world and connecting to voice channel.
-	mSpeakBtn->setEnabled(FALSE);
-
-	// Registering Chat Bar to receive Voice client status change notifications.
-	gVoiceClient->addObserver(this);
 
 	return TRUE;
 }
@@ -733,27 +724,6 @@ class LLChatHandler : public LLCommandHandler
 	}
 };
 
-void LLNearbyChatBar::onChange(EStatusType status, const std::string &channelURI, bool proximal)
-{
-	// Time it takes to connect to voice channel might be pretty long,
-	// so don't expect user login or STATUS_VOICE_ENABLED to be followed by STATUS_JOINED.
-	BOOL enable = FALSE;
-
-	switch (status)
-	{
-	// Do not add STATUS_VOICE_ENABLED because voice chat is 
-	// inactive until STATUS_JOINED
-	case STATUS_JOINED:
-		enable = TRUE;
-		break;
-	default:
-		enable = FALSE;
-		break;
-	}
-
-	mSpeakBtn->setEnabled(enable);
-}
-
 // Creating the object registers with the dispatcher.
 LLChatHandler gChatHandler;
 
diff --git a/indra/newview/llnearbychatbar.h b/indra/newview/llnearbychatbar.h
index 56ee706a9746a865c7ea2c49d77bfc5203ef04b5..224118e088d6db9300babb35076c74593b4ad1a5 100644
--- a/indra/newview/llnearbychatbar.h
+++ b/indra/newview/llnearbychatbar.h
@@ -42,9 +42,6 @@
 #include "llspeakers.h"
 
 
-class LLSpeakButton;
-
-
 class LLGestureComboBox
 	: public LLComboBox
 	, public LLGestureManagerObserver
@@ -76,7 +73,6 @@ class LLGestureComboBox
 
 class LLNearbyChatBar
 :	public LLPanel
-,   public LLVoiceClientStatusObserver
 {
 public:
 	// constructor for inline chat-bars (e.g. hosted in chat history window)
@@ -105,11 +101,6 @@ class LLNearbyChatBar
 	S32 getMinWidth() const;
 	S32 getMaxWidth() const;
 
-	/**
-	 * Implements LLVoiceClientStatusObserver::onChange()
-	 */
-	/*virtual*/ void onChange(EStatusType status, const std::string &channelURI, bool proximal);
-
 protected:
 	static BOOL matchChatTypeTrigger(const std::string& in_str, std::string* out_str);
 	static void onChatBoxKeystroke(LLLineEditor* caller, void* userdata);
@@ -127,7 +118,6 @@ class LLNearbyChatBar
 	static S32 sLastSpecialChatChannel;
 
 	LLLineEditor*		mChatBox;
-	LLSpeakButton*		mSpeakBtn;
 	LLOutputMonitorCtrl* mOutputMonitor;
 	LLLocalSpeakerMgr*  mSpeakerMgr;
 };
diff --git a/indra/newview/llspeakbutton.cpp b/indra/newview/llspeakbutton.cpp
index 57ea018f2540c833bb9a19dfe6fbdb30d2fc35f8..51d53b267406beefb09b4721b7b7fa18779b0ab5 100644
--- a/indra/newview/llspeakbutton.cpp
+++ b/indra/newview/llspeakbutton.cpp
@@ -133,6 +133,16 @@ LLSpeakButton::~LLSpeakButton()
 	LLTransientFloaterMgr::getInstance()->removeControlView(mShowBtn);
 }
 
+void LLSpeakButton::setSpeakToolTip(const std::string& msg)
+{
+	mSpeakBtn->setToolTip(msg);
+}
+
+void LLSpeakButton::setShowToolTip(const std::string& msg)
+{
+	mShowBtn->setToolTip(msg);
+}
+
 void LLSpeakButton::onMouseDown_SpeakBtn()
 {
 	bool down = true;
diff --git a/indra/newview/llspeakbutton.h b/indra/newview/llspeakbutton.h
index e213c562dd820c5781e234208b14c395a865fa3c..02c8ab38909031b48f48b721f6a38bc326e0bf45 100644
--- a/indra/newview/llspeakbutton.h
+++ b/indra/newview/llspeakbutton.h
@@ -62,6 +62,11 @@ class LLSpeakButton : public LLUICtrl
 	/*virtual*/ ~LLSpeakButton();
 	/*virtual*/ void draw();
 
+	// *HACK: Need to put tooltips in a translatable location,
+	// the panel that contains this button.
+	void setSpeakToolTip(const std::string& msg);
+	void setShowToolTip(const std::string& msg);
+
 protected:
 	friend class LLUICtrlFactory;
 	LLSpeakButton(const Params& p);
diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
index 818801645527b5eb23a2021dadf06b6dcee65c7c..3c16a439d9a998f04fbf5a4a667b329d7a1f07f2 100644
--- a/indra/newview/skins/default/xui/en/panel_bottomtray.xml
+++ b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
@@ -13,6 +13,8 @@
  chrome="true"
  border_visible="false"
  width="1000">
+  <string name="SpeakBtnToolTip">Turns microphone on/off</string>
+  <string name="VoiceControlBtnToolTip">Shows/hides voice control panel</string>
     <layout_stack
      mouse_opaque="false"
      border_size="0"
@@ -70,9 +72,7 @@
            left="0"
            name="talk"
            top="3"
-          width="100"
-          speak_button.tool_tip="Turns microphone on/off"
-          show_button.tool_tip="Shows/hides voice control panel" />
+          width="100" />
         </layout_panel>
         <icon
             auto_resize="false"