diff --git a/Android.mk b/Android.mk
index e4256ae..b7a4905 100644
--- a/Android.mk
+++ b/Android.mk
@@ -40,6 +40,8 @@
 
 LOCAL_SHARED_LIBRARIES := $(common_shared_libraries)
 
+LOCAL_STATIC_LIBRARIES := libfs_mgr
+
 LOCAL_MODULE_TAGS := eng tests
 
 include $(BUILD_STATIC_LIBRARY)
@@ -58,6 +60,8 @@
 
 LOCAL_SHARED_LIBRARIES := $(common_shared_libraries)
 
+LOCAL_STATIC_LIBRARIES := libfs_mgr
+
 include $(BUILD_EXECUTABLE)
 
 include $(CLEAR_VARS)
diff --git a/cryptfs.c b/cryptfs.c
index 5bd6de7..cc7797a 100644
--- a/cryptfs.c
+++ b/cryptfs.c
@@ -38,6 +38,7 @@
 #include <cutils/android_reboot.h>
 #include <ext4.h>
 #include <linux/kdev_t.h>
+#include <fs_mgr.h>
 #include "cryptfs.h"
 #define LOG_TAG "Cryptfs"
 #include "cutils/android_reboot.h"
@@ -53,7 +54,6 @@
 #define KEY_LEN_BYTES 16
 #define IV_LEN_BYTES 16
 
-#define KEY_LOC_PROP   "ro.crypto.keyfile.userdata"
 #define KEY_IN_FOOTER  "footer"
 
 #define EXT4_FS 1
@@ -65,6 +65,8 @@
 static char *saved_data_blkdev;
 static char *saved_mount_point;
 static int  master_key_saved = 0;
+#define FSTAB_PREFIX "/fstab."
+static char fstab_filename[PROPERTY_VALUE_MAX + sizeof(FSTAB_PREFIX)];
 
 static void ioctl_init(struct dm_ioctl *io, size_t dataSize, const char *name, unsigned flags)
 {
@@ -122,6 +124,19 @@
   return nr_sec;
 }
 
+/* Get and cache the name of the fstab file so we don't
+ * keep talking over the socket to the property service.
+ */
+static char *get_fstab_filename(void)
+{
+    if (fstab_filename[0] == 0) {
+        strcpy(fstab_filename, FSTAB_PREFIX);
+        property_get("ro.hardware", fstab_filename + sizeof(FSTAB_PREFIX) - 1, "");
+    }
+
+    return fstab_filename;
+}
+
 /* key or salt can be NULL, in which case just skip writing that value.  Useful to
  * update the failed mount count but not change the key.
  */
@@ -136,7 +151,7 @@
   char key_loc[PROPERTY_VALUE_MAX];
   struct stat statbuf;
 
-  property_get(KEY_LOC_PROP, key_loc, KEY_IN_FOOTER);
+  fs_mgr_get_crypt_info(get_fstab_filename(), key_loc, 0, sizeof(key_loc));
 
   if (!strcmp(key_loc, KEY_IN_FOOTER)) {
     fname = real_blk_name;
@@ -167,7 +182,7 @@
       return -1;
     }
   } else {
-    SLOGE("Unexpected value for" KEY_LOC_PROP "\n");
+    SLOGE("Unexpected value for crypto key location\n");
     return -1;;
   }
 
@@ -235,7 +250,7 @@
   char *fname;
   struct stat statbuf;
 
-  property_get(KEY_LOC_PROP, key_loc, KEY_IN_FOOTER);
+  fs_mgr_get_crypt_info(get_fstab_filename(), key_loc, 0, sizeof(key_loc));
 
   if (!strcmp(key_loc, KEY_IN_FOOTER)) {
     fname = real_blk_name;
@@ -273,7 +288,7 @@
       goto errout;
     }
   } else {
-    SLOGE("Unexpected value for" KEY_LOC_PROP "\n");
+    SLOGE("Unexpected value for crypto key location\n");
     return -1;;
   }
 
@@ -557,27 +572,6 @@
     return encrypt_master_key(passwd, salt, key_buf, master_key);
 }
 
-static int get_orig_mount_parms(char *mount_point, char *fs_type, char *real_blkdev,
-                                unsigned long *mnt_flags, char *fs_options)
-{
-  char mount_point2[PROPERTY_VALUE_MAX];
-  char fs_flags[PROPERTY_VALUE_MAX];
-
-  property_get("ro.crypto.fs_type", fs_type, "");
-  property_get("ro.crypto.fs_real_blkdev", real_blkdev, "");
-  property_get("ro.crypto.fs_mnt_point", mount_point2, "");
-  property_get("ro.crypto.fs_options", fs_options, "");
-  property_get("ro.crypto.fs_flags", fs_flags, "");
-  *mnt_flags = strtol(fs_flags, 0, 0);
-
-  if (strcmp(mount_point, mount_point2)) {
-    /* Consistency check.  These should match. If not, something odd happened. */
-    return -1;
-  }
-
-  return 0;
-}
-
 static int wait_and_unmount(char *mountpoint)
 {
     int i, rc;
@@ -692,26 +686,22 @@
         return -1;
     }
 
-    if (! get_orig_mount_parms(DATA_MNT_POINT, fs_type, real_blkdev, &mnt_flags, fs_options)) {
-        SLOGD("Just got orig mount parms\n");
+    if (! (rc = wait_and_unmount(DATA_MNT_POINT)) ) {
+        /* If that succeeded, then mount the decrypted filesystem */
+        fs_mgr_do_mount(get_fstab_filename(), DATA_MNT_POINT, crypto_blkdev, 0);
 
-        if (! (rc = wait_and_unmount(DATA_MNT_POINT)) ) {
-            /* If that succeeded, then mount the decrypted filesystem */
-            mount(crypto_blkdev, DATA_MNT_POINT, fs_type, mnt_flags, fs_options);
-
-            property_set("vold.decrypt", "trigger_load_persist_props");
-            /* Create necessary paths on /data */
-            if (prep_data_fs()) {
-                return -1;
-            }
-
-            /* startup service classes main and late_start */
-            property_set("vold.decrypt", "trigger_restart_framework");
-            SLOGD("Just triggered restart_framework\n");
-
-            /* Give it a few moments to get started */
-            sleep(1);
+        property_set("vold.decrypt", "trigger_load_persist_props");
+        /* Create necessary paths on /data */
+        if (prep_data_fs()) {
+            return -1;
         }
+
+        /* startup service classes main and late_start */
+        property_set("vold.decrypt", "trigger_restart_framework");
+        SLOGD("Just triggered restart_framework\n");
+
+        /* Give it a few moments to get started */
+        sleep(1);
     }
 
     if (rc == 0) {
@@ -727,9 +717,6 @@
   unsigned char encrypted_master_key[32];
   unsigned char salt[SALT_LEN];
   char real_blkdev[MAXPATHLEN];
-  char fs_type[PROPERTY_VALUE_MAX];
-  char fs_options[PROPERTY_VALUE_MAX];
-  unsigned long mnt_flags;
   char encrypted_state[PROPERTY_VALUE_MAX];
   char key_loc[PROPERTY_VALUE_MAX];
 
@@ -739,13 +726,11 @@
     return 1;
   }
 
-  if (get_orig_mount_parms(mount_point, fs_type, real_blkdev, &mnt_flags, fs_options)) {
-    SLOGE("Error reading original mount parms for mount point %s\n", mount_point);
-    return -1;
-  }
+  fs_mgr_get_crypt_info(get_fstab_filename(), 0, real_blkdev, sizeof(real_blkdev));
 
   if (get_crypt_ftr_and_key(real_blkdev, &crypt_ftr, encrypted_master_key, salt)) {
-    property_get(KEY_LOC_PROP, key_loc, KEY_IN_FOOTER);
+    fs_mgr_get_crypt_info(get_fstab_filename(), key_loc, 0, sizeof(key_loc));
+
     /*
      * Only report this error if key_loc is a file and it exists.
      * If the device was never encrypted, and /data is not mountable for
@@ -780,10 +765,7 @@
   unsigned char salt[SALT_LEN];
   char crypto_blkdev[MAXPATHLEN];
   char real_blkdev[MAXPATHLEN];
-  char fs_type[PROPERTY_VALUE_MAX];
-  char fs_options[PROPERTY_VALUE_MAX];
   char tmp_mount_point[64];
-  unsigned long mnt_flags;
   unsigned int orig_failed_decrypt_count;
   char encrypted_state[PROPERTY_VALUE_MAX];
   int rc;
@@ -794,10 +776,7 @@
     return -1;
   }
 
-  if (get_orig_mount_parms(mount_point, fs_type, real_blkdev, &mnt_flags, fs_options)) {
-    SLOGE("Error reading original mount parms for mount point %s\n", mount_point);
-    return -1;
-  }
+  fs_mgr_get_crypt_info(get_fstab_filename(), 0, real_blkdev, sizeof(real_blkdev));
 
   if (get_crypt_ftr_and_key(real_blkdev, &crypt_ftr, encrypted_master_key, salt)) {
     SLOGE("Error getting crypt footer and key\n");
@@ -826,7 +805,7 @@
    */
   sprintf(tmp_mount_point, "%s/tmp_mnt", mount_point);
   mkdir(tmp_mount_point, 0755);
-  if ( mount(crypto_blkdev, tmp_mount_point, "ext4", MS_RDONLY, "") ) {
+  if (fs_mgr_do_mount(get_fstab_filename(), DATA_MNT_POINT, crypto_blkdev, tmp_mount_point)) {
     SLOGE("Error temp mounting decrypted block device\n");
     delete_crypto_blk_dev(label);
     crypt_ftr.failed_decrypt_count++;
@@ -938,9 +917,6 @@
     unsigned char encrypted_master_key[32], decrypted_master_key[32];
     unsigned char salt[SALT_LEN];
     char real_blkdev[MAXPATHLEN];
-    char fs_type[PROPERTY_VALUE_MAX];
-    char fs_options[PROPERTY_VALUE_MAX];
-    unsigned long mnt_flags;
     char encrypted_state[PROPERTY_VALUE_MAX];
     int rc;
 
@@ -960,10 +936,7 @@
         return -1;
     }
 
-    if (get_orig_mount_parms(saved_mount_point, fs_type, real_blkdev, &mnt_flags, fs_options)) {
-        SLOGE("Error reading original mount parms for mount point %s\n", saved_mount_point);
-        return -1;
-    }
+    fs_mgr_get_crypt_info(get_fstab_filename(), 0, real_blkdev, sizeof(real_blkdev));
 
     if (get_crypt_ftr_and_key(real_blkdev, &crypt_ftr, encrypted_master_key, salt)) {
         SLOGE("Error getting crypt footer and key\n");
@@ -1143,9 +1116,7 @@
 {
     int how = 0;
     char crypto_blkdev[MAXPATHLEN], real_blkdev[MAXPATHLEN], sd_crypto_blkdev[MAXPATHLEN];
-    char fs_type[PROPERTY_VALUE_MAX], fs_options[PROPERTY_VALUE_MAX],
-         mount_point[PROPERTY_VALUE_MAX];
-    unsigned long mnt_flags, nr_sec;
+    unsigned long nr_sec;
     unsigned char master_key[KEY_LEN_BYTES], decrypted_master_key[KEY_LEN_BYTES];
     unsigned char salt[SALT_LEN];
     int rc=-1, fd, i, ret;
@@ -1167,7 +1138,7 @@
         goto error_unencrypted;
     }
 
-    property_get(KEY_LOC_PROP, key_loc, KEY_IN_FOOTER);
+    fs_mgr_get_crypt_info(get_fstab_filename(), key_loc, 0, sizeof(key_loc));
 
     if (!strcmp(howarg, "wipe")) {
       how = CRYPTO_ENABLE_WIPE;
@@ -1178,7 +1149,7 @@
       goto error_unencrypted;
     }
 
-    get_orig_mount_parms(mount_point, fs_type, real_blkdev, &mnt_flags, fs_options);
+    fs_mgr_get_crypt_info(get_fstab_filename(), 0, real_blkdev, sizeof(real_blkdev));
 
     /* Get the size of the real block device */
     fd = open(real_blkdev, O_RDONLY);
@@ -1267,9 +1238,7 @@
          * /data, set a property saying we're doing inplace encryption,
          * and restart the framework.
          */
-        property_get("ro.crypto.tmpfs_options", tmpfs_options, "");
-        if (mount("tmpfs", DATA_MNT_POINT, "tmpfs", MS_NOATIME | MS_NOSUID | MS_NODEV,
-            tmpfs_options) < 0) {
+        if (fs_mgr_do_tmpfs_mount(DATA_MNT_POINT)) {
             goto error_shutting_down;
         }
         /* Tells the framework that inplace encryption is starting */
@@ -1456,7 +1425,7 @@
         return -1;
     }
 
-    property_get("ro.crypto.fs_real_blkdev", real_blkdev, "");
+    fs_mgr_get_crypt_info(get_fstab_filename(), 0, real_blkdev, sizeof(real_blkdev));
     if (strlen(real_blkdev) == 0) {
         SLOGE("Can't find real blkdev");
         return -1;
