diff --git a/bootloader.cpp b/bootloader.cpp
index 856a7d2..d23d1e9 100644
--- a/bootloader.cpp
+++ b/bootloader.cpp
@@ -22,50 +22,81 @@
 extern "C" {
 #include "mtdutils/mtdutils.h"
 }
+/*
 #include "roots.h"
-
+*/
 #include <errno.h>
 #include <stdio.h>
 #include <string.h>
 #include <sys/stat.h>
 #include <unistd.h>
 
-static char device_type = 'e'; // e for emmc or m for mtd, default is emmc
-static char device_name[256];
+// fake Volume struct that allows us to use the AOSP code easily
+struct Volume
+{
+    char fs_type[8];
+    char blk_device[256];
+};
 
-/*
+static Volume misc;
+
+void set_misc_device(const char* type, const char* name) {
+    strlcpy(misc.fs_type, type, sizeof(misc.fs_type));
+    if (strlen(name) >= sizeof(misc.blk_device)) {
+        LOGE("New device name of '%s' is too large for bootloader.cpp\n", name);
+    } else {
+        strcpy(misc.blk_device, name);
+    }
+}
+
 static int get_bootloader_message_mtd(struct bootloader_message *out, const Volume* v);
 static int set_bootloader_message_mtd(const struct bootloader_message *in, const Volume* v);
 static int get_bootloader_message_block(struct bootloader_message *out, const Volume* v);
 static int set_bootloader_message_block(const struct bootloader_message *in, const Volume* v);
-*/
+
 int get_bootloader_message(struct bootloader_message *out) {
-    //volume_for_path("/misc");
-    if (device_name[0] == 0) {
+#if 0
+    Volume* v = volume_for_path("/misc");
+    if (v == NULL) {
       LOGE("Cannot load volume /misc!\n");
       return -1;
     }
-    if (device_type == 'm') {
-        return get_bootloader_message_mtd_name(out);
-    } else if (device_type == 'e') {
-        return get_bootloader_message_block_name(out);
+#else
+    Volume* v = &misc;
+    if (v->fs_type[0] == 0) {
+        LOGI("Not using /misc, not defined in fstab.\n");
+        return -1;
     }
-    LOGE("unknown misc partition fs_type \"%c\"\n", device_type);
+#endif
+    if (strcmp(v->fs_type, "mtd") == 0) {
+        return get_bootloader_message_mtd(out, v);
+    } else if (strcmp(v->fs_type, "emmc") == 0) {
+        return get_bootloader_message_block(out, v);
+    }
+    LOGE("unknown misc partition fs_type \"%s\"\n", v->fs_type);
     return -1;
 }
 
 int set_bootloader_message(const struct bootloader_message *in) {
-    //volume_for_path("/misc");
-    if (device_name[0] == 0) {
+#if 0
+    Volume* v = volume_for_path("/misc");
+    if (v == NULL) {
       LOGE("Cannot load volume /misc!\n");
       return -1;
     }
-    if (device_type == 'm') {
-        return set_bootloader_message_mtd_name(in, device_name);
-    } else if (device_type == 'e') {
-        return set_bootloader_message_block_name(in, device_name);
+#else
+    Volume* v = &misc;
+    if (v->fs_type[0] == 0) {
+        LOGI("Not using /misc, not defined in fstab.\n");
+        return -1;
     }
-    LOGE("unknown misc partition type \"%c\"\n", device_type);
+#endif
+    if (strcmp(v->fs_type, "mtd") == 0) {
+        return set_bootloader_message_mtd(in, v);
+    } else if (strcmp(v->fs_type, "emmc") == 0) {
+        return set_bootloader_message_block(in, v);
+    }
+    LOGE("unknown misc partition fs_type \"%s\"\n", v->fs_type);
     return -1;
 }
 
@@ -75,7 +106,7 @@
 
 static const int MISC_PAGES = 3;         // number of pages to save
 static const int MISC_COMMAND_PAGE = 1;  // bootloader command is this page
-/*
+
 static int get_bootloader_message_mtd(struct bootloader_message *out,
                                       const Volume* v) {
     size_t write_size;
@@ -145,89 +176,7 @@
     LOGI("Set boot command \"%s\"\n", in->command[0] != 255 ? in->command : "");
     return 0;
 }
-*/
 
-void set_device_type(char new_type) {
-	device_type = new_type;
-}
-
-void set_device_name(const char* new_name) {
-	if (strlen(new_name) >= sizeof(device_name)) {
-		LOGE("New device name of '%s' is too large for bootloader.cpp\n", new_name);
-	} else {
-		strcpy(device_name, new_name);
-	}
-}
-
-int get_bootloader_message_mtd_name(struct bootloader_message *out) {
-    size_t write_size;
-    mtd_scan_partitions();
-    const MtdPartition *part = mtd_find_partition_by_name(device_name);
-    if (part == NULL || mtd_partition_info(part, NULL, NULL, &write_size)) {
-        LOGE("Can't find %s\n", device_name);
-        return -1;
-    }
-
-    MtdReadContext *read = mtd_read_partition(part);
-    if (read == NULL) {
-        LOGE("Can't open %s\n(%s)\n", device_name, strerror(errno));
-        return -1;
-    }
-
-    const ssize_t size = write_size * MISC_PAGES;
-    char data[size];
-    ssize_t r = mtd_read_data(read, data, size);
-    if (r != size) LOGE("Can't read %s\n(%s)\n", device_name, strerror(errno));
-    mtd_read_close(read);
-    if (r != size) return -1;
-
-    memcpy(out, &data[write_size * MISC_COMMAND_PAGE], sizeof(*out));
-    return 0;
-}
-
-int set_bootloader_message_mtd_name(const struct bootloader_message *in,
-                                      const char* mtd_name) {
-    size_t write_size;
-    mtd_scan_partitions();
-    const MtdPartition *part = mtd_find_partition_by_name(mtd_name);
-    if (part == NULL || mtd_partition_info(part, NULL, NULL, &write_size)) {
-        printf("Can't find %s\n", mtd_name);
-        return -1;
-    }
-
-    MtdReadContext *read = mtd_read_partition(part);
-    if (read == NULL) {
-        printf("Can't open %s\n(%s)\n", mtd_name, strerror(errno));
-        return -1;
-    }
-
-    ssize_t size = write_size * MISC_PAGES;
-    char data[size];
-    ssize_t r = mtd_read_data(read, data, size);
-    if (r != size) printf("Can't read %s\n(%s)\n", mtd_name, strerror(errno));
-    mtd_read_close(read);
-    if (r != size) return -1;
-
-    memcpy(&data[write_size * MISC_COMMAND_PAGE], in, sizeof(*in));
-
-    MtdWriteContext *write = mtd_write_partition(part);
-    if (write == NULL) {
-        printf("Can't open %s\n(%s)\n", mtd_name, strerror(errno));
-        return -1;
-    }
-    if (mtd_write_data(write, data, size) != size) {
-        printf("Can't write %s\n(%s)\n", mtd_name, strerror(errno));
-        mtd_write_close(write);
-        return -1;
-    }
-    if (mtd_write_close(write)) {
-        printf("Can't finish %s\n(%s)\n", mtd_name, strerror(errno));
-        return -1;
-    }
-
-    printf("Set boot command \"%s\"\n", in->command[0] != 255 ? in->command : "");
-    return 0;
-}
 
 // ------------------------------------
 // for misc partitions on block devices
@@ -249,7 +198,7 @@
         printf("failed to stat %s\n", fn);
     }
 }
-/*
+
 static int get_bootloader_message_block(struct bootloader_message *out,
                                         const Volume* v) {
     wait_for_device(v->blk_device);
@@ -297,54 +246,7 @@
     }
     return 0;
 }
-*/
 
-int get_bootloader_message_block_name(struct bootloader_message *out) {
-    wait_for_device(device_name);
-    FILE* f = fopen(device_name, "rb");
-    if (f == NULL) {
-        LOGE("Can't open %s\n(%s)\n", device_name, strerror(errno));
-        return -1;
-    }
-#ifdef BOARD_RECOVERY_BLDRMSG_OFFSET
-    fseek(f, BOARD_RECOVERY_BLDRMSG_OFFSET, SEEK_SET);
-#endif
-    struct bootloader_message temp;
-    int count = fread(&temp, sizeof(temp), 1, f);
-    if (count != 1) {
-        LOGE("Failed reading %s\n(%s)\n", device_name, strerror(errno));
-        return -1;
-    }
-    if (fclose(f) != 0) {
-        LOGE("Failed closing %s\n(%s)\n", device_name, strerror(errno));
-        return -1;
-    }
-    memcpy(out, &temp, sizeof(temp));
-    return 0;
-}
-
-int set_bootloader_message_block_name(const struct bootloader_message *in,
-                                        const char* block_name) {
-    wait_for_device(block_name);
-    FILE* f = fopen(block_name, "rb+");
-    if (f == NULL) {
-        printf("Can't open %s\n(%s)\n", block_name, strerror(errno));
-        return -1;
-    }
-#ifdef BOARD_RECOVERY_BLDRMSG_OFFSET
-    fseek(f, BOARD_RECOVERY_BLDRMSG_OFFSET, SEEK_SET);
-#endif
-    int count = fwrite(in, sizeof(*in), 1, f);
-    if (count != 1) {
-        printf("Failed writing %s\n(%s)\n", block_name, strerror(errno));
-        return -1;
-    }
-    if (fclose(f) != 0) {
-        printf("Failed closing %s\n(%s)\n", block_name, strerror(errno));
-        return -1;
-    }
-    return 0;
-}
 
 static const char *COMMAND_FILE = "/cache/recovery/command";
 static const int MAX_ARG_LENGTH = 4096;
@@ -361,11 +263,11 @@
     get_bootloader_message(&boot);  // this may fail, leaving a zeroed structure
 
     if (boot.command[0] != 0 && boot.command[0] != 255) {
-        LOGI("Boot command: %.*s\n", sizeof(boot.command), boot.command);
+        LOGI("Boot command: %.*s\n", (int)sizeof(boot.command), boot.command);
     }
 
     if (boot.status[0] != 0 && boot.status[0] != 255) {
-        LOGI("Boot status: %.*s\n", sizeof(boot.status), boot.status);
+        LOGI("Boot status: %.*s\n", (int)sizeof(boot.status), boot.status);
     }
 
     // --- if arguments weren't supplied, look in the bootloader control block
