diff --git a/indra/llui/llchatentry.cpp b/indra/llui/llchatentry.cpp
index c7e732e0c943ff8db378898671c9d5066d2a238d..c04b70eb649340610399b84ad788b852099ef863 100755
--- a/indra/llui/llchatentry.cpp
+++ b/indra/llui/llchatentry.cpp
@@ -158,7 +158,7 @@ void LLChatEntry::onValueChange(S32 start, S32 end)
     resetLabel();
 }
 
-bool LLChatEntry::useLabel()
+bool LLChatEntry::useLabel() const
 {
     return !getLength() && !mLabel.empty();
 }
diff --git a/indra/llui/llchatentry.h b/indra/llui/llchatentry.h
index 3a5e87e8c84c93918204386b937bb42555a6b5e9..e67f39b21b610bcbdca067558c2dae6be1b6ab19 100755
--- a/indra/llui/llchatentry.h
+++ b/indra/llui/llchatentry.h
@@ -56,7 +56,7 @@ class LLChatEntry : public LLTextEditor
 	LLChatEntry(const Params& p);
     /*virtual*/ void    beforeValueChange();
     /*virtual*/ void    onValueChange(S32 start, S32 end);
-    /*virtual*/ bool    useLabel();
+    /*virtual*/ bool    useLabel() const;
 
 public:
 
diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp
index bf216b32d4e21a726224ac2ca353fec7afd9aacc..a53a38124cb41d2dae783d0be4e8d2ee76f71258 100755
--- a/indra/llui/lltextbase.cpp
+++ b/indra/llui/lltextbase.cpp
@@ -1854,7 +1854,17 @@ LLTextBase::segment_set_t::iterator LLTextBase::getSegIterContaining(S32 index)
 
 	static LLPointer<LLIndexSegment> index_segment = new LLIndexSegment();
 
-	if (index > getLength()) { return mSegments.end(); }
+	S32 text_len = 0;
+	if (!useLabel())
+	{
+		text_len = getLength();
+	}
+	else
+	{
+		text_len = mLabel.getWString().length();
+	}
+
+	if (index > text_len) { return mSegments.end(); }
 
 	// when there are no segments, we return the end iterator, which must be checked by caller
 	if (mSegments.size() <= 1) { return mSegments.begin(); }
@@ -1870,7 +1880,17 @@ LLTextBase::segment_set_t::const_iterator LLTextBase::getSegIterContaining(S32 i
 {
 	static LLPointer<LLIndexSegment> index_segment = new LLIndexSegment();
 
-	if (index > getLength()) { return mSegments.end(); }
+	S32 text_len = 0;
+	if (!useLabel())
+	{
+		text_len = getLength();
+	}
+	else
+	{
+		text_len = mLabel.getWString().length();
+	}
+
+	if (index > text_len) { return mSegments.end(); }
 
 	// when there are no segments, we return the end iterator, which must be checked by caller
 	if (mSegments.size() <= 1) { return mSegments.begin(); }
@@ -2101,7 +2121,7 @@ void LLTextBase::resetLabel()
 	}
 }
 
-bool LLTextBase::useLabel()
+bool LLTextBase::useLabel() const
 {
     return !getLength() && !mLabel.empty() && !hasFocus();
 }
diff --git a/indra/llui/lltextbase.h b/indra/llui/lltextbase.h
index 20a73387b57a3193ae3dc0d5150d2a5f98d6d25b..2fb58d468aa10e8a64b0b1ffa59af0306acb2061 100755
--- a/indra/llui/lltextbase.h
+++ b/indra/llui/lltextbase.h
@@ -507,7 +507,7 @@ class LLTextBase
 	void							initFromParams(const Params& p);
     virtual void					beforeValueChange();
 	virtual void					onValueChange(S32 start, S32 end);
-    virtual bool                    useLabel();
+    virtual bool                    useLabel() const;
 
 	// draw methods
 	void							drawSelectionBackground(); // draws the black box behind the selected text