diff --git a/src/com/android/browser/AddBookmarkFolder.java b/src/com/android/browser/AddBookmarkFolder.java
index 7fae373..e67d84c 100644
--- a/src/com/android/browser/AddBookmarkFolder.java
+++ b/src/com/android/browser/AddBookmarkFolder.java
@@ -75,7 +75,7 @@
 
     /* package */static final String EXTRA_IS_FOLDER = "is_folder";
 
-    private static final int MAX_CRUMBS_SHOWN = 2;
+    private static final int MAX_CRUMBS_SHOWN = 1;
 
     private long mOriginalFolder = -1;
 
diff --git a/src/com/android/browser/AddBookmarkPage.java b/src/com/android/browser/AddBookmarkPage.java
index 580723c..a7ded1e 100644
--- a/src/com/android/browser/AddBookmarkPage.java
+++ b/src/com/android/browser/AddBookmarkPage.java
@@ -85,7 +85,7 @@
     /* package */ static final String EXTRA_EDIT_BOOKMARK = "bookmark";
     /* package */ static final String EXTRA_IS_FOLDER = "is_folder";
 
-    private static final int MAX_CRUMBS_SHOWN = 2;
+    private static final int MAX_CRUMBS_SHOWN = 1;
 
     private final String LOGTAG = "Bookmarks";
 
diff --git a/src/com/android/browser/BreadCrumbView.java b/src/com/android/browser/BreadCrumbView.java
index d331b53..c3bff59 100644
--- a/src/com/android/browser/BreadCrumbView.java
+++ b/src/com/android/browser/BreadCrumbView.java
@@ -28,6 +28,7 @@
 import android.widget.ImageButton;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
+import android.widget.RelativeLayout;
 import android.widget.TextView;
 
 import java.util.ArrayList;
@@ -38,7 +39,7 @@
  * Use setController to receive callbacks from user interactions
  * Use pushView, popView, clear, and getTopData to change/access the view stack
  */
-public class BreadCrumbView extends LinearLayout implements OnClickListener {
+public class BreadCrumbView extends RelativeLayout implements OnClickListener {
     private static final int DIVIDER_PADDING = 12; // dips
     private static final int CRUMB_PADDING = 8; // dips
 
@@ -47,6 +48,8 @@
     }
 
     private ImageButton mBackButton;
+    private LinearLayout mCrumbLayout;
+    private LinearLayout mBackLayout;
     private Controller mController;
     private List<Crumb> mCrumbs;
     private boolean mUseBackButton;
@@ -86,6 +89,7 @@
     private void init(Context ctx) {
         mContext = ctx;
         setFocusable(true);
+        setGravity(Gravity.CENTER_VERTICAL);
         mUseBackButton = false;
         mCrumbs = new ArrayList<Crumb>();
         TypedArray a = mContext.obtainStyledAttributes(com.android.internal.R.styleable.Theme);
@@ -94,7 +98,8 @@
         float density = mContext.getResources().getDisplayMetrics().density;
         mDividerPadding = DIVIDER_PADDING * density;
         mCrumbPadding = (int) (CRUMB_PADDING * density);
-        addBackButton();
+        addCrumbLayout();
+        addBackLayout();
     }
 
     public void setUseBackButton(boolean useflag) {
@@ -169,27 +174,61 @@
 
     private void addBackButton() {
         mBackButton = new ImageButton(mContext);
-        mBackButton.setImageResource(R.drawable.ic_back_hierarchy_holo_dark);
+        mBackButton.setImageResource(R.drawable.icon_up);
         TypedValue outValue = new TypedValue();
         getContext().getTheme().resolveAttribute(
                 android.R.attr.selectableItemBackground, outValue, true);
         int resid = outValue.resourceId;
         mBackButton.setBackgroundResource(resid);
+        mBackButton.setPadding(mCrumbPadding, 0, mCrumbPadding, 0);
         mBackButton.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
                 LayoutParams.MATCH_PARENT));
         mBackButton.setOnClickListener(this);
-        mBackButton.setVisibility(View.GONE);
         mBackButton.setContentDescription(mContext.getText(
                 R.string.accessibility_button_bookmarks_folder_up));
-        addView(mBackButton, 0);
+        mBackLayout.addView(mBackButton);
+    }
+
+    private void addParentLabel() {
+        TextView tv = new TextView(mContext);
+        tv.setTextAppearance(mContext, android.R.style.TextAppearance_Medium);
+        tv.setPadding(mCrumbPadding, 0, 0, 0);
+        tv.setGravity(Gravity.CENTER_VERTICAL);
+        tv.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
+                LayoutParams.WRAP_CONTENT));
+        tv.setText("/ .../");
+        tv.setSingleLine();
+        tv.setVisibility(View.GONE);
+        mCrumbLayout.addView(tv);
+    }
+
+    private void addCrumbLayout() {
+        mCrumbLayout = new LinearLayout(mContext);
+        LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT,
+                LayoutParams.WRAP_CONTENT);
+        params.addRule(ALIGN_PARENT_LEFT, TRUE);
+        params.setMargins(0, 0, 4 * mCrumbPadding, 0);
+        mCrumbLayout.setLayoutParams(params);
+        mCrumbLayout.setVisibility(View.VISIBLE);
+        addParentLabel();
+        addView(mCrumbLayout);
+    }
+
+    private void addBackLayout() {
+        mBackLayout= new LinearLayout(mContext);
+        LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT,
+                LayoutParams.WRAP_CONTENT);
+        params.addRule(ALIGN_PARENT_RIGHT, TRUE);
+        mBackLayout.setLayoutParams(params);
+        mBackLayout.setVisibility(View.GONE);
+        addSeparator();
+        addBackButton();
+        addView(mBackLayout);
     }
 
     private void pushCrumb(Crumb crumb) {
-        if (mCrumbs.size() > 0) {
-            addSeparator();
-        }
         mCrumbs.add(crumb);
-        addView(crumb.crumbView);
+        mCrumbLayout.addView(crumb.crumbView);
         updateVisible();
         crumb.crumbView.setOnClickListener(this);
     }
@@ -197,7 +236,7 @@
     private void addSeparator() {
         View sep = makeDividerView();
         sep.setLayoutParams(makeDividerLayoutParams());
-        addView(sep);
+        mBackLayout.addView(sep);
     }
 
     private ImageView makeDividerView() {
@@ -207,11 +246,9 @@
         return result;
     }
 
-    private LayoutParams makeDividerLayoutParams() {
-        LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT,
-                LayoutParams.MATCH_PARENT);
-        params.topMargin = (int) mDividerPadding;
-        params.bottomMargin = (int) mDividerPadding;
+    private LinearLayout.LayoutParams makeDividerLayoutParams() {
+        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
+                LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);
         return params;
     }
 
@@ -219,17 +256,13 @@
         int n = mCrumbs.size();
         if (n > 0) {
             removeLastView();
-            if (!mUseBackButton || (n > 1)) {
-                // remove separator
-                removeLastView();
-            }
             mCrumbs.remove(n - 1);
             if (mUseBackButton) {
                 Crumb top = getTopCrumb();
                 if (top != null && top.canGoBack) {
-                    mBackButton.setVisibility(View.VISIBLE);
+                    mBackLayout.setVisibility(View.VISIBLE);
                 } else {
-                    mBackButton.setVisibility(View.GONE);
+                    mBackLayout.setVisibility(View.GONE);
                 }
             }
             updateVisible();
@@ -240,7 +273,7 @@
     }
 
     private void updateVisible() {
-        // start at index 1 (0 == back button)
+        // start at index 1 (0 == parent label)
         int childIndex = 1;
         if (mMaxVisible >= 0) {
             int invisibleCrumbs = size() - mMaxVisible;
@@ -248,22 +281,16 @@
                 int crumbIndex = 0;
                 while (crumbIndex < invisibleCrumbs) {
                     // Set the crumb to GONE.
-                    getChildAt(childIndex).setVisibility(View.GONE);
-                    childIndex++;
-                    // Each crumb is followed by a separator (except the last
-                    // one).  Also make it GONE
-                    if (getChildAt(childIndex) != null) {
-                        getChildAt(childIndex).setVisibility(View.GONE);
-                    }
+                    mCrumbLayout.getChildAt(childIndex).setVisibility(View.GONE);
                     childIndex++;
                     // Move to the next crumb.
                     crumbIndex++;
                 }
             }
-            // Make sure the last two are visible.
-            int childCount = getChildCount();
+            // Make sure the last is visible.
+            int childCount = mCrumbLayout.getChildCount();
             while (childIndex < childCount) {
-                getChildAt(childIndex).setVisibility(View.VISIBLE);
+                mCrumbLayout.getChildAt(childIndex).setVisibility(View.VISIBLE);
                 childIndex++;
             }
         } else {
@@ -274,16 +301,21 @@
         }
         if (mUseBackButton) {
             boolean canGoBack = getTopCrumb() != null ? getTopCrumb().canGoBack : false;
-            mBackButton.setVisibility(canGoBack ? View.VISIBLE : View.GONE);
+            mBackLayout.setVisibility(canGoBack ? View.VISIBLE : View.GONE);
+            if (canGoBack) {
+                mCrumbLayout.getChildAt(0).setVisibility(VISIBLE);
+            } else {
+                mCrumbLayout.getChildAt(0).setVisibility(GONE);
+            }
         } else {
-            mBackButton.setVisibility(View.GONE);
+            mBackLayout.setVisibility(View.GONE);
         }
     }
 
     private void removeLastView() {
-        int ix = getChildCount();
+        int ix = mCrumbLayout.getChildCount();
         if (ix > 0) {
-            removeViewAt(ix-1);
+            mCrumbLayout.removeViewAt(ix-1);
         }
     }
 
diff --git a/src/com/android/browser/view/BookmarkExpandableView.java b/src/com/android/browser/view/BookmarkExpandableView.java
index 7badaf5..5c0f030 100644
--- a/src/com/android/browser/view/BookmarkExpandableView.java
+++ b/src/com/android/browser/view/BookmarkExpandableView.java
@@ -417,7 +417,7 @@
                         mInflater.inflate(R.layout.bookmarks_header, null);
                 crumbs.setController(BookmarkExpandableView.this);
                 crumbs.setUseBackButton(true);
-                crumbs.setMaxVisible(2);
+                crumbs.setMaxVisible(1);
                 String bookmarks = mContext.getString(R.string.bookmarks);
                 crumbs.pushView(bookmarks, false,
                         BrowserContract.Bookmarks.CONTENT_URI_DEFAULT_FOLDER);
