diff --git a/res/values/strings.xml b/res/values/strings.xml
index bab0f6c..4b2021f 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -1186,7 +1186,6 @@
     <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_eula_url" translatable="False"></string>
diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index c546f48..54382d8 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -133,7 +133,7 @@
     private static final String LOGTAG = "Controller";
     private static final String SEND_APP_ID_EXTRA =
         "android.speech.extras.SEND_APPLICATION_ID_EXTRA";
-    private static final String INCOGNITO_URI = "chrome://incognito";
+    public static final String INCOGNITO_URI = "browser://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 7de1a5d..8d34f13 100644
--- a/src/com/android/browser/NavigationBarBase.java
+++ b/src/com/android/browser/NavigationBarBase.java
@@ -97,7 +97,7 @@
     private Tab.SecurityState mSecurityState = Tab.SecurityState.SECURITY_STATE_NOT_SECURE;
 
     private static final String noSitePrefs[] = {
-            "chrome://",
+            "browser://",
             "about:",
             "content:",
     };
@@ -523,7 +523,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(text);
                 return;
diff --git a/src/com/android/browser/Tab.java b/src/com/android/browser/Tab.java
index 36aae4c..a600fd3 100644
--- a/src/com/android/browser/Tab.java
+++ b/src/com/android/browser/Tab.java
@@ -234,7 +234,7 @@
         PageState(Context c, boolean incognito) {
             mIncognito = incognito;
             if (mIncognito) {
-                mOriginalUrl = mUrl = "chrome://incognito";
+                mOriginalUrl = mUrl = Controller.INCOGNITO_URI;
                 mTitle = c.getString(R.string.new_incognito_tab);
             } else {
                 mOriginalUrl = mUrl = "";
@@ -607,7 +607,12 @@
         public WebResourceResponse shouldInterceptRequest(WebView view,
                 String url) {
             //intercept if opening a new incognito tab - show the incognito welcome page
-            if (url.startsWith("chrome://incognito")) {
+
+            // 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) ) {
                 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 4d3dee4..e5fd17e 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|chrome):\\/\\/" +
+            "(?:http|https|file|browser):\\/\\/" +
             "|(?:inline|data|about|javascript):" +
             ")" +
             "(.*)" );
@@ -206,8 +206,7 @@
         if (inUrl == null) {
             return "";
         }
-        if (inUrl.startsWith("content:")
-                || inUrl.startsWith("browser:")) {
+        if (inUrl.startsWith("content:")) {
             return "";
         }
         return inUrl;
diff --git a/src/com/android/browser/preferences/LegalPreferencesFragment.java b/src/com/android/browser/preferences/LegalPreferencesFragment.java
index ce75630..23b4163 100644
--- a/src/com/android/browser/preferences/LegalPreferencesFragment.java
+++ b/src/com/android/browser/preferences/LegalPreferencesFragment.java
@@ -48,6 +48,7 @@
 public class LegalPreferencesFragment extends PreferenceFragment
                             implements OnPreferenceClickListener {
 
+    private static final String creditsUrl = "browser://credits";
     PreferenceScreen mHeadPref = null;
     String mEulaUrl = "";
     String mPrivacyPolicyUrl = "";
@@ -101,8 +102,7 @@
         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, getResources()
-                    .getString(R.string.swe_open_source_license_url));
+            i.putExtra(LegalPreviewActivity.URL_INTENT_EXTRA, creditsUrl);
             startActivity(i);
             return true;
         } else if(preference.getKey().equals(PreferenceKeys.PREF_LEGAL_EULA)) {
