diff --git a/src/com/android/contacts/ContactOptionsActivity.java b/src/com/android/contacts/ContactOptionsActivity.java
index f93ddf8..38090aa 100644
--- a/src/com/android/contacts/ContactOptionsActivity.java
+++ b/src/com/android/contacts/ContactOptionsActivity.java
@@ -63,6 +63,7 @@
         setContentView(R.layout.contact_options);
 
         View ringtoneLayout = findViewById(R.id.ringtone);
+        ringtoneLayout.setFocusable(true);
         ringtoneLayout.setOnClickListener(this);
         TextView label = (TextView)findViewById(R.id.label);
         label.setText(getString(R.string.label_ringtone));
diff --git a/src/com/android/contacts/ui/ContactsPreferencesActivity.java b/src/com/android/contacts/ui/ContactsPreferencesActivity.java
index aa6aa14..d9491be 100644
--- a/src/com/android/contacts/ui/ContactsPreferencesActivity.java
+++ b/src/com/android/contacts/ui/ContactsPreferencesActivity.java
@@ -162,35 +162,23 @@
         mSortOrderView = inflater.inflate(R.layout.preference_with_more_button, mList, false);
 
         View preferenceLayout = mSortOrderView.findViewById(R.id.preference);
-        preferenceLayout.setOnClickListener(new View.OnClickListener() {
-
-            public void onClick(View v) {
-                showDialog(DIALOG_SORT_ORDER);
-            }
-        });
 
         TextView label = (TextView)preferenceLayout.findViewById(R.id.label);
         label.setText(getString(R.string.display_options_sort_list_by));
 
         mSortOrderTextView = (TextView)preferenceLayout.findViewById(R.id.data);
-        mList.addHeaderView(mSortOrderView, null, false);
+        mList.addHeaderView(mSortOrderView, null, true);
     }
 
     private void addDisplayOrderPreferenceView(LayoutInflater inflater) {
         mDisplayOrderView = inflater.inflate(R.layout.preference_with_more_button, mList, false);
         View preferenceLayout = mDisplayOrderView.findViewById(R.id.preference);
-        preferenceLayout.setOnClickListener(new View.OnClickListener() {
-
-            public void onClick(View v) {
-                showDialog(DIALOG_DISPLAY_ORDER);
-            }
-        });
 
         TextView label = (TextView)preferenceLayout.findViewById(R.id.label);
         label.setText(getString(R.string.display_options_view_names_as));
 
         mDisplayOrderTextView = (TextView)preferenceLayout.findViewById(R.id.data);
-        mList.addHeaderView(mDisplayOrderView, null, false);
+        mList.addHeaderView(mDisplayOrderView, null, true);
     }
 
     private void addDivider(LayoutInflater inflater) {
@@ -295,7 +283,8 @@
                 break;
             case DIALOG_DISPLAY_ORDER:
                 setCheckedItem(dialog,
-                        mSortOrder == ContactsContract.Preferences.DISPLAY_ORDER_PRIMARY ? 0 : 1);
+                        mDisplayOrder == ContactsContract.Preferences.DISPLAY_ORDER_PRIMARY
+                                ? 0 : 1);
                 break;
         }
     }
@@ -814,11 +803,20 @@
      * are usually the global modifier checkboxes.
      */
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
-        switch (view.getId()) {
-            case R.id.header_phones: {
-                mDisplayPhones.toggle();
-                break;
-            }
+        Log.d(TAG, "OnItemClick, position=" + position + ", id=" + id);
+        if (view == mHeaderPhones) {
+            mDisplayPhones.toggle();
+            return;
+        }
+        if (view == mDisplayOrderView) {
+            Log.d(TAG, "Showing Display Order dialog");
+            showDialog(DIALOG_DISPLAY_ORDER);
+            return;
+        }
+        if (view == mSortOrderView) {
+            Log.d(TAG, "Showing Sort Order dialog");
+            showDialog(DIALOG_SORT_ORDER);
+            return;
         }
     }
 
