diff --git a/res/values/strings.xml b/res/values/strings.xml
index fdbf17d..3dac55d 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -784,7 +784,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_privacy_policy">Privacy policy</string>
diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index c3befc8..f4c5dc9 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";
-    private static final String INCOGNITO_URI = "chrome://incognito";
+    public 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/Tab.java b/src/com/android/browser/Tab.java
index a65fda5..d3621ef 100644
--- a/src/com/android/browser/Tab.java
+++ b/src/com/android/browser/Tab.java
@@ -228,11 +228,10 @@
 
         PageState(Context c, boolean incognito) {
             mIncognito = incognito;
+            mOriginalUrl = mUrl = "";
             if (mIncognito) {
-                mOriginalUrl = mUrl = "chrome://incognito";
                 mTitle = c.getString(R.string.new_incognito_tab);
             } else {
-                mOriginalUrl = mUrl = "";
                 mTitle = c.getString(R.string.new_tab);
             }
             mSecurityState = SecurityState.SECURITY_STATE_NOT_SECURE;
@@ -240,7 +239,10 @@
 
         PageState(Context c, boolean incognito, String url, Bitmap favicon) {
             mIncognito = incognito;
-            mOriginalUrl = mUrl = url;
+            if (mIncognito)
+                mOriginalUrl = mUrl = "";
+            else
+                mOriginalUrl = mUrl = url;
             mSecurityState = SecurityState.SECURITY_STATE_NOT_SECURE;
             mFavicon = favicon;
         }
@@ -506,7 +508,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);
@@ -640,13 +647,20 @@
     private void syncCurrentState(WebView view, String url) {
         // Sync state (in case of stop/timeout)
 
+
+
         if (mReceivedError) {
             mCurrentState.mUrl =  url;
             mCurrentState.mOriginalUrl = url;
-        } else {
-             mCurrentState.mUrl =  view.getUrl();
-             mCurrentState.mOriginalUrl = view.getOriginalUrl();
-             mCurrentState.mFavicon = view.getFavicon();
+        } else if (view.isPrivateBrowsingEnabled() &&
+                   !TextUtils.isEmpty(url) &&
+                   url.contains(Controller.INCOGNITO_URI)) {
+            mCurrentState.mUrl = mCurrentState.mOriginalUrl = "";
+        }
+        else {
+            mCurrentState.mUrl = view.getUrl();
+            mCurrentState.mOriginalUrl = view.getOriginalUrl();
+            mCurrentState.mFavicon = view.getFavicon();
         }
 
         if (mCurrentState.mUrl == null) {
@@ -1899,7 +1913,8 @@
     public void loadUrl(String url, Map<String, String> headers) {
         if (mMainView != null) {
             mPageLoadProgress = INITIAL_PROGRESS;
-            mCurrentState = new PageState(mContext, false, url, null);
+            mCurrentState = new PageState(
+                                mContext, mMainView.isPrivateBrowsingEnabled(), url, null);
             mMainView.loadUrl(url, headers);
         }
     }
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)) {
