diff --git a/res/values/ids.xml b/res/values/ids.xml
index b1ed87f..13844a3 100644
--- a/res/values/ids.xml
+++ b/res/values/ids.xml
@@ -54,4 +54,7 @@
     <!-- Dialog Manager Ids -->
     <item type="id" name="dialog_manager_id_1"/>
     <item type="id" name="dialog_manager_id_2"/>
+
+    <!-- ContactDetailFragment ContextMenu Ids -->
+    <item type="id" name="menu_detail_makeDefault" />
 </resources>
diff --git a/src/com/android/contacts/activities/ContactDetailActivity.java b/src/com/android/contacts/activities/ContactDetailActivity.java
index b26cbd0..f593a0d 100644
--- a/src/com/android/contacts/activities/ContactDetailActivity.java
+++ b/src/com/android/contacts/activities/ContactDetailActivity.java
@@ -32,7 +32,6 @@
 import android.os.Bundle;
 import android.util.Log;
 import android.view.KeyEvent;
-import android.view.MenuItem;
 import android.widget.Toast;
 
 import java.util.ArrayList;
@@ -75,14 +74,6 @@
     }
 
     @Override
-    public boolean onContextItemSelected(MenuItem item) {
-        // TODO: This is too hardwired.
-        if (mFragment.onContextItemSelected(item)) return true;
-
-        return super.onContextItemSelected(item);
-    }
-
-    @Override
     public void startSearch(String initialQuery, boolean selectInitialQuery, Bundle appSearchData,
             boolean globalSearch) {
         if (globalSearch) {
@@ -94,8 +85,7 @@
 
     @Override
     public boolean onKeyDown(int keyCode, KeyEvent event) {
-        // TODO: This is too hardwired.
-        if (mFragment.onKeyDown(keyCode, event)) return true;
+        if (mFragment.handleKeyDown(keyCode)) return true;
 
         return super.onKeyDown(keyCode, event);
     }
diff --git a/src/com/android/contacts/views/detail/ContactDetailFragment.java b/src/com/android/contacts/views/detail/ContactDetailFragment.java
index 390a7b1..ae14568 100644
--- a/src/com/android/contacts/views/detail/ContactDetailFragment.java
+++ b/src/com/android/contacts/views/detail/ContactDetailFragment.java
@@ -100,8 +100,6 @@
         OnItemClickListener, SelectAccountDialogFragment.Listener {
     private static final String TAG = "ContactDetailFragment";
 
-    private static final int MENU_ITEM_MAKE_DEFAULT = 3;
-
     private static final int LOADER_DETAILS = 1;
 
     private Context mContext;
@@ -304,8 +302,8 @@
                         ContactsSource.LEVEL_MIMETYPES);
                 if (kind == null) continue;
 
-                final ViewEntry entry = ViewEntry.fromValues(mContext, mimeType, kind,
-                        rawContactId, dataId, entryValues);
+                final ViewEntry entry = ViewEntry.fromValues(mContext, mimeType, kind, dataId,
+                        entryValues);
 
                 final boolean hasData = !TextUtils.isEmpty(entry.data);
                 Integer superPrimary = entryValues.getAsInteger(Data.IS_SUPER_PRIMARY);
@@ -357,7 +355,7 @@
                         final DataKind imKind = sources.getKindOrFallback(accountType,
                                 imMime, mContext, ContactsSource.LEVEL_MIMETYPES);
                         final ViewEntry imEntry = ViewEntry.fromValues(mContext,
-                                imMime, imKind, rawContactId, dataId, entryValues);
+                                imMime, imKind, dataId, entryValues);
                         final ImActions imActions = ContactsUtils.buildImActions(entryValues);
                         if (imActions != null) {
                             imEntry.actionIcon = imActions.getPrimaryActionIcon();
@@ -532,7 +530,7 @@
          * Build new {@link ViewEntry} and populate from the given values.
          */
         public static ViewEntry fromValues(Context context, String mimeType, DataKind kind,
-                long rawContactId, long dataId, ContentValues values) {
+                long dataId, ContentValues values) {
             final ViewEntry entry = new ViewEntry();
             entry.context = context;
             entry.id = dataId;
@@ -569,6 +567,7 @@
             return this;
         }
 
+        @Override
         public boolean collapseWith(ViewEntry entry) {
             // assert equal collapse keys
             if (!shouldCollapseWith(entry)) {
@@ -603,6 +602,7 @@
             return true;
         }
 
+        @Override
         public boolean shouldCollapseWith(ViewEntry entry) {
             if (entry == null) {
                 return false;
@@ -637,6 +637,7 @@
     }
 
     private final class ViewAdapter extends BaseAdapter {
+        @Override
         public View getView(int position, View convertView, ViewGroup parent) {
             final ViewEntry entry = getEntry(position);
             final View v;
@@ -760,6 +761,7 @@
         }
 
         private OnClickListener mSecondaryActionClickListener = new OnClickListener() {
+            @Override
             public void onClick(View v) {
                 if (mListener == null) return;
                 if (v == null) return;
@@ -771,6 +773,7 @@
             }
         };
 
+        @Override
         public int getCount() {
             int count = 0;
             final int numSections = mSections.size();
@@ -781,17 +784,18 @@
             return count;
         }
 
+        @Override
         public Object getItem(int position) {
             return getEntry(position);
         }
 
+        @Override
         public long getItemId(int position) {
             final ViewEntry entry = getEntry(position);
             if (entry != null) {
                 return entry.id;
-            } else {
-                return -1;
             }
+            return -1;
         }
 
         private ViewEntry getEntry(int position) {
@@ -969,18 +973,19 @@
                 menu.add(0, 0, 0, R.string.menu_sendSMS).setIntent(intent);
             }
             if (!entry.isPrimary && mHasPhone) {
-                menu.add(0, MENU_ITEM_MAKE_DEFAULT, 0, R.string.menu_makeDefaultNumber);
+                menu.add(0, R.id.menu_detail_makeDefault, 0, R.string.menu_makeDefaultNumber);
             }
         } else if (entry.mimetype.equals(CommonDataKinds.Email.CONTENT_ITEM_TYPE)) {
             menu.add(0, 0, 0, R.string.menu_sendEmail).setIntent(entry.intent);
             if (!entry.isPrimary) {
-                menu.add(0, MENU_ITEM_MAKE_DEFAULT, 0, R.string.menu_makeDefaultEmail);
+                menu.add(0, R.id.menu_detail_makeDefault, 0, R.string.menu_makeDefaultEmail);
             }
         } else if (entry.mimetype.equals(CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE)) {
             menu.add(0, 0, 0, R.string.menu_viewAddress).setIntent(entry.intent);
         }
     }
 
+    @Override
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
         if (mListener == null) return;
         final ViewEntry entry = mAdapter.getEntry(position);
@@ -993,7 +998,7 @@
     @Override
     public boolean onContextItemSelected(MenuItem item) {
         switch (item.getItemId()) {
-            case MENU_ITEM_MAKE_DEFAULT: {
+            case R.id.menu_detail_makeDefault: {
                 if (makeItemDefault(item)) {
                     return true;
                 }
@@ -1031,7 +1036,7 @@
         return mAdapter.getEntry(info.position);
     }
 
-    public boolean onKeyDown(int keyCode, KeyEvent event) {
+    public boolean handleKeyDown(int keyCode) {
         switch (keyCode) {
             case KeyEvent.KEYCODE_CALL: {
                 try {
