diff --git a/res/layout/voicemail_promo_card.xml b/res/layout/voicemail_promo_card.xml
index 103fa30..891f096 100644
--- a/res/layout/voicemail_promo_card.xml
+++ b/res/layout/voicemail_promo_card.xml
@@ -79,20 +79,20 @@
             android:gravity="end">
 
             <TextView
-                android:id="@+id/settings_action"
+                android:id="@+id/secondary_action"
                 style="@style/PromoCardActionStyle"
                 android:background="?android:attr/selectableItemBackground"
                 android:text="@string/visual_voicemail_settings"
                 android:nextFocusLeft="@+id/promo_card"
-                android:nextFocusRight="@+id/ok_action"
+                android:nextFocusRight="@+id/primary_action"
                 android:paddingEnd="@dimen/promo_card_action_between_padding"/>
 
             <TextView
-                android:id="@+id/ok_action"
+                android:id="@+id/primary_action"
                 style="@style/PromoCardActionStyle"
                 android:background="?android:attr/selectableItemBackground"
                 android:text="@android:string/ok"
-                android:nextFocusLeft="@+id/settings_action"
+                android:nextFocusLeft="@+id/secondary_action"
                 android:nextFocusRight="@+id/promo_card"/>
         </LinearLayout>
     </LinearLayout>
diff --git a/src/com/android/dialer/calllog/CallLogAdapter.java b/src/com/android/dialer/calllog/CallLogAdapter.java
index 4d4d454..90985af 100644
--- a/src/com/android/dialer/calllog/CallLogAdapter.java
+++ b/src/com/android/dialer/calllog/CallLogAdapter.java
@@ -67,11 +67,9 @@
     private static final int NO_EXPANDED_LIST_ITEM = -1;
 
     private static final int VOICEMAIL_PROMO_CARD_POSITION = 0;
-    /**
-     * View type for voicemail promo card.  Note: Numbering starts at 20 to avoid collision
-     * with {@link com.android.common.widget.GroupingListAdapter#ITEM_TYPE_IN_GROUP}.
-     */
-    private static final int VIEW_TYPE_VOICEMAIL_PROMO_CARD = 20;
+
+    protected static final int VIEW_TYPE_NORMAL = 0;
+    private static final int VIEW_TYPE_VOICEMAIL_PROMO_CARD = 1;
 
     /**
      * The key for the show voicemail promo card preference which will determine whether the promo
@@ -389,9 +387,9 @@
     protected void bindVoicemailPromoCardViewHolder(ViewHolder viewHolder) {
         PromoCardViewHolder promoCardViewHolder = (PromoCardViewHolder) viewHolder;
 
-        promoCardViewHolder.getSettingsTextView().setOnClickListener(
-                mVoicemailSettingsActionListener);
-        promoCardViewHolder.getOkTextView().setOnClickListener(mOkActionListener);
+        promoCardViewHolder.getSecondaryActionView()
+                .setOnClickListener(mVoicemailSettingsActionListener);
+        promoCardViewHolder.getPrimaryActionView().setOnClickListener(mOkActionListener);
     }
 
     /**
diff --git a/src/com/android/dialer/calllog/GroupingListAdapter.java b/src/com/android/dialer/calllog/GroupingListAdapter.java
index 54dd5f6..70190df 100644
--- a/src/com/android/dialer/calllog/GroupingListAdapter.java
+++ b/src/com/android/dialer/calllog/GroupingListAdapter.java
@@ -126,7 +126,7 @@
      * that position.
      */
     public int getGroupSize(int listPosition) {
-        if (listPosition >= mGroupMetadata.size()) {
+        if (listPosition < 0 || listPosition >= mGroupMetadata.size()) {
             return 0;
         }
 
@@ -138,7 +138,7 @@
      * corresponding to that position.
      */
     public Object getItem(int listPosition) {
-        if (mCursor == null || listPosition >= mGroupMetadata.size()) {
+        if (mCursor == null || listPosition < 0 || listPosition >= mGroupMetadata.size()) {
             return null;
         }
 
diff --git a/src/com/android/dialer/calllog/PromoCardViewHolder.java b/src/com/android/dialer/calllog/PromoCardViewHolder.java
index 656b669..f5a7501 100644
--- a/src/com/android/dialer/calllog/PromoCardViewHolder.java
+++ b/src/com/android/dialer/calllog/PromoCardViewHolder.java
@@ -24,7 +24,8 @@
 import com.android.dialer.R;
 
 /**
- * View holder class for a promo card which will appear in the voicemail tab.
+ * Generic ViewHolder class for a promo card with a primary and secondary action.
+ * Example: the promo card which appears in the voicemail tab.
  */
 public class PromoCardViewHolder extends RecyclerView.ViewHolder {
     public static PromoCardViewHolder create(View rootView) {
@@ -32,14 +33,15 @@
     }
 
     /**
-     * The "Settings" button view.
+     * The primary action button view.
      */
-    private View mSettingsTextView;
+    private View mPrimaryActionView;
 
     /**
+     * The secondary action button view.
      * The "Ok" button view.
      */
-    private View mOkTextView;
+    private View mSecondaryActionView;
 
     /**
      * Creates an instance of the {@link ViewHolder}.
@@ -49,33 +51,33 @@
     private PromoCardViewHolder(View rootView) {
         super(rootView);
 
-        mSettingsTextView = rootView.findViewById(R.id.settings_action);
-        mOkTextView = rootView.findViewById(R.id.ok_action);
+        mPrimaryActionView = rootView.findViewById(R.id.primary_action);
+        mSecondaryActionView = rootView.findViewById(R.id.secondary_action);
     }
 
-    /**
-     * Retrieves the "Settings" button.
+   /**
+     * Retrieves the "primary" action button (eg. "OK").
      *
      * @return The view.
      */
-    public View getSettingsTextView() {
-        return mSettingsTextView;
+    public View getPrimaryActionView() {
+        return mPrimaryActionView;
     }
 
     /**
-     * Retrieves the "Ok" button.
+     * Retrieves the "secondary" action button (eg. "Cancel" or "More Info").
      *
      * @return The view.
      */
-    public View getOkTextView() {
-        return mOkTextView;
+    public View getSecondaryActionView() {
+        return mSecondaryActionView;
     }
 
     @NeededForTesting
     public static PromoCardViewHolder createForTest(Context context) {
         PromoCardViewHolder viewHolder = new PromoCardViewHolder(new View(context));
-        viewHolder.mSettingsTextView = new View(context);
-        viewHolder.mOkTextView = new View(context);
+        viewHolder.mPrimaryActionView = new View(context);
+        viewHolder.mSecondaryActionView = new View(context);
         return viewHolder;
     }
 }
