diff --git a/src/com/android/contacts/editor/CompactRawContactsEditorView.java b/src/com/android/contacts/editor/CompactRawContactsEditorView.java
index e02e35a..900889e 100644
--- a/src/com/android/contacts/editor/CompactRawContactsEditorView.java
+++ b/src/com/android/contacts/editor/CompactRawContactsEditorView.java
@@ -781,9 +781,13 @@
         }
 
         // Get the account information for the primary raw contact delta
-        final Pair<String,String> accountInfo = EditorUiUtils.getAccountInfo(getContext(),
-                mIsUserProfile, mPrimaryRawContactDelta.getAccountName(),
-                mPrimaryRawContactDelta.getAccountType(mAccountTypeManager));
+        final Pair<String,String> accountInfo = mIsUserProfile
+                ? EditorUiUtils.getLocalAccountInfo(getContext(),
+                        mPrimaryRawContactDelta.getAccountName(),
+                        mPrimaryRawContactDelta.getAccountType(mAccountTypeManager))
+                : EditorUiUtils.getAccountInfo(getContext(),
+                        mPrimaryRawContactDelta.getAccountName(),
+                        mPrimaryRawContactDelta.getAccountType(mAccountTypeManager));
 
         // The account header and selector show the same information so both shouldn't be visible
         // at the same time
@@ -801,12 +805,39 @@
             mAccountSelectorContainer.setVisibility(View.GONE);
             addRawContactAccountSelector(rawContactDeltas);
         } else {
-            addAccountHeader(accountInfo);
+            if (mIsUserProfile) {
+                addLocalAccountHeader(accountInfo);
+            } else {
+                addAccountHeader(accountInfo);
+            }
             mAccountSelectorContainer.setVisibility(View.GONE);
         }
     }
 
+    private void addLocalAccountHeader(Pair<String,String> accountInfo) {
+        // Set the account name
+        final String accountName = TextUtils.isEmpty(accountInfo.first)
+                ? accountInfo.second : accountInfo.first;
+        mAccountHeaderName.setVisibility(View.VISIBLE);
+        mAccountHeaderName.setText(accountName);
+
+        // Set the account type
+        final String selectorTitle = getResources().getString(
+                R.string.compact_editor_account_selector_title);
+        mAccountHeaderType.setText(selectorTitle);
+
+        // Set the icon
+        final AccountType primaryAccountType =
+                mPrimaryRawContactDelta.getRawContactAccountType(getContext());
+        mAccountHeaderIcon.setImageDrawable(primaryAccountType.getDisplayIcon(getContext()));
+
+        // Set the content description
+        mAccountHeaderContainer.setContentDescription(
+                EditorUiUtils.getAccountInfoContentDescription(accountName, selectorTitle));
+    }
+
     private void addAccountHeader(Pair<String,String> accountInfo) {
+        // Set the account name
         if (TextUtils.isEmpty(accountInfo.first)) {
             // Hide this view so the other text view will be centered vertically
             mAccountHeaderName.setVisibility(View.GONE);
@@ -815,14 +846,17 @@
             mAccountHeaderName.setText(accountInfo.first);
         }
 
+        // Set the account type
         final String selectorTitle = getResources().getString(
                 R.string.compact_editor_account_selector_title);
         mAccountHeaderType.setText(selectorTitle);
 
+        // Set the icon
         final AccountType primaryAccountType = mPrimaryRawContactDelta.getRawContactAccountType(
                 getContext());
         mAccountHeaderIcon.setImageDrawable(primaryAccountType.getDisplayIcon(getContext()));
 
+        // Set the content description
         mAccountHeaderContainer.setContentDescription(
                 EditorUiUtils.getAccountInfoContentDescription(
                         accountInfo.first, selectorTitle));
diff --git a/src/com/android/contacts/editor/EditorUiUtils.java b/src/com/android/contacts/editor/EditorUiUtils.java
index 24ba7df..a513be5 100644
--- a/src/com/android/contacts/editor/EditorUiUtils.java
+++ b/src/com/android/contacts/editor/EditorUiUtils.java
@@ -112,25 +112,26 @@
     }
 
     /**
-     * Returns the account name and account type labels to display for the given account type.
-     *
-     * @param isProfile True to get the labels for the "me" profile or a phone only (local) contact
-     *         and false otherwise.
+     * Returns the account name and account type labels to display for local accounts.
      */
-    public static Pair<String,String> getAccountInfo(Context context,
-            boolean isProfile, String accountName, AccountType accountType) {
-        if (isProfile) {
-            if (TextUtils.isEmpty(accountName)) {
-                return new Pair<>(
-                        /* accountName =*/ null,
-                        context.getString(R.string.local_profile_title));
-            }
+    public static Pair<String,String> getLocalAccountInfo(Context context,
+            String accountName, AccountType accountType) {
+        if (TextUtils.isEmpty(accountName)) {
             return new Pair<>(
-                    accountName,
-                    context.getString(R.string.external_profile_title,
-                            accountType.getDisplayLabel(context)));
+                    /* accountName =*/ null,
+                    context.getString(R.string.local_profile_title));
         }
+        return new Pair<>(
+                accountName,
+                context.getString(R.string.external_profile_title,
+                        accountType.getDisplayLabel(context)));
+    }
 
+    /**
+     * Returns the account name and account type labels to display for the given account type.
+     */
+    public static Pair<String,String> getAccountInfo(Context context, String accountName,
+            AccountType accountType) {
         CharSequence accountTypeDisplayLabel = accountType.getDisplayLabel(context);
         if (TextUtils.isEmpty(accountTypeDisplayLabel)) {
             accountTypeDisplayLabel = context.getString(R.string.account_phone);
@@ -167,7 +168,7 @@
             builder.append(accountType).append('\n');
         }
         if (!TextUtils.isEmpty(accountName)) {
-            builder.append(accountName).append('\n');
+            builder.append(accountName);
         }
         return builder.toString();
     }
diff --git a/src/com/android/contacts/editor/RawContactEditorView.java b/src/com/android/contacts/editor/RawContactEditorView.java
index 1832ce2..b6320e9 100644
--- a/src/com/android/contacts/editor/RawContactEditorView.java
+++ b/src/com/android/contacts/editor/RawContactEditorView.java
@@ -189,8 +189,9 @@
         mRawContactId = state.getRawContactId();
 
         // Fill in the account info
-        final Pair<String,String> accountInfo = EditorUiUtils.getAccountInfo(getContext(),
-                isProfile, state.getAccountName(), type);
+        final Pair<String,String> accountInfo = isProfile
+                ? EditorUiUtils.getLocalAccountInfo(getContext(), state.getAccountName(), type)
+                : EditorUiUtils.getAccountInfo(getContext(), state.getAccountName(), type);
         if (accountInfo.first == null) {
             // Hide this view so the other text view will be centered vertically
             mAccountHeaderNameTextView.setVisibility(View.GONE);
diff --git a/src/com/android/contacts/editor/RawContactReadOnlyEditorView.java b/src/com/android/contacts/editor/RawContactReadOnlyEditorView.java
index 76fa097..ad2e013 100644
--- a/src/com/android/contacts/editor/RawContactReadOnlyEditorView.java
+++ b/src/com/android/contacts/editor/RawContactReadOnlyEditorView.java
@@ -115,8 +115,9 @@
         mAccountType = state.getAccountType();
         mDataSet = state.getDataSet();
 
-        final Pair<String,String> accountInfo = EditorUiUtils.getAccountInfo(getContext(),
-                isProfile, state.getAccountName(), type);
+        final Pair<String,String> accountInfo = isProfile
+                ? EditorUiUtils.getLocalAccountInfo(getContext(), state.getAccountName(), type)
+                : EditorUiUtils.getAccountInfo(getContext(), state.getAccountName(), type);
         if (accountInfo.first == null) {
             // Hide this view so the other text view will be centered vertically
             mAccountHeaderNameTextView.setVisibility(View.GONE);
diff --git a/tests/src/com/android/contacts/editor/EditorUiUtilsTest.java b/tests/src/com/android/contacts/editor/EditorUiUtilsTest.java
index 4a180ef..1fb5cb7 100644
--- a/tests/src/com/android/contacts/editor/EditorUiUtilsTest.java
+++ b/tests/src/com/android/contacts/editor/EditorUiUtilsTest.java
@@ -68,7 +68,7 @@
     }
 
     public void testGetProfileAccountInfo_AccountName() {
-        final Pair pair = EditorUiUtils.getAccountInfo(getContext(), /* isProfile =*/ true,
+        final Pair pair = EditorUiUtils.getLocalAccountInfo(getContext(),
                 ACCOUNT_NAME, new MockAccountType(DISPLAY_LABEL));
 
         assertNotNull(pair);
@@ -78,7 +78,7 @@
     }
 
     public void testGetProfileAccountInfo_NoAccountName() {
-        final Pair pair = EditorUiUtils.getAccountInfo(getContext(), /* isProfile =*/ true,
+        final Pair pair = EditorUiUtils.getLocalAccountInfo(getContext(),
                 /* accountName =*/ null, new MockAccountType(DISPLAY_LABEL));
 
         assertNotNull(pair);
@@ -88,7 +88,7 @@
     }
 
     public void testGetAccountInfo_AccountName_DisplayLabel() {
-        final Pair pair = EditorUiUtils.getAccountInfo(getContext(), /* isProfile =*/ false,
+        final Pair pair = EditorUiUtils.getAccountInfo(getContext(),
                 ACCOUNT_NAME, new MockAccountType(DISPLAY_LABEL));
 
         assertNotNull(pair);
@@ -101,7 +101,7 @@
     public void testGetAccountInfo_AccountName_DisplayLabel_GoogleAccountType() {
         final AccountType accountType = new MockAccountType(GOOGLE_DISPLAY_LABEL);
         accountType.accountType = GoogleAccountType.ACCOUNT_TYPE;
-        final Pair pair = EditorUiUtils.getAccountInfo(getContext(), /* isProfile =*/ false,
+        final Pair pair = EditorUiUtils.getAccountInfo(getContext(),
                 GOOGLE_ACCOUNT_NAME, accountType);
 
         assertNotNull(pair);
@@ -113,7 +113,7 @@
     }
 
     public void testGetAccountInfo_AccountName_NoDisplayLabel() {
-        final Pair pair = EditorUiUtils.getAccountInfo(getContext(), /* isProfile =*/ false,
+        final Pair pair = EditorUiUtils.getAccountInfo(getContext(),
                 ACCOUNT_NAME, new MockAccountType(/* displayLabel =*/ null));
 
         assertNotNull(pair);
@@ -126,7 +126,7 @@
     }
 
     public void testGetAccountInfo_NoAccountName_DisplayLabel() {
-        final Pair pair = EditorUiUtils.getAccountInfo(getContext(), /* isProfile =*/ false,
+        final Pair pair = EditorUiUtils.getAccountInfo(getContext(),
                 /* accountName =*/ null, new MockAccountType(DISPLAY_LABEL));
 
         assertNotNull(pair);
@@ -136,7 +136,7 @@
     }
 
     public void testGetAccountInfo_NoAccountName_NoDisplayLabel() {
-        final Pair pair = EditorUiUtils.getAccountInfo(getContext(), /* isProfile =*/ false,
+        final Pair pair = EditorUiUtils.getAccountInfo(getContext(),
                 /* accountName =*/ null, new MockAccountType(/* displayLabel =*/ null));
 
         assertNotNull(pair);
