diff --git a/.gitignore b/.gitignore
index 8713a1e..a121c9e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -12,7 +12,6 @@
 /minijail0
 /syscall_filter_unittest
 /system_unittest
-/util_unittest
 /parse_seccomp_policy
 
 # common.mk TEST().
diff --git a/Android.bp b/Android.bp
index 9dd17ea..03b0530 100644
--- a/Android.bp
+++ b/Android.bp
@@ -236,34 +236,6 @@
     },
 }
 
-// Utility functionality unit tests using gtest.
-//
-// For a device, run with:
-// adb shell /data/nativetest/util_unittest_gtest/util_unittest_gtest
-//
-// For host, run with:
-// out/host/linux-x86/nativetest(64)/util_unittest_gtest/util_unittest_gtest
-// =========================================================
-cc_test {
-    name: "util_unittest_gtest",
-    defaults: ["libminijail_flags"],
-    host_supported: true,
-
-    srcs: [
-        "util.c",
-        "util_unittest.cc",
-    ] + unittestSrcFiles,
-
-    static_libs: ["libminijail_generated"],
-    shared_libs: minijailCommonLibraries,
-
-    target: {
-        android: {
-            test_suites: ["device-tests"],
-        },
-    },
-}
-
 // libminijail_test executable for brillo_Minijail test.
 // =========================================================
 cc_test {
diff --git a/Makefile b/Makefile
index 7bbb0b4..b0f0509 100644
--- a/Makefile
+++ b/Makefile
@@ -55,8 +55,7 @@
 
 tests: TEST(CXX_BINARY(libminijail_unittest)) \
 	TEST(CXX_BINARY(syscall_filter_unittest)) \
-	TEST(CXX_BINARY(system_unittest)) \
-	TEST(CXX_BINARY(util_unittest)) \
+	TEST(CXX_BINARY(system_unittest))
 
 
 CC_BINARY(minijail0): LDLIBS += -lcap -ldl
@@ -106,16 +105,6 @@
 clean: CLEAN(system_unittest)
 
 
-CXX_BINARY(util_unittest): CXXFLAGS += $(GTEST_CXXFLAGS)
-CXX_BINARY(util_unittest): LDLIBS += -lcap $(GTEST_LIBS)
-ifeq ($(USE_SYSTEM_GTEST),no)
-CXX_BINARY(util_unittest): $(GTEST_LIBS)
-endif
-CXX_BINARY(util_unittest): util_unittest.o \
-		$(CORE_OBJECT_FILES) testrunner.o
-clean: CLEAN(util_unittest)
-
-
 CXX_BINARY(parse_seccomp_policy): parse_seccomp_policy.o syscall_filter.o \
 		bpf.o util.o libconstants.gen.o libsyscalls.gen.o
 clean: CLEAN(parse_seccomp_policy)
diff --git a/gen_constants-inl.h b/gen_constants-inl.h
index 8efd4f6..ea8c701 100644
--- a/gen_constants-inl.h
+++ b/gen_constants-inl.h
@@ -10,7 +10,6 @@
 #include <stddef.h>
 #include <signal.h>
 #include <sys/mman.h>
-#include <sys/resource.h>
-#include <sys/socket.h>
 #include <sys/stat.h>
+#include <sys/resource.h>
 #include <sys/types.h>
diff --git a/minijail0.1 b/minijail0.1
index 52f98e2..9d24422 100644
--- a/minijail0.1
+++ b/minijail0.1
@@ -12,10 +12,9 @@
 Run using the alternate syscall table named \fItable\fR. Only available on kernels
 and architectures that support the \fBPR_ALT_SYSCALL\fR option of \fBprctl\fR(2).
 .TP
-\fB-b <src>[,<dest>[,<writeable>]]
+\fB-b <src>,<dest>[,<writeable>]
 Bind-mount \fIsrc\fR into the chroot directory at \fIdest\fR, optionally writeable.
 The \fIsrc\fR path must be an absolute path.
-If \fIdest\fR is not specified, it will default to \fIsrc\fR.
 If the destination does not exist, it will be created as a file or directory
 based on the \fIsrc\fR type.
 .TP
@@ -59,14 +58,13 @@
 \fB-H\fR
 Print a help message detailing supported system call names for seccomp_filter.
 (Other direct numbers may be specified if minijail0 is not in sync with the
-host kernel or something like 32/64-bit compatibility issues exist.)
+ host kernel or something like 32/64-bit compatibility issues exist.)
 .TP
 \fB-I\fR
 Run \fIprogram\fR as init (pid 1) inside a new pid namespace (implies \fB-p\fR).
 .TP
-\fB-k <src>,<dest>,<type>[,<flags>[,<data>]]\fR
-Mount \fIsrc\fR, a \fItype\fR filesystem, into the chroot directory at \fIdest\fR,
-with optional \fIflags\fR and optional \fIdata\fR (see \fBmount\fR(2)).
+\fB-k <src>,<dest>,<type>[,<flags>]\fR
+Mount \fIsrc\fR, a \fItype\fR filesystem, into the chroot directory at \fIdest\fR, with optional \fIflags\fR.
 If the mount is not a pseudo filesystem (e.g. proc or sysfs), \fIsrc\fR path
 must be an absolute path (e.g. \fI/dev/sda1\fR and not \fIsda1\fR).
 If the destination does not exist, it will be created as a directory.
diff --git a/minijail0.c b/minijail0.c
index 425fbf0..b0daed2 100644
--- a/minijail0.c
+++ b/minijail0.c
@@ -92,18 +92,14 @@
 
 static void add_binding(struct minijail *j, char *arg)
 {
-	char *src = tokenize(&arg, ",");
-	char *dest = tokenize(&arg, ",");
-	char *flags = tokenize(&arg, ",");
-	if (!src || src[0] == '\0' || arg != NULL) {
+	char *src = strtok(arg, ",");
+	char *dest = strtok(NULL, ",");
+	char *flags = strtok(NULL, ",");
+	if (!src || !dest) {
 		fprintf(stderr, "Bad binding: %s %s\n", src, dest);
 		exit(1);
 	}
-	if (dest == NULL || dest[0] == '\0')
-		dest = src;
-	if (flags == NULL || flags[0] == '\0')
-		flags = "0";
-	if (minijail_bind(j, src, dest, atoi(flags))) {
+	if (minijail_bind(j, src, dest, flags ? atoi(flags) : 0)) {
 		fprintf(stderr, "minijail_bind failed.\n");
 		exit(1);
 	}
@@ -111,11 +107,10 @@
 
 static void add_rlimit(struct minijail *j, char *arg)
 {
-	char *type = tokenize(&arg, ",");
-	char *cur = tokenize(&arg, ",");
-	char *max = tokenize(&arg, ",");
-	if (!type || type[0] == '\0' || !cur || cur[0] == '\0' ||
-	    !max || max[0] == '\0' || arg != NULL) {
+	char *type = strtok(arg, ",");
+	char *cur = strtok(NULL, ",");
+	char *max = strtok(NULL, ",");
+	if (!type || !cur || !max) {
 		fprintf(stderr, "Bad rlimit '%s'.\n", arg);
 		exit(1);
 	}
@@ -128,13 +123,12 @@
 
 static void add_mount(struct minijail *j, char *arg)
 {
-	char *src = tokenize(&arg, ",");
-	char *dest = tokenize(&arg, ",");
-	char *type = tokenize(&arg, ",");
-	char *flags = tokenize(&arg, ",");
-	char *data = tokenize(&arg, ",");
-	if (!src || src[0] == '\0' || !dest || dest[0] == '\0' ||
-	    !type || type[0] == '\0' || arg != NULL) {
+	char *src = strtok(arg, ",");
+	char *dest = strtok(NULL, ",");
+	char *type = strtok(NULL, ",");
+	char *flags = strtok(NULL, ",");
+	char *data = strtok(NULL, ",");
+	if (!src || !dest || !type) {
 		fprintf(stderr, "Bad mount: %s %s %s\n", src, dest, type);
 		exit(1);
 	}
@@ -300,7 +294,7 @@
 	/* clang-format off */
 	printf("Usage: %s [-dGhHiIKlLnNprRstUvyYz]\n"
 	       "  [-a <table>]\n"
-	       "  [-b <src>[,<dest>[,<writeable>]]] [-k <src>,<dest>,<type>[,<flags>[,<data>]]]\n"
+	       "  [-b <src>,<dest>[,<writeable>]] [-k <src>,<dest>,<type>[,<flags>][,<data>]]\n"
 	       "  [-c <caps>] [-C <dir>] [-P <dir>] [-e[file]] [-f <file>] [-g <group>]\n"
 	       "  [-m[<uid> <loweruid> <count>]*] [-M[<gid> <lowergid> <count>]*] [--profile <name>]\n"
 	       "  [-R <type,cur,max>] [-S <file>] [-t[size]] [-T <type>] [-u <user>] [-V <file>]\n"
diff --git a/syscall_filter_unittest.cc b/syscall_filter_unittest.cc
index db01fbb..6bc044d 100644
--- a/syscall_filter_unittest.cc
+++ b/syscall_filter_unittest.cc
@@ -1261,19 +1261,6 @@
   ASSERT_NE(res, 0);
 }
 
-TEST(FilterTest, invalid_tokens) {
-  struct sock_fprog actual;
-  const char *policy = "read: arg0 == 1 |||| arg0 == 2\n";
-
-  FILE *policy_file = write_policy_to_pipe(policy, strlen(policy));
-  ASSERT_NE(policy_file, nullptr);
-
-  int res =
-      compile_filter("policy", policy_file, &actual, USE_RET_KILL, NO_LOGGING);
-  fclose(policy_file);
-  ASSERT_NE(res, 0);
-}
-
 TEST(FilterTest, nonexistent) {
   struct sock_fprog actual;
   int res = compile_filter("policy", NULL, &actual, USE_RET_KILL, NO_LOGGING);
diff --git a/util.c b/util.c
index 9bb37ca..14c028a 100644
--- a/util.c
+++ b/util.c
@@ -257,8 +257,8 @@
 {
 	char *ret = NULL;
 
-	/* If the string is NULL, there are no tokens to be found. */
-	if (stringp == NULL || *stringp == NULL)
+	/* If the string is NULL or empty, there are no tokens to be found. */
+	if (stringp == NULL || *stringp == NULL || **stringp == '\0')
 		return NULL;
 
 	/*
@@ -271,19 +271,33 @@
 		return ret;
 	}
 
-	char *found = strstr(*stringp, delim);
-	if (!found) {
+	char *found;
+	while (**stringp != '\0') {
+		found = strstr(*stringp, delim);
+
+		if (!found) {
+			/*
+			 * The delimiter was not found, so the full string
+			 * makes up the only token, and we're done.
+			 */
+			ret = *stringp;
+			*stringp = NULL;
+			break;
+		}
+
+		if (found != *stringp) {
+			/* There's a non-empty token before the delimiter. */
+			*found = '\0';
+			ret = *stringp;
+			*stringp = found + strlen(delim);
+			break;
+		}
+
 		/*
-		 * The delimiter was not found, so the full string
-		 * makes up the only token, and we're done.
+		 * The delimiter was found at the start of the string,
+		 * skip it and keep looking for a non-empty token.
 		 */
-		ret = *stringp;
-		*stringp = NULL;
-	} else {
-		/* There's a token here, possibly empty.  That's OK. */
-		*found = '\0';
-		ret = *stringp;
-		*stringp = found + strlen(delim);
+		*stringp += strlen(delim);
 	}
 
 	return ret;
diff --git a/util.h b/util.h
index 7ff86b8..9ec88ce 100644
--- a/util.h
+++ b/util.h
@@ -83,18 +83,6 @@
 int parse_size(size_t *size, const char *sizespec);
 
 char *strip(char *s);
-
-/*
- * tokenize: locate the next token in @stringp using the @delim
- * @stringp A pointer to the string to scan for tokens
- * @delim   The delimiter to split by
- *
- * Note that, unlike strtok, @delim is not a set of characters, but the full
- * delimiter.  e.g. "a,;b,;c" with a delim of ",;" will yield ["a","b","c"].
- *
- * Note that, unlike strtok, this may return an empty token.  e.g. "a,,b" with
- * strtok will yield ["a","b"], but this will yield ["a","","b"].
- */
 char *tokenize(char **stringp, const char *delim);
 
 char *path_join(const char *external_path, const char *internal_path);
diff --git a/util_unittest.cc b/util_unittest.cc
deleted file mode 100644
index ec3d714..0000000
--- a/util_unittest.cc
+++ /dev/null
@@ -1,93 +0,0 @@
-// util_unittest.cpp
-// Copyright (C) 2018 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.
-//
-// Test system.[ch] module code using gtest.
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/stat.h>
-#include <unistd.h>
-
-#include <gtest/gtest.h>
-
-#include "util.h"
-
-// Sanity check for the strip func.
-TEST(strip, basic) {
-  char str[] = " foo\t";
-  ASSERT_EQ("foo", std::string(strip(str)));
-}
-
-// Make sure we don't crash with various "null"-like inputs.
-TEST(tokenize, null_stringp) {
-  ASSERT_EQ(nullptr, tokenize(nullptr, nullptr));
-  ASSERT_EQ(nullptr, tokenize(nullptr, ""));
-  ASSERT_EQ(nullptr, tokenize(nullptr, ","));
-
-  char *p = nullptr;
-  ASSERT_EQ(nullptr, tokenize(&p, nullptr));
-}
-
-// Make sure we don't crash with various "null"-like inputs.
-TEST(tokenize, null_delim) {
-  char str[] = "a,b,c";
-  char *p = str;
-  ASSERT_EQ(str, tokenize(&p, nullptr));
-  ASSERT_EQ(nullptr, p);
-  ASSERT_EQ(str, std::string("a,b,c"));
-
-  p = str;
-  ASSERT_EQ(str, tokenize(&p, ""));
-  ASSERT_EQ(nullptr, p);
-  ASSERT_EQ(str, std::string("a,b,c"));
-}
-
-// Sanity check for the tokenize func.
-TEST(tokenize, basic) {
-  char str[] = "a,b,c";
-  char *p = str;
-  ASSERT_EQ("a", std::string(tokenize(&p, ",")));
-  ASSERT_EQ("b", std::string(tokenize(&p, ",")));
-  ASSERT_EQ("c", std::string(tokenize(&p, ",")));
-  ASSERT_EQ(nullptr, p);
-  ASSERT_EQ(nullptr, tokenize(&p, ","));
-}
-
-// Check edge case with an empty string.
-TEST(tokenize, empty_string) {
-  char str[] = "";
-  char *p = str;
-  ASSERT_EQ("", std::string(tokenize(&p, ",")));
-  ASSERT_EQ(nullptr, p);
-  ASSERT_EQ(nullptr, tokenize(&p, ","));
-}
-
-// Check behavior with empty tokens at the start/middle/end.
-TEST(tokenize, empty_tokens) {
-  char str[] = ",,a,b,,,c,,";
-  char *p = str;
-  ASSERT_EQ("", std::string(tokenize(&p, ",")));
-  ASSERT_EQ("", std::string(tokenize(&p, ",")));
-  ASSERT_EQ("a", std::string(tokenize(&p, ",")));
-  ASSERT_EQ("b", std::string(tokenize(&p, ",")));
-  ASSERT_EQ("", std::string(tokenize(&p, ",")));
-  ASSERT_EQ("", std::string(tokenize(&p, ",")));
-  ASSERT_EQ("c", std::string(tokenize(&p, ",")));
-  ASSERT_EQ("", std::string(tokenize(&p, ",")));
-  ASSERT_EQ("", std::string(tokenize(&p, ",")));
-  ASSERT_EQ(nullptr, p);
-  ASSERT_EQ(nullptr, tokenize(&p, ","));
-}
