diff --git a/indra/llcommon/lluriparser.cpp b/indra/llcommon/lluriparser.cpp
index 82d0dc8b4b25889b35c12b64f53bcf3bc094573a..c275b90120d976123822300688aa568dbeda0efa 100644
--- a/indra/llcommon/lluriparser.cpp
+++ b/indra/llcommon/lluriparser.cpp
@@ -205,9 +205,9 @@ void LLUriParser::glue(std::string& uri) const
 	uri = first_part + second_part;
 }
 
-void LLUriParser::glueFirst(std::string& uri) const
+void LLUriParser::glueFirst(std::string& uri, bool use_scheme) const
 {
-	if (mScheme.size())
+	if (use_scheme && mScheme.size())
 	{
 		uri = mScheme;
 		uri += "://";
diff --git a/indra/llcommon/lluriparser.h b/indra/llcommon/lluriparser.h
index 2df8085ae6330582453cd0c0e839a97a5ad5994a..cfbf54f3c8592fb597a1c297988b67ff8d7ad96e 100644
--- a/indra/llcommon/lluriparser.h
+++ b/indra/llcommon/lluriparser.h
@@ -60,7 +60,7 @@ class LL_COMMON_API LLUriParser
 
 	void extractParts();
 	void glue(std::string& uri) const;
-	void glueFirst(std::string& uri) const;
+	void glueFirst(std::string& uri, bool use_scheme = true) const;
 	void glueSecond(std::string& uri) const;
 	bool test() const;
 	S32 normalize();
diff --git a/indra/llui/llurlentry.cpp b/indra/llui/llurlentry.cpp
index e4848362a76bcfd4ac0edf8f4ee52f9cfb86c798..797fae81c47d82d30e1824529aa07ea1105f7a36 100644
--- a/indra/llui/llurlentry.cpp
+++ b/indra/llui/llurlentry.cpp
@@ -205,9 +205,15 @@ std::string LLUrlEntryBase::urlToGreyQuery(const std::string &url) const
 
 	std::string label;
 	up.extractParts();
-	up.glueFirst(label);
-	std::string query = url.substr(label.size());
-	return query;
+	up.glueFirst(label, false);
+
+	size_t pos = url.find(label);
+	if (pos == std::string::npos)
+	{
+		return "";
+	}
+	pos += label.size();
+	return url.substr(pos);
 }