diff --git a/res/values/strings.xml b/res/values/strings.xml
index 7c75120..dbd842d0 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -6462,4 +6462,7 @@
     <!-- Label of default app for current setting [CHAR LIMIT=40] -->
     <string name="default_app">(Default)</string>
 
+    <!-- Title of app storage screen [CHAR LIMIT=30] -->
+    <string name="apps_storage">Apps storage</string>
+
 </resources>
diff --git a/src/com/android/settings/InstrumentedFragment.java b/src/com/android/settings/InstrumentedFragment.java
index ff6f219..883c67c 100644
--- a/src/com/android/settings/InstrumentedFragment.java
+++ b/src/com/android/settings/InstrumentedFragment.java
@@ -27,6 +27,7 @@
     public static final int VIEW_CATEGORY_UNDECLARED = 100000;
 
     public static final int VIEW_CATEGORY_DEFAULT_APPS = VIEW_CATEGORY_UNDECLARED + 1;
+    public static final int VIEW_CATEGORY_STORAGE_APPS = VIEW_CATEGORY_UNDECLARED + 2;
 
     /**
      * Declare the view of this category.
diff --git a/src/com/android/settings/applications/ApplicationsState.java b/src/com/android/settings/applications/ApplicationsState.java
index ddfc207..c5124c6 100644
--- a/src/com/android/settings/applications/ApplicationsState.java
+++ b/src/com/android/settings/applications/ApplicationsState.java
@@ -54,6 +54,7 @@
 import java.util.Comparator;
 import java.util.HashMap;
 import java.util.List;
+import java.util.Objects;
 import java.util.regex.Pattern;
 
 /**
@@ -335,6 +336,23 @@
         }
     };
 
+    public static class VolumeFilter implements AppFilter {
+        private final String mVolumeUuid;
+
+        public VolumeFilter(String volumeUuid) {
+            mVolumeUuid = volumeUuid;
+        }
+
+        @Override
+        public void init() {
+        }
+
+        @Override
+        public boolean filterApp(AppEntry info) {
+            return Objects.equals(info.info.volumeUuid, mVolumeUuid);
+        }
+    }
+
     public static class CompoundFilter implements AppFilter {
         private final AppFilter mFirstFilter;
         private final AppFilter mSecondFilter;
diff --git a/src/com/android/settings/applications/ManageApplications.java b/src/com/android/settings/applications/ManageApplications.java
index 362903e..b675ba4 100644
--- a/src/com/android/settings/applications/ManageApplications.java
+++ b/src/com/android/settings/applications/ManageApplications.java
@@ -50,17 +50,20 @@
 import android.widget.Spinner;
 
 import com.android.internal.logging.MetricsLogger;
+import com.android.settings.AppHeader;
 import com.android.settings.HelpUtils;
 import com.android.settings.InstrumentedFragment;
 import com.android.settings.R;
 import com.android.settings.Settings.AllApplicationsActivity;
 import com.android.settings.Settings.DomainsURLsAppListActivity;
 import com.android.settings.Settings.NotificationAppListActivity;
+import com.android.settings.Settings.StorageUseActivity;
 import com.android.settings.SettingsActivity;
 import com.android.settings.Utils;
 import com.android.settings.applications.ApplicationsState.AppEntry;
 import com.android.settings.applications.ApplicationsState.AppFilter;
 import com.android.settings.applications.ApplicationsState.CompoundFilter;
+import com.android.settings.applications.ApplicationsState.VolumeFilter;
 import com.android.settings.notification.NotificationBackend;
 import com.android.settings.notification.NotificationBackend.AppRow;
 
@@ -81,6 +84,12 @@
     static final String TAG = "ManageApplications";
     static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
 
+    // Intent extras.
+    public static final String EXTRA_CLASSNAME = "classname";
+    // Used for storage only.
+    public static final String EXTRA_VOLUME_UUID = "volumeUuid";
+    public static final String EXTRA_VOLUME_NAME = "volumeName";
+
     private static final String EXTRA_SORT_ORDER = "sortOrder";
 
     // attributes used as keys when passing values to InstalledAppDetails activity
@@ -180,6 +189,7 @@
     public static final int LIST_TYPE_MAIN = 0;
     public static final int LIST_TYPE_NOTIFICATION = 1;
     public static final int LIST_TYPE_DOMAINS_URLS = 2;
+    public static final int LIST_TYPE_STORAGE = 3;
 
     private View mRootView;
 
@@ -188,6 +198,8 @@
     private FilterSpinnerAdapter mFilterAdapter;
     private NotificationBackend mNotifBackend;
     private ResetAppsHelper mResetAppsHelper;
+    private String mVolumeUuid;
+    private String mVolumeName;
 
     @Override
     public void onCreate(Bundle savedInstanceState) {
@@ -196,8 +208,8 @@
         mApplicationsState = ApplicationsState.getInstance(getActivity().getApplication());
 
         Intent intent = getActivity().getIntent();
-        String className = getArguments() != null
-                ? getArguments().getString("classname") : null;
+        Bundle args = getArguments();
+        String className = args != null ? args.getString(EXTRA_CLASSNAME) : null;
         if (className == null) {
             className = intent.getComponent().getClassName();
         }
@@ -208,6 +220,16 @@
             mNotifBackend = new NotificationBackend();
         } else if (className.equals(DomainsURLsAppListActivity.class.getName())) {
             mListType = LIST_TYPE_DOMAINS_URLS;
+        } else if (className.equals(StorageUseActivity.class.getName())) {
+            if (args != null && args.containsKey(EXTRA_VOLUME_UUID)) {
+                mVolumeUuid = args.getString(EXTRA_VOLUME_UUID);
+                mVolumeName = args.getString(EXTRA_VOLUME_NAME);
+                mListType = LIST_TYPE_STORAGE;
+            } else {
+                // No volume selected, display a normal list, sorted by size.
+                mListType = LIST_TYPE_MAIN;
+                mSortOrder = R.id.sort_order_size;
+            }
         } else {
             mListType = LIST_TYPE_MAIN;
         }
@@ -278,7 +300,7 @@
         contentParent.addView(mSpinnerHeader, 0);
 
         mFilterAdapter.enableFilter(getDefaultFilter());
-        if (mListType != LIST_TYPE_MAIN) {
+        if (mListType != LIST_TYPE_STORAGE) {
             if (UserManager.get(getActivity()).getUserProfiles().size() > 1) {
                 mFilterAdapter.enableFilter(FILTER_APPS_PERSONAL);
                 mFilterAdapter.enableFilter(FILTER_APPS_WORK);
@@ -290,6 +312,15 @@
             mFilterAdapter.enableFilter(FILTER_APPS_PRIORITY);
             mFilterAdapter.enableFilter(FILTER_APPS_SENSITIVE);
         }
+        mApplications.setOverrideFilter(new VolumeFilter(mVolumeUuid));
+    }
+
+    @Override
+    public void onViewCreated(View view, Bundle savedInstanceState) {
+        super.onViewCreated(view, savedInstanceState);
+        if (mListType == LIST_TYPE_STORAGE) {
+            AppHeader.createAppHeader(getActivity(), null, mVolumeName, null);
+        }
     }
 
     private int getDefaultFilter() {
@@ -312,6 +343,8 @@
                 return MetricsLogger.MANAGE_APPLICATIONS_NOTIFICATIONS;
             case LIST_TYPE_DOMAINS_URLS:
                 return MetricsLogger.MANAGE_DOMAIN_URLS;
+            case LIST_TYPE_STORAGE:
+                return InstrumentedFragment.VIEW_CATEGORY_STORAGE_APPS;
             default:
                 return MetricsLogger.VIEW_UNKNOWN;
         }
@@ -634,6 +667,7 @@
         private int mWhichSize = SIZE_TOTAL;
         CharSequence mCurFilterPrefix;
         private PackageManager mPm;
+        private AppFilter mOverrideFilter;
 
         private Filter mFilter = new Filter() {
             @Override
@@ -672,6 +706,11 @@
             }
         }
 
+        public void setOverrideFilter(AppFilter overrideFilter) {
+            mOverrideFilter = overrideFilter;
+            rebuild(true);
+        }
+
         public void setFilter(int filter) {
             mFilterMode = filter;
             rebuild(true);
@@ -728,6 +767,9 @@
                 mWhichSize = SIZE_INTERNAL;
             }
             filterObj = FILTERS[mFilterMode];
+            if (mOverrideFilter != null) {
+                filterObj = mOverrideFilter;
+            }
             switch (mLastSortMode) {
                 case R.id.sort_order_size:
                     switch (mWhichSize) {
diff --git a/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java b/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java
index dec259b..a280b2d 100644
--- a/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java
+++ b/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java
@@ -55,6 +55,9 @@
 import com.android.settings.R;
 import com.android.settings.Settings;
 import com.android.settings.SettingsPreferenceFragment;
+import com.android.settings.Utils;
+import com.android.settings.Settings.StorageUseActivity;
+import com.android.settings.applications.ManageApplications;
 import com.android.settings.deviceinfo.StorageMeasurement.MeasurementDetails;
 import com.android.settings.deviceinfo.StorageMeasurement.MeasurementReceiver;
 import com.android.settings.deviceinfo.StorageSettings.MountTask;
@@ -323,9 +326,13 @@
 
         Intent intent = null;
         if (pref == mApps) {
-            intent = new Intent(Intent.ACTION_MANAGE_PACKAGE_STORAGE);
-            intent.setClass(getActivity(), Settings.ManageApplicationsActivity.class);
-
+            Bundle args = new Bundle();
+            args.putString(ManageApplications.EXTRA_CLASSNAME, StorageUseActivity.class.getName());
+            args.putString(ManageApplications.EXTRA_VOLUME_UUID, mVolume.getFsUuid());
+            args.putString(ManageApplications.EXTRA_VOLUME_NAME, mVolume.getDescription());
+            intent = Utils.onBuildStartFragmentIntent(getActivity(),
+                    ManageApplications.class.getName(), args, null, R.string.apps_storage, null,
+                    false);
         } else if (pref == mDownloads) {
             intent = new Intent(DownloadManager.ACTION_VIEW_DOWNLOADS).putExtra(
                     DownloadManager.INTENT_EXTRAS_SORT_BY_SIZE, true);
