diff --git a/res/values/colors.xml b/res/values/colors.xml
index a43e7f9..562241e 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -62,10 +62,6 @@
     <!-- Background color of pinned header items. -->
     <color name="list_item_pinned_header_color">#f5f5f5</color>
 
-    <!-- The default color used for tinting photos when no color can be extracted via Palette,
-         this is Blue Grey 500 -->
-    <color name="quickcontact_default_photo_tint_color">#607D8B</color>
-
     <color name="tab_default_color">@color/actionbar_background_color</color>
     <color name="tab_pressed_color">@color/tab_selected_color</color>
     <color name="tab_selected_color">#ffeeff41</color>
diff --git a/src/com/android/contacts/quickcontact/QuickContactActivity.java b/src/com/android/contacts/quickcontact/QuickContactActivity.java
index 43b062f..1f01c24 100644
--- a/src/com/android/contacts/quickcontact/QuickContactActivity.java
+++ b/src/com/android/contacts/quickcontact/QuickContactActivity.java
@@ -207,6 +207,7 @@
     private AsyncTask<Void, Void, Pair<List<List<DataItem>>, Map<String, List<DataItem>>>>
             mEntriesAndActionsTask;
     private ColorDrawable mWindowScrim;
+    private MaterialColorMapUtils mMaterialColorMapUtils;
     private boolean mIsWaitingForOtherPieceOfExitAnimation;
     private boolean mIsExitAnimationInProgress;
     private boolean mHasComputedThemeColor;
@@ -491,6 +492,8 @@
 
         setContentView(R.layout.quickcontact_activity);
 
+        mMaterialColorMapUtils = new MaterialColorMapUtils(getResources());
+
         mContactCard = (ExpandingEntryCardView) findViewById(R.id.communication_card);
         mNoContactDetailsCard = (ExpandingEntryCardView) findViewById(R.id.no_contact_data_card);
         mRecentCard = (ExpandingEntryCardView) findViewById(R.id.recent_card);
@@ -567,7 +570,8 @@
                             // header tint before the MultiShrinkScroller has been measured will
                             // cause incorrect tinting calculations.
                             if (color != 0) {
-                                setThemeColor(MaterialColorMapUtils.calculateSecondaryColor(color));
+                                setThemeColor(mMaterialColorMapUtils
+                                        .calculatePrimaryAndSecondaryColor(color));
                             }
                         }
                     });
@@ -1226,16 +1230,15 @@
                     final Bitmap bitmap = ((BitmapDrawable) imageViewDrawable).getBitmap();
                     final int primaryColor = colorFromBitmap(bitmap);
                     if (primaryColor != 0) {
-                        return MaterialColorMapUtils.calculatePrimaryAndSecondaryColor(
+                        return mMaterialColorMapUtils.calculatePrimaryAndSecondaryColor(
                                 primaryColor);
                     }
                 }
                 if (imageViewDrawable instanceof LetterTileDrawable) {
                     final int primaryColor = ((LetterTileDrawable) imageViewDrawable).getColor();
-                    return MaterialColorMapUtils.calculateSecondaryColor(primaryColor);
+                    return mMaterialColorMapUtils.calculatePrimaryAndSecondaryColor(primaryColor);
                 }
-                return MaterialColorMapUtils.calculatePrimaryAndSecondaryColor(
-                        getResources().getColor(R.color.quickcontact_default_photo_tint_color));
+                return MaterialColorMapUtils.getDefaultPrimaryAndSecondaryColors(getResources());
             }
 
             @Override
