diff --git a/res/layout/dialer_preferences.xml b/res/layout/dialer_preferences.xml
deleted file mode 100644
index 023b122..0000000
--- a/res/layout/dialer_preferences.xml
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 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.
--->
-
-<!-- Layout of a header item in PreferenceActivity. This is modified from the platform
-     preference_header_item-->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:minHeight="48dp"
-    android:background="?android:attr/activatedBackgroundIndicator"
-    android:gravity="center_vertical"
-    android:paddingEnd="?android:attr/scrollbarSize">
-
-    <RelativeLayout
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_marginStart="@dimen/preference_side_margin"
-        android:layout_marginEnd="@dimen/preference_side_margin"
-        android:layout_weight="1"
-        android:paddingTop="@dimen/preference_padding_top"
-        android:paddingBottom="@dimen/preference_padding_bottom">
-
-        <TextView android:id="@+id/title"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:singleLine="true"
-            android:textAppearance="?android:attr/textAppearance"
-            android:textSize="16sp"
-            android:textColor="@color/setting_primary_color"
-            android:ellipsize="marquee"
-            android:fadingEdge="horizontal" />
-
-        <TextView android:id="@+id/summary"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_below="@id/title"
-            android:layout_alignStart="@id/title"
-            android:textAppearance="?android:attr/textAppearanceSmall"
-            android:textColor="@color/setting_secondary_color"
-            android:lineSpacingExtra="@dimen/preference_summary_line_spacing_extra"
-            android:ellipsize="end"
-            android:maxLines="2" />
-
-    </RelativeLayout>
-
-</LinearLayout>
\ No newline at end of file
diff --git a/src/com/android/dialer/settings/DialerSettingsActivity.java b/src/com/android/dialer/settings/DialerSettingsActivity.java
index d6e8826..0d4b969 100644
--- a/src/com/android/dialer/settings/DialerSettingsActivity.java
+++ b/src/com/android/dialer/settings/DialerSettingsActivity.java
@@ -15,13 +15,7 @@
 import android.telecom.TelecomManager;
 import android.telephony.TelephonyManager;
 import android.text.TextUtils;
-import android.view.LayoutInflater;
 import android.view.MenuItem;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ArrayAdapter;
-import android.widget.ListAdapter;
-import android.widget.TextView;
 
 import com.android.dialer.DialtactsActivity;
 import com.android.dialer.R;
@@ -31,7 +25,6 @@
 public class DialerSettingsActivity extends PreferenceActivity {
 
     protected SharedPreferences mPreferences;
-    private HeaderAdapter mHeaderAdapter;
 
     private static final int OWNER_HANDLE_ID = 0;
 
@@ -95,23 +88,6 @@
         return true;
     }
 
-    @Override
-    public void setListAdapter(ListAdapter adapter) {
-        if (adapter == null) {
-            super.setListAdapter(null);
-        } else {
-            // We don't have access to the hidden getHeaders() method, so grab the headers from
-            // the intended adapter and then replace it with our own.
-            int headerCount = adapter.getCount();
-            List<Header> headers = Lists.newArrayList();
-            for (int i = 0; i < headerCount; i++) {
-                headers.add((Header) adapter.getItem(i));
-            }
-            mHeaderAdapter = new HeaderAdapter(this, headers);
-            super.setListAdapter(mHeaderAdapter);
-        }
-    }
-
     /**
      * Whether a user handle associated with the current user is that of the primary owner. That is,
      * whether there is a user handle which has an id which matches the owner's handle.
@@ -128,51 +104,4 @@
 
         return false;
     }
-
-    /**
-     * This custom {@code ArrayAdapter} is mostly identical to the equivalent one in
-     * {@code PreferenceActivity}, except with a local layout resource.
-     */
-    private static class HeaderAdapter extends ArrayAdapter<Header> {
-        static class HeaderViewHolder {
-            TextView title;
-            TextView summary;
-        }
-
-        private LayoutInflater mInflater;
-
-        public HeaderAdapter(Context context, List<Header> objects) {
-            super(context, 0, objects);
-            mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
-        }
-
-        @Override
-        public View getView(int position, View convertView, ViewGroup parent) {
-            HeaderViewHolder holder;
-            View view;
-
-            if (convertView == null) {
-                view = mInflater.inflate(R.layout.dialer_preferences, parent, false);
-                holder = new HeaderViewHolder();
-                holder.title = (TextView) view.findViewById(R.id.title);
-                holder.summary = (TextView) view.findViewById(R.id.summary);
-                view.setTag(holder);
-            } else {
-                view = convertView;
-                holder = (HeaderViewHolder) view.getTag();
-            }
-
-            // All view fields must be updated every time, because the view may be recycled
-            Header header = getItem(position);
-            holder.title.setText(header.getTitle(getContext().getResources()));
-            CharSequence summary = header.getSummary(getContext().getResources());
-            if (!TextUtils.isEmpty(summary)) {
-                holder.summary.setVisibility(View.VISIBLE);
-                holder.summary.setText(summary);
-            } else {
-                holder.summary.setVisibility(View.GONE);
-            }
-            return view;
-        }
-    }
 }
