diff --git a/res/values/strings.xml b/res/values/strings.xml
index 3dac55d..fdbf17d 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -784,6 +784,7 @@
     <string name="feedback">Feedback</string>
     <string name="swe_legal">Legal information</string>
     <string name="swe_open_source_licenses">Open source licenses</string>
+    <string name="swe_open_source_license_url" translatable="False">chrome://credits</string>
     <string name="swe_pref_legal_info_summary">Copyright (c) 2015, The Linux Foundation. All rights reserved.</string>
     <string name="swe_eula">End user licenses agreement</string>
     <string name="swe_privacy_policy">Privacy policy</string>
diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index 230e49f..c3befc8 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -132,7 +132,7 @@
     private static final String LOGTAG = "Controller";
     private static final String SEND_APP_ID_EXTRA =
         "android.speech.extras.SEND_APPLICATION_ID_EXTRA";
-    public static final String INCOGNITO_URI = "browser://incognito";
+    private static final String INCOGNITO_URI = "chrome://incognito";
     public static final String EXTRA_REQUEST_CODE = "_fake_request_code_";
     public static final String EXTRA_RESULT_CODE = "_fake_result_code_";
 
diff --git a/src/com/android/browser/NavigationBarBase.java b/src/com/android/browser/NavigationBarBase.java
index 9087991..fd8869d 100644
--- a/src/com/android/browser/NavigationBarBase.java
+++ b/src/com/android/browser/NavigationBarBase.java
@@ -95,7 +95,7 @@
     protected int mTrustLevel = SiteTileView.TRUST_UNKNOWN;
 
     private static final String noSitePrefs[] = {
-            "browser://",
+            "chrome://",
             "about:",
             "content:",
     };
@@ -513,7 +513,7 @@
             Tab t = mBaseUi.getActiveTab();
             // Only shortcut javascript URIs for now, as there is special
             // logic in UrlHandler for other schemas
-            if (url != null && t != null &&  url.startsWith("javascript:")) {
+            if (url != null && t != null && url.startsWith("javascript:")) {
                 mUiController.loadUrl(t, url);
                 setDisplayTitle(null, text);
                 return;
diff --git a/src/com/android/browser/Tab.java b/src/com/android/browser/Tab.java
index e18cb2a..a65fda5 100644
--- a/src/com/android/browser/Tab.java
+++ b/src/com/android/browser/Tab.java
@@ -229,7 +229,7 @@
         PageState(Context c, boolean incognito) {
             mIncognito = incognito;
             if (mIncognito) {
-                mOriginalUrl = mUrl = Controller.INCOGNITO_URI;
+                mOriginalUrl = mUrl = "chrome://incognito";
                 mTitle = c.getString(R.string.new_incognito_tab);
             } else {
                 mOriginalUrl = mUrl = "";
@@ -506,12 +506,7 @@
         public WebResourceResponse shouldInterceptRequest(WebView view,
                 String url) {
             //intercept if opening a new incognito tab - show the incognito welcome page
-
-            // show only incognito content and webview has private
-            // and cannot go back(only supported if explicit from UI )
-            if (view.isPrivateBrowsingEnabled() &&
-                !view.canGoBack() &&
-                url.startsWith(Controller.INCOGNITO_URI) ) {
+            if (url.startsWith("chrome://incognito")) {
                 Resources resourceHandle = mContext.getResources();
                 InputStream inStream = resourceHandle.openRawResource(
                         com.android.browser.R.raw.incognito_mode_start_page);
diff --git a/src/com/android/browser/UrlUtils.java b/src/com/android/browser/UrlUtils.java
index e5fd17e..4d3dee4 100755
--- a/src/com/android/browser/UrlUtils.java
+++ b/src/com/android/browser/UrlUtils.java
@@ -47,7 +47,7 @@
     static final Pattern ACCEPTED_URI_SCHEMA = Pattern.compile(
             "(?i)" + // switch on case insensitive matching
             "(" +    // begin group for schema
-            "(?:http|https|file|browser):\\/\\/" +
+            "(?:http|https|file|chrome):\\/\\/" +
             "|(?:inline|data|about|javascript):" +
             ")" +
             "(.*)" );
@@ -206,7 +206,8 @@
         if (inUrl == null) {
             return "";
         }
-        if (inUrl.startsWith("content:")) {
+        if (inUrl.startsWith("content:")
+                || inUrl.startsWith("browser:")) {
             return "";
         }
         return inUrl;
diff --git a/src/com/android/browser/preferences/LegalPreferencesFragment.java b/src/com/android/browser/preferences/LegalPreferencesFragment.java
index 23b4163..ce75630 100644
--- a/src/com/android/browser/preferences/LegalPreferencesFragment.java
+++ b/src/com/android/browser/preferences/LegalPreferencesFragment.java
@@ -48,7 +48,6 @@
 public class LegalPreferencesFragment extends PreferenceFragment
                             implements OnPreferenceClickListener {
 
-    private static final String creditsUrl = "browser://credits";
     PreferenceScreen mHeadPref = null;
     String mEulaUrl = "";
     String mPrivacyPolicyUrl = "";
@@ -102,7 +101,8 @@
         Bundle b = new Bundle();
         if(preference.getKey().equals(PreferenceKeys.PREF_LEGAL_CREDITS)) {
             Intent i = new Intent(getActivity(), LegalPreviewActivity.class);
-            i.putExtra(LegalPreviewActivity.URL_INTENT_EXTRA, creditsUrl);
+            i.putExtra(LegalPreviewActivity.URL_INTENT_EXTRA, getResources()
+                    .getString(R.string.swe_open_source_license_url));
             startActivity(i);
             return true;
         } else if(preference.getKey().equals(PreferenceKeys.PREF_LEGAL_EULA)) {
