diff --git a/res/values/attrs.xml b/res/values/attrs.xml
index 94d7df8..0a072ae 100644
--- a/res/values/attrs.xml
+++ b/res/values/attrs.xml
@@ -130,4 +130,9 @@
     <declare-styleable name="WorkPreference">
         <attr name="forWork" format="boolean" />
     </declare-styleable>
+
+    <declare-styleable name="DividerPreference">
+        <attr name="allowDividerAbove" format="boolean" />
+        <attr name="allowDividerBelow" format="boolean" />
+    </declare-styleable>
 </resources>
diff --git a/res/xml/battery_saver_settings.xml b/res/xml/battery_saver_settings.xml
index 832da58..630016f 100644
--- a/res/xml/battery_saver_settings.xml
+++ b/res/xml/battery_saver_settings.xml
@@ -15,6 +15,7 @@
 -->
 
 <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
+        xmlns:settings="http://schemas.android.com/apk/res-auto"
         android:title="@string/battery_saver"
         android:key="battery_saver">
 
@@ -29,6 +30,7 @@
             android:key="description"
             android:summary="@*android:string/battery_saver_description"
             android:persistent="false"
-            android:selectable="false" />
+            android:selectable="false"
+            settings:allowDividerAbove="true" />
 
 </PreferenceScreen>
diff --git a/res/xml/data_usage.xml b/res/xml/data_usage.xml
index 0626da9..95e16ce 100644
--- a/res/xml/data_usage.xml
+++ b/res/xml/data_usage.xml
@@ -15,6 +15,7 @@
 -->
 
 <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:settings="http://schemas.android.com/apk/res-auto"
     android:title="@string/data_usage_summary_title">
 
     <PreferenceCategory
@@ -25,9 +26,10 @@
             android:key="status_header"
             android:selectable="false" />
 
-        <Preference
+        <com.android.settings.DividerPreference
             android:key="limit_summary"
-            android:selectable="false" />
+            android:selectable="false"
+            settings:allowDividerBelow="true" />
 
         <com.android.settings.datausage.DataSaverPreference
             android:key="restrict_background"
diff --git a/src/com/android/settings/DividedCategory.java b/src/com/android/settings/DividedCategory.java
new file mode 100644
index 0000000..d1c40c8
--- /dev/null
+++ b/src/com/android/settings/DividedCategory.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2016 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.settings;
+
+import android.content.Context;
+import android.support.v7.preference.PreferenceCategory;
+import android.support.v7.preference.PreferenceViewHolder;
+import android.util.AttributeSet;
+
+/**
+ * PreferenceCategory that allows a divider above it.
+ */
+public class DividedCategory extends PreferenceCategory {
+
+    public DividedCategory(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    @Override
+    public void onBindViewHolder(PreferenceViewHolder holder) {
+        super.onBindViewHolder(holder);
+        holder.setDividerAllowedAbove(true);
+    }
+}
diff --git a/src/com/android/settings/DividerPreference.java b/src/com/android/settings/DividerPreference.java
new file mode 100644
index 0000000..e9ff7a7
--- /dev/null
+++ b/src/com/android/settings/DividerPreference.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2016 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.settings;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceViewHolder;
+import android.util.AttributeSet;
+
+public class DividerPreference extends Preference {
+
+    private Boolean mAllowAbove;
+    private Boolean mAllowBelow;
+
+    public DividerPreference(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.DividerPreference, 0, 0);
+        if (a.hasValue(R.styleable.DividerPreference_allowDividerAbove)) {
+            mAllowAbove = a.getBoolean(R.styleable.DividerPreference_allowDividerAbove, false);
+        }
+        if (a.hasValue(R.styleable.DividerPreference_allowDividerBelow)) {
+            mAllowBelow = a.getBoolean(R.styleable.DividerPreference_allowDividerBelow, false);
+        }
+    }
+
+    @Override
+    public void onBindViewHolder(PreferenceViewHolder holder) {
+        super.onBindViewHolder(holder);
+        if (mAllowAbove != null) {
+            holder.setDividerAllowedAbove(mAllowAbove);
+        }
+        if (mAllowBelow != null) {
+            holder.setDividerAllowedBelow(mAllowBelow);
+        }
+    }
+}
diff --git a/src/com/android/settings/datausage/TemplatePreferenceCategory.java b/src/com/android/settings/datausage/TemplatePreferenceCategory.java
index 0be5c73..1ce5f1c 100644
--- a/src/com/android/settings/datausage/TemplatePreferenceCategory.java
+++ b/src/com/android/settings/datausage/TemplatePreferenceCategory.java
@@ -17,10 +17,10 @@
 import android.content.Context;
 import android.net.NetworkTemplate;
 import android.support.v7.preference.Preference;
-import android.support.v7.preference.PreferenceCategory;
 import android.util.AttributeSet;
+import com.android.settings.DividedCategory;
 
-public class TemplatePreferenceCategory extends PreferenceCategory implements TemplatePreference {
+public class TemplatePreferenceCategory extends DividedCategory implements TemplatePreference {
 
     private NetworkTemplate mTemplate;
     private int mSubId;
diff --git a/src/com/android/settings/fuelgauge/WallOfTextPreference.java b/src/com/android/settings/fuelgauge/WallOfTextPreference.java
index 096f98a..6b29742 100644
--- a/src/com/android/settings/fuelgauge/WallOfTextPreference.java
+++ b/src/com/android/settings/fuelgauge/WallOfTextPreference.java
@@ -21,26 +21,14 @@
 import android.support.v7.preference.PreferenceViewHolder;
 import android.util.AttributeSet;
 import android.widget.TextView;
+import com.android.settings.DividerPreference;
 
-public class WallOfTextPreference extends Preference {
-
-    public WallOfTextPreference(Context context) {
-        super(context);
-    }
+public class WallOfTextPreference extends DividerPreference {
 
     public WallOfTextPreference(Context context, AttributeSet attrs) {
         super(context, attrs);
     }
 
-    public WallOfTextPreference(Context context, AttributeSet attrs, int defStyleAttr) {
-        super(context, attrs, defStyleAttr);
-    }
-
-    public WallOfTextPreference(Context context, AttributeSet attrs, int defStyleAttr,
-            int defStyleRes) {
-        super(context, attrs, defStyleAttr, defStyleRes);
-    }
-
     @Override
     public void onBindViewHolder(PreferenceViewHolder view) {
         super.onBindViewHolder(view);
