diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp
index e5c5a607dd8902098e95c07bf687bd65b39daf1a..14e58f416766c75c2d60974e98e78021012f23ab 100644
--- a/indra/newview/llviewermedia.cpp
+++ b/indra/newview/llviewermedia.cpp
@@ -2795,42 +2795,6 @@ bool LLViewerMediaImpl::isPlayable() const
 	return false;
 }
 
-////////////////////////////////////////////////////////////////////////////////
-// static 
-bool LLViewerMediaImpl::onClickLinkExternalTarget(const LLSD& notification, const LLSD& response )
-{
-	S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
-	if ( 0 == option )
-	{
-		LLSD payload = notification["payload"];
-		std::string url = payload["url"].asString();
-		S32 target_type = payload["target_type"].asInteger();
-		clickLinkWithTarget(url, target_type);
-	}
-	return false;
-}
-
-
-////////////////////////////////////////////////////////////////////////////////
-// static 
-void LLViewerMediaImpl::clickLinkWithTarget(const std::string& url, const S32& target_type )
-{
-	if (target_type == LLPluginClassMedia::TARGET_EXTERNAL)
-	{
-		// load target in an external browser
-		LLWeb::loadURLExternal(url);
-	}
-	else if (target_type == LLPluginClassMedia::TARGET_BLANK)
-	{
-		// load target in the user's preferred browser
-		LLWeb::loadURL(url);
-	}
-	else {
-		// unsupported link target - shouldn't happen
-		LL_WARNS("LinkTarget") << "Unsupported link target type" << LL_ENDL;
-	}
-}
-
 //////////////////////////////////////////////////////////////////////////////////////////
 void LLViewerMediaImpl::handleMediaEvent(LLPluginClassMedia* plugin, LLPluginClassMediaOwner::EMediaEvent event)
 {
@@ -2851,21 +2815,23 @@ void LLViewerMediaImpl::handleMediaEvent(LLPluginClassMedia* plugin, LLPluginCla
 			std::string url = plugin->getClickURL();
 			U32 target_type = plugin->getClickTargetType();
 			
-			// is there is a target specified for the link?
-			if (target_type == LLPluginClassMedia::TARGET_EXTERNAL ||
-				target_type == LLPluginClassMedia::TARGET_BLANK )
+			switch (target_type)
 			{
-				if (gSavedSettings.getBOOL("UseExternalBrowser"))
-				{
-					LLSD payload;
-					payload["url"] = url;
-					payload["target_type"] = LLSD::Integer(target_type);
-					LLNotificationsUtil::add( "WebLaunchExternalTarget", LLSD(), payload, onClickLinkExternalTarget);
-				}
-				else
-				{
-					clickLinkWithTarget(url, target_type);
-				}
+			case LLPluginClassMedia::TARGET_EXTERNAL:
+				// force url to external browser
+				LLWeb::loadURLExternal(url);
+				break;
+			case LLPluginClassMedia::TARGET_BLANK:
+				// open in SL media browser or external browser based on user pref
+				LLWeb::loadURL(url);
+				break;
+			case LLPluginClassMedia::TARGET_NONE:
+				// ignore this click and let media plugin handle it
+				break;
+			case LLPluginClassMedia::TARGET_OTHER:
+				LL_WARNS("LinkTarget") << "Unsupported link target type" << LL_ENDL;
+				break;
+			default: break;
 			}
 		};
 		break;
diff --git a/indra/newview/llviewermedia.h b/indra/newview/llviewermedia.h
index 754d0851c361692dbd3a35aa6d0695aa02d0e3ba..8626f4469e332fcda197cc801bf55db2d68960f0 100644
--- a/indra/newview/llviewermedia.h
+++ b/indra/newview/llviewermedia.h
@@ -391,8 +391,6 @@ class LLViewerMediaImpl
 	bool shouldShowBasedOnClass() const;
 	static bool isObjectAttachedToAnotherAvatar(LLVOVolume *obj);
 	static bool isObjectInAgentParcel(LLVOVolume *obj);
-	static bool onClickLinkExternalTarget( const LLSD&, const LLSD& );
-	static void clickLinkWithTarget(const std::string& url, const S32& target_type );
 	
 private:
 	// a single media url with some data and an impl.
diff --git a/indra/newview/llweb.cpp b/indra/newview/llweb.cpp
index aa03b1afd1b80e12897514a91fb65633f29cb580..5c9633c03688ecfb74106ed5a7ddffa649043d3b 100644
--- a/indra/newview/llweb.cpp
+++ b/indra/newview/llweb.cpp
@@ -54,6 +54,10 @@
 #include "llviewerparcelmgr.h"
 #include "llviewerregion.h"
 #include "llviewerwindow.h"
+#include "llnotificationsutil.h"
+
+bool on_load_url_external_response(const LLSD& notification, const LLSD& response, bool async );
+
 
 class URLLoader : public LLToastAlertPanel::URLLoader
 {
@@ -110,11 +114,26 @@ void LLWeb::loadURLExternal(const std::string& url)
 // static
 void LLWeb::loadURLExternal(const std::string& url, bool async)
 {
-	std::string escaped_url = escapeURL(url);
-	if (gViewerWindow)
+	LLSD payload;
+	payload["url"] = url;
+	LLNotificationsUtil::add( "WebLaunchExternalTarget", LLSD(), payload, boost::bind(on_load_url_external_response, _1, _2, async));
+}
+
+// static 
+bool on_load_url_external_response(const LLSD& notification, const LLSD& response, bool async )
+{
+	S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
+	if ( 0 == option )
 	{
-		gViewerWindow->getWindow()->spawnWebBrowser(escaped_url, async);
+		LLSD payload = notification["payload"];
+		std::string url = payload["url"].asString();
+		std::string escaped_url = LLWeb::escapeURL(url);
+		if (gViewerWindow)
+		{
+			gViewerWindow->getWindow()->spawnWebBrowser(escaped_url, async);
+		}
 	}
+	return false;
 }