diff --git a/indra/llui/lltexteditor.cpp b/indra/llui/lltexteditor.cpp
index fffcfae81c7acc9c698ebdaa3db8be4a24d5d599..217aec38e278c5cb05a7e1913782a1c56988d5d2 100644
--- a/indra/llui/lltexteditor.cpp
+++ b/indra/llui/lltexteditor.cpp
@@ -1255,7 +1255,6 @@ void LLTextEditor::addLineBreakChar(BOOL group_together)
 	setCursorPos(mCursorPos + pos);
 }
 
-
 BOOL LLTextEditor::handleSelectionKey(const KEY key, const MASK mask)
 {
 	BOOL handled = FALSE;
@@ -1785,6 +1784,18 @@ BOOL LLTextEditor::handleSpecialKey(const KEY key, const MASK mask)
 				autoIndent();
 			}
 		}
+		else if (mask == MASK_SHIFT)
+		{
+			if( mCursorPos > 0 )
+			{
+				const LLWString& text = getWText();
+				if( '\n' != text[ mCursorPos - 1 ] )
+				{
+					addLineBreakChar();
+					handled = TRUE;
+				}
+			}
+		}
 		else
 		{
 			handled = FALSE;
diff --git a/indra/newview/llfloaterimnearbychat.cpp b/indra/newview/llfloaterimnearbychat.cpp
index 2fff0463e24a0c26cdead52d69786aac1a5c2e10..49937cedefaae65a25be151bcb9161477e72f7bf 100644
--- a/indra/newview/llfloaterimnearbychat.cpp
+++ b/indra/newview/llfloaterimnearbychat.cpp
@@ -414,20 +414,19 @@ BOOL LLFloaterIMNearbyChat::handleKeyHere( KEY key, MASK mask )
 {
 	BOOL handled = FALSE;
 
-	if( KEY_RETURN == key && mask == MASK_CONTROL)
+	if (KEY_RETURN == key && mask == (MASK_CONTROL|MASK_SHIFT))
 	{
-		// shout
-		sendChat(CHAT_TYPE_SHOUT);
+		// whisper
+		sendChat(CHAT_TYPE_WHISPER);
 		handled = TRUE;
 	}
-	else if (KEY_RETURN == key && mask == MASK_SHIFT)
+	else if( KEY_RETURN == key && mask == MASK_CONTROL)
 	{
-		// whisper
-		sendChat(CHAT_TYPE_WHISPER);
+		// shout
+		sendChat(CHAT_TYPE_SHOUT);
 		handled = TRUE;
 	}
 
-
 	if((mask == MASK_ALT) && isTornOff())
 	{
 		LLFloaterIMContainer* floater_container = LLFloaterIMContainer::getInstance();