diff --git a/CommandListener.cpp b/CommandListener.cpp
index 782cf1b..b04ec81 100644
--- a/CommandListener.cpp
+++ b/CommandListener.cpp
@@ -324,17 +324,24 @@
         }
 
         if (!strcmp(argv[1], "start")) {
-            struct in_addr s, e;
+            if (argc % 2 == 1) {
+                cli->sendMsg(ResponseCode::CommandSyntaxError, "Bad number of arguments", false);
+                return 0;
+            }
 
-            if (!inet_aton(argv[2], &s)) {
-                cli->sendMsg(ResponseCode::CommandParameterError, "Invalid start address", false);
-                return 0;
+            int num_addrs = argc - 2;
+            int arg_index = 2;
+            int array_index = 0;
+            in_addr *addrs = (in_addr *)malloc(sizeof(in_addr) * num_addrs);
+            while (array_index < num_addrs) {
+                if (!inet_aton(argv[arg_index++], &(addrs[array_index++]))) {
+                    cli->sendMsg(ResponseCode::CommandParameterError, "Invalid address", false);
+                    free(addrs);
+                    return 0;
+                }
             }
-            if (!inet_aton(argv[3], &e)) {
-                cli->sendMsg(ResponseCode::CommandParameterError, "Invalid end address", false);
-                return 0;
-            }
-            rc = sTetherCtrl->startTethering(s, e);
+            rc = sTetherCtrl->startTethering(num_addrs, addrs);
+            free(addrs);
         } else if (!strcmp(argv[1], "interface")) {
             if (!strcmp(argv[2], "add")) {
                 rc = sTetherCtrl->tetherInterface(argv[3]);
diff --git a/TetherController.cpp b/TetherController.cpp
index 08f6bb1..30ff165 100644
--- a/TetherController.cpp
+++ b/TetherController.cpp
@@ -86,8 +86,7 @@
     return (enabled  == '1' ? true : false);
 }
 
-int TetherController::startTethering(struct in_addr dhcpStart, struct in_addr dhcpEnd) {
-
+int TetherController::startTethering(int num_addrs, struct in_addr* addrs) {
     if (mDaemonPid != 0) {
         LOGE("Tethering already started");
         errno = EBUSY;
@@ -124,17 +123,27 @@
             }
             close(pipefd[0]);
         }
-        char *start = strdup(inet_ntoa(dhcpStart));
-        char *end = strdup(inet_ntoa(dhcpEnd));
-        char *range;
 
-        asprintf(&range, "--dhcp-range=%s,%s,1h", start, end);
+        int num_processed_args = 4 + (num_addrs/2) + 1; // 1 null for termination
+        char **args = (char **)malloc(sizeof(char *) * num_processed_args);
+        args[num_processed_args - 1] = NULL;
+        args[0] = (char *)"/system/bin/dnsmasq";
+        args[1] = (char *)"--no-daemon";
+        args[2] = (char *)"--no-resolv";
+        args[3] = (char *)"--no-poll";
 
-        if (execl("/system/bin/dnsmasq", "/system/bin/dnsmasq", "--no-daemon", "--no-resolv",
-                  "--no-poll", "--no-hosts", range, (char *) NULL)) {
+        int nextArg = 4;
+        for (int addrIndex=0; addrIndex < num_addrs;) {
+            char *start = strdup(inet_ntoa(addrs[addrIndex++]));
+            char *end = strdup(inet_ntoa(addrs[addrIndex++]));
+            asprintf(&(args[nextArg++]),"--dhcp-range=%s,%s,1h", start, end);
+        }
+
+        if (execv(args[0], args)) {
             LOGE("execl failed (%s)", strerror(errno));
         }
         LOGE("Should never get here!");
+        free(args);
         return 0;
     } else {
         close(pipefd[0]);
@@ -237,4 +246,3 @@
 InterfaceCollection *TetherController::getTetheredInterfaceList() {
     return mInterfaces;
 }
-
diff --git a/TetherController.h b/TetherController.h
index 208780a..1fd4f95 100644
--- a/TetherController.h
+++ b/TetherController.h
@@ -37,7 +37,8 @@
     int setIpFwdEnabled(bool enable);
     bool getIpFwdEnabled();
 
-    int startTethering(struct in_addr dhcpStart, struct in_addr dhcpEnd);
+    int startTethering(int num_addrs, struct in_addr* addrs);
+
     int stopTethering();
     bool isTetheringStarted();
 
