diff --git a/updater/install.c b/updater/install.c
index 478055d..d89aa28 100644
--- a/updater/install.c
+++ b/updater/install.c
@@ -1,6 +1,5 @@
 /*
  * Copyright (C) 2009 The Android Open Source Project
- * Copyright (c) 2010, Code Aurora Forum. All rights reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -32,10 +31,8 @@
 #include "edify/expr.h"
 #include "mincrypt/sha.h"
 #include "minzip/DirUtil.h"
-#include "mounts.h"
-#include "flashutils/flashutils.h"
+#include "mtdutils/mounts.h"
 #include "mtdutils/mtdutils.h"
-#include "mmcutils/mmcutils.h"
 #include "updater.h"
 #include "applypatch/applypatch.h"
 
@@ -81,11 +78,23 @@
 
     mkdir(mount_point, 0755);
 
-    if (strcmp(partition_type, "MTD") == 0 || strcmp(partition_type, "MMC") == 0) {
-        if (0 == mount_partition(location, mount_point, get_default_filesystem(), 0))
-            result = mount_point;
-        else
+    if (strcmp(partition_type, "MTD") == 0) {
+        mtd_scan_partitions();
+        const MtdPartition* mtd;
+        mtd = mtd_find_partition_by_name(location);
+        if (mtd == NULL) {
+            fprintf(stderr, "%s: no mtd partition named \"%s\"",
+                    name, location);
             result = strdup("");
+            goto done;
+        }
+        if (mtd_mount_partition(mtd, mount_point, fs_type, 0 /* rw */) != 0) {
+            fprintf(stderr, "mtd mount of %s failed: %s\n",
+                    location, strerror(errno));
+            result = strdup("");
+            goto done;
+        }
+        result = mount_point;
     } else {
         if (mount(location, mount_point, fs_type,
                   MS_NOATIME | MS_NODEV | MS_NODIRATIME, "") < 0) {
@@ -195,11 +204,33 @@
         goto done;
     }
 
-    if (strcmp(partition_type, "MTD") == 0 || strcmp(partition_type, "MMC") == 0) {
-        if (0 != erase_partition(location, NULL)) {
+    if (strcmp(partition_type, "MTD") == 0) {
+        mtd_scan_partitions();
+        const MtdPartition* mtd = mtd_find_partition_by_name(location);
+        if (mtd == NULL) {
+            fprintf(stderr, "%s: no mtd partition named \"%s\"",
+                    name, location);
             result = strdup("");
             goto done;
         }
+        MtdWriteContext* ctx = mtd_write_partition(mtd);
+        if (ctx == NULL) {
+            fprintf(stderr, "%s: can't write \"%s\"", name, location);
+            result = strdup("");
+            goto done;
+        }
+        if (mtd_erase_blocks(ctx, -1) == -1) {
+            mtd_write_close(ctx);
+            fprintf(stderr, "%s: failed to erase \"%s\"", name, location);
+            result = strdup("");
+            goto done;
+        }
+        if (mtd_write_close(ctx) != 0) {
+            fprintf(stderr, "%s: failed to close \"%s\"", name, location);
+            result = strdup("");
+            goto done;
+        }
+        result = location;
 #ifdef USE_EXT4
     } else if (strcmp(fs_type, "ext4") == 0) {
         reset_ext4fs_info();
@@ -216,7 +247,7 @@
         fprintf(stderr, "%s: unsupported fs_type \"%s\" partition_type \"%s\"",
                 name, fs_type, partition_type);
     }
-    result = location;
+
 done:
     free(fs_type);
     free(partition_type);
@@ -652,7 +683,7 @@
     if (0 == restore_raw_partition(partition, filename))
         result = strdup(partition);
     else
-        result = strdup("");
+        result = success ? partition : strdup("");
 
 done:
     if (result != partition) free(partition);
