diff --git a/src/com/android/contacts/detail/ContactDetailHeaderView.java b/src/com/android/contacts/detail/ContactDetailHeaderView.java
index c3e2d98..4b211b6 100644
--- a/src/com/android/contacts/detail/ContactDetailHeaderView.java
+++ b/src/com/android/contacts/detail/ContactDetailHeaderView.java
@@ -282,8 +282,11 @@
             mAttributionView.setText(R.string.indicator_joined_contact);
             mAttributionView.setVisibility(View.VISIBLE);
         } else if (isDirectoryEntry) {
-            String text = getContext().getString(R.string.contact_directory_description,
-                    buildDirectoryName(directoryType, directoryDisplayName));
+            String displayName = !TextUtils.isEmpty(directoryDisplayName)
+                    ? directoryDisplayName
+                    : directoryType;
+            String text = getContext().getString(
+                    R.string.contact_directory_description, displayName);
             mAttributionView.setText(text);
             mAttributionView.setVisibility(View.VISIBLE);
         } else {
@@ -291,23 +294,6 @@
         }
     }
 
-    private CharSequence buildDirectoryName(String directoryType, String directoryName) {
-        String title;
-        if (!TextUtils.isEmpty(directoryName)) {
-            title = directoryName;
-            // TODO: STOPSHIP - remove this once this is done by both directory providers
-            int atIndex = title.indexOf('@');
-            if (atIndex != -1 && atIndex < title.length() - 2) {
-                final char firstLetter = Character.toUpperCase(title.charAt(atIndex + 1));
-                title = firstLetter + title.substring(atIndex + 2);
-            }
-        } else {
-            title = directoryType;
-        }
-
-        return title;
-    }
-
     @Override
     public void onClick(View view) {
         switch (view.getId()) {
diff --git a/src/com/android/contacts/list/ContactEntryListAdapter.java b/src/com/android/contacts/list/ContactEntryListAdapter.java
index e61e00c..44e09b0 100644
--- a/src/com/android/contacts/list/ContactEntryListAdapter.java
+++ b/src/com/android/contacts/list/ContactEntryListAdapter.java
@@ -502,8 +502,11 @@
             displayNameTextView.setText(null);
         } else {
             labelTextView.setText(R.string.directory_search_label);
-            displayNameTextView.setText(buildDirectoryName(directoryPartition.getDirectoryType(),
-                    directoryPartition.getDisplayName()));
+            String directoryName = directoryPartition.getDisplayName();
+            String displayName = !TextUtils.isEmpty(directoryName)
+                    ? directoryName
+                    : directoryPartition.getDirectoryType();
+            displayNameTextView.setText(displayName);
         }
 
         TextView countText = (TextView)view.findViewById(R.id.count);
@@ -522,23 +525,6 @@
         }
     }
 
-    private CharSequence buildDirectoryName(String directoryType, String directoryName) {
-        String title;
-        if (!TextUtils.isEmpty(directoryName)) {
-            title = directoryName;
-            // TODO: STOPSHIP - remove this once this is done by both directory providers
-            int atIndex = title.indexOf('@');
-            if (atIndex != -1 && atIndex < title.length() - 2) {
-                final char firstLetter = Character.toUpperCase(title.charAt(atIndex + 1));
-                title = firstLetter + title.substring(atIndex + 2);
-            }
-        } else {
-            title = directoryType;
-        }
-
-        return title;
-    }
-
     // TODO: fix PluralRules to handle zero correctly and use Resources.getQuantityText directly
     public String getQuantityText(int count, int zeroResourceId, int pluralResourceId) {
         if (count == 0) {
