diff --git a/indra/llui/llurlentry.cpp b/indra/llui/llurlentry.cpp
index 6f3122e7a1c9cd934311b5142277fdc73d4bf735..be583c83d835221e30ef107e23d42f16d95f9b10 100755
--- a/indra/llui/llurlentry.cpp
+++ b/indra/llui/llurlentry.cpp
@@ -178,6 +178,12 @@ bool LLUrlEntryBase::isLinkDisabled() const
 	return globally_disabled;
 }
 
+bool LLUrlEntryBase::isWikiLinkCorrect(std::string url)
+{
+	std::string label = getLabelFromWikiLink(url);
+	return (LLUrlRegistry::instance().hasUrl(label)) ? false : true;
+}
+
 static std::string getStringAfterToken(const std::string str, const std::string token)
 {
 	size_t pos = str.find(token);
diff --git a/indra/llui/llurlentry.h b/indra/llui/llurlentry.h
index d4684e2e1e1f04185863f8b36b838c10e781ce34..ffcd45dfdeb311e051e8d05390c2aebfdb6ea72e 100755
--- a/indra/llui/llurlentry.h
+++ b/indra/llui/llurlentry.h
@@ -100,6 +100,8 @@ class LLUrlEntryBase
 
 	bool isLinkDisabled() const;
 
+	bool isWikiLinkCorrect(std::string url);
+
 protected:
 	std::string getIDStringFromUrl(const std::string &url) const;
 	std::string escapeUrl(const std::string &url) const;
diff --git a/indra/llui/llurlregistry.cpp b/indra/llui/llurlregistry.cpp
index bccc646821198499fedad53d6dba908748809941..ef0789e0e42f1267e2dfe6e6d919208ee56e7286 100755
--- a/indra/llui/llurlregistry.cpp
+++ b/indra/llui/llurlregistry.cpp
@@ -45,7 +45,8 @@ LLUrlRegistry::LLUrlRegistry()
 	registerUrl(mUrlEntryIcon);
 	registerUrl(new LLUrlEntrySLURL());
 	registerUrl(new LLUrlEntryHTTP());
-	registerUrl(new LLUrlEntryHTTPLabel());
+	mUrlEntryHTTPLabel = new LLUrlEntryHTTPLabel();
+	registerUrl(mUrlEntryHTTPLabel);
 	registerUrl(new LLUrlEntryAgentCompleteName());
 	registerUrl(new LLUrlEntryAgentDisplayName());
 	registerUrl(new LLUrlEntryAgentUserName());
@@ -64,7 +65,8 @@ LLUrlRegistry::LLUrlRegistry()
 	//LLUrlEntrySL and LLUrlEntrySLLabel have more common pattern, 
 	//so it should be registered in the end of list
 	registerUrl(new LLUrlEntrySL());
-	registerUrl(new LLUrlEntrySLLabel());
+	mUrlEntrySLLabel = new LLUrlEntrySLLabel();
+	registerUrl(mUrlEntrySLLabel);
 	// most common pattern is a URL without any protocol,
 	// e.g., "secondlife.com"
 	registerUrl(new LLUrlEntryHTTPNoProtocol());	
@@ -128,6 +130,11 @@ static bool matchRegex(const char *text, boost::regex regex, U32 &start, U32 &en
 		end--;
 	}
 
+	else if (text[end] == ']' && std::string(text+start, end-start).find('[') == std::string::npos)
+	{
+			end--;
+	}
+
 	return true;
 }
 
@@ -175,6 +182,15 @@ bool LLUrlRegistry::findUrl(const std::string &text, LLUrlMatch &match, const LL
 			// does this match occur in the string before any other match
 			if (start < match_start || match_entry == NULL)
 			{
+
+				if((mUrlEntryHTTPLabel == *it) || (mUrlEntrySLLabel == *it))
+				{
+					if(url_entry && !url_entry->isWikiLinkCorrect(text.substr(start, end - start + 1)))
+					{
+						continue;
+					}
+				}
+
 				match_start = start;
 				match_end = end;
 				match_entry = url_entry;
diff --git a/indra/llui/llurlregistry.h b/indra/llui/llurlregistry.h
index 6270df1bbbf22a7cb57733aded8bbd4dc28d205d..1cb403dfc9f250e78881be0b474046fa7699e4a9 100755
--- a/indra/llui/llurlregistry.h
+++ b/indra/llui/llurlregistry.h
@@ -94,6 +94,8 @@ class LLUrlRegistry : public LLSingleton<LLUrlRegistry>
 
 	std::vector<LLUrlEntryBase *> mUrlEntry;
 	LLUrlEntryBase*	mUrlEntryIcon;
+	LLUrlEntryBase* mUrlEntryHTTPLabel;
+	LLUrlEntryBase* mUrlEntrySLLabel;
 };
 
 #endif