diff --git a/indra/llui/llchatentry.cpp b/indra/llui/llchatentry.cpp
index c04b70eb649340610399b84ad788b852099ef863..dac001afabcf757be529aa00b85cd4b0491f021e 100755
--- a/indra/llui/llchatentry.cpp
+++ b/indra/llui/llchatentry.cpp
@@ -51,6 +51,7 @@ LLChatEntry::LLChatEntry(const Params& p)
 	mCurrentHistoryLine = mLineHistory.begin();
 
 	mAutoIndent = false;
+	keepSelectionOnReturn(true);
 }
 
 LLChatEntry::~LLChatEntry()
@@ -179,15 +180,6 @@ BOOL LLChatEntry::handleSpecialKey(const KEY key, const MASK mask)
 {
 	BOOL handled = FALSE;
 
-    // In the case of a chat entry, pressing RETURN when something is selected
-    // should NOT erase the selection (unlike a notecard, for example)
-    if (key == KEY_RETURN)
-    {
-        endOfDoc();
-        startSelection();
-        endSelection();
-    }
-
 	LLTextEditor::handleSpecialKey(key, mask);
 
 	switch(key)
diff --git a/indra/llui/lltexteditor.cpp b/indra/llui/lltexteditor.cpp
index 3bac15c5d4ae9b02466b09bbac21594aaafc919c..6c4d0319075429036f213767c6d041c998508dfb 100755
--- a/indra/llui/lltexteditor.cpp
+++ b/indra/llui/lltexteditor.cpp
@@ -264,7 +264,8 @@ LLTextEditor::LLTextEditor(const LLTextEditor::Params& p) :
 	mContextMenu(NULL),
 	mShowContextMenu(p.show_context_menu),
 	mEnableTooltipPaste(p.enable_tooltip_paste),
-	mPassDelete(FALSE)
+	mPassDelete(FALSE),
+	mKeepSelectionOnReturn(false)
 {
 	mSourceID.generate();
 
@@ -1664,7 +1665,7 @@ BOOL LLTextEditor::handleSpecialKey(const KEY key, const MASK mask)
 	case KEY_RETURN:
 		if (mask == MASK_NONE)
 		{
-			if( hasSelection() )
+			if( hasSelection() && !mKeepSelectionOnReturn )
 			{
 				deleteSelection(FALSE);
 			}
diff --git a/indra/llui/lltexteditor.h b/indra/llui/lltexteditor.h
index d3b7bc0eb7681ef04c31155ee3561496a9896b48..02a76d2f8af605b9ab56276c04d801ee39734082 100755
--- a/indra/llui/lltexteditor.h
+++ b/indra/llui/lltexteditor.h
@@ -295,6 +295,7 @@ class LLTextEditor :
 
 	/*virtual*/ void	updateSegments();
 	void				updateLinkSegments();
+	void				keepSelectionOnReturn(bool keep) { mKeepSelectionOnReturn = keep; }
 
 private:
 	//
@@ -338,6 +339,7 @@ class LLTextEditor :
 	bool			mParseOnTheFly;
 	bool			mEnableTooltipPaste;
 	bool			mPassDelete;
+	bool			mKeepSelectionOnReturn;	// disabling of removing selected text after pressing of Enter
 
 	LLUUID			mSourceID;