diff --git a/res/values/arrays.xml b/res/values/arrays.xml
index 9664012..265ca28 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -392,6 +392,7 @@
         <item>@string/network_traffic_units_megabits</item>
         <item>@string/network_traffic_units_kilobytes</item>
         <item>@string/network_traffic_units_megabytes</item>
+        <item>@string/network_traffic_units_auto</item>
     </string-array>
 
     <string-array name="network_traffic_units_values" translatable="false">
@@ -399,6 +400,39 @@
         <item>1</item>
         <item>2</item>
         <item>3</item>
+        <item>4</item>
+    </string-array>
+
+    <string-array name="network_traffic_show_units_entries" translatable="false">
+        <item>@string/network_traffic_show_units_off</item>
+        <item>@string/network_traffic_show_units_on</item>
+        <item>@string/network_traffic_show_units_compact</item>
+    </string-array>
+
+    <string-array name="network_traffic_show_units_values" translatable="false">
+        <item>0</item>
+        <item>1</item>
+        <item>2</item>
+    </string-array>
+
+    <string-array name="network_traffic_show_units_entries_bits" translatable="false">
+        <item>@string/network_traffic_show_units_off</item>
+        <item>@string/network_traffic_show_units_on</item>
+    </string-array>
+
+    <string-array name="network_traffic_show_units_values_bits" translatable="false">
+        <item>0</item>
+        <item>1</item>
+    </string-array>
+
+    <string-array name="network_traffic_show_units_entries_auto" translatable="false">
+        <item>@string/network_traffic_show_units_on</item>
+        <item>@string/network_traffic_show_units_compact</item>
+    </string-array>
+
+    <string-array name="network_traffic_show_units_values_auto" translatable="false">
+        <item>1</item>
+        <item>2</item>
     </string-array>
 
     <!-- Sms limit -->
diff --git a/res/values/strings.xml b/res/values/strings.xml
index f63a42c..0358a7e 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -516,7 +516,11 @@
     <string name="network_traffic_units_megabits">Megabits per second (Mb/s)</string>
     <string name="network_traffic_units_kilobytes">Kilobytes per second (kB/s)</string>
     <string name="network_traffic_units_megabytes">Megabytes per second (MB/s)</string>
+    <string name="network_traffic_units_auto">Automatic (kB/s or MB/s)</string>
     <string name="network_traffic_show_units">Show units</string>
+    <string name="network_traffic_show_units_off">Off</string>
+    <string name="network_traffic_show_units_on">On</string>
+    <string name="network_traffic_show_units_compact">Compact</string>
     <string name="network_traffic_show_units_summary">Whether to show traffic measurement units in the statusbar</string>
     <string name="network_traffic_disabled_clock">Network traffic disabled due to clock position</string>
 
diff --git a/res/xml/network_traffic_settings.xml b/res/xml/network_traffic_settings.xml
index efa7aa4..ea6be97 100644
--- a/res/xml/network_traffic_settings.xml
+++ b/res/xml/network_traffic_settings.xml
@@ -35,10 +35,12 @@
         android:summary="%s"
         android:title="@string/network_traffic_units_title" />
 
-    <lineageos.preference.LineageSecureSettingSwitchPreference
-        android:defaultValue="true"
+    <DropDownPreference
+        android:entries="@array/network_traffic_show_units_entries"
+        android:entryValues="@array/network_traffic_show_units_values"
         android:key="network_traffic_show_units"
-        android:summary="@string/network_traffic_show_units_summary"
+        android:persistent="false"
+        android:summary="%s"
         android:title="@string/network_traffic_show_units" />
 
 </PreferenceScreen>
diff --git a/src/org/lineageos/lineageparts/statusbar/NetworkTrafficSettings.java b/src/org/lineageos/lineageparts/statusbar/NetworkTrafficSettings.java
index 316f615..e2827a6 100644
--- a/src/org/lineageos/lineageparts/statusbar/NetworkTrafficSettings.java
+++ b/src/org/lineageos/lineageparts/statusbar/NetworkTrafficSettings.java
@@ -29,11 +29,21 @@
     private static final int POSITION_CENTER = 1;
     private static final int POSITION_END = 2;
 
+    private static final int UNITS_KILOBITS = 0;
+    private static final int UNITS_MEGABITS = 1;
+    private static final int UNITS_KILOBYTES = 2;
+    private static final int UNITS_MEGABYTES = 3;
+    private static final int UNITS_AUTOBYTES = 4;
+
+    private static final int SHOW_UNITS_OFF = 0;
+    private static final int SHOW_UNITS_ON = 1;
+    private static final int SHOW_UNITS_COMPACT = 2;
+
     private DropDownPreference mNetTrafficMode;
     private DropDownPreference mNetTrafficPosition;
     private LineageSecureSettingSwitchPreference mNetTrafficAutohide;
     private DropDownPreference mNetTrafficUnits;
-    private LineageSecureSettingSwitchPreference mNetTrafficShowUnits;
+    private DropDownPreference mNetTrafficShowUnits;
 
     @Override
     public void onCreate(Bundle savedInstanceState) {
@@ -90,11 +100,12 @@
         mNetTrafficUnits = findPreference(LineageSettings.Secure.NETWORK_TRAFFIC_UNITS);
         mNetTrafficUnits.setOnPreferenceChangeListener(this);
         int units = LineageSettings.Secure.getInt(resolver,
-                LineageSettings.Secure.NETWORK_TRAFFIC_UNITS, /* Mbps */ 1);
+                LineageSettings.Secure.NETWORK_TRAFFIC_UNITS, UNITS_KILOBYTES);
         mNetTrafficUnits.setValue(String.valueOf(units));
 
         mNetTrafficShowUnits = findPreference(LineageSettings.Secure.NETWORK_TRAFFIC_SHOW_UNITS);
         mNetTrafficShowUnits.setOnPreferenceChangeListener(this);
+        adjustShowUnitsState(units, resolver);
 
         updateEnabledStates(mode);
     }
@@ -114,10 +125,48 @@
             int units = Integer.parseInt((String) newValue);
             LineageSettings.Secure.putInt(getActivity().getContentResolver(),
                     LineageSettings.Secure.NETWORK_TRAFFIC_UNITS, units);
+            adjustShowUnitsState(units, getActivity().getContentResolver());
+        } else if (preference == mNetTrafficShowUnits) {
+            int showUnits = Integer.valueOf((String) newValue);
+            LineageSettings.Secure.putInt(getActivity().getContentResolver(),
+                    LineageSettings.Secure.NETWORK_TRAFFIC_SHOW_UNITS, showUnits);
         }
         return true;
     }
 
+    private void adjustShowUnitsState(int units, ContentResolver resolver) {
+        int showUnits = LineageSettings.Secure.getInt(resolver,
+                LineageSettings.Secure.NETWORK_TRAFFIC_SHOW_UNITS, SHOW_UNITS_ON);
+        if (units == UNITS_KILOBYTES || units == UNITS_MEGABYTES) {
+            // off, on, compact
+            mNetTrafficShowUnits.setEntries(R.array.network_traffic_show_units_entries);
+            mNetTrafficShowUnits.setEntryValues(R.array.network_traffic_show_units_values);
+        } else {
+            boolean putShowUnits = false;
+            if (units == UNITS_AUTOBYTES) {
+                if (showUnits == SHOW_UNITS_OFF) {
+                    showUnits = SHOW_UNITS_COMPACT;
+                    putShowUnits = true;
+                }
+                // on, compact
+                mNetTrafficShowUnits.setEntries(R.array.network_traffic_show_units_entries_auto);
+                mNetTrafficShowUnits.setEntryValues(R.array.network_traffic_show_units_values_auto);
+            } else {
+                if (showUnits == SHOW_UNITS_COMPACT) {
+                    showUnits = SHOW_UNITS_ON;
+                    putShowUnits = true;
+                }
+                // off, on
+                mNetTrafficShowUnits.setEntries(R.array.network_traffic_show_units_entries_bits);
+                mNetTrafficShowUnits.setEntryValues(R.array.network_traffic_show_units_values_bits);
+            }
+            if (putShowUnits)
+                LineageSettings.Secure.putInt(resolver,
+                        LineageSettings.Secure.NETWORK_TRAFFIC_SHOW_UNITS, showUnits);
+        }
+        mNetTrafficShowUnits.setValue(String.valueOf(showUnits));
+    }
+
     private void updateEnabledStates(int mode) {
         final boolean enabled = mode != 0;
         mNetTrafficPosition.setEnabled(enabled);
