diff --git a/src/com/android/settings/applications/AppStorageSettings.java b/src/com/android/settings/applications/AppStorageSettings.java
index 0676f56..5ad5e48 100644
--- a/src/com/android/settings/applications/AppStorageSettings.java
+++ b/src/com/android/settings/applications/AppStorageSettings.java
@@ -99,6 +99,7 @@
     private static final String KEY_CLEAR_URI = "clear_uri_button";
 
     private static final String KEY_CACHE_CLEARED = "cache_cleared";
+    private static final String KEY_DATA_CLEARED = "data_cleared";
 
     // Views related to cache info
     private Preference mCacheSize;
@@ -115,6 +116,7 @@
 
     private boolean mCanClearData = true;
     private boolean mCacheCleared;
+    private boolean mDataCleared;
 
     private AppStorageSizesController mSizeController;
 
@@ -130,6 +132,8 @@
         super.onCreate(savedInstanceState);
         if (savedInstanceState != null) {
             mCacheCleared = savedInstanceState.getBoolean(KEY_CACHE_CLEARED, false);
+            mDataCleared = savedInstanceState.getBoolean(KEY_DATA_CLEARED, false);
+            mCacheCleared = mCacheCleared || mDataCleared;
         }
 
         addPreferencesFromResource(R.xml.app_storage_settings);
@@ -147,6 +151,7 @@
     public void onSaveInstanceState(Bundle outState) {
         super.onSaveInstanceState(outState);
         outState.putBoolean(KEY_CACHE_CLEARED, mCacheCleared);
+        outState.putBoolean(KEY_DATA_CLEARED, mDataCleared);
     }
 
     private void setupViews() {
@@ -527,6 +532,9 @@
         if (mCacheCleared) {
             mSizeController.setCacheCleared(true);
         }
+        if (mDataCleared) {
+            mSizeController.setDataCleared(true);
+        }
 
         mSizeController.updateUi(getContext());
 
@@ -538,7 +546,7 @@
             long dataSize = result.getDataBytes();
             long cacheSize = result.getCacheBytes();
 
-            if (dataSize <= 0 || !mCanClearData) {
+            if (dataSize <= 0 || !mCanClearData || mDataCleared) {
                 mClearDataButton.setEnabled(false);
             } else {
                 mClearDataButton.setEnabled(true);
@@ -564,6 +572,8 @@
             }
             switch (msg.what) {
                 case MSG_CLEAR_USER_DATA:
+                    mDataCleared = true;
+                    mCacheCleared = true;
                     processClearMsg(msg);
                     break;
                 case MSG_CLEAR_CACHE:
diff --git a/src/com/android/settings/applications/AppStorageSizesController.java b/src/com/android/settings/applications/AppStorageSizesController.java
index 23a3eb2..45ece6e 100644
--- a/src/com/android/settings/applications/AppStorageSizesController.java
+++ b/src/com/android/settings/applications/AppStorageSizesController.java
@@ -40,6 +40,7 @@
     private StorageStatsSource.AppStorageStats mLastResult;
     private boolean mLastResultFailed;
     private boolean mCachedCleared;
+    private boolean mDataCleared;
     private long mLastCodeSize = -1;
     private long mLastDataSize = -1;
     private long mLastCacheSize = -1;
@@ -69,7 +70,7 @@
             mTotalSize.setSummary(errorRes);
         } else {
             long codeSize = mLastResult.getCodeBytes();
-            long dataSize = mLastResult.getDataBytes();
+            long dataSize = mDataCleared ? 0 : mLastResult.getDataBytes();
             if (mLastCodeSize != codeSize) {
                 mLastCodeSize = codeSize;
                 mAppSize.setSummary(getSizeStr(context, codeSize));
@@ -78,7 +79,7 @@
                 mLastDataSize = dataSize;
                 mDataSize.setSummary(getSizeStr(context, dataSize));
             }
-            long cacheSize = mCachedCleared ? 0 : mLastResult.getCacheBytes();
+            long cacheSize = (mDataCleared || mCachedCleared) ? 0 : mLastResult.getCacheBytes();
             if (mLastCacheSize != cacheSize) {
                 mLastCacheSize = cacheSize;
                 mCacheSize.setSummary(getSizeStr(context, cacheSize));
@@ -111,6 +112,15 @@
     }
 
     /**
+     * Sets if we have cleared data and should zero the data bytes.
+     * When the data is cleared, the directory are recreated. Directories have some size, but are
+     * empty. We zero this out to best match user expectations.
+     */
+    public void setDataCleared(boolean isCleared) {
+        mDataCleared = isCleared;
+    }
+
+    /**
      * Returns the last result calculated, if it exists. If it does not, returns null.
      */
     public StorageStatsSource.AppStorageStats getLastResult() {
diff --git a/tests/robotests/src/com/android/settings/applications/AppStorageSizesControllerTest.java b/tests/robotests/src/com/android/settings/applications/AppStorageSizesControllerTest.java
index 127100f..36d78c1 100644
--- a/tests/robotests/src/com/android/settings/applications/AppStorageSizesControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/AppStorageSizesControllerTest.java
@@ -110,4 +110,22 @@
         assertThat(mDataPreference.getSummary()).isEqualTo("100B");
         assertThat(mTotalPreference.getSummary()).isEqualTo("101B");
     }
+
+    @Test
+    public void fakeDataFlagSetsDataAndCacheToZero() {
+        AppStorageStats result = mock(AppStorageStats.class);
+        when(result.getCodeBytes()).thenReturn(1L);
+        when(result.getCacheBytes()).thenReturn(10L);
+        when(result.getDataBytes()).thenReturn(100L);
+        when(result.getTotalBytes()).thenReturn(111L);
+
+        mController.setResult(result);
+        mController.setDataCleared(true);
+        mController.updateUi(mContext);
+
+        assertThat(mAppPreference.getSummary()).isEqualTo("1.00B");
+        assertThat(mCachePreference.getSummary()).isEqualTo("0.00B");
+        assertThat(mDataPreference.getSummary()).isEqualTo("0.00B");
+        assertThat(mTotalPreference.getSummary()).isEqualTo("1.00B");
+    }
 }
