diff --git a/Android.mk b/Android.mk
index bdb2325..7b18ca0 100644
--- a/Android.mk
+++ b/Android.mk
@@ -25,7 +25,8 @@
                   Fat.cpp                              \
                   Loop.cpp                             \
                   Devmapper.cpp                        \
-                  ResponseCode.cpp
+                  ResponseCode.cpp                     \
+                  Xwarp.cpp
 
 LOCAL_MODULE:= vold
 
diff --git a/CommandListener.cpp b/CommandListener.cpp
index 9516a67..7f81cc7 100644
--- a/CommandListener.cpp
+++ b/CommandListener.cpp
@@ -21,6 +21,7 @@
 #include <arpa/inet.h>
 #include <dirent.h>
 #include <errno.h>
+#include <fcntl.h>
 
 #define LOG_TAG "CommandListener"
 #include <cutils/log.h>
@@ -31,6 +32,7 @@
 #include "VolumeManager.h"
 #include "ResponseCode.h"
 #include "Process.h"
+#include "Xwarp.h"
 
 CommandListener::CommandListener() :
                  FrameworkListener("vold") {
@@ -38,6 +40,7 @@
     registerCmd(new AsecCmd());
     registerCmd(new ShareCmd());
     registerCmd(new StorageCmd());
+    registerCmd(new XwarpCmd());
 }
 
 CommandListener::VolumeCmd::VolumeCmd() :
@@ -285,3 +288,47 @@
 
     return 0;
 }
+
+CommandListener::XwarpCmd::XwarpCmd() :
+                 VoldCommand("xwarp") {
+}
+
+int CommandListener::XwarpCmd::runCommand(SocketClient *cli,
+                                                      int argc, char **argv) {
+    if (argc < 2) {
+        cli->sendMsg(ResponseCode::CommandSyntaxError, "Missing Argument", false);
+        return 0;
+    }
+
+    if (!strcmp(argv[1], "enable")) {
+        if (Xwarp::enable()) {
+            cli->sendMsg(ResponseCode::OperationFailed, "Failed to enable xwarp", true);
+            return 0;
+        }
+
+        cli->sendMsg(ResponseCode::CommandOkay, "Xwarp mirroring started", false);
+    } else if (!strcmp(argv[1], "disable")) {
+        if (Xwarp::disable()) {
+            cli->sendMsg(ResponseCode::OperationFailed, "Failed to disable xwarp", true);
+            return 0;
+        }
+
+        cli->sendMsg(ResponseCode::CommandOkay, "Xwarp disabled", false);
+    } else if (!strcmp(argv[1], "status")) {
+        char msg[255];
+        bool r;
+        unsigned mirrorPos, maxSize;
+
+        if (Xwarp::status(&r, &mirrorPos, &maxSize)) {
+            cli->sendMsg(ResponseCode::OperationFailed, "Failed to get xwarp status", true);
+            return 0;
+        }
+        snprintf(msg, sizeof(msg), "%s %u %u", (r ? "ready" : "not-ready"), mirrorPos, maxSize);
+        cli->sendMsg(ResponseCode::XwarpStatusResult, msg, false);
+    } else {
+        cli->sendMsg(ResponseCode::CommandSyntaxError, "Unknown storage cmd", false);
+    }
+
+    return 0;
+}
+
diff --git a/CommandListener.h b/CommandListener.h
index 7d4560f..8861e38 100644
--- a/CommandListener.h
+++ b/CommandListener.h
@@ -54,6 +54,13 @@
         virtual ~StorageCmd() {}
         int runCommand(SocketClient *c, int argc, char ** argv);
     };
+
+    class XwarpCmd : public VoldCommand {
+    public:
+        XwarpCmd();
+        virtual ~XwarpCmd() {}
+        int runCommand(SocketClient *c, int argc, char ** argv);
+    };
 };
 
 #endif
diff --git a/ResponseCode.h b/ResponseCode.h
index 31d6482..5e15c80 100644
--- a/ResponseCode.h
+++ b/ResponseCode.h
@@ -32,6 +32,7 @@
     static const int ShareStatusResult        = 210;
     static const int AsecPathResult           = 211;
     static const int ShareEnabledResult       = 212;
+    static const int XwarpStatusResult        = 213;
 
     // 400 series - The command was accepted but the requested action
     // did not take place.
diff --git a/Xwarp.cpp b/Xwarp.cpp
new file mode 100644
index 0000000..1435a53
--- /dev/null
+++ b/Xwarp.cpp
@@ -0,0 +1,83 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <stdio.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <errno.h>
+#include <string.h>
+
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#define LOG_TAG "Vold"
+
+#include <cutils/log.h>
+
+#include "Xwarp.h"
+const char *Xwarp::XWARP_BACKINGFILE = "/mnt/secure/asec/xwarp.img";
+const char *Xwarp::XWARP_CFG = "/sys/fs/yaffs/mtd3/xwarp-backing-store";
+const char *Xwarp::XWARP_READY = "/sys/fs/yaffs/mtd3/xwarp-ready";
+const char *Xwarp::XWARP_MIRROR_STATUS = "/sys/fs/yaffs/mtd3/xwarp-mirror";
+
+int Xwarp::enable() {
+    return doEnableDisable(true);
+}
+
+int Xwarp::disable() {
+    return doEnableDisable(false);
+}
+
+int Xwarp::status(bool *ready, unsigned *mirrorPos, unsigned *maxSize) {
+    FILE *fp;
+
+    *ready = false;
+    *mirrorPos = 0;
+    *maxSize = 0;
+    if (!(fp = fopen(XWARP_READY, "r"))) {
+        return -1;
+    }
+
+    fscanf(fp, "%d", (int *) ready);
+    fclose(fp);
+
+    if (!(fp = fopen(XWARP_MIRROR_STATUS, "r"))) {
+        return -1;
+    }
+
+    fscanf(fp, "%u %u", mirrorPos, maxSize);
+    fclose(fp);
+    return 0;
+}
+
+int Xwarp::doEnableDisable(bool enable) {
+    const char *tmp;
+    int fd = open(XWARP_CFG, O_WRONLY);
+
+    if (fd < 0) 
+        return -1;
+
+    tmp = (enable ? XWARP_BACKINGFILE : "");
+
+    if (write(fd, tmp, strlen(tmp)+1) < 0) {
+        LOGE("Failed to write xwarp cfg (%s)", strerror(errno));
+        close(fd);
+        return -1;
+    }
+
+    close(fd);
+    return 0;
+}
diff --git a/Xwarp.h b/Xwarp.h
new file mode 100644
index 0000000..918a843
--- /dev/null
+++ b/Xwarp.h
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _XWARP_H
+#define _XWARP_H
+
+#include <unistd.h>
+
+class Xwarp {
+    static const char *XWARP_BACKINGFILE;
+    static const char *XWARP_CFG;
+    static const char *XWARP_READY;
+    static const char *XWARP_MIRROR_STATUS;
+
+public:
+    static int enable();
+    static int disable();
+    static int status(bool *ready, unsigned *mirrorPos, unsigned *maxSize);
+
+private:
+    static int doEnableDisable(bool enable);
+};
+
+#endif
