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)) {
