diff --git a/res/layout/browser_add_bookmark.xml b/res/layout/browser_add_bookmark.xml
index 7e518dd..58b7a6b 100644
--- a/res/layout/browser_add_bookmark.xml
+++ b/res/layout/browser_add_bookmark.xml
@@ -30,8 +30,6 @@
             android:layout_alignParentLeft="true"
             android:layout_toLeftOf="@+id/add_divider"
             />
-        <!-- FIXME: The drawable does not line up properly. We may also want a
-            different asset in the final version. -->
         <TextView
             android:id="@+id/add_new_folder"
             android:layout_width="wrap_content"
@@ -39,6 +37,7 @@
             android:layout_alignParentRight="true"
             android:layout_alignBaseline="@+id/crumbs"
             android:drawableLeft="@drawable/ic_add_string"
+            android:gravity="center_vertical"
             android:text="@string/new_folder"
             android:visibility="gone"
             android:textAppearance="?android:attr/textAppearanceMedium" />
@@ -49,14 +48,13 @@
             android:src="@drawable/crumb_divider"
             />
     </RelativeLayout>
-    <!-- FIXME: The drawable does not line up properly. We may also want a
-        different asset in the final version. -->
     <TextView android:id="@+id/fake_title"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:drawableLeft="@drawable/ic_list_bookmark"
         android:text="@string/bookmark_this_page"
         android:layout_gravity="left"
+        android:gravity="center_vertical"
         android:textAppearance="?android:attr/textAppearanceMedium" />
 
     <View android:id="@+id/titleDivider"
@@ -66,89 +64,80 @@
         android:background="?android:attr/colorForeground"
         />
 
-    <!-- XXX Use a TableLayout instead -->
-    <RelativeLayout android:id="@+id/default_view"
+    <TableLayout android:id="@+id/default_view"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_weight="1"
-        android:paddingTop="5dip"
-        android:paddingBottom="13dip"
+        android:stretchColumns="1"
+        android:paddingTop="20dip"
         android:paddingLeft="20dip"
         android:paddingRight="20dip" >
-    
+      <TableRow>
         <TextView 
             android:id="@+id/titleText"
             android:layout_height="wrap_content"
             android:layout_width="wrap_content"
-            android:layout_alignParentTop="true"
-            android:layout_marginRight="50dip"
             android:layout_marginBottom="40dip"
-            android:layout_marginTop="40dip"
             android:text="@string/name"
-            android:gravity="left"
             android:textAppearance="?android:attr/textAppearanceMedium" />
                 
         <EditText
             android:id="@+id/title"
             android:layout_height="wrap_content"
-            android:layout_width="325dip"
+            android:layout_width="wrap_content"
+            android:layout_marginRight="20dip"
+            android:layout_marginLeft="20dip"
             android:gravity="fill_horizontal"
-            android:layout_alignBaseline="@+id/titleText"
-            android:layout_toRightOf="@+id/titleText"
             android:inputType="textCapSentences"
-            android:selectAllOnFocus="true"
             android:ellipsize="end"
             android:textAppearance="?android:attr/textAppearanceMedium" />
-                
+      </TableRow>
 
-    
+      <TableRow>
         <TextView
             android:id="@+id/addressText"
             android:layout_height="wrap_content"
             android:layout_width="wrap_content"
             android:text="@string/location"
             android:gravity="left"
-            android:layout_below="@+id/titleText"
-            android:layout_alignLeft="@+id/titleText"
             android:layout_marginBottom="40dip"
-            android:layout_marginRight="20dip"
             android:textAppearance="?android:attr/textAppearanceMedium" />
                 
         <EditText
             android:id="@+id/address"
             android:layout_height="wrap_content"
-            android:layout_width="325dip"
+            android:layout_width="wrap_content"
+            android:layout_marginRight="20dip"
+            android:layout_marginLeft="20dip"
             android:hint="@string/http"
-            android:layout_alignBaseline="@+id/addressText"
-            android:layout_alignLeft="@+id/title"
             android:gravity="fill_horizontal"
             android:inputType="textUri"
-            android:selectAllOnFocus="true"
             android:ellipsize="end"
             android:textAppearance="?android:attr/textAppearanceMedium" />
-
+      </TableRow>
+      <TableRow>
         <TextView
             android:id="@+id/add_to"
             android:layout_height="wrap_content"
             android:layout_width="wrap_content"
             android:text="@string/containing_folder"
-            android:layout_below="@+id/addressText"
-            android:layout_alignLeft="@+id/titleText"
-            android:layout_marginRight="20dip"
             android:textAppearance="?android:attr/textAppearanceMedium" />
 
         <TextView
             android:id="@+id/folder"
             android:layout_height="wrap_content"
             android:layout_width="250dip"
-            android:layout_alignLeft="@+id/title"
-            android:layout_alignBaseline="@+id/add_to"
+            android:layout_marginRight="20dip"
+            android:layout_marginLeft="20dip"
+            android:gravity="center_vertical"
             android:singleLine="true"
             android:ellipsize="start"
             android:text="@string/bookmarks"
+            android:drawableLeft="@drawable/ic_menu_bookmarks"
+            android:layout_marginBottom="40dip"
             android:textAppearance="?android:attr/textAppearanceMedium" />
-
-    </RelativeLayout>
+      </TableRow>
+    </TableLayout>
 
     <LinearLayout android:id="@+id/folder_selector"
         android:layout_width="match_parent"
diff --git a/res/menu/folder_choice.xml b/res/menu/folder_choice.xml
index 068b170..c62e2f8 100644
--- a/res/menu/folder_choice.xml
+++ b/res/menu/folder_choice.xml
@@ -16,9 +16,12 @@
 
 <menu xmlns:android="http://schemas.android.com/apk/res/android">
     <item android:id="@+id/home_screen"
+        android:icon="@*android:drawable/ic_menu_home"
         android:title="@string/add_to_homescreen_menu_option"/>
     <item android:id="@+id/bookmarks"
+        android:icon="@drawable/ic_menu_bookmarks"
         android:title="@string/add_to_bookmarks_menu_option"/>
     <item android:id="@+id/other"
+        android:icon="@*android:drawable/ic_menu_archive"
         android:title="@string/add_to_other_folder_menu_option"/>
 </menu>
diff --git a/src/com/android/browser/AddBookmarkPage.java b/src/com/android/browser/AddBookmarkPage.java
index 5670881..25c9217 100644
--- a/src/com/android/browser/AddBookmarkPage.java
+++ b/src/com/android/browser/AddBookmarkPage.java
@@ -31,6 +31,7 @@
 import android.content.res.Resources;
 import android.database.Cursor;
 import android.graphics.Bitmap;
+import android.graphics.drawable.Drawable;
 import android.net.ParseException;
 import android.net.Uri;
 import android.net.WebAddress;
@@ -104,6 +105,7 @@
     private View mCrumbHolder;
     private ListView mListView;
     private boolean mSaveToHomeScreen;
+    private long mRootFolder;
 
     private static class Folder {
         String Name;
@@ -200,7 +202,11 @@
             if (data != null) {
                 Folder folder = (Folder) data;
                 mCurrentFolder = folder.Id;
-                mFolder.setText(folder.Name);
+                int resource = mCurrentFolder == mRootFolder ?
+                        R.drawable.ic_menu_bookmarks :
+                        com.android.internal.R.drawable.ic_menu_archive;
+                Drawable drawable = getResources().getDrawable(resource);
+                updateFolderLabel(folder.Name, drawable);
             }
         }
     }
@@ -250,14 +256,14 @@
     public boolean onMenuItemClick(MenuItem item) {
         switch(item.getItemId()) {
             case R.id.bookmarks:
-                mCurrentFolder = getBookmarksBarId(this);
-                mFolder.setText(item.getTitle());
+                mCurrentFolder = mRootFolder;
+                updateFolderLabel(item.getTitle(), item.getIcon());
                 mSaveToHomeScreen = false;
                 break;
             case R.id.home_screen:
                 // Create a short cut to the home screen
                 mSaveToHomeScreen = true;
-                mFolder.setText(item.getTitle());
+                updateFolderLabel(item.getTitle(), item.getIcon());
                 break;
             case R.id.other:
                 switchToFolderSelector();
@@ -309,7 +315,7 @@
         if (data != null) {
             currentFolder = ((Folder) data).Id;
         } else {
-            currentFolder = getBookmarksBarId(this);
+            currentFolder = mRootFolder;
         }
         values.put(BrowserContract.Bookmarks.PARENT, currentFolder);
         Uri uri = getContentResolver().insert(
@@ -404,7 +410,9 @@
                     }
                     String name = cursor.getString(titleIndex);
                     if (parent == mCurrentFolder) {
-                        mFolder.setText(name);
+                        Drawable draw = getResources().getDrawable(
+                                com.android.internal.R.drawable.ic_menu_archive);
+                        updateFolderLabel(name, draw);
                     }
                     folderStack.push(new Folder(name, parent));
                     parent = cursor.getLong(parentIndex);
@@ -421,6 +429,18 @@
         }
     }
 
+    /**
+     * Update the name and image to show where the bookmark will be added
+     * @param name Name of the location to save (folder name, bookmarks, or home
+     *             screen.
+     * @param drawable Image to show corresponding to the save location.
+     */
+    void updateFolderLabel(CharSequence name, Drawable drawable) {
+        mFolder.setText(name);
+        mFolder.setCompoundDrawablesWithIntrinsicBounds(drawable, null, null,
+                null);
+    }
+
     @Override
     public void onItemClick(AdapterView<?> parent, View view, int position,
             long id) {
@@ -464,8 +484,6 @@
         super.onCreate(icicle);
         if (DEBUG_CRASH) {
             requestWindowFeature(Window.FEATURE_NO_TITLE);
-        } else {
-            requestWindowFeature(Window.FEATURE_LEFT_ICON);
         }
 
         mMap = getIntent().getExtras();
@@ -474,8 +492,7 @@
 
         Window window = getWindow();
         if (!DEBUG_CRASH) {
-            setTitle(R.string.bookmark_this_page);
-            window.setFeatureDrawableResource(Window.FEATURE_LEFT_ICON, R.drawable.ic_list_bookmark);
+            setTitle("");
         }
 
         String title = null;
@@ -489,9 +506,6 @@
                 mMap = b;
                 mEditingExisting = true;
                 mFakeTitle.setText(R.string.edit_bookmark);
-                if (!DEBUG_CRASH) {
-                    setTitle(R.string.bookmark_this_page);
-                }
             } else {
                 int gravity = mMap.getInt("gravity", -1);
                 if (gravity != -1) {
@@ -505,8 +519,9 @@
             mTouchIconUrl = mMap.getString(TOUCH_ICON_URL);
             mCurrentFolder = mMap.getLong(BrowserContract.Bookmarks.PARENT, DEFAULT_FOLDER_ID);
         }
+        mRootFolder = getBookmarksBarId(this);
         if (mCurrentFolder == DEFAULT_FOLDER_ID) {
-            mCurrentFolder = getBookmarksBarId(this);
+            mCurrentFolder = mRootFolder;
         }
 
         mTitle = (EditText) findViewById(R.id.title);
