diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 2e49357d6f5f11687b7ad2172c64c56aaaa27dd9..b92751c4489086531d0d8e1fddfdd0babb5ccb38 100755
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -13256,7 +13256,7 @@
       <key>Value</key>
       <string>Default</string>
     </map>
-    <key>UseExternalBrowser</key>
+    <key>UseExternalBrowser</key> <!-- deprecated (see MAINT-4127) -->
     <map>
       <key>Comment</key>
       <string>Use default browser when opening web pages instead of in-world browser.</string>
@@ -13267,6 +13267,17 @@
       <key>Value</key>
       <boolean>1</boolean>
     </map>
+    <key>PreferredBrowserBehavior</key>
+    <map>
+      <key>Comment</key>
+      <string>Use system browser for any links (0), use builtin browser for SL links and system one for others (1) or use builtin browser only (2).</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>U32</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>UseFreezeFrame</key>
     <map>
       <key>Comment</key>
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 8b9b9ed172594a9466bb968505ebe71d9b641668..01e6c8a5d02afca060dcc93a926414f47368e855 100755
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -6196,7 +6196,7 @@ class LLPromptShowURL : public view_listener_t
 			std::string alert = param.substr(0, offset);
 			std::string url = param.substr(offset+1);
 
-			if(gSavedSettings.getBOOL("UseExternalBrowser"))
+			if (LLWeb::useExternalBrowser(url))
 			{ 
     			LLSD payload;
     			payload["url"] = url;
@@ -7816,7 +7816,7 @@ void handle_web_content_test(const LLSD& param)
 void handle_show_url(const LLSD& param)
 {
 	std::string url = param.asString();
-	if(gSavedSettings.getBOOL("UseExternalBrowser"))
+	if (LLWeb::useExternalBrowser(url))
 	{
 		LLWeb::loadURLExternal(url);
 	}
diff --git a/indra/newview/llweb.cpp b/indra/newview/llweb.cpp
index 665671a38f46e2ece0c128fd5c3a4ce59fce1f82..0312972a22f0c3326d4db338c8c3a8d3ba2ca915 100755
--- a/indra/newview/llweb.cpp
+++ b/indra/newview/llweb.cpp
@@ -50,6 +50,8 @@
 #include "llviewerwindow.h"
 #include "llnotificationsutil.h"
 
+#include <boost/regex.hpp>
+
 bool on_load_url_external_response(const LLSD& notification, const LLSD& response, bool async );
 
 
@@ -87,7 +89,8 @@ void LLWeb::loadURL(const std::string& url, const std::string& target, const std
 		// Force load in the internal browser, as if with a blank target.
 		loadURLInternal(url, "", uuid);
 	}
-	else if (gSavedSettings.getBOOL("UseExternalBrowser") || (target == "_external"))
+
+	else if (useExternalBrowser(url) || (target == "_external"))
 	{
 		loadURLExternal(url);
 	}
@@ -225,3 +228,19 @@ std::string LLWeb::expandURLSubstitutions(const std::string &url,
 
 	return LLWeb::escapeURL(expanded_url);
 }
+
+//static
+bool LLWeb::useExternalBrowser(const std::string &url)
+{
+	if (gSavedSettings.getU32("PreferredBrowserBehavior") == BROWSER_EXTERNAL_ONLY)
+	{
+		return true;
+	}
+	else if (gSavedSettings.getU32("PreferredBrowserBehavior") == BROWSER_INT_LL_EXT_OTHERS)
+	{
+		boost::regex pattern = boost::regex("\\b(lindenlab.com|secondlife.com)\\b", boost::regex::perl|boost::regex::icase);
+		boost::match_results<std::string::const_iterator> matches;
+		return !(boost::regex_search(url, matches, pattern));	
+	}
+	return false;
+}
diff --git a/indra/newview/llweb.h b/indra/newview/llweb.h
index 0b95f664d681f0ec510c5ddfd1296658f5590ee0..7c90badbfe643eabae9349d16489e59e3f3c90ac 100755
--- a/indra/newview/llweb.h
+++ b/indra/newview/llweb.h
@@ -40,6 +40,13 @@
 class LLWeb
 {
 public:
+	enum PreferredBrowser
+	{
+		BROWSER_EXTERNAL_ONLY = 0,
+		BROWSER_INT_LL_EXT_OTHERS = 1,
+		BROWSER_INTERNAL_ONLY = 2
+	};
+
 	static void initClass();
 	
 	/// Load the given url in the operating system's web browser, async if we want to return immediately
@@ -57,6 +64,7 @@ class LLWeb
 	/// Expands various strings like [LANG], [VERSION], etc. in a URL
 	static std::string expandURLSubstitutions(const std::string &url,
 											  const LLSD &default_subs);
+	static bool useExternalBrowser(const std::string &url);
 };
 
 #endif
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_setup.xml b/indra/newview/skins/default/xui/en/panel_preferences_setup.xml
index dd4533ae74f83acc450450698968e228645fcf35..1e9a1aa27ca08baaa0d03dbd58f2073fe733d93b 100755
--- a/indra/newview/skins/default/xui/en/panel_preferences_setup.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_setup.xml
@@ -106,7 +106,7 @@
          width="300">
     Web:
   </text>
-  <radio_group
+ <!-- <radio_group
    control_name="UseExternalBrowser"
    draw_border="false"
    follows="top|left"
@@ -136,6 +136,48 @@
       tool_tip="Use the built-in web browser for help, web links, etc. This browser opens as a new window inside [APP_NAME]."
       top_delta="20"
       width="480" />
+  </radio_group> -->
+
+  <radio_group
+   control_name="PreferredBrowserBehavior"
+   draw_border="false"
+   follows="left|top"
+   height="60"
+   layout="topleft"
+   left_delta="50"
+   name="preferred_browser_behavior"
+   top_pad="0"
+   width="480">
+    <radio_item
+      height="20"
+      label="Use my browser (Chrome, Firefox, IE) for all links"
+      layout="topleft"
+      left="0"
+      name="internal"
+      value="0"
+      tool_tip="Use the default system web browser for help, web links, etc. Not recommended if running full screen."
+      top="0"
+      width="480" />
+    <radio_item
+      height="20"
+      label="Use built-in browser for Second Life links only"
+      layout="topleft"
+      left_delta="0"
+      name="external"
+      value="1"      
+      tool_tip="Use the default system web browser for help, web links, etc. Builtin browser will be used only for LindenLab/SecondLife links."
+      top_delta="20"
+      width="480" />
+    <radio_item
+      height="20"
+      label="Use built-in browser for all links"
+      layout="topleft"
+      left="0"
+      name="internal"
+      value="2"
+      tool_tip="Use the built-in web browser for help, web links, etc. This browser opens as a new window inside [APP_NAME]."
+      top_delta="20"
+      width="480" />
   </radio_group>
 
   <check_box