diff --git a/updater/install.c b/updater/install.c
index 5117706..000b525 100644
--- a/updater/install.c
+++ b/updater/install.c
@@ -1,5 +1,6 @@
 /*
  * 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.
@@ -33,6 +34,7 @@
 #include "minzip/DirUtil.h"
 #include "mtdutils/mounts.h"
 #include "mtdutils/mtdutils.h"
+#include "mmcutils/mmcutils.h"
 #include "updater.h"
 #include "applypatch/applypatch.h"
 
@@ -84,6 +86,23 @@
             goto done;
         }
         result = mount_point;
+    } else if (strcmp(type, "MMC") == 0) {
+        mmc_scan_partitions();
+        const MmcPartition* mmc;
+        mmc = mmc_find_partition_by_name(location);
+        if (mmc == NULL) {
+            fprintf(stderr, "%s: no mmc partition named \"%s\"",
+                    name, location);
+            result = strdup("");
+            goto done;
+        }
+        if (mmc_mount_partition(mmc, mount_point, 0 /* rw */) != 0) {
+            fprintf(stderr, "mmc mount of %s failed: %s\n",
+                    location, strerror(errno));
+            result = strdup("");
+            goto done;
+        }
+        result = mount_point;
     } else {
         if (mount(location, mount_point, type,
                   MS_NOATIME | MS_NODEV | MS_NODIRATIME, "") < 0) {
@@ -211,11 +230,24 @@
             result = strdup("");
             goto done;
         }
-        result = location;
+    } else if (strcmp(type, "MMC") == 0) {
+        mmc_scan_partitions();
+        const MmcPartition* mmc = mmc_find_partition_by_name(location);
+        if (mmc == NULL) {
+            fprintf(stderr, "%s: no mmc partition named \"%s\"",
+                    name, location);
+            result = strdup("");
+            goto done;
+        }
+        if (mmc_format_ext3(mmc))
+        {
+            result = strdup("");
+            goto done;
+        }
     } else {
         fprintf(stderr, "%s: unsupported type \"%s\"", name, type);
     }
-
+    result = location;
 done:
     free(type);
     if (result != location) free(location);
@@ -660,7 +692,7 @@
     if (mtd == NULL) {
         fprintf(stderr, "%s: no mtd partition named \"%s\"\n", name, partition);
         result = strdup("");
-        goto done;
+        goto MMC;
     }
 
     MtdWriteContext* ctx = mtd_write_partition(mtd);
@@ -706,6 +738,22 @@
            success ? "wrote" : "failed to write", partition, filename);
 
     result = success ? partition : strdup("");
+    goto done;
+
+MMC:
+    mmc_scan_partitions();
+    const MmcPartition* mmc = mmc_find_partition_by_name(partition);
+    if (mmc == NULL) {
+        fprintf(stderr, "%s: no mmc partition named \"%s\"\n", name, partition);
+        result = strdup("");
+        goto done;
+    }
+    if (mmc_raw_copy(mmc, filename)) {
+        fprintf(stderr, "%s: error erasing mmc partition named \"%s\"\n", name, partition);
+        result = strdup("");
+        goto done;
+    }
+    result = partition;
 #endif
 
 done:
