diff --git a/cmds/installd/Android.mk b/cmds/installd/Android.mk
index 6eecb20..1dd4ee5 100644
--- a/cmds/installd/Android.mk
+++ b/cmds/installd/Android.mk
@@ -11,8 +11,9 @@
 
 LOCAL_SRC_FILES := \
     $(common_src_files)
-LOCAL_CFLAGS := -std=gnu99
+
 LOCAL_MODULE := libinstalld
+
 LOCAL_MODULE_TAGS := eng tests
 
 include $(BUILD_STATIC_LIBRARY)
@@ -35,7 +36,7 @@
     libdiskusage
 
 LOCAL_MODULE := installd
-LOCAL_CFLAGS := -std=gnu99
+
 LOCAL_MODULE_TAGS := optional
 
 include $(BUILD_EXECUTABLE)
diff --git a/cmds/installd/commands.c b/cmds/installd/commands.c
index e22fa6a..c272e47 100644
--- a/cmds/installd/commands.c
+++ b/cmds/installd/commands.c
@@ -28,15 +28,13 @@
 dir_rec_t android_media_dir;
 dir_rec_array_t android_system_dirs;
 
-int install(const char *pkgname, uid_t uid, gid_t gid, bool restrictHomeDir)
+int install(const char *pkgname, uid_t uid, gid_t gid)
 {
     char pkgdir[PKG_PATH_MAX];
     char libsymlink[PKG_PATH_MAX];
     char applibdir[PKG_PATH_MAX];
     struct stat libStat;
 
-    mode_t defaultMode = restrictHomeDir ? 0700 : 0751;
-
     if ((uid < AID_SYSTEM) || (gid < AID_SYSTEM)) {
         ALOGE("invalid uid/gid: %d %d\n", uid, gid);
         return -1;
@@ -57,11 +55,11 @@
         return -1;
     }
 
-    if (mkdir(pkgdir, defaultMode) < 0) {
+    if (mkdir(pkgdir, 0751) < 0) {
         ALOGE("cannot create dir '%s': %s\n", pkgdir, strerror(errno));
         return -1;
     }
-    if (chmod(pkgdir, defaultMode) < 0) {
+    if (chmod(pkgdir, 0751) < 0) {
         ALOGE("cannot chmod dir '%s': %s\n", pkgdir, strerror(errno));
         unlink(pkgdir);
         return -1;
@@ -186,15 +184,13 @@
     return delete_dir_contents(pkgdir, 0, "lib");
 }
 
-int make_user_data(const char *pkgname, uid_t uid, uid_t persona, bool restrictHomeDir)
+int make_user_data(const char *pkgname, uid_t uid, uid_t persona)
 {
     char pkgdir[PKG_PATH_MAX];
     char applibdir[PKG_PATH_MAX];
     char libsymlink[PKG_PATH_MAX];
     struct stat libStat;
 
-    mode_t defaultMode = restrictHomeDir ? 0700 : 0751;
-
     // Create the data dir for the package
     if (create_pkg_path(pkgdir, pkgname, PKG_DIR_POSTFIX, persona)) {
         return -1;
@@ -208,11 +204,11 @@
         return -1;
     }
 
-    if (mkdir(pkgdir, defaultMode) < 0) {
+    if (mkdir(pkgdir, 0751) < 0) {
         ALOGE("cannot create dir '%s': %s\n", pkgdir, strerror(errno));
         return -errno;
     }
-    if (chmod(pkgdir, defaultMode) < 0) {
+    if (chmod(pkgdir, 0751) < 0) {
         ALOGE("cannot chmod dir '%s': %s\n", pkgdir, strerror(errno));
         unlink(pkgdir);
         return -errno;
diff --git a/cmds/installd/installd.c b/cmds/installd/installd.c
index bf21102..2285e79 100644
--- a/cmds/installd/installd.c
+++ b/cmds/installd/installd.c
@@ -31,11 +31,7 @@
 
 static int do_install(char **arg, char reply[REPLY_MAX])
 {
-    bool restrictHomeDir = (strncmp(arg[3], "false", 6) != 0);
-    return install(arg[0],           /* pkgname */
-                   atoi(arg[1]),     /* uid */
-                   atoi(arg[2]),     /* gid */
-                   restrictHomeDir); /* restrictHomeDir */
+    return install(arg[0], atoi(arg[1]), atoi(arg[2])); /* pkgname, uid, gid */
 }
 
 static int do_dexopt(char **arg, char reply[REPLY_MAX])
@@ -107,11 +103,7 @@
 
 static int do_mk_user_data(char **arg, char reply[REPLY_MAX])
 {
-    bool restrictHomeDir = (strncmp(arg[3], "false", 6) != 0);
-    return make_user_data(arg[0],           /* pkgname */
-                          atoi(arg[1]),     /* uid */
-                          atoi(arg[2]),     /* userid */
-                          restrictHomeDir); /* restrictHomeDir */
+    return make_user_data(arg[0], atoi(arg[1]), atoi(arg[2])); /* pkgname, uid, userid */
 }
 
 static int do_rm_user(char **arg, char reply[REPLY_MAX])
@@ -137,7 +129,7 @@
 
 struct cmdinfo cmds[] = {
     { "ping",                 0, do_ping },
-    { "install",              4, do_install },
+    { "install",              3, do_install },
     { "dexopt",               3, do_dexopt },
     { "movedex",              2, do_move_dex },
     { "rmdex",                1, do_rm_dex },
@@ -150,7 +142,7 @@
     { "rmuserdata",           2, do_rm_user_data },
     { "movefiles",            0, do_movefiles },
     { "linklib",              3, do_linklib },
-    { "mkuserdata",           4, do_mk_user_data },
+    { "mkuserdata",           3, do_mk_user_data },
     { "rmuser",               1, do_rm_user },
 };
 
diff --git a/cmds/installd/installd.h b/cmds/installd/installd.h
index cf2bed6..efd3aa7 100644
--- a/cmds/installd/installd.h
+++ b/cmds/installd/installd.h
@@ -20,7 +20,6 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <stdint.h>
-#include <stdbool.h>
 #include <inttypes.h>
 #include <sys/stat.h>
 #include <dirent.h>
@@ -193,14 +192,12 @@
 
 /* commands.c */
 
-int install(const char *pkgname, uid_t uid, gid_t gid,
-            bool restrictHomeDirectory);
+int install(const char *pkgname, uid_t uid, gid_t gid);
 int uninstall(const char *pkgname, uid_t persona);
 int renamepkg(const char *oldpkgname, const char *newpkgname);
 int fix_uid(const char *pkgname, uid_t uid, gid_t gid);
 int delete_user_data(const char *pkgname, uid_t persona);
-int make_user_data(const char *pkgname, uid_t uid, uid_t persona,
-                   bool restrictHomeDirectory);
+int make_user_data(const char *pkgname, uid_t uid, uid_t persona);
 int delete_persona(uid_t persona);
 int delete_cache(const char *pkgname, uid_t persona);
 int move_dex(const char *src, const char *dst);
