diff --git a/CommandListener.cpp b/CommandListener.cpp
index f15d44a..e5ebb46 100644
--- a/CommandListener.cpp
+++ b/CommandListener.cpp
@@ -46,6 +46,7 @@
     registerCmd(new DestroyAsecCmd());
     registerCmd(new MountAsecCmd());
     registerCmd(new UnmountAsecCmd());
+    registerCmd(new RenameAsecCmd());
     registerCmd(new ListAsecCmd());
     registerCmd(new AsecPathCmd());
 }
@@ -275,6 +276,26 @@
     return 0;
 }
 
+CommandListener::RenameAsecCmd::RenameAsecCmd() :
+                 VoldCommand("rename_asec") {
+}
+
+int CommandListener::RenameAsecCmd::runCommand(SocketClient *cli,
+                                            int argc, char **argv) {
+    if (argc != 3) {
+        cli->sendMsg(ResponseCode::CommandSyntaxError,
+                     "Usage: rename_asec <id1> <id2>", false);
+        return 0;
+    }
+
+    if (VolumeManager::Instance()->renameAsec(argv[1], argv[2])) {
+        cli->sendMsg(ResponseCode::OperationFailed, "Rename failed", true);
+    } else {
+        cli->sendMsg(ResponseCode::CommandOkay, "Rename succeeded", false);
+    }
+    return 0;
+}
+
 CommandListener::ListAsecCmd::ListAsecCmd() :
                  VoldCommand("list_asec") {
 
diff --git a/CommandListener.h b/CommandListener.h
index 64ff31f..571b81b 100644
--- a/CommandListener.h
+++ b/CommandListener.h
@@ -118,6 +118,13 @@
         int runCommand(SocketClient *c, int argc, char ** argv);
     };
 
+    class RenameAsecCmd : public VoldCommand {
+    public:
+        RenameAsecCmd();
+        virtual ~RenameAsecCmd() {}
+        int runCommand(SocketClient *c, int argc, char ** argv);
+    };
+
     class ListAsecCmd : public VoldCommand {
     public:
         ListAsecCmd();
@@ -132,7 +139,6 @@
         int runCommand(SocketClient *c, int argc, char ** argv);
     };
 
-
 };
 
 #endif
diff --git a/VolumeManager.cpp b/VolumeManager.cpp
index c8b4505..0b63c9f 100644
--- a/VolumeManager.cpp
+++ b/VolumeManager.cpp
@@ -284,6 +284,42 @@
     return 0;
 }
 
+int VolumeManager::renameAsec(const char *id1, const char *id2) {
+    char *asecFilename1;
+    char *asecFilename2;
+    char mountPoint[255];
+
+    asprintf(&asecFilename1, "/sdcard/android_secure/%s.asec", id1);
+    asprintf(&asecFilename2, "/sdcard/android_secure/%s.asec", id2);
+
+    snprintf(mountPoint, sizeof(mountPoint), "/asec/%s", id1);
+    if (isMountpointMounted(mountPoint)) {
+        LOGW("Rename attempt when src mounted");
+        errno = EBUSY;
+        goto out_err;
+    }
+
+    if (!access(asecFilename2, F_OK)) {
+        LOGE("Rename attempt when dst exists");
+        errno = EADDRINUSE;
+        goto out_err;
+    }
+
+    if (rename(asecFilename1, asecFilename2)) {
+        LOGE("Rename of '%s' to '%s' failed (%s)", asecFilename1, asecFilename2, strerror(errno));
+        goto out_err;
+    }
+
+    free(asecFilename1);
+    free(asecFilename2);
+    return 0;
+
+out_err:
+    free(asecFilename1);
+    free(asecFilename2);
+    return -1;
+}
+
 int VolumeManager::unmountAsec(const char *id) {
     char asecFileName[255];
     char mountPoint[255];
diff --git a/VolumeManager.h b/VolumeManager.h
index a0761b4..07861d4 100644
--- a/VolumeManager.h
+++ b/VolumeManager.h
@@ -64,6 +64,7 @@
     int destroyAsec(const char *id);
     int mountAsec(const char *id, const char *key, int ownerUid);
     int unmountAsec(const char *id);
+    int renameAsec(const char *id1, const char *id2);
     int getAsecMountPath(const char *id, char *buffer, int maxlen);
 
     // XXX: This should be moved private once switch uevents are working
