diff --git a/src/com/android/settings/datausage/DataUsageSummary.java b/src/com/android/settings/datausage/DataUsageSummary.java
index e37cc4a..6fddb2b 100644
--- a/src/com/android/settings/datausage/DataUsageSummary.java
+++ b/src/com/android/settings/datausage/DataUsageSummary.java
@@ -14,22 +14,15 @@
 
 package com.android.settings.datausage;
 
-import static android.net.ConnectivityManager.TYPE_ETHERNET;
-
 import android.app.Activity;
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
-import android.net.ConnectivityManager;
-import android.net.INetworkStatsSession;
 import android.net.NetworkPolicyManager;
 import android.net.NetworkTemplate;
-import android.net.TrafficStats;
 import android.net.wifi.WifiConfiguration;
 import android.net.wifi.WifiManager;
 import android.os.Bundle;
-import android.os.RemoteException;
-import android.os.SystemProperties;
 import android.os.UserManager;
 import android.provider.SearchIndexableResource;
 import android.support.annotation.VisibleForTesting;
@@ -46,6 +39,7 @@
 import android.view.Menu;
 import android.view.MenuInflater;
 import android.view.MenuItem;
+
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.settings.R;
 import com.android.settings.SummaryPreference;
@@ -55,6 +49,7 @@
 import com.android.settings.search.Indexable;
 import com.android.settingslib.NetworkPolicyEditor;
 import com.android.settingslib.net.DataUsageController;
+
 import java.util.ArrayList;
 import java.util.List;
 
@@ -244,13 +239,14 @@
         updateState();
     }
 
-    private static CharSequence formatTitle(Context context, String template, long usageLevel) {
+    @VisibleForTesting
+    static CharSequence formatUsage(Context context, String template, long usageLevel) {
         final float LARGER_SIZE = 1.25f * 1.25f;  // (1/0.8)^2
         final float SMALLER_SIZE = 1.0f / LARGER_SIZE;  // 0.8^2
         final int FLAGS = Spannable.SPAN_INCLUSIVE_INCLUSIVE;
 
         final Formatter.BytesResult usedResult = Formatter.formatBytes(context.getResources(),
-                usageLevel, Formatter.FLAG_SHORTER);
+                usageLevel, Formatter.FLAG_CALCULATE_ROUNDED);
         final SpannableString enlargedValue = new SpannableString(usedResult.value);
         enlargedValue.setSpan(new RelativeSizeSpan(LARGER_SIZE), 0, enlargedValue.length(), FLAGS);
 
@@ -263,7 +259,7 @@
         final SpannableString fullTemplate = new SpannableString(template);
         fullTemplate.setSpan(new RelativeSizeSpan(SMALLER_SIZE), 0, fullTemplate.length(), FLAGS);
         return TextUtils.expandTemplate(fullTemplate,
-                BidiFormatter.getInstance().unicodeWrap(formattedUsage));
+                BidiFormatter.getInstance().unicodeWrap(formattedUsage.toString()));
     }
 
     private void updateState() {
@@ -275,10 +271,9 @@
 
         if (mSummaryPreference != null) {
             mSummaryPreference.setTitle(
-                    formatTitle(context, getString(mDataUsageTemplate), info.usageLevel));
-            long limit = mDataInfoController.getSummaryLimit(info);
+                    formatUsage(context, getString(mDataUsageTemplate), info.usageLevel));
+            final long limit = mDataInfoController.getSummaryLimit(info);
             mSummaryPreference.setSummary(info.period);
-
             if (limit <= 0) {
                 mSummaryPreference.setChartEnabled(false);
             } else {
diff --git a/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryTest.java b/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryTest.java
index 750f785..dc53ca1 100644
--- a/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryTest.java
+++ b/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryTest.java
@@ -28,11 +28,13 @@
 import android.net.ConnectivityManager;
 import android.net.wifi.WifiConfiguration;
 import android.net.wifi.WifiManager;
+import android.text.format.Formatter;
+
 import com.android.settings.R;
 import com.android.settings.TestConfig;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import com.android.settings.testutils.shadow.SettingsShadowResources;
 import com.android.settingslib.NetworkPolicyEditor;
-import java.util.ArrayList;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -43,10 +45,13 @@
 import org.robolectric.shadows.ShadowApplication;
 import org.robolectric.util.ReflectionHelpers;
 
+import java.util.ArrayList;
+
 @RunWith(SettingsRobolectricTestRunner.class)
 @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
 public class DataUsageSummaryTest {
-    @Mock private ConnectivityManager mManager;
+    @Mock
+    private ConnectivityManager mManager;
     private Context mContext;
 
     /**
@@ -77,6 +82,21 @@
         dataUsageSummary.updateNetworkRestrictionSummary(preference);
 
         verify(preference).setSummary(mContext.getResources().getQuantityString(
-            R.plurals.network_restrictions_summary, 0, 0));
+                R.plurals.network_restrictions_summary, 0, 0));
+    }
+
+    @Test
+    @Config(shadows = {
+            SettingsShadowResources.class,
+            SettingsShadowResources.SettingsShadowTheme.class
+    })
+    public void formatUsage_shouldLookLikeFormatFileSize() {
+        SettingsShadowResources.overrideResource(com.android.internal.R.string.fileSizeSuffix,
+                "%1$s %2$s");
+        final long usage = 2147483648L; // 2GB
+        final String formattedUsage =
+                DataUsageSummary.formatUsage(mContext, "^1", usage).toString();
+        final String formattedAsFileSize = Formatter.formatFileSize(mContext, usage);
+        assertThat(formattedUsage).isEqualTo(formattedAsFileSize);
     }
 }
