diff --git a/src/com/android/contacts/detail/ContactDetailFragment.java b/src/com/android/contacts/detail/ContactDetailFragment.java
index 9709480..57a5583 100644
--- a/src/com/android/contacts/detail/ContactDetailFragment.java
+++ b/src/com/android/contacts/detail/ContactDetailFragment.java
@@ -1073,14 +1073,12 @@
                 entry.typeString = "";
                 for (EditType type : kind.typeList) {
                     if (type.rawValue == entry.type) {
-                        if (!type.unspecifiedType) {
-                            if (type.customColumn == null) {
-                                // Non-custom type. Get its description from the resource
-                                entry.typeString = context.getString(type.labelRes);
-                            } else {
-                                // Custom type. Read it from the database
-                                entry.typeString = values.getAsString(type.customColumn);
-                            }
+                        if (type.customColumn == null) {
+                            // Non-custom type. Get its description from the resource
+                            entry.typeString = context.getString(type.labelRes);
+                        } else {
+                            // Custom type. Read it from the database
+                            entry.typeString = values.getAsString(type.customColumn);
                         }
                         break;
                     }
diff --git a/src/com/android/contacts/model/AccountType.java b/src/com/android/contacts/model/AccountType.java
index 5de4340..608fca3 100644
--- a/src/com/android/contacts/model/AccountType.java
+++ b/src/com/android/contacts/model/AccountType.java
@@ -219,11 +219,6 @@
         public int specificMax;
         public String customColumn;
 
-        /**
-         * True if this type may be shown as blank.
-         */
-        public boolean unspecifiedType;
-
         public EditType(int rawValue, int labelRes) {
             this.rawValue = rawValue;
             this.labelRes = labelRes;
@@ -245,11 +240,6 @@
             return this;
         }
 
-        public EditType setUnspecifiedType(boolean unspecifiedType) {
-            this.unspecifiedType = unspecifiedType;
-            return this;
-        }
-
         @Override
         public boolean equals(Object object) {
             if (object instanceof EditType) {
diff --git a/src/com/android/contacts/model/BaseAccountType.java b/src/com/android/contacts/model/BaseAccountType.java
index 547a488..06cb039 100644
--- a/src/com/android/contacts/model/BaseAccountType.java
+++ b/src/com/android/contacts/model/BaseAccountType.java
@@ -69,28 +69,23 @@
     }
 
     protected EditType buildPhoneType(int type) {
-        return new EditType(type, Phone.getTypeLabelResource(type))
-                .setUnspecifiedType(type == Phone.TYPE_OTHER);
+        return new EditType(type, Phone.getTypeLabelResource(type));
     }
 
     protected EditType buildEmailType(int type) {
-        return new EditType(type, Email.getTypeLabelResource(type))
-                .setUnspecifiedType(type == Email.TYPE_OTHER);
+        return new EditType(type, Email.getTypeLabelResource(type));
     }
 
     protected EditType buildPostalType(int type) {
-        return new EditType(type, StructuredPostal.getTypeLabelResource(type))
-                .setUnspecifiedType(type == StructuredPostal.TYPE_OTHER);
+        return new EditType(type, StructuredPostal.getTypeLabelResource(type));
     }
 
     protected EditType buildImType(int type) {
-        return new EditType(type, Im.getProtocolLabelResource(type))
-                .setUnspecifiedType(type == Im.TYPE_OTHER);
+        return new EditType(type, Im.getProtocolLabelResource(type));
     }
 
     protected EditType buildEventType(int type, boolean yearOptional) {
-        return new EventEditType(type, Event.getTypeResource(type)).setYearOptional(yearOptional)
-                .setUnspecifiedType(type == Event.TYPE_OTHER);
+        return new EventEditType(type, Event.getTypeResource(type)).setYearOptional(yearOptional);
     }
 
     protected EditType buildRelationType(int type) {
