diff --git a/res/values/colors.xml b/res/values/colors.xml
index d6e9150..e7a00c3 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -24,6 +24,7 @@
     <color name="memory_downloads">#476093</color>
     <color name="memory_dcim">#793A7F</color>
     <color name="memory_music">#8E562A</color>
+    <color name="memory_cache">#479392</color>
     <color name="memory_misc">#7C3030</color>
     <color name="memory_user_light">#479392</color>
     <color name="memory_user_dark">#316665</color>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index f0272cb..c315d94 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -1941,6 +1941,8 @@
     <string name="memory_music_usage">Audio (music, ringtones, podcasts, etc.)</string>
     <!-- SD card & phone storage settings title. Displayed as a title when showing the total usage of misc files on the device. Below it will be a number like "123.4 MB" indicating used storage. [CHAR LIMIT=50] -->
     <string name="memory_media_misc_usage">Misc.</string>
+    <!-- Storage item representing all cached data on device. [CHAR LIMIT=48] -->
+    <string name="memory_media_cache_usage">Cached data</string>
     <!-- SD card & phone storage settings item title that will result in the phone unmounting the SD card.  This will be done before the user phyiscally removes the SD card from the phone.  Kind of like the "Safely remove" on some operating systems.   [CHAR LIMIT=25] -->
     <string name="sd_eject" product="nosdcard">Unmount shared storage</string>
     <!-- SD card & phone storage settings item title that will result in the phone unmounting the SD card.  This will be done before the user phyiscally removes the SD card from the phone.  Kind of like the "Safely remove" on some operating systems.   -->
@@ -1975,6 +1977,11 @@
     <string name="sd_format_summary" product="default">Erases all data on the SD card, such as music and photos</string>
     <!-- SD card status when it is mounted as read only. Will be appended to size, starts with an unbreakable space -->
 
+    <!-- Title of dialog asking user to confirm before clearing all caches. [CHAR LIMIT=48] -->
+    <string name="memory_clear_cache_title">Clear cached data?</string>
+    <!-- Message of dialog asking user to confirm before clearing all caches. [CHAR LIMIT=48] -->
+    <string name="memory_clear_cache_message">This will clear cached data for all apps.</string>
+
     <!-- SD card & phone storage settings item summary that will result in the phone connected to PC and MTP/PTP enabled.   [CHAR LIMIT=80] -->
     <string name="mtp_ptp_mode_summary">MTP or PTP function is active</string>
 
diff --git a/src/com/android/settings/deviceinfo/Memory.java b/src/com/android/settings/deviceinfo/Memory.java
index 057f329..825a7be 100644
--- a/src/com/android/settings/deviceinfo/Memory.java
+++ b/src/com/android/settings/deviceinfo/Memory.java
@@ -18,11 +18,15 @@
 
 import android.app.AlertDialog;
 import android.app.Dialog;
+import android.app.DialogFragment;
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.IntentFilter;
+import android.content.pm.IPackageDataObserver;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
 import android.hardware.usb.UsbManager;
 import android.os.Bundle;
 import android.os.Environment;
@@ -48,6 +52,7 @@
 import com.google.common.collect.Lists;
 
 import java.util.ArrayList;
+import java.util.List;
 
 /**
  * Panel showing storage usage on disk for known {@link StorageVolume} returned
@@ -56,6 +61,8 @@
 public class Memory extends SettingsPreferenceFragment {
     private static final String TAG = "MemorySettings";
 
+    private static final String TAG_CONFIRM_CLEAR_CACHE = "confirmClearCache";
+
     private static final int DLG_CONFIRM_UNMOUNT = 1;
     private static final int DLG_ERROR_UNMOUNT = 2;
 
@@ -202,6 +209,11 @@
 
     @Override
     public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
+        if (StorageVolumePreferenceCategory.KEY_CACHE.equals(preference.getKey())) {
+            ConfirmClearCacheFragment.show(this);
+            return true;
+        }
+
         for (StorageVolumePreferenceCategory category : mCategories) {
             Intent intent = category.intentForClick(preference);
             if (intent != null) {
@@ -339,4 +351,68 @@
             // Not much can be done
         }
     }
+
+    private void onCacheCleared() {
+        for (StorageVolumePreferenceCategory category : mCategories) {
+            category.onCacheCleared();
+        }
+    }
+
+    private static class ClearCacheObserver extends IPackageDataObserver.Stub {
+        private final Memory mTarget;
+        private int mRemaining;
+
+        public ClearCacheObserver(Memory target, int remaining) {
+            mTarget = target;
+            mRemaining = remaining;
+        }
+
+        @Override
+        public void onRemoveCompleted(final String packageName, final boolean succeeded) {
+            synchronized (this) {
+                if (--mRemaining == 0) {
+                    mTarget.onCacheCleared();
+                }
+            }
+        }
+    }
+
+    /**
+     * Dialog to request user confirmation before clearing all cache data.
+     */
+    public static class ConfirmClearCacheFragment extends DialogFragment {
+        public static void show(Memory parent) {
+            if (!parent.isAdded()) return;
+
+            final ConfirmClearCacheFragment dialog = new ConfirmClearCacheFragment();
+            dialog.setTargetFragment(parent, 0);
+            dialog.show(parent.getFragmentManager(), TAG_CONFIRM_CLEAR_CACHE);
+        }
+
+        @Override
+        public Dialog onCreateDialog(Bundle savedInstanceState) {
+            final Context context = getActivity();
+
+            final AlertDialog.Builder builder = new AlertDialog.Builder(context);
+            builder.setTitle(R.string.memory_clear_cache_title);
+            builder.setMessage(getString(R.string.memory_clear_cache_message));
+
+            builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
+                @Override
+                public void onClick(DialogInterface dialog, int which) {
+                    final Memory target = (Memory) getTargetFragment();
+                    final PackageManager pm = context.getPackageManager();
+                    final List<PackageInfo> infos = pm.getInstalledPackages(0);
+                    final ClearCacheObserver observer = new ClearCacheObserver(
+                            target, infos.size());
+                    for (PackageInfo info : infos) {
+                        pm.deleteApplicationCacheFiles(info.packageName, observer);
+                    }
+                }
+            });
+            builder.setNegativeButton(android.R.string.cancel, null);
+
+            return builder.create();
+        }
+    }
 }
diff --git a/src/com/android/settings/deviceinfo/StorageVolumePreferenceCategory.java b/src/com/android/settings/deviceinfo/StorageVolumePreferenceCategory.java
index 44d40a0..1599ec7 100644
--- a/src/com/android/settings/deviceinfo/StorageVolumePreferenceCategory.java
+++ b/src/com/android/settings/deviceinfo/StorageVolumePreferenceCategory.java
@@ -46,6 +46,8 @@
 import java.util.List;
 
 public class StorageVolumePreferenceCategory extends PreferenceCategory {
+    public static final String KEY_CACHE = "cache";
+
     private static final int ORDER_USAGE_BAR = -2;
     private static final int ORDER_STORAGE_LOW = -1;
 
@@ -68,6 +70,7 @@
     private StorageItemPreference mItemDcim;
     private StorageItemPreference mItemMusic;
     private StorageItemPreference mItemDownloads;
+    private StorageItemPreference mItemCache;
     private StorageItemPreference mItemMisc;
     private List<StorageItemPreference> mItemUsers = Lists.newArrayList();
 
@@ -157,8 +160,11 @@
         mItemDcim = buildItem(R.string.memory_dcim_usage, R.color.memory_dcim);
         mItemMusic = buildItem(R.string.memory_music_usage, R.color.memory_music);
         mItemDownloads = buildItem(R.string.memory_downloads_usage, R.color.memory_downloads);
+        mItemCache = buildItem(R.string.memory_media_cache_usage, R.color.memory_cache);
         mItemMisc = buildItem(R.string.memory_media_misc_usage, R.color.memory_misc);
 
+        mItemCache.setKey(KEY_CACHE);
+
         final boolean showDetails = mVolume == null || mVolume.isPrimary();
         if (showDetails) {
             if (showUsers) {
@@ -169,6 +175,7 @@
             addPreference(mItemDcim);
             addPreference(mItemMusic);
             addPreference(mItemDownloads);
+            addPreference(mItemCache);
             addPreference(mItemMisc);
 
             if (showUsers) {
@@ -314,7 +321,7 @@
 
         // Count caches as available space, since system manages them
         mItemTotal.setSummary(formatSize(details.totalSize));
-        mItemAvailable.setSummary(formatSize(details.availSize + details.cacheSize));
+        mItemAvailable.setSummary(formatSize(details.availSize));
 
         mUsageBarPreference.clear();
 
@@ -332,6 +339,7 @@
         final long downloadsSize = totalValues(details.mediaSize, Environment.DIRECTORY_DOWNLOADS);
         updatePreference(mItemDownloads, downloadsSize);
 
+        updatePreference(mItemCache, details.cacheSize);
         updatePreference(mItemMisc, details.miscSize);
 
         for (StorageItemPreference userPref : mItemUsers) {
@@ -376,6 +384,10 @@
         measure();
     }
 
+    public void onCacheCleared() {
+        measure();
+    }
+
     public void onPause() {
         mMeasure.cleanUp();
     }
