diff --git a/src/com/android/dialer/settings/DialerSettingsActivity.java b/src/com/android/dialer/settings/DialerSettingsActivity.java
index 8d41d77..b47a4ed 100644
--- a/src/com/android/dialer/settings/DialerSettingsActivity.java
+++ b/src/com/android/dialer/settings/DialerSettingsActivity.java
@@ -5,6 +5,8 @@
 import android.content.Context;
 import android.content.SharedPreferences;
 import android.os.Bundle;
+import android.os.UserHandle;
+import android.os.UserManager;
 import android.preference.PreferenceManager;
 import android.preference.PreferenceActivity.Header;
 import android.text.TextUtils;
@@ -29,6 +31,8 @@
     protected SharedPreferences mPreferences;
     private HeaderAdapter mHeaderAdapter;
 
+    private static final int OWNER_HANDLE_ID = 0;
+
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -42,15 +46,17 @@
     public void onBuildHeaders(List<Header> target) {
         final Header contactDisplayHeader = new Header();
         contactDisplayHeader.titleRes = R.string.settings_contact_display_options_title;
-        contactDisplayHeader.summaryRes = R.string.settings_contact_display_options_description;
         contactDisplayHeader.fragment = DisplayOptionsPreferenceFragment.class.getName();
         target.add(contactDisplayHeader);
 
-        final Header callSettingHeader = new Header();
-        callSettingHeader.titleRes = R.string.call_settings_label;
-        callSettingHeader.summaryRes = R.string.call_settings_description;
-        callSettingHeader.intent = DialtactsActivity.getCallSettingsIntent();
-        target.add(callSettingHeader);
+        // Only add the call settings header if the current user is the primary/owner user.
+        if (isPrimaryUser()) {
+            final Header callSettingHeader = new Header();
+            callSettingHeader.titleRes = R.string.call_settings_label;
+            callSettingHeader.summaryRes = R.string.call_settings_description;
+            callSettingHeader.intent = DialtactsActivity.getCallSettingsIntent();
+            target.add(callSettingHeader);
+        }
     }
 
     @Override
@@ -85,6 +91,23 @@
     }
 
     /**
+     * Whether a user handle associated with the current user is that of the primary owner. That is,
+     * whether there is a user handle which has an id which matches the owner's handle.
+     * @return Whether the current user is the primary user.
+     */
+    private boolean isPrimaryUser() {
+        UserManager userManager = (UserManager) getSystemService(Context.USER_SERVICE);
+        List<UserHandle> userHandles = userManager.getUserProfiles();
+        for (int i = 0; i < userHandles.size(); i++){
+            if (userHandles.get(i).myUserId() == OWNER_HANDLE_ID) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    /**
      * This custom {@code ArrayAdapter} is mostly identical to the equivalent one in
      * {@code PreferenceActivity}, except with a local layout resource.
      */
@@ -130,7 +153,6 @@
             } else {
                 holder.summary.setVisibility(View.GONE);
             }
-
             return view;
         }
     }
