diff --git a/src/com/android/contacts/ViewContactActivity.java b/src/com/android/contacts/ViewContactActivity.java
index b29a44c..36d9ee6 100644
--- a/src/com/android/contacts/ViewContactActivity.java
+++ b/src/com/android/contacts/ViewContactActivity.java
@@ -22,6 +22,7 @@
 import com.android.contacts.model.ContactsSource;
 import com.android.contacts.model.Sources;
 import com.android.contacts.model.ContactsSource.DataKind;
+import com.android.contacts.model.HardCodedSources.SimpleInflater;
 import com.android.contacts.ui.FastTrackWindow;
 import com.android.contacts.util.NotifyingAsyncQueryHandler;
 import com.android.internal.telephony.ITelephony;
@@ -993,6 +994,13 @@
                             entry.secondaryIntent = new Intent(Intent.ACTION_SENDTO,
                                     Uri.fromParts("sms", entry.data, null));
                             entry.data = PhoneNumberUtils.stripSeparators(entry.data);
+
+                            // If data is empty, don't show it.
+                            if (TextUtils.isEmpty(entry.data)) {
+                                Log.w(TAG, "empty data for contact method " + id);
+                                continue;
+                            }
+
                             entry.isPrimary = isSuperPrimary;
                             mPhoneEntries.add(entry);
 
@@ -1007,6 +1015,10 @@
                             // Build email entries
                             entry.intent = new Intent(Intent.ACTION_SENDTO,
                                     Uri.fromParts("mailto", entry.data, null));
+                            // Temporary hack until we get real label resources for exchange.
+                            if (TextUtils.isEmpty(entry.label)) {
+                                entry.label = getString(R.string.email).toLowerCase();
+                            }
                             entry.isPrimary = isSuperPrimary;
                             mEmailEntries.add(entry);
                         } else if (CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE.
@@ -1020,6 +1032,10 @@
                             Object protocolObj = entryValues.getAsInteger(Data.DATA5);
                             String host = null;
 
+                            if (TextUtils.isEmpty(entry.label)) {
+                                entry.label = getString(R.string.im).toLowerCase();
+                            }
+
                             if (protocolObj instanceof Number) {
                                 int protocol = ((Number) protocolObj).intValue();
                                 host = ContactsUtils.lookupProviderNameFromId(
diff --git a/src/com/android/contacts/model/HardCodedSources.java b/src/com/android/contacts/model/HardCodedSources.java
index 57b1465..3d9df8f 100644
--- a/src/com/android/contacts/model/HardCodedSources.java
+++ b/src/com/android/contacts/model/HardCodedSources.java
@@ -514,11 +514,11 @@
 
             kind.typeColumn = Email.TYPE;
             kind.typeList = Lists.newArrayList();
-            kind.typeList.add(new EditType(TYPE_EMAIL1, R.string.type_email_1, R.string.email_1)
+            kind.typeList.add(new EditType(TYPE_EMAIL1, R.string.type_email_1)
                     .setSpecificMax(1));
-            kind.typeList.add(new EditType(TYPE_EMAIL2, R.string.type_email_2, R.string.email_2)
+            kind.typeList.add(new EditType(TYPE_EMAIL2, R.string.type_email_2)
                     .setSpecificMax(1));
-            kind.typeList.add(new EditType(TYPE_EMAIL3, R.string.type_email_3, R.string.email_3)
+            kind.typeList.add(new EditType(TYPE_EMAIL3, R.string.type_email_3)
                     .setSpecificMax(1));
 
             kind.fieldList = Lists.newArrayList();
@@ -539,9 +539,12 @@
 
             kind.typeColumn = Im.TYPE;
             kind.typeList = new ArrayList<EditType>();
-            kind.typeList.add(new EditType(TYPE_IM1, R.string.type_im_1).setSpecificMax(1));
-            kind.typeList.add(new EditType(TYPE_IM2, R.string.type_im_2).setSpecificMax(1));
-            kind.typeList.add(new EditType(TYPE_IM3, R.string.type_im_3).setSpecificMax(1));
+            kind.typeList.add(new EditType(TYPE_IM1, R.string.type_im_1).
+                    setSpecificMax(1));
+            kind.typeList.add(new EditType(TYPE_IM2, R.string.type_im_2).
+                    setSpecificMax(1));
+            kind.typeList.add(new EditType(TYPE_IM3, R.string.type_im_3).
+                    setSpecificMax(1));
 
             kind.fieldList = Lists.newArrayList();
             kind.fieldList.add(new EditField(Im.DATA, R.string.imLabelsGroup, FLAGS_EMAIL));
@@ -581,6 +584,46 @@
 
             list.add(kind);
         }
+
+        {
+            // EXCHANGE: ORGANIZATION
+            DataKind kind = new DataKind(Organization.CONTENT_ITEM_TYPE,
+                    R.string.organizationLabelsGroup, R.drawable.sym_action_organization, 30, true);
+
+            kind.actionHeader = new SimpleInflater(list.resPackageName, R.string.organizationLabelsGroup);
+            // TODO: build body from multiple fields
+            kind.actionBody = new SimpleInflater(Organization.TITLE);
+
+            kind.typeColumn = Organization.TYPE;
+            kind.typeList = Lists.newArrayList();
+            kind.typeList.add(new EditType(Organization.TYPE_WORK, R.string.type_work));
+            kind.typeList.add(new EditType(Organization.TYPE_OTHER, R.string.type_other));
+            kind.typeList.add(new EditType(Organization.TYPE_CUSTOM, R.string.type_custom)
+                    .setSecondary(true).setCustomColumn(Organization.LABEL));
+
+            kind.fieldList = Lists.newArrayList();
+            kind.fieldList.add(new EditField(Organization.COMPANY, R.string.ghostData_company,
+                    FLAGS_GENERIC_NAME));
+            kind.fieldList.add(new EditField(Organization.TITLE, R.string.ghostData_title,
+                    FLAGS_GENERIC_NAME));
+
+            list.add(kind);
+        }
+
+        {
+            // EXCHANGE: NOTE
+            DataKind kind = new DataKind(Note.CONTENT_ITEM_TYPE,
+                    R.string.label_notes, R.drawable.sym_note, 110, true);
+            kind.secondary = true;
+
+            kind.actionHeader = new SimpleInflater(list.resPackageName, R.string.label_notes);
+            kind.actionBody = new SimpleInflater(Note.NOTE);
+
+            kind.fieldList = Lists.newArrayList();
+            kind.fieldList.add(new EditField(Note.NOTE, R.string.label_notes, FLAGS_NOTE));
+
+            list.add(kind);
+        }
     }
 
     /**
