diff --git a/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java b/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java
index a280b2d..00fb094 100644
--- a/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java
+++ b/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java
@@ -53,10 +53,9 @@
 import com.android.internal.logging.MetricsLogger;
 import com.android.internal.util.Preconditions;
 import com.android.settings.R;
-import com.android.settings.Settings;
+import com.android.settings.Settings.StorageUseActivity;
 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;
@@ -75,6 +74,7 @@
  */
 public class PrivateVolumeSettings extends SettingsPreferenceFragment {
     // TODO: disable unmount when providing over MTP/PTP
+    // TODO: warn when mounted read-only
 
     private static final String TAG_RENAME = "rename";
     private static final String TAG_CONFIRM_CLEAR_CACHE = "confirmClearCache";
@@ -129,8 +129,7 @@
         addPreferencesFromResource(R.xml.device_info_storage_volume);
 
         // Find the emulated shared storage layered above this private volume
-        mSharedVolume = mStorageManager.findVolumeById(
-                mVolume.getId().replace("private", "emulated"));
+        mSharedVolume = mStorageManager.findEmulatedForPrivate(mVolume);
 
         mMeasure = new StorageMeasurement(context, mVolume, mSharedVolume);
         mMeasure.setReceiver(mReceiver);
@@ -171,7 +170,7 @@
 
         screen.removeAll();
 
-        if (mVolume.getState() != VolumeInfo.STATE_MOUNTED) {
+        if (!mVolume.isMountedReadable()) {
             return;
         }
 
@@ -283,7 +282,7 @@
         } else {
             rename.setVisible(mVolume.getType() == VolumeInfo.TYPE_PRIVATE);
             mount.setVisible(mVolume.getState() == VolumeInfo.STATE_UNMOUNTED);
-            unmount.setVisible(mVolume.getState() == VolumeInfo.STATE_MOUNTED);
+            unmount.setVisible(mVolume.isMountedReadable());
             format.setVisible(true);
         }
 
diff --git a/src/com/android/settings/deviceinfo/PublicVolumeSettings.java b/src/com/android/settings/deviceinfo/PublicVolumeSettings.java
index 94a505b..e0b6843 100644
--- a/src/com/android/settings/deviceinfo/PublicVolumeSettings.java
+++ b/src/com/android/settings/deviceinfo/PublicVolumeSettings.java
@@ -118,7 +118,7 @@
 
         screen.removeAll();
 
-        if (mVolume.getState() == VolumeInfo.STATE_MOUNTED) {
+        if (mVolume.isMountedReadable()) {
             screen.addPreference(mGraph);
             screen.addPreference(mTotal);
             screen.addPreference(mAvailable);
@@ -139,7 +139,7 @@
         if (mVolume.getState() == VolumeInfo.STATE_UNMOUNTED) {
             screen.addPreference(mMount);
         }
-        if (mVolume.getState() == VolumeInfo.STATE_MOUNTED) {
+        if (mVolume.isMountedReadable()) {
             screen.addPreference(mUnmount);
         }
         screen.addPreference(mFormat);
diff --git a/src/com/android/settings/deviceinfo/StorageMeasurement.java b/src/com/android/settings/deviceinfo/StorageMeasurement.java
index a3c4aec..b6c35e3 100644
--- a/src/com/android/settings/deviceinfo/StorageMeasurement.java
+++ b/src/com/android/settings/deviceinfo/StorageMeasurement.java
@@ -345,7 +345,7 @@
         final Message finished = mMeasurementHandler.obtainMessage(MeasurementHandler.MSG_COMPLETED,
                 details);
 
-        if (mSharedVolume != null && mSharedVolume.getState() == VolumeInfo.STATE_MOUNTED) {
+        if (mSharedVolume != null && mSharedVolume.isMountedReadable()) {
             final File basePath = mSharedVolume.getPathForUser(currentUser);
 
             // Measure media types for emulated storage, or for primary physical
diff --git a/src/com/android/settings/deviceinfo/StorageSettings.java b/src/com/android/settings/deviceinfo/StorageSettings.java
index 74040ef..7a7d90d 100644
--- a/src/com/android/settings/deviceinfo/StorageSettings.java
+++ b/src/com/android/settings/deviceinfo/StorageSettings.java
@@ -186,7 +186,7 @@
             return true;
 
         } else if (vol.getType() == VolumeInfo.TYPE_PUBLIC) {
-            if (vol.getState() == VolumeInfo.STATE_MOUNTED) {
+            if (vol.isMountedReadable()) {
                 startActivity(vol.buildBrowseIntent());
                 return true;
             } else {
diff --git a/src/com/android/settings/deviceinfo/StorageVolumePreference.java b/src/com/android/settings/deviceinfo/StorageVolumePreference.java
index f127dfb..852aa39 100644
--- a/src/com/android/settings/deviceinfo/StorageVolumePreference.java
+++ b/src/com/android/settings/deviceinfo/StorageVolumePreference.java
@@ -47,14 +47,12 @@
         setKey(volume.getId());
         setTitle(mStorageManager.getBestVolumeDescription(volume));
 
-        switch (volume.getState()) {
-            case VolumeInfo.STATE_MOUNTED:
-                // TODO: move statfs() to background thread
-                final File path = volume.getPath();
-                final String free = Formatter.formatFileSize(context, path.getFreeSpace());
-                final String total = Formatter.formatFileSize(context, path.getTotalSpace());
-                setSummary(context.getString(R.string.storage_volume_summary, free, total));
-                break;
+        if (volume.isMountedReadable()) {
+            // TODO: move statfs() to background thread
+            final File path = volume.getPath();
+            final String free = Formatter.formatFileSize(context, path.getFreeSpace());
+            final String total = Formatter.formatFileSize(context, path.getTotalSpace());
+            setSummary(context.getString(R.string.storage_volume_summary, free, total));
         }
 
         // TODO: better icons
@@ -65,7 +63,7 @@
         }
 
         if (volume.getType() == VolumeInfo.TYPE_PUBLIC
-                && volume.getState() == VolumeInfo.STATE_MOUNTED) {
+                && volume.isMountedReadable()) {
             setWidgetLayoutResource(R.layout.preference_storage_action);
         }
     }
