diff --git a/proguard.flags b/proguard.flags
index f586b72..75fbfd7 100644
--- a/proguard.flags
+++ b/proguard.flags
@@ -1,5 +1,3 @@
--ignorewarnings
-
 -keep class com.android.contacts.model.Sources {
   public <init>(...);
 }
@@ -101,12 +99,10 @@
 -keep class com.google.common.base.Functions { *; }
 -keep class com.google.common.base.Objects { *; }
 -keep class com.google.common.base.Preconditions { *; }
--keep class com.google.common.collect.ImmutableMap { *; }
--keep class com.google.common.collect.ImmutableSet { *; }
--keep class com.google.common.collect.Lists { *; }
--keep class com.google.common.collect.Maps { *; }
--keep class com.google.common.collect.Multimap { *; }
--keep class com.google.common.collect.Sets { *; }
+-keep class com.google.common.collect.** { *; }
+-keep class com.google.common.util.concurrent.** { *; }
+
+-keep class com.android.common.widget.CompositeCursorAdapter { *; }
 
 # Any class or method annotated with NeededForReflection.
 -keep @com.android.contacts.test.NeededForReflection class *
diff --git a/res/layout/phonetic_name_editor_view.xml b/res/layout/phonetic_name_editor_view.xml
deleted file mode 100644
index efaf644..0000000
--- a/res/layout/phonetic_name_editor_view.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  Copyright (C) 2011 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<com.android.contacts.editor.PhoneticNameEditorView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:minHeight="@dimen/editor_min_line_item_height"
-    android:layout_marginStart="@dimen/editor_kind_icon_total_width">
-
-    <!-- This isn't used in PhoneticNameEditorView. It is only included so that
-        StructuredNameEditorView's base classes don't need extra null checks. -->
-    <include
-        android:id="@+id/spinner"
-        layout="@layout/edit_spinner"
-        android:visibility="gone" />
-
-    <include
-        android:id="@+id/editors"
-        layout="@layout/edit_field_list" />
-
-    <include
-        android:id="@+id/expansion_view_container"
-        layout="@layout/name_edit_expansion_view"
-        android:visibility="visible" />
-
-    <!-- This isn't used in PhoneticNameEditorView. It is only included so that
-        StructuredNameEditorView's base classes don't need extra null checks. -->
-    <include
-        android:id="@+id/delete_button_container"
-        layout="@layout/edit_delete_button"
-        android:visibility="gone" />
-
-</com.android.contacts.editor.PhoneticNameEditorView>
diff --git a/src/com/android/contacts/editor/EditorUiUtils.java b/src/com/android/contacts/editor/EditorUiUtils.java
index a500eae..9aa5c8e 100644
--- a/src/com/android/contacts/editor/EditorUiUtils.java
+++ b/src/com/android/contacts/editor/EditorUiUtils.java
@@ -88,9 +88,6 @@
         // Relation.CONTENT_ITEM_TYPE
         //
         // Un-supported mime types need to mapped with -1.
-
-        mimetypeLayoutMap.put(DataKind.PSEUDO_MIME_TYPE_PHONETIC_NAME,
-                R.layout.phonetic_name_editor_view);
         mimetypeLayoutMap.put(StructuredName.CONTENT_ITEM_TYPE,
                 R.layout.structured_name_editor_view);
         mimetypeLayoutMap.put(GroupMembership.CONTENT_ITEM_TYPE, -1);
diff --git a/src/com/android/contacts/editor/KindSectionView.java b/src/com/android/contacts/editor/KindSectionView.java
index 02eae11..7e9d53e 100644
--- a/src/com/android/contacts/editor/KindSectionView.java
+++ b/src/com/android/contacts/editor/KindSectionView.java
@@ -362,8 +362,8 @@
         // The account type doesn't support phonetic name.
         if (phoneticNameKind == null) return;
 
-        final PhoneticNameEditorView phoneticNameView = (PhoneticNameEditorView) mLayoutInflater
-                .inflate(R.layout.phonetic_name_editor_view, mEditors, /* attachToRoot =*/ false);
+        final TextFieldsEditorView phoneticNameView = (TextFieldsEditorView) mLayoutInflater
+                .inflate(R.layout.text_fields_editor_view, mEditors, /* attachToRoot =*/ false);
         phoneticNameView.setEditorListener(new OtherNameKindEditorListener());
         phoneticNameView.setDeletable(false);
         phoneticNameView.setValues(
diff --git a/src/com/android/contacts/editor/PhoneticNameEditorView.java b/src/com/android/contacts/editor/PhoneticNameEditorView.java
deleted file mode 100644
index c96548c..0000000
--- a/src/com/android/contacts/editor/PhoneticNameEditorView.java
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.editor;
-
-import android.content.Context;
-import android.content.res.Resources;
-import android.text.TextUtils;
-import android.util.AttributeSet;
-
-import com.android.contacts.R;
-import com.android.contacts.model.RawContactDelta;
-import com.android.contacts.model.ValuesDelta;
-import com.android.contacts.model.dataitem.DataKind;
-import com.android.contacts.model.dataitem.StructuredNameDataItem;
-import com.android.contacts.util.NameConverter;
-
-/**
- * A dedicated editor for phonetic name. It is similar to {@link StructuredNameEditorView}.
- */
-public class PhoneticNameEditorView extends TextFieldsEditorView {
-
-    private static class PhoneticValuesDelta extends ValuesDelta {
-        private ValuesDelta mValues;
-        private String mPhoneticName;
-
-        public PhoneticValuesDelta(ValuesDelta values) {
-            mValues = values;
-            buildPhoneticName();
-        }
-
-        @Override
-        public void put(String key, String value) {
-            if (key.equals(DataKind.PSEUDO_COLUMN_PHONETIC_NAME)) {
-                mPhoneticName = value;
-                parsePhoneticName(value);
-            } else {
-                mValues.put(key, value);
-                buildPhoneticName();
-            }
-        }
-
-        @Override
-        public String getAsString(String key) {
-            if (key.equals(DataKind.PSEUDO_COLUMN_PHONETIC_NAME)) {
-                return mPhoneticName;
-            } else {
-                return mValues.getAsString(key);
-            }
-        }
-
-        private void parsePhoneticName(String value) {
-            StructuredNameDataItem dataItem = NameConverter.parsePhoneticName(value, null);
-            mValues.setPhoneticFamilyName(dataItem.getPhoneticFamilyName());
-            mValues.setPhoneticMiddleName(dataItem.getPhoneticMiddleName());
-            mValues.setPhoneticGivenName(dataItem.getPhoneticGivenName());
-        }
-
-        private void buildPhoneticName() {
-            String family = mValues.getPhoneticFamilyName();
-            String middle = mValues.getPhoneticMiddleName();
-            String given = mValues.getPhoneticGivenName();
-            mPhoneticName = NameConverter.buildPhoneticName(family, middle, given);
-        }
-
-        @Override
-        public Long getId() {
-            return mValues.getId();
-        }
-
-        @Override
-        public boolean isVisible() {
-            return mValues.isVisible();
-        }
-    }
-
-    public static boolean isUnstructuredPhoneticNameColumn(String column) {
-        return DataKind.PSEUDO_COLUMN_PHONETIC_NAME.equals(column);
-    }
-
-    public PhoneticNameEditorView(Context context) {
-        super(context);
-    }
-
-    public PhoneticNameEditorView(Context context, AttributeSet attrs) {
-        super(context, attrs);
-    }
-
-    public PhoneticNameEditorView(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
-    }
-
-    @Override
-    protected void onFinishInflate() {
-        super.onFinishInflate();
-        final Resources res = getResources();
-        mCollapseButtonDescription = res
-                .getString(R.string.collapse_phonetic_name_fields_description);
-        mExpandButtonDescription = res
-                .getString(R.string.expand_phonetic_name_fields_description);
-    }
-
-    @Override
-    public void setValues(DataKind kind, ValuesDelta entry, RawContactDelta state, boolean readOnly,
-            ViewIdGenerator vig) {
-        if (!(entry instanceof PhoneticValuesDelta)) {
-            entry = new PhoneticValuesDelta(entry);
-        }
-        super.setValues(kind, entry, state, readOnly, vig);
-        updateEmptiness();
-    }
-
-    @Override
-    public void onFieldChanged(String column, String value) {
-        if (!isFieldChanged(column, value)) {
-            return;
-        }
-
-        if (hasShortAndLongForms()) {
-            PhoneticValuesDelta entry = (PhoneticValuesDelta) getEntry();
-
-            // Determine whether the user is modifying the structured or unstructured phonetic
-            // name field. See a similar approach in {@link StructuredNameEditor#onFieldChanged}.
-            // This is because on device rotation, a hidden TextView's onRestoreInstanceState() will
-            // be called and incorrectly restore a null value for the hidden field, which ultimately
-            // modifies the underlying phonetic name. Hence, ignore onFieldChanged() update requests
-            // from fields that aren't visible.
-            boolean isEditingUnstructuredPhoneticName = !areOptionalFieldsVisible();
-
-            if (isEditingUnstructuredPhoneticName == isUnstructuredPhoneticNameColumn(column)) {
-                // Call into the superclass to update the field and rebuild the underlying
-                // phonetic name.
-                super.onFieldChanged(column, value);
-            }
-        } else {
-            // All fields are always visible, so we don't have to worry about blocking updates
-            // from onRestoreInstanceState() from hidden fields. Always call into the superclass
-            // to update the field and rebuild the underlying phonetic name.
-            super.onFieldChanged(column, value);
-        }
-    }
-
-    public boolean hasData() {
-        ValuesDelta entry = getEntry();
-
-        String family = entry.getPhoneticFamilyName();
-        String middle = entry.getPhoneticMiddleName();
-        String given = entry.getPhoneticGivenName();
-
-        return !TextUtils.isEmpty(family) || !TextUtils.isEmpty(middle)
-                || !TextUtils.isEmpty(given);
-    }
-}
diff --git a/src/com/android/contacts/model/RawContactModifier.java b/src/com/android/contacts/model/RawContactModifier.java
index 0252567..789bd10 100644
--- a/src/com/android/contacts/model/RawContactModifier.java
+++ b/src/com/android/contacts/model/RawContactModifier.java
@@ -1038,14 +1038,10 @@
             return;
         }
 
-        boolean supportPhoneticFullName = false;
         boolean supportPhoneticFamilyName = false;
         boolean supportPhoneticMiddleName = false;
         boolean supportPhoneticGivenName = false;
         for (EditField editField : newDataKind.fieldList) {
-            if (DataKind.PSEUDO_COLUMN_PHONETIC_NAME.equals(editField.column)) {
-                supportPhoneticFullName = true;
-            }
             if (StructuredName.PHONETIC_FAMILY_NAME.equals(editField.column)) {
                 supportPhoneticFamilyName = true;
             }
@@ -1057,52 +1053,14 @@
             }
         }
 
-
-        // Phonetic (full) name <-> PHONETIC_FAMILY_NAME, PHONETIC_MIDDLE_NAME, PHONETIC_GIVEN_NAME
-        final String phoneticFullName = values.getAsString(DataKind.PSEUDO_COLUMN_PHONETIC_NAME);
-        if (!TextUtils.isEmpty(phoneticFullName)) {
-            if (!supportPhoneticFullName) {
-                // Old data has a phonetic (full) name, while the new account doesn't allow it.
-                final StructuredNameDataItem tmpItem =
-                        NameConverter.parsePhoneticName(phoneticFullName, null);
-                values.remove(DataKind.PSEUDO_COLUMN_PHONETIC_NAME);
-                if (supportPhoneticFamilyName) {
-                    values.put(StructuredName.PHONETIC_FAMILY_NAME,
-                            tmpItem.getPhoneticFamilyName());
-                } else {
-                    values.remove(StructuredName.PHONETIC_FAMILY_NAME);
-                }
-                if (supportPhoneticMiddleName) {
-                    values.put(StructuredName.PHONETIC_MIDDLE_NAME,
-                            tmpItem.getPhoneticMiddleName());
-                } else {
-                    values.remove(StructuredName.PHONETIC_MIDDLE_NAME);
-                }
-                if (supportPhoneticGivenName) {
-                    values.put(StructuredName.PHONETIC_GIVEN_NAME,
-                            tmpItem.getPhoneticGivenName());
-                } else {
-                    values.remove(StructuredName.PHONETIC_GIVEN_NAME);
-                }
-            }
-        } else {
-            if (supportPhoneticFullName) {
-                // Old data does not have a phonetic (full) name, while the new account requires it.
-                values.put(DataKind.PSEUDO_COLUMN_PHONETIC_NAME,
-                        NameConverter.buildPhoneticName(
-                                values.getAsString(StructuredName.PHONETIC_FAMILY_NAME),
-                                values.getAsString(StructuredName.PHONETIC_MIDDLE_NAME),
-                                values.getAsString(StructuredName.PHONETIC_GIVEN_NAME)));
-            }
-            if (!supportPhoneticFamilyName) {
-                values.remove(StructuredName.PHONETIC_FAMILY_NAME);
-            }
-            if (!supportPhoneticMiddleName) {
-                values.remove(StructuredName.PHONETIC_MIDDLE_NAME);
-            }
-            if (!supportPhoneticGivenName) {
-                values.remove(StructuredName.PHONETIC_GIVEN_NAME);
-            }
+        if (!supportPhoneticFamilyName) {
+            values.remove(StructuredName.PHONETIC_FAMILY_NAME);
+        }
+        if (!supportPhoneticMiddleName) {
+            values.remove(StructuredName.PHONETIC_MIDDLE_NAME);
+        }
+        if (!supportPhoneticGivenName) {
+            values.remove(StructuredName.PHONETIC_GIVEN_NAME);
         }
 
         newState.addEntry(ValuesDelta.fromAfter(values));
diff --git a/src/com/android/contacts/model/account/BaseAccountType.java b/src/com/android/contacts/model/account/BaseAccountType.java
index a62f353..50f623a 100644
--- a/src/com/android/contacts/model/account/BaseAccountType.java
+++ b/src/com/android/contacts/model/account/BaseAccountType.java
@@ -218,14 +218,13 @@
         kind.typeOverallMax = 1;
 
         kind.fieldList = Lists.newArrayList();
-        kind.fieldList.add(new EditField(DataKind.PSEUDO_COLUMN_PHONETIC_NAME,
-                R.string.name_phonetic, FLAGS_PHONETIC).setShortForm(true));
+
         kind.fieldList.add(new EditField(StructuredName.PHONETIC_FAMILY_NAME,
-                R.string.name_phonetic_family, FLAGS_PHONETIC).setLongForm(true));
+                R.string.name_phonetic_family, FLAGS_PHONETIC));
         kind.fieldList.add(new EditField(StructuredName.PHONETIC_MIDDLE_NAME,
-                R.string.name_phonetic_middle, FLAGS_PHONETIC).setLongForm(true));
+                R.string.name_phonetic_middle, FLAGS_PHONETIC));
         kind.fieldList.add(new EditField(StructuredName.PHONETIC_GIVEN_NAME,
-                R.string.name_phonetic_given, FLAGS_PHONETIC).setLongForm(true));
+                R.string.name_phonetic_given, FLAGS_PHONETIC));
 
         return kind;
     }
@@ -977,14 +976,12 @@
             kinds.add(kp);
 
             // We may want to change the order depending on displayOrderPrimary too.
-            kp.fieldList.add(new EditField(DataKind.PSEUDO_COLUMN_PHONETIC_NAME,
-                    R.string.name_phonetic, FLAGS_PHONETIC).setShortForm(true));
             kp.fieldList.add(new EditField(StructuredName.PHONETIC_FAMILY_NAME,
-                    R.string.name_phonetic_family, FLAGS_PHONETIC).setLongForm(true));
+                    R.string.name_phonetic_family, FLAGS_PHONETIC));
             kp.fieldList.add(new EditField(StructuredName.PHONETIC_MIDDLE_NAME,
-                    R.string.name_phonetic_middle, FLAGS_PHONETIC).setLongForm(true));
+                    R.string.name_phonetic_middle, FLAGS_PHONETIC));
             kp.fieldList.add(new EditField(StructuredName.PHONETIC_GIVEN_NAME,
-                    R.string.name_phonetic_given, FLAGS_PHONETIC).setLongForm(true));
+                    R.string.name_phonetic_given, FLAGS_PHONETIC));
             return kinds;
         }
     }
diff --git a/src/com/android/contacts/model/dataitem/DataKind.java b/src/com/android/contacts/model/dataitem/DataKind.java
index 993e6cc..f31e21c 100644
--- a/src/com/android/contacts/model/dataitem/DataKind.java
+++ b/src/com/android/contacts/model/dataitem/DataKind.java
@@ -39,7 +39,6 @@
 
     public static final String PSEUDO_MIME_TYPE_NAME = "#name";
     public static final String PSEUDO_MIME_TYPE_PHONETIC_NAME = "#phoneticName";
-    public static final String PSEUDO_COLUMN_PHONETIC_NAME = "#phoneticName";
 
     public String resourcePackageName;
     public String mimeType;
