diff --git a/src/com/android/contacts/quickcontact/ExpandingEntryCardView.java b/src/com/android/contacts/quickcontact/ExpandingEntryCardView.java
index a536f8c..22126ac 100644
--- a/src/com/android/contacts/quickcontact/ExpandingEntryCardView.java
+++ b/src/com/android/contacts/quickcontact/ExpandingEntryCardView.java
@@ -67,7 +67,7 @@
      */
     public static final class Entry {
 
-        private final int mViewId;
+        private final int mId;
         private final Drawable mIcon;
         private final String mHeader;
         private final String mSubHeader;
@@ -82,21 +82,21 @@
         private final boolean mIsEditable;
         private final EntryContextMenuInfo mEntryContextMenuInfo;
 
-        public Entry(int viewId, Drawable icon, String header, String subHeader, String text,
+        public Entry(int id, Drawable icon, String header, String subHeader, String text,
                 Intent intent, Drawable alternateIcon, Intent alternateIntent,
                 String alternateContentDescription, boolean shouldApplyColor,
                 boolean isEditable, EntryContextMenuInfo entryContextMenuInfo) {
-            this(viewId, icon, header, subHeader, null, text, null, intent, alternateIcon,
+            this(id, icon, header, subHeader, null, text, null, intent, alternateIcon,
                     alternateIntent, alternateContentDescription, shouldApplyColor, isEditable,
                     entryContextMenuInfo);
         }
 
-        public Entry(int viewId, Drawable mainIcon, String header, String subHeader,
+        public Entry(int id, Drawable mainIcon, String header, String subHeader,
                 Drawable subHeaderIcon, String text, Drawable textIcon, Intent intent,
                 Drawable alternateIcon, Intent alternateIntent, String alternateContentDescription,
                 boolean shouldApplyColor, boolean isEditable,
                 EntryContextMenuInfo entryContextMenuInfo) {
-            mViewId = viewId;
+            mId = id;
             mIcon = mainIcon;
             mHeader = header;
             mSubHeader = subHeader;
@@ -160,8 +160,8 @@
             return mIsEditable;
         }
 
-        int getViewId() {
-            return mViewId;
+        int getId() {
+            return mId;
         }
 
         EntryContextMenuInfo getEntryContextMenuInfo() {
@@ -491,7 +491,6 @@
                 R.layout.expanding_entry_card_item, this, false);
 
         view.setContextMenuInfo(entry.getEntryContextMenuInfo());
-        view.setId(entry.getViewId());
 
         final ImageView icon = (ImageView) view.findViewById(R.id.icon);
         icon.setVisibility(iconVisibility);
@@ -535,7 +534,7 @@
 
         if (entry.getIntent() != null) {
             view.setOnClickListener(mOnClickListener);
-            view.setTag(entry.getIntent());
+            view.setTag(new EntryTag(entry.getId(), entry.getIntent()));
         }
 
         // If only the header is visible, add a top margin to match icon's top margin.
@@ -555,8 +554,7 @@
         if (entry.getAlternateIcon() != null && entry.getAlternateIntent() != null) {
             alternateIcon.setImageDrawable(entry.getAlternateIcon());
             alternateIcon.setOnClickListener(mOnClickListener);
-            alternateIcon.setTag(entry.getAlternateIntent());
-            alternateIcon.setId(entry.getViewId());
+            alternateIcon.setTag(new EntryTag(entry.getId(), entry.getAlternateIntent()));
             alternateIcon.setVisibility(View.VISIBLE);
             alternateIcon.setContentDescription(entry.getAlternateContentDescription());
 
@@ -808,4 +806,22 @@
             return mCopyLabel;
         }
     }
+
+    static final class EntryTag {
+        private final int mId;
+        private final Intent mIntent;
+
+        public EntryTag(int id, Intent intent) {
+            mId = id;
+            mIntent = intent;
+        }
+
+        public int getId() {
+            return mId;
+        }
+
+        public Intent getIntent() {
+            return mIntent;
+        }
+    }
 }
diff --git a/src/com/android/contacts/quickcontact/QuickContactActivity.java b/src/com/android/contacts/quickcontact/QuickContactActivity.java
index 172eb0d..edcb662 100644
--- a/src/com/android/contacts/quickcontact/QuickContactActivity.java
+++ b/src/com/android/contacts/quickcontact/QuickContactActivity.java
@@ -128,6 +128,7 @@
 import com.android.contacts.interactions.SmsInteractionsLoader;
 import com.android.contacts.quickcontact.ExpandingEntryCardView.Entry;
 import com.android.contacts.quickcontact.ExpandingEntryCardView.EntryContextMenuInfo;
+import com.android.contacts.quickcontact.ExpandingEntryCardView.EntryTag;
 import com.android.contacts.quickcontact.ExpandingEntryCardView.ExpandingEntryCardViewListener;
 import com.android.contacts.util.ImageViewDrawableSetter;
 import com.android.contacts.util.PhoneCapabilityTester;
@@ -287,18 +288,19 @@
     final OnClickListener mEntryClickHandler = new OnClickListener() {
         @Override
         public void onClick(View v) {
-            // Data Id is stored as the entry view id
-            final int dataId = v.getId();
+            final Object entryTagObject = v.getTag();
+            if (entryTagObject == null || !(entryTagObject instanceof EntryTag)) {
+                Log.w(TAG, "EntryTag was not used correctly");
+                return;
+            }
+            final EntryTag entryTag = (EntryTag) entryTagObject;
+            final Intent intent = entryTag.getIntent();
+            final int dataId = entryTag.getId();
+
             if (dataId == CARD_ENTRY_ID_EDIT_CONTACT) {
                 editContact();
                 return;
             }
-            final Object intentObject = v.getTag();
-            if (intentObject == null || !(intentObject instanceof Intent)) {
-                Log.w(TAG, "Intent tag was not used correctly");
-                return;
-            }
-            final Intent intent = (Intent) intentObject;
 
             // Default to USAGE_TYPE_CALL. Usage is summed among all types for sorting each data id
             // so the exact usage type is not necessary in all cases
