diff --git a/src/com/android/browser/AddBookmarkPage.java b/src/com/android/browser/AddBookmarkPage.java
index 1f14629..c230858 100644
--- a/src/com/android/browser/AddBookmarkPage.java
+++ b/src/com/android/browser/AddBookmarkPage.java
@@ -91,10 +91,12 @@
     private View mFolderSelector;
     private EditText mFolderNamer;
     private View mAddNewFolder;
+    private View mAddSeparator;
     private long mCurrentFolder = 0;
     private FolderAdapter mAdapter;
     private BreadCrumbView mCrumbs;
-    private View mFakeTitleBar;
+    private TextView mFakeTitle;
+    private View mCrumbHolder;
 
     private static class Folder {
         String Name;
@@ -187,8 +189,8 @@
                     // User has selected a folder.  Go back to the opening page
                     mFolderSelector.setVisibility(View.GONE);
                     mDefaultView.setVisibility(View.VISIBLE);
-                    mCrumbs.setVisibility(View.GONE);
-                    mFakeTitleBar.setVisibility(View.VISIBLE);
+                    mCrumbHolder.setVisibility(View.GONE);
+                    mFakeTitle.setVisibility(View.VISIBLE);
                 }
             } else if (save()) {
                 finish();
@@ -197,6 +199,7 @@
             if (mFolderNamer.getVisibility() == View.VISIBLE) {
                 mFolderNamer.setVisibility(View.GONE);
                 mAddNewFolder.setVisibility(View.VISIBLE);
+                mAddSeparator.setVisibility(View.VISIBLE);
             } else {
                 finish();
             }
@@ -207,6 +210,7 @@
             mFolderNamer.setText(R.string.new_folder);
             mFolderNamer.requestFocus();
             mAddNewFolder.setVisibility(View.GONE);
+            mAddSeparator.setVisibility(View.GONE);
             getInputMethodManager().showSoftInput(mFolderNamer,
                     InputMethodManager.SHOW_IMPLICIT);
         }
@@ -219,6 +223,7 @@
             descendInto(name, id);
             mFolderNamer.setVisibility(View.GONE);
             mAddNewFolder.setVisibility(View.VISIBLE);
+            mAddSeparator.setVisibility(View.VISIBLE);
             getInputMethodManager().hideSoftInputFromWindow(
                     mFolderNamer.getWindowToken(), 0);
         }
@@ -244,8 +249,10 @@
     private void switchToFolderSelector() {
         mDefaultView.setVisibility(View.GONE);
         mFolderSelector.setVisibility(View.VISIBLE);
-        mCrumbs.setVisibility(View.VISIBLE);
-        mFakeTitleBar.setVisibility(View.GONE);
+        mCrumbHolder.setVisibility(View.VISIBLE);
+        mFakeTitle.setVisibility(View.GONE);
+        mAddNewFolder.setVisibility(View.VISIBLE);
+        mAddSeparator.setVisibility(View.VISIBLE);
     }
 
     private void descendInto(String foldername, long id) {
@@ -396,8 +403,7 @@
             if (b != null) {
                 mMap = b;
                 mEditingExisting = true;
-                TextView fakeTitle = (TextView) findViewById(R.id.fake_title);
-                fakeTitle.setText(R.string.edit_bookmark);
+                mFakeTitle.setText(R.string.edit_bookmark);
                 if (!DEBUG_CRASH) {
                     setTitle(R.string.bookmark_this_page);
                 }
@@ -442,14 +448,16 @@
 
         mAddNewFolder = findViewById(R.id.add_new_folder);
         mAddNewFolder.setOnClickListener(this);
+        mAddSeparator = findViewById(R.id.add_divider);
 
         mCrumbs = (BreadCrumbView) findViewById(R.id.crumbs);
         mCrumbs.setUseBackButton(true);
         mCrumbs.setController(this);
         mCrumbs.pushView(getString(R.string.bookmarks), false,
                 BrowserProvider2.FIXED_ID_ROOT);
+        mCrumbHolder = findViewById(R.id.crumb_holder);
 
-        mFakeTitleBar = findViewById(R.id.fake_title_bar);
+        mFakeTitle = (TextView) findViewById(R.id.fake_title);
 
         mAdapter = new FolderAdapter(this);
         ListView list = (ListView) findViewById(R.id.list);
diff --git a/src/com/android/browser/BreadCrumbView.java b/src/com/android/browser/BreadCrumbView.java
index e501703..4939b48 100644
--- a/src/com/android/browser/BreadCrumbView.java
+++ b/src/com/android/browser/BreadCrumbView.java
@@ -17,6 +17,7 @@
 package com.android.browser;
 
 import android.content.Context;
+import android.graphics.drawable.Drawable;
 import android.text.TextUtils;
 import android.util.AttributeSet;
 import android.view.Gravity;
@@ -45,6 +46,7 @@
     private Controller mController;
     private List<Crumb> mCrumbs;
     private boolean mUseBackButton;
+    private Drawable mSeparatorDrawable;
 
     /**
      * @param context
@@ -76,6 +78,8 @@
     private void init(Context ctx) {
         mUseBackButton = false;
         mCrumbs = new ArrayList<Crumb>();
+        mSeparatorDrawable = ctx.getResources().getDrawable(
+                R.drawable.crumb_divider);
     }
 
     public void setUseBackButton(boolean useflag) {
@@ -164,7 +168,7 @@
 
     private void addSeparator() {
         ImageView sep = new ImageView(mContext);
-        sep.setImageResource(R.drawable.crumb_divider);
+        sep.setImageDrawable(mSeparatorDrawable);
         sep.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
                 LayoutParams.MATCH_PARENT));
         addView(sep);
@@ -221,6 +225,39 @@
             notifyController();
         }
     }
+    @Override
+    public int getBaseline() {
+        int ix = getChildCount();
+        if (ix > 0) {
+            // If there is at least one crumb, the baseline will be its
+            // baseline.
+            return getChildAt(ix-1).getBaseline();
+        }
+        return super.getBaseline();
+    }
+
+    @Override
+    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+        int height = mSeparatorDrawable.getIntrinsicHeight();
+        if (mMeasuredHeight < height) {
+            // This should only be an issue if there are currently no separators
+            // showing; i.e. if there is one crumb and no back button.
+            int mode = View.MeasureSpec.getMode(heightMeasureSpec);
+            switch(mode) {
+                case View.MeasureSpec.AT_MOST:
+                    if (View.MeasureSpec.getSize(heightMeasureSpec) < height) {
+                        return;
+                    }
+                    break;
+                case View.MeasureSpec.EXACTLY:
+                    return;
+                default:
+                    break;
+            }
+            setMeasuredDimension(mMeasuredWidth, height);
+        }
+    }
 
     class Crumb {
 
