diff --git a/res/values/strings.xml b/res/values/strings.xml
index 45ba4fa..7a51cb5 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -815,10 +815,13 @@
     <!-- Title of profile photos that are from your various accounts -->
     <string name="from_your_accounts">From your accounts</string>
 
-    <!-- Button used in photo picker to open camera -->
+    <!-- Button used in photo picker to open camera [CHAR LIMIT=30]-->
     <string name="take_a_photo_button">Take a photo</string>
 
-    <!-- Button used in photo picker to open photo/gallery -->
+    <!-- Button used in photo picker to open photo/gallery [CHAR LIMIT=20]-->
     <string name="all_photos_button">All photos</string>
 
+    <!-- Title of photo picker [CHAR LIMIT=30]-->
+    <string name="photo_picker_title">Choose photo</string>
+
 </resources>
diff --git a/src/com/android/contacts/activities/CompactContactEditorActivity.java b/src/com/android/contacts/activities/CompactContactEditorActivity.java
index 5e2fbff..0de20e7 100644
--- a/src/com/android/contacts/activities/CompactContactEditorActivity.java
+++ b/src/com/android/contacts/activities/CompactContactEditorActivity.java
@@ -43,6 +43,7 @@
 
     private static final String STATE_PHOTO_MODE = "photo_mode";
     private static final String STATE_IS_PHOTO_SELECTION = "is_photo_selection";
+    private static final String STATE_ACTION_BAR_TITLE = "action_bar_title";
 
     /**
      * Displays a PopupWindow with photo edit options.
@@ -145,6 +146,7 @@
             // Restore state
             mPhotoMode = savedState.getInt(STATE_PHOTO_MODE);
             mIsPhotoSelection = savedState.getBoolean(STATE_IS_PHOTO_SELECTION);
+            mActionBarTitleResId = savedState.getInt(STATE_ACTION_BAR_TITLE);
 
             // Show/hide the editor and photo selection fragments (w/o animations)
             mFragment = (CompactContactEditorFragment) getFragmentManager()
@@ -154,8 +156,10 @@
             final FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
             if (mIsPhotoSelection) {
                 fragmentTransaction.hide(getEditorFragment()).show(mPhotoSelectionFragment);
+                getActionBar().setTitle(getResources().getString(R.string.photo_picker_title));
             } else {
                 fragmentTransaction.show(getEditorFragment()).hide(mPhotoSelectionFragment);
+                getActionBar().setTitle(getResources().getString(mActionBarTitleResId));
             }
             fragmentTransaction.commit();
         }
@@ -172,8 +176,9 @@
 
     protected void onSaveInstanceState(Bundle outState) {
         super.onSaveInstanceState(outState);
-        outState.putInt(STATE_PHOTO_MODE,  mPhotoMode);
+        outState.putInt(STATE_PHOTO_MODE, mPhotoMode);
         outState.putBoolean(STATE_IS_PHOTO_SELECTION, mIsPhotoSelection);
+        outState.putInt(STATE_ACTION_BAR_TITLE, mActionBarTitleResId);
     }
 
     @Override
@@ -221,6 +226,7 @@
                 .hide(getEditorFragment())
                 .show(mPhotoSelectionFragment)
                 .commit();
+        getActionBar().setTitle(getResources().getString(R.string.photo_picker_title));
     }
 
     private void showEditorFragment() {
@@ -229,7 +235,7 @@
                 .hide(mPhotoSelectionFragment)
                 .show((CompactContactEditorFragment) mFragment)
                 .commit();
-
+        getActionBar().setTitle(getResources().getString(mActionBarTitleResId));
         mIsPhotoSelection = false;
     }
 
diff --git a/src/com/android/contacts/activities/ContactEditorBaseActivity.java b/src/com/android/contacts/activities/ContactEditorBaseActivity.java
index a86196b..aaa04a4 100644
--- a/src/com/android/contacts/activities/ContactEditorBaseActivity.java
+++ b/src/com/android/contacts/activities/ContactEditorBaseActivity.java
@@ -67,6 +67,8 @@
     public static final String ACTION_JOIN_COMPLETED = "joinCompleted";
     public static final String ACTION_SAVE_COMPLETED = "saveCompleted";
 
+    protected int mActionBarTitleResId;
+
     /**
      * Contract for contact editors Fragments that are managed by this Activity.
      */
@@ -218,12 +220,11 @@
         ActionBar actionBar = getActionBar();
         if (actionBar != null) {
             if (Intent.ACTION_EDIT.equals(action) || ACTION_EDIT.equals(action)) {
-                actionBar.setTitle(getResources().getString(
-                        R.string.contact_editor_title_existing_contact));
+                mActionBarTitleResId = R.string.contact_editor_title_existing_contact;
             } else {
-                actionBar.setTitle(getResources().getString(
-                        R.string.contact_editor_title_new_contact));
+                mActionBarTitleResId = R.string.contact_editor_title_new_contact;
             }
+            actionBar.setTitle(getResources().getString(mActionBarTitleResId));
             actionBar.setDisplayShowHomeEnabled(true);
             actionBar.setDisplayHomeAsUpEnabled(true);
         }
diff --git a/src/com/android/contacts/detail/PhotoSelectionHandler.java b/src/com/android/contacts/detail/PhotoSelectionHandler.java
index 405bbfc..d2e5763 100644
--- a/src/com/android/contacts/detail/PhotoSelectionHandler.java
+++ b/src/com/android/contacts/detail/PhotoSelectionHandler.java
@@ -315,7 +315,7 @@
      * Constructs an intent for picking a photo from Gallery, and returning the bitmap.
      */
     private Intent getPhotoPickIntent(Uri outputUri) {
-        final Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null);
+        final Intent intent = new Intent(Intent.ACTION_PICK, null);
         intent.setType("image/*");
         ContactPhotoUtils.addPhotoPickerExtras(intent, outputUri);
         return intent;
diff --git a/src/com/android/contacts/editor/CompactContactEditorFragment.java b/src/com/android/contacts/editor/CompactContactEditorFragment.java
index 6c0ff85..0ca8d35 100644
--- a/src/com/android/contacts/editor/CompactContactEditorFragment.java
+++ b/src/com/android/contacts/editor/CompactContactEditorFragment.java
@@ -233,7 +233,7 @@
             final ArrayList<CompactPhotoSelectionFragment.Photo> photos = getContent().getPhotos();
             if (photos.size() > 1) {
                 // For aggregate contacts, the user may select a new super primary photo from among
-                // the (non-default) raw contact photos, or source a new photo from the ActionBar
+                // the (non-default) raw contact photos, or source a new photo.
                 getEditorActivity().selectPhoto(photos, getPhotoMode());
                 return;
             }
diff --git a/src/com/android/contacts/editor/CompactPhotoSelectionFragment.java b/src/com/android/contacts/editor/CompactPhotoSelectionFragment.java
index bd4016e..060d64d 100644
--- a/src/com/android/contacts/editor/CompactPhotoSelectionFragment.java
+++ b/src/com/android/contacts/editor/CompactPhotoSelectionFragment.java
@@ -312,9 +312,8 @@
         final int paddingWidth = (int) getResources().getDimension(R.dimen
                 .photo_picker_column_padding_width);
         float density  = getResources().getDisplayMetrics().density;
-        float dpScreenWidth  = outMetrics.widthPixels / density;
-        float dpColumnWidth = (dpScreenWidth - paddingWidth * mNumberOfColumns) * density /
-                mNumberOfColumns;
+        float dpColumnWidth  = (outMetrics.widthPixels - paddingWidth * (mNumberOfColumns - 1) *
+                density) / mNumberOfColumns;
         gridView.setColumnWidth((int) dpColumnWidth);
 
         return view;
