diff --git a/CommandListener.cpp b/CommandListener.cpp
index 3e984a1..1177602 100644
--- a/CommandListener.cpp
+++ b/CommandListener.cpp
@@ -526,21 +526,6 @@
                  VoldCommand("cryptfs") {
 }
 
-static int getType(const char* type)
-{
-    if (!strcmp(type, "default")) {
-        return CRYPT_TYPE_DEFAULT;
-    } else if (!strcmp(type, "password")) {
-        return CRYPT_TYPE_PASSWORD;
-    } else if (!strcmp(type, "pin")) {
-        return CRYPT_TYPE_PIN;
-    } else if (!strcmp(type, "pattern")) {
-        return CRYPT_TYPE_PATTERN;
-    } else {
-        return -1;
-    }
-}
-
 int CommandListener::CryptfsCmd::runCommand(SocketClient *cli,
                                                       int argc, char **argv) {
     if ((cli->getUid() != 0) && (cli->getUid() != AID_SYSTEM)) {
@@ -577,28 +562,21 @@
         dumpArgs(argc, argv, -1);
         rc = cryptfs_crypto_complete();
     } else if (!strcmp(argv[1], "enablecrypto")) {
-        const char* syntax = "Usage: cryptfs enablecrypto <wipe|inplace> "
-                             "default|password|pin|pattern [passwd]";
-        if ( (argc != 4 && argc != 5)
+        if ( (argc != 4 && argc != 3)
              || (strcmp(argv[2], "wipe") && strcmp(argv[2], "inplace")) ) {
-            cli->sendMsg(ResponseCode::CommandSyntaxError, syntax, false);
+            cli->sendMsg(ResponseCode::CommandSyntaxError,
+                         "Usage: cryptfs enablecrypto <wipe|inplace> [passwd]",
+                         false);
             return 0;
         }
-        dumpArgs(argc, argv, 4);
+        dumpArgs(argc, argv, 3);
 
         int tries;
         for (tries = 0; tries < 2; ++tries) {
-            int type = getType(argv[3]);
-            if (type == -1) {
-                cli->sendMsg(ResponseCode::CommandSyntaxError, syntax,
-                             false);
-                return 0;
-            } else if (type == CRYPT_TYPE_DEFAULT) {
-              rc = cryptfs_enable_default(argv[2], /*allow_reboot*/false);
-            } else {
-                rc = cryptfs_enable(argv[2], type, argv[4],
-                                    /*allow_reboot*/false);
-            }
+            if(argc == 3)
+                rc = cryptfs_enable_default(argv[2], /*allow_reboot*/false);
+            else
+                rc = cryptfs_enable(argv[2], argv[3], /*allow_reboot*/false);
 
             if (rc == 0) {
                 break;
@@ -618,8 +596,16 @@
             cli->sendMsg(ResponseCode::CommandSyntaxError, syntax, false);
             return 0;
         }
-        int type = getType(argv[2]);
-        if (type == -1) {
+        int type = 0;
+        if (!strcmp(argv[2], "default")) {
+            type = CRYPT_TYPE_DEFAULT;
+        } else if (!strcmp(argv[2], "password")) {
+            type = CRYPT_TYPE_PASSWORD;
+        } else if (!strcmp(argv[2], "pin")) {
+            type = CRYPT_TYPE_PIN;
+        } else if (!strcmp(argv[2], "pattern")) {
+            type = CRYPT_TYPE_PATTERN;
+        } else {
             cli->sendMsg(ResponseCode::CommandSyntaxError, syntax, false);
             return 0;
         }
diff --git a/cryptfs.c b/cryptfs.c
index 40a473f..3d0f30b 100644
--- a/cryptfs.c
+++ b/cryptfs.c
@@ -2408,9 +2408,13 @@
     return -1;
 }
 
-int cryptfs_enable(char *howarg, int type, char *passwd, int allow_reboot)
+int cryptfs_enable(char *howarg, char *passwd, int allow_reboot)
 {
-    return cryptfs_enable_internal(howarg, type, passwd, allow_reboot);
+    /** @todo If we keep this route (user selected encryption)
+     *  need to take a type in and pass it to here.
+     */
+    return cryptfs_enable_internal(howarg, CRYPT_TYPE_PASSWORD,
+                                   passwd, allow_reboot);
 }
 
 int cryptfs_enable_default(char *howarg, int allow_reboot)
diff --git a/cryptfs.h b/cryptfs.h
index c95d2c2..0e60d77 100644
--- a/cryptfs.h
+++ b/cryptfs.h
@@ -162,7 +162,7 @@
   int cryptfs_check_passwd(char *pw);
   int cryptfs_verify_passwd(char *newpw);
   int cryptfs_restart(void);
-  int cryptfs_enable(char *flag, int type, char *passwd, int allow_reboot);
+  int cryptfs_enable(char *flag, char *passwd, int allow_reboot);
   int cryptfs_changepw(int type, const char *newpw);
   int cryptfs_enable_default(char *flag, int allow_reboot);
   int cryptfs_setup_volume(const char *label, int major, int minor,
