diff --git a/minzip/DirUtil.c b/minzip/DirUtil.c
index c120fa3..8dd5da1 100644
--- a/minzip/DirUtil.c
+++ b/minzip/DirUtil.c
@@ -23,7 +23,6 @@
 #include <errno.h>
 #include <dirent.h>
 #include <limits.h>
-#include <selinux/selinux.h>
 
 #include "DirUtil.h"
 
@@ -238,7 +237,7 @@
 
 int
 dirSetHierarchyPermissions(const char *path,
-        int uid, int gid, int dirMode, int fileMode, const char* secontext)
+        int uid, int gid, int dirMode, int fileMode)
 {
     struct stat st;
     if (lstat(path, &st)) {
@@ -256,10 +255,6 @@
         return -1;
     }
 
-    if ((secontext != NULL) && lsetfilecon(path, secontext) && (errno != ENOTSUP)) {
-        return -1;
-    }
-
     /* recurse over directory components */
     if (S_ISDIR(st.st_mode)) {
         DIR *dir = opendir(path);
@@ -276,7 +271,7 @@
 
             char dn[PATH_MAX];
             snprintf(dn, sizeof(dn), "%s/%s", path, de->d_name);
-            if (!dirSetHierarchyPermissions(dn, uid, gid, dirMode, fileMode, secontext)) {
+            if (!dirSetHierarchyPermissions(dn, uid, gid, dirMode, fileMode)) {
                 errno = 0;
             } else if (errno == 0) {
                 errno = -1;
diff --git a/minzip/DirUtil.h b/minzip/DirUtil.h
index 3e12a0b..a5cfa76 100644
--- a/minzip/DirUtil.h
+++ b/minzip/DirUtil.h
@@ -54,7 +54,7 @@
  * Sets directories to <dirMode> and files to <fileMode>.  Skips symlinks.
  */
 int dirSetHierarchyPermissions(const char *path,
-         int uid, int gid, int dirMode, int fileMode, const char* secontext);
+         int uid, int gid, int dirMode, int fileMode);
 
 #ifdef __cplusplus
 }
diff --git a/updater/install.c b/updater/install.c
index c81bbb5..9fa06a2 100644
--- a/updater/install.c
+++ b/updater/install.c
@@ -27,7 +27,6 @@
 #include <unistd.h>
 #include <fcntl.h>
 #include <time.h>
-#include <selinux/selinux.h>
 
 #include "cutils/misc.h"
 #include "cutils/properties.h"
@@ -522,10 +521,9 @@
 
 Value* SetPermFn(const char* name, State* state, int argc, Expr* argv[]) {
     char* result = NULL;
-    bool recursive = (strcmp(name, "set_perm_recursive") == 0) || (strcmp(name, "set_perm2_recursive") == 0);
-    bool has_selabel = (strcmp(name, "set_perm2") == 0) || (strcmp(name, "set_perm2_recursive") == 0);
+    bool recursive = (strcmp(name, "set_perm_recursive") == 0);
 
-    int min_args = 4 + (has_selabel ? 1 : 0) + (recursive ? 1 : 0);
+    int min_args = 4 + (recursive ? 1 : 0);
     if (argc < min_args) {
         return ErrorAbort(state, "%s() expects %d+ args, got %d",
                           name, min_args, argc);
@@ -564,13 +562,8 @@
             goto done;
         }
 
-        char* secontext = NULL;
-        if (has_selabel) {
-            secontext = args[4];
-        }
-
-        for (i = 4 + (has_selabel ? 1 : 0); i < argc; ++i) {
-            dirSetHierarchyPermissions(args[i], uid, gid, dir_mode, file_mode, secontext);
+        for (i = 4; i < argc; ++i) {
+            dirSetHierarchyPermissions(args[i], uid, gid, dir_mode, file_mode);
         }
     } else {
         int mode = strtoul(args[2], &end, 0);
@@ -579,12 +572,7 @@
             goto done;
         }
 
-        char* secontext = NULL;
-        if (has_selabel) {
-            secontext = args[3];
-        }
-
-        for (i = 3 + (has_selabel ? 1 : 0); i < argc; ++i) {
+        for (i = 3; i < argc; ++i) {
             if (chown(args[i], uid, gid) < 0) {
                 printf("%s: chown of %s to %d %d failed: %s\n",
                         name, args[i], uid, gid, strerror(errno));
@@ -595,11 +583,6 @@
                         name, args[i], mode, strerror(errno));
                 ++bad;
             }
-            if (has_selabel && lsetfilecon(args[i], secontext) && (errno != ENOTSUP)) {
-                printf("%s: lsetfilecon of %s to %s failed: %s\n",
-                        name, args[i], secontext, strerror(errno));
-                ++bad;
-            }
         }
     }
     result = strdup("");
@@ -1152,8 +1135,6 @@
     RegisterFunction("symlink", SymlinkFn);
     RegisterFunction("set_perm", SetPermFn);
     RegisterFunction("set_perm_recursive", SetPermFn);
-    RegisterFunction("set_perm2", SetPermFn);
-    RegisterFunction("set_perm2_recursive", SetPermFn);
 
     RegisterFunction("getprop", GetPropFn);
     RegisterFunction("file_getprop", FileGetPropFn);
