diff --git a/indra/llui/lltexteditor.cpp b/indra/llui/lltexteditor.cpp
index 7818f6e285e5ca88806054d6da8f57d858b59de8..268c830a75e13bd358ddfe69be6abe9cedf46d95 100755
--- a/indra/llui/lltexteditor.cpp
+++ b/indra/llui/lltexteditor.cpp
@@ -75,8 +75,6 @@ template class LLTextEditor* LLView::getChild<class LLTextEditor>(
 //
 // Constants
 //
-const S32	UI_TEXTEDITOR_LINE_NUMBER_MARGIN = 32;
-const S32	UI_TEXTEDITOR_LINE_NUMBER_DIGITS = 4;
 const S32	SPACES_PER_TAB = 4;
 const F32	SPELLCHECK_DELAY = 0.5f;	// delay between the last keypress and spell checking the word the cursor is on
 
@@ -236,7 +234,6 @@ LLTextEditor::Params::Params()
 	prevalidate_callback("prevalidate_callback"),
 	embedded_items("embedded_items", false),
 	ignore_tab("ignore_tab", true),
-	show_line_numbers("show_line_numbers", false),
 	auto_indent("auto_indent", true),
 	default_color("default_color"),
     commit_on_focus_lost("commit_on_focus_lost", false),
@@ -252,8 +249,7 @@ LLTextEditor::LLTextEditor(const LLTextEditor::Params& p) :
 	mBaseDocIsPristine(TRUE),
 	mPristineCmd( NULL ),
 	mLastCmd( NULL ),
-	mDefaultColor(		p.default_color() ),
-	mShowLineNumbers ( p.show_line_numbers ),
+	mDefaultColor( p.default_color() ),
 	mAutoIndent(p.auto_indent),
 	mCommitOnFocusLost( p.commit_on_focus_lost),
 	mAllowEmbeddedItems( p.embedded_items ),
@@ -277,14 +273,7 @@ LLTextEditor::LLTextEditor(const LLTextEditor::Params& p) :
 	params.visible = p.border_visible;
 	mBorder = LLUICtrlFactory::create<LLViewBorder> (params);
 	addChild( mBorder );
-
 	setText(p.default_text());
-
-	if (mShowLineNumbers)
-	{
-		mHPad += UI_TEXTEDITOR_LINE_NUMBER_MARGIN;
-		updateRects();
-	}
 	
 	mParseOnTheFly = TRUE;
 }
@@ -2196,69 +2185,6 @@ void LLTextEditor::drawPreeditMarker()
 	}
 }
 
-
-void LLTextEditor::drawLineNumbers()
-{
-	LLGLSUIDefault gls_ui;
-	LLRect scrolled_view_rect = getVisibleDocumentRect();
-	LLRect content_rect = getVisibleTextRect();	
-	LLLocalClipRect clip(content_rect);
-	S32 first_line = getFirstVisibleLine();
-	S32 num_lines = getLineCount();
-	if (first_line >= num_lines)
-	{
-		return;
-	}
-	
-	S32 cursor_line = mLineInfoList[getLineNumFromDocIndex(mCursorPos)].mLineNum;
-
-	if (mShowLineNumbers)
-	{
-		S32 left = 0;
-		S32 top = getRect().getHeight();
-		S32 bottom = 0;
-
-		gl_rect_2d(left, top, UI_TEXTEDITOR_LINE_NUMBER_MARGIN, bottom, mReadOnlyBgColor.get() ); // line number area always read-only
-		gl_rect_2d(UI_TEXTEDITOR_LINE_NUMBER_MARGIN, top, UI_TEXTEDITOR_LINE_NUMBER_MARGIN-1, bottom, LLColor4::grey3); // separator
-
-		S32 last_line_num = -1;
-
-		for (S32 cur_line = first_line; cur_line < num_lines; cur_line++)
-		{
-			line_info& line = mLineInfoList[cur_line];
-
-			if ((line.mRect.mTop - scrolled_view_rect.mBottom) < mVisibleTextRect.mBottom) 
-			{
-				break;
-			}
-
-			S32 line_bottom = line.mRect.mBottom - scrolled_view_rect.mBottom + mVisibleTextRect.mBottom;
-			// draw the line numbers
-			if(line.mLineNum != last_line_num && line.mRect.mTop <= scrolled_view_rect.mTop) 
-			{
-				const LLFontGL *num_font = LLFontGL::getFontMonospace();
-				const LLWString ltext = utf8str_to_wstring(llformat("%d", line.mLineNum ));
-				BOOL is_cur_line = cursor_line == line.mLineNum;
-				const U8 style = is_cur_line ? LLFontGL::BOLD : LLFontGL::NORMAL;
-				const LLColor4 fg_color = is_cur_line ? mCursorColor : mReadOnlyFgColor;
-				num_font->render( 
-					ltext, // string to draw
-					0, // begin offset
-					UI_TEXTEDITOR_LINE_NUMBER_MARGIN - 2, // x
-					line_bottom, // y
-					fg_color, 
-					LLFontGL::RIGHT, // horizontal alignment
-					LLFontGL::BOTTOM, // vertical alignment
-					style,
-					LLFontGL::NO_SHADOW,
-					S32_MAX, // max chars
-					UI_TEXTEDITOR_LINE_NUMBER_MARGIN - 2); // max pixels
-				last_line_num = line.mLineNum;
-			}
-		}
-	}
-}
-
 void LLTextEditor::draw()
 {
 	{
@@ -2270,7 +2196,6 @@ void LLTextEditor::draw()
 	}
 
 	LLTextBase::draw();
-	drawLineNumbers();
 
     drawPreeditMarker();
 
diff --git a/indra/llui/lltexteditor.h b/indra/llui/lltexteditor.h
index 404275026c710e5f2e1dbfd4101f8befe1d064ff..24086138245301311cfd7393f6bdf2d59f074761 100755
--- a/indra/llui/lltexteditor.h
+++ b/indra/llui/lltexteditor.h
@@ -58,7 +58,6 @@ class LLTextEditor :
 
 		Optional<bool>			embedded_items,
 								ignore_tab,
-								show_line_numbers,
 								commit_on_focus_lost,
 								show_context_menu,
 								enable_tooltip_paste,
@@ -279,11 +278,11 @@ class LLTextEditor :
 protected:
 	LLUIColor			mDefaultColor;
 
-	BOOL				mShowLineNumbers;
 	bool				mAutoIndent;
 	bool				mParseOnTheFly;
 
 	void				updateLinkSegments();
+	class LLViewBorder*	mBorder;
 
 private:
 	//
@@ -293,8 +292,6 @@ class LLTextEditor :
 	void			cleanStringForPaste(LLWString & clean_string);
 	void			pasteTextWithLinebreaks(LLWString & clean_string);
 
-	void			drawLineNumbers();
-
 	void			onKeyStroke();
 
 	// Concrete TextCmd sub-classes used by the LLTextEditor base class
@@ -303,8 +300,6 @@ class LLTextEditor :
 	class TextCmdOverwriteChar;
 	class TextCmdRemove;
 
-	class LLViewBorder*	mBorder;
-
 	BOOL			mBaseDocIsPristine;
 	TextCmd*		mPristineCmd;
 
diff --git a/indra/newview/llfloaterscriptedprefs.h b/indra/newview/llfloaterscriptedprefs.h
index 360c9adc92f25d3334023dd0af0dd93ffd9bd7fe..765db75abca6bb3de3aa1ede7b7b6711b040b462 100644
--- a/indra/newview/llfloaterscriptedprefs.h
+++ b/indra/newview/llfloaterscriptedprefs.h
@@ -25,8 +25,8 @@
  * $/LicenseInfo$
  */
 
-#ifndef LLFLOATERSCRIPTEDPREFS_H
-#define LLFLOATERSCRIPTEDPREFS_H
+#ifndef LL_FLOATERSCRIPTEDPREFS_H
+#define LL_FLOATERSCRIPTEDPREFS_H
 
 #include "llfloater.h"
 
diff --git a/indra/newview/llscripteditor.cpp b/indra/newview/llscripteditor.cpp
index 31d3c29af47f6e89652109a3ef3956c9ac9222d9..df46380130b14ca99b95901a8ef43c842dc97467 100644
--- a/indra/newview/llscripteditor.cpp
+++ b/indra/newview/llscripteditor.cpp
@@ -29,19 +29,109 @@
 #include "llscripteditor.h"
 
 #include "llsyntaxid.h"
+#include "lllocalcliprect.h"
+
+const S32	UI_TEXTEDITOR_LINE_NUMBER_MARGIN = 32;
+const S32	UI_TEXTEDITOR_LINE_NUMBER_DIGITS = 4;
 
 static LLDefaultChildRegistry::Register<LLScriptEditor> r("script_editor");
 
 LLScriptEditor::Params::Params()
-{
-
-}
+:	show_line_numbers("show_line_numbers", true)
+{}
 
 
 LLScriptEditor::LLScriptEditor(const Params& p)
 :	LLTextEditor(p)
+,	mShowLineNumbers(p.show_line_numbers)
+{
+	if (mShowLineNumbers)
+	{
+		mHPad += UI_TEXTEDITOR_LINE_NUMBER_MARGIN;
+		updateRects();
+	}
+}
+
+void LLScriptEditor::draw()
 {
+	{
+		// pad clipping rectangle so that cursor can draw at full width
+		// when at left edge of mVisibleTextRect
+		LLRect clip_rect(mVisibleTextRect);
+		clip_rect.stretch(1);
+		LLLocalClipRect clip(clip_rect);
+	}
 	
+	LLTextBase::draw();
+	drawLineNumbers();
+	
+    drawPreeditMarker();
+	
+	//RN: the decision was made to always show the orange border for keyboard focus but do not put an insertion caret
+	// when in readonly mode
+	mBorder->setKeyboardFocusHighlight( hasFocus() );// && !mReadOnly);
+}
+
+void LLScriptEditor::drawLineNumbers()
+{
+	LLGLSUIDefault gls_ui;
+	LLRect scrolled_view_rect = getVisibleDocumentRect();
+	LLRect content_rect = getVisibleTextRect();
+	LLLocalClipRect clip(content_rect);
+	S32 first_line = getFirstVisibleLine();
+	S32 num_lines = getLineCount();
+	if (first_line >= num_lines)
+	{
+		return;
+	}
+	
+	S32 cursor_line = mLineInfoList[getLineNumFromDocIndex(mCursorPos)].mLineNum;
+	
+	if (mShowLineNumbers)
+	{
+		S32 left = 0;
+		S32 top = getRect().getHeight();
+		S32 bottom = 0;
+		
+		gl_rect_2d(left, top, UI_TEXTEDITOR_LINE_NUMBER_MARGIN, bottom, mReadOnlyBgColor.get() ); // line number area always read-only
+		gl_rect_2d(UI_TEXTEDITOR_LINE_NUMBER_MARGIN, top, UI_TEXTEDITOR_LINE_NUMBER_MARGIN-1, bottom, LLColor4::grey3); // separator
+		
+		S32 last_line_num = -1;
+		
+		for (S32 cur_line = first_line; cur_line < num_lines; cur_line++)
+		{
+			line_info& line = mLineInfoList[cur_line];
+			
+			if ((line.mRect.mTop - scrolled_view_rect.mBottom) < mVisibleTextRect.mBottom)
+			{
+				break;
+			}
+			
+			S32 line_bottom = line.mRect.mBottom - scrolled_view_rect.mBottom + mVisibleTextRect.mBottom;
+			// draw the line numbers
+			if(line.mLineNum != last_line_num && line.mRect.mTop <= scrolled_view_rect.mTop)
+			{
+				const LLFontGL *num_font = LLFontGL::getFontMonospace();
+				const LLWString ltext = utf8str_to_wstring(llformat("%d", line.mLineNum ));
+				BOOL is_cur_line = cursor_line == line.mLineNum;
+				const U8 style = is_cur_line ? LLFontGL::BOLD : LLFontGL::NORMAL;
+				const LLColor4 fg_color = is_cur_line ? mCursorColor : mReadOnlyFgColor;
+				num_font->render(
+								 ltext, // string to draw
+								 0, // begin offset
+								 UI_TEXTEDITOR_LINE_NUMBER_MARGIN - 2, // x
+								 line_bottom, // y
+								 fg_color,
+								 LLFontGL::RIGHT, // horizontal alignment
+								 LLFontGL::BOTTOM, // vertical alignment
+								 style,
+								 LLFontGL::NO_SHADOW,
+								 S32_MAX, // max chars
+								 UI_TEXTEDITOR_LINE_NUMBER_MARGIN - 2); // max pixels
+				last_line_num = line.mLineNum;
+			}
+		}
+	}
 }
 
 void LLScriptEditor::initKeywords()
diff --git a/indra/newview/llscripteditor.h b/indra/newview/llscripteditor.h
index d3e18021f9a9c1a1fd0a401aa92a7e3437e67e34..8c5ab362a30b66bce7db6e58523ec4d71f830950 100644
--- a/indra/newview/llscripteditor.h
+++ b/indra/newview/llscripteditor.h
@@ -36,10 +36,16 @@ class LLScriptEditor : public LLTextEditor
 	
 	struct Params : public LLInitParam::Block<Params, LLTextEditor::Params>
 	{
+		Optional<bool>		show_line_numbers;
+		
 		Params();
 	};
 	
 	virtual ~LLScriptEditor() {};
+	
+	// LLView override
+	virtual void	draw();
+	
 	void	initKeywords();
 	void	loadKeywords();
 	void	clearSegments();
@@ -51,11 +57,13 @@ class LLScriptEditor : public LLTextEditor
 	LLScriptEditor(const Params& p);
 	
 private:
+	void	drawLineNumbers();
 	void	updateSegments();
 	void	loadKeywords(const std::string& filename_keywords,
 						 const std::string& filename_colors);
 	
 	LLKeywords	mKeywords;
+	bool		mShowLineNumbers;
 };
 
 #endif // LL_SCRIPTEDITOR_H
diff --git a/indra/newview/skins/default/xui/en/floater_script_ed_prefs.xml b/indra/newview/skins/default/xui/en/floater_script_ed_prefs.xml
index 838ed031d6e119418f8f4628226d167f6b9e0fb9..ee996ee27c255b7a095a9a47f1d871399aeec0be 100644
--- a/indra/newview/skins/default/xui/en/floater_script_ed_prefs.xml
+++ b/indra/newview/skins/default/xui/en/floater_script_ed_prefs.xml
@@ -464,7 +464,6 @@
      bg_readonly_color="ScriptBackground"
      bg_selected_color="ScriptSelectedColor"
      cursor_color="ScriptCursorColor"
-     show_line_numbers="true"
      enable_tooltip_paste="true"
      word_wrap="true">
 default
diff --git a/indra/newview/skins/default/xui/en/panel_script_ed.xml b/indra/newview/skins/default/xui/en/panel_script_ed.xml
index 755d9eaf391b8ab4c13a55ee79ec2f5cdf5a8554..76677d6e95947e67d7cbaba7100e0788b8c31c9d 100755
--- a/indra/newview/skins/default/xui/en/panel_script_ed.xml
+++ b/indra/newview/skins/default/xui/en/panel_script_ed.xml
@@ -172,8 +172,7 @@
      width="487"
      enable_tooltip_paste="true"
      word_wrap="true"
-     show_context_menu="true"
-     show_line_numbers="true">
+     show_context_menu="true">
         Loading...
     </script_editor>
     <scroll_list