diff --git a/indra/llui/llurlregistry.cpp b/indra/llui/llurlregistry.cpp
index afcff0d4090c607ea729b0adddda94a6a4c8b526..ad5c0911f8cb2fcdd5256bbab45b1fdb620e5b74 100644
--- a/indra/llui/llurlregistry.cpp
+++ b/indra/llui/llurlregistry.cpp
@@ -223,3 +223,23 @@ bool LLUrlRegistry::hasUrl(const LLWString &text)
 	LLUrlMatch match;
 	return findUrl(text, match);
 }
+
+bool LLUrlRegistry::isUrl(const std::string &text)
+{
+	LLUrlMatch match;
+	if (findUrl(text, match))
+	{
+		return (match.getStart() == 0 && match.getEnd() >= text.size()-1);
+	}
+	return false;
+}
+
+bool LLUrlRegistry::isUrl(const LLWString &text)
+{
+	LLUrlMatch match;
+	if (findUrl(text, match))
+	{
+		return (match.getStart() == 0 && match.getEnd() >= text.size()-1);
+	}
+	return false;
+}
diff --git a/indra/llui/llurlregistry.h b/indra/llui/llurlregistry.h
index d7800d8cfc29606bb6c691a96a36d6fbe1f422fc..399ee0a9887d28e9b09510d49918a1c63242d1d3 100644
--- a/indra/llui/llurlregistry.h
+++ b/indra/llui/llurlregistry.h
@@ -85,6 +85,10 @@ class LLUrlRegistry : public LLSingleton<LLUrlRegistry>
 	bool hasUrl(const std::string &text);
 	bool hasUrl(const LLWString &text);
 
+	// return true if the given string is a URL that findUrl would match
+	bool isUrl(const std::string &text);
+	bool isUrl(const LLWString &text);
+
 private:
 	LLUrlRegistry();
 	friend class LLSingleton<LLUrlRegistry>;
diff --git a/indra/newview/llnavigationbar.cpp b/indra/newview/llnavigationbar.cpp
index 6210151d1b23ee992acf904026e0c3b95955201c..71dc0f901137488e0a50f437105dbeeb5384ab44 100644
--- a/indra/newview/llnavigationbar.cpp
+++ b/indra/newview/llnavigationbar.cpp
@@ -51,6 +51,8 @@
 #include "llsidetray.h"
 #include "llslurl.h"
 #include "llurlsimstring.h"
+#include "llurlregistry.h"
+#include "llurldispatcher.h"
 #include "llviewerinventory.h"
 #include "llviewermenu.h"
 #include "llviewerparcelmgr.h"
@@ -58,6 +60,7 @@
 #include "llappviewer.h"
 #include "llviewercontrol.h"
 #include "llfloatermediabrowser.h"
+#include "llweb.h"
 
 #include "llinventorymodel.h"
 #include "lllandmarkactions.h"
@@ -543,7 +546,20 @@ void LLNavigationBar::onRegionNameResponse(
 	// Invalid location?
 	if (!region_handle)
 	{
-		invokeSearch(typed_location);
+		// handle any secondlife:// SLapps, or
+		// display http:// URLs in the media browser, or
+		// anything else is sent to the search floater
+		if (LLUrlRegistry::instance().isUrl(typed_location))
+		{
+			if (! LLURLDispatcher::dispatchFromTextEditor(typed_location))
+			{
+				LLWeb::loadURL(typed_location);
+			}
+		}
+		else
+		{
+			invokeSearch(typed_location);
+		}
 		return;
 	}