diff --git a/src/com/android/browser/BaseUi.java b/src/com/android/browser/BaseUi.java
index 026e661..d1c2a11 100644
--- a/src/com/android/browser/BaseUi.java
+++ b/src/com/android/browser/BaseUi.java
@@ -702,6 +702,7 @@
     private void updateTabSecurityState(Tab t) {
         if (t != null && t.inForeground()) {
             mNavigationBar.setSecurityState(t.getSecurityState());
+            setUrlTitle(t);
         }
     }
 
@@ -712,7 +713,7 @@
             title = url;
         }
         if (tab.inForeground()) {
-            mNavigationBar.setDisplayTitle(url);
+            mNavigationBar.setDisplayTitle(title, url);
         }
     }
 
diff --git a/src/com/android/browser/NavigationBarBase.java b/src/com/android/browser/NavigationBarBase.java
index 486c202..9087991 100644
--- a/src/com/android/browser/NavigationBarBase.java
+++ b/src/com/android/browser/NavigationBarBase.java
@@ -58,7 +58,6 @@
 import java.net.URL;
 
 import org.codeaurora.net.NetworkServices;
-import org.codeaurora.swe.Engine;
 import org.codeaurora.swe.WebRefiner;
 import org.codeaurora.swe.WebView;
 import org.codeaurora.swe.util.ColorUtils;
@@ -93,6 +92,8 @@
     private static final int WEBREFINER_COUNTER_MSG_DELAY = 3000;
     private Handler mHandler;
 
+    protected int mTrustLevel = SiteTileView.TRUST_UNKNOWN;
+
     private static final String noSitePrefs[] = {
             "browser://",
             "about:",
@@ -165,21 +166,28 @@
     public void setSecurityState(Tab.SecurityState securityState) {
         switch (securityState) {
             case SECURITY_STATE_SECURE:
-                mFaviconTile.setTrustLevel(SiteTileView.TRUST_TRUSTED);
+                mTrustLevel = SiteTileView.TRUST_TRUSTED;
                 mFaviconTile.setBadgeHasCertIssues(false);
                 break;
             case SECURITY_STATE_MIXED:
-                mFaviconTile.setTrustLevel(SiteTileView.TRUST_UNTRUSTED);
+                mTrustLevel = SiteTileView.TRUST_UNTRUSTED;
                 mFaviconTile.setBadgeHasCertIssues(true);
+                mTitleBar.showTopControls(false);
                 break;
             case SECURITY_STATE_BAD_CERTIFICATE:
-                mFaviconTile.setTrustLevel(SiteTileView.TRUST_AVOID);
+                mTrustLevel = SiteTileView.TRUST_AVOID;
                 mFaviconTile.setBadgeHasCertIssues(true);
+                mTitleBar.showTopControls(false);
                 break;
             case SECURITY_STATE_NOT_SECURE:
             default:
-                mFaviconTile.setTrustLevel(SiteTileView.TRUST_UNKNOWN);
+                mTrustLevel = SiteTileView.TRUST_UNKNOWN;
         }
+        mFaviconTile.setTrustLevel(mTrustLevel);
+    }
+
+    public int getTrustLevel() {
+        return mTrustLevel;
     }
 
     public static int adjustColor(int color, float hueMultiplier,
@@ -437,7 +445,7 @@
             if (mUrlInput.getText().length() == 0) {
                 Tab currentTab = mUiController.getTabControl().getCurrentTab();
                 if (currentTab != null) {
-                    setDisplayTitle(currentTab.getUrl());
+                    setDisplayTitle(currentTab.getTitle(), currentTab.getUrl());
                 }
             }
         }
@@ -458,10 +466,18 @@
         }
     }
 
-    void setDisplayTitle(String title) {
+    void setDisplayTitle(String title, String url) {
         if (!isEditingUrl()) {
-            if (!title.equals(mUrlInput.getText().toString())) {
-                mUrlInput.setText(title, false);
+            if (!TextUtils.isEmpty(title)) {
+                if (mTrustLevel == SiteTileView.TRUST_TRUSTED) {
+                    if (!title.equals(mUrlInput.getText().toString())) {
+                        mUrlInput.setText(title, false);
+                    }
+                    return;
+                }
+            }
+            if (!url.equals(mUrlInput.getText().toString())) {
+                mUrlInput.setText(url, false);
             }
         }
     }
@@ -499,21 +515,21 @@
             // logic in UrlHandler for other schemas
             if (url != null && t != null &&  url.startsWith("javascript:")) {
                 mUiController.loadUrl(t, url);
-                setDisplayTitle(text);
+                setDisplayTitle(null, text);
                 return;
             }
 
             // add for carrier wap2estore feature
             if (url != null && t != null && wap2estore && isEstoreTypeUrl(url)) {
                 if (handleEstoreTypeUrl(url)) {
-                    setDisplayTitle(text);
+                    setDisplayTitle(null, text);
                     return;
                 }
             }
             // add for rtsp scheme feature
             if (url != null && t != null && isRtspTypeUrl(url)) {
                 if (handleRtspTypeUrl(url)) {
-                    setDisplayTitle(text);
+                    setDisplayTitle(null, text);
                     return;
                 }
             }
@@ -537,7 +553,7 @@
             i.putExtra("source", appData);
         }
         mUiController.handleNewIntent(i);
-        setDisplayTitle(text);
+        setDisplayTitle(null, text);
     }
 
     private boolean isMakeCallTypeUrl(String url) {
@@ -648,7 +664,7 @@
             public void run() {
                 clearFocus();
                 if (currentTab != null) {
-                    setDisplayTitle(currentTab.getUrl());
+                    setDisplayTitle(currentTab.getTitle(), currentTab.getUrl());
                 }
             }
         });
@@ -757,6 +773,7 @@
                             mFaviconTile.setVisibility(View.GONE);
                             mMagnify.setVisibility(View.VISIBLE);
                         }
+                        setDisplayTitle(currentTab.getTitle(), currentTab.getUrl());
                     }
                     mUiController.setWindowDimming(0.0f);
                 }
@@ -769,6 +786,13 @@
                 mMore.setVisibility(View.GONE);
                 if (mUiController != null) {
                     mUiController.setWindowDimming(0.75f);
+                    if (mTrustLevel == SiteTileView.TRUST_TRUSTED) {
+                        Tab currentTab = mUiController.getCurrentTab();
+                        if (currentTab != null) {
+                            mUrlInput.setText(currentTab.getUrl(), false);
+                            mUrlInput.selectAll();
+                        }
+                    }
                 }
                 break;
             case STATE_EDITED:
diff --git a/src/com/android/browser/NavigationBarPhone.java b/src/com/android/browser/NavigationBarPhone.java
index 23df7fc..5fa093b 100644
--- a/src/com/android/browser/NavigationBarPhone.java
+++ b/src/com/android/browser/NavigationBarPhone.java
@@ -93,22 +93,21 @@
     /**
      * Update the text displayed in the title bar.
      * @param title String to display.  If null, the new tab string will be
-     *      shown.
+     * @param url
      */
     @Override
-    void setDisplayTitle(String title) {
+    void setDisplayTitle(String title, String url) {
         mUrlInput.setTag(title);
         if (!isEditingUrl()) {
-           // add for carrier requirement - show title from native instead of url
-            Tab currentTab = mUiController.getTabControl().getCurrentTab();
-            if (BrowserConfig.getInstance(getContext())
-                    .hasFeature(BrowserConfig.Feature.TITLE_IN_URL_BAR) &&
-                    currentTab != null && currentTab.getTitle() != null) {
-                mUrlInput.setText(currentTab.getTitle(), false);
-            } else if (title == null) {
+            // add for carrier requirement - show title from native instead of url
+            if ((BrowserConfig.getInstance(getContext())
+                    .hasFeature(BrowserConfig.Feature.TITLE_IN_URL_BAR) ||
+                    mTrustLevel == SiteTileView.TRUST_TRUSTED) && title != null) {
+                mUrlInput.setText(title, false);
+            } else if (url == null) {
                 mUrlInput.setText(R.string.new_tab);
             } else {
-                mUrlInput.setText(UrlUtils.stripUrl(title), false);
+                mUrlInput.setText(UrlUtils.stripUrl(url), false);
             }
             mUrlInput.setSelection(0);
         }
@@ -127,7 +126,7 @@
     public void onFocusChange(View view, boolean hasFocus) {
         if (view == mUrlInput && !hasFocus) {
             Tab currentTab = mUiController.getTabControl().getCurrentTab();
-            setDisplayTitle(currentTab.getUrl());
+            setDisplayTitle(currentTab.getTitle(), currentTab.getUrl());
         }
         super.onFocusChange(view, hasFocus);
     }
diff --git a/src/com/android/browser/TitleBar.java b/src/com/android/browser/TitleBar.java
index 93f655d..fd19a41 100644
--- a/src/com/android/browser/TitleBar.java
+++ b/src/com/android/browser/TitleBar.java
@@ -187,7 +187,8 @@
     }
 
     protected void enableTopControls(boolean animate) {
-        if (mIsFixedTitleBar)
+        if (mIsFixedTitleBar || mNavBar.getTrustLevel() == SiteTileView.TRUST_AVOID
+                || mNavBar.getTrustLevel() == SiteTileView.TRUST_UNTRUSTED)
             return;
         Tab tab = mBaseUi.getActiveTab();
         WebView view = tab != null ? tab.getWebView() : null;
