diff --git a/binding.gyp b/binding.gyp
index e522e6d16bd1e51e793734c79ced5995f65df5e2..db18f7374fda49d178a142b5109b7b1e52d9f5c4 100644
--- a/binding.gyp
+++ b/binding.gyp
@@ -485,6 +485,7 @@
     }]
   ],
   'targets': [
+
     {
       'cflags': [
         '-std=c99',
@@ -562,6 +563,7 @@
       'type': 'static_library',
       'dependencies': [
         'gpr',
+        'node_modules/cares/deps/cares/cares.gyp:cares',
       ],
       'sources': [
         'src/core/lib/surface/init.c',
@@ -819,6 +821,7 @@
       "dependencies": [
         "grpc",
         "gpr",
+        "node_modules/cares/deps/cares/cares.gyp:cares",
       ]
     },
     {
diff --git a/package.json b/package.json
index 0e229c9842b38fed24d06d62c54b0f08f7b0de55..4b175fe4c5f6996b78146b3f1ddfb78238812e2a 100644
--- a/package.json
+++ b/package.json
@@ -23,14 +23,15 @@
     "test": "./node_modules/.bin/mocha src/node/test && npm run-script lint",
     "gen_docs": "./node_modules/.bin/jsdoc -c src/node/jsdoc_conf.json",
     "coverage": "./node_modules/.bin/istanbul cover ./node_modules/.bin/_mocha src/node/test",
-    "install": "./node_modules/.bin/node-pre-gyp install --fallback-to-build"
+    "install": "./node_modules/.bin/node-pre-gyp install --fallback-to-build --library='static_library'"
   },
   "bundledDependencies": ["node-pre-gyp"],
   "dependencies": {
     "arguejs": "^0.2.3",
     "lodash": "^3.9.3",
     "nan": "^2.0.0",
-    "protobufjs": "^4.0.0"
+    "protobufjs": "^4.0.0",
+    "cares": "^1.1.0"
   },
   "devDependencies": {
     "async": "^1.5.0",
diff --git a/src/core/ext/resolver/dns/c_ares/dns_resolver.c b/src/core/ext/resolver/dns/c_ares/dns_resolver.c
index e741f19b6f335a0db22632bc330738fe2cd0457c..bbc6ceaf6deb3b3849dcffde83ad8f7c718ef5c2 100644
--- a/src/core/ext/resolver/dns/c_ares/dns_resolver.c
+++ b/src/core/ext/resolver/dns/c_ares/dns_resolver.c
@@ -177,6 +177,11 @@ static void dns_on_resolved(grpc_exec_ctx *exec_ctx, void *arg,
       grpc_client_config_set_lb_policy(config, lb_policy);
       GRPC_LB_POLICY_UNREF(exec_ctx, lb_policy, "construction");
     }
+    if (r->pollent) {
+    grpc_polling_entity_del_from_pollset_set(exec_ctx, r->pollent,
+                                             r->base.pollset_set);
+                                             r->pollent = NULL;
+    }
     grpc_resolved_addresses_destroy(addresses);
   } else {
     gpr_log(GPR_ERROR, "addresses == NULL");
@@ -228,6 +233,9 @@ static void dns_next(grpc_exec_ctx *exec_ctx, grpc_resolver *resolver,
       r->pollent = pollent;
       grpc_polling_entity_add_to_pollset_set(exec_ctx, pollent,
                                              r->base.pollset_set);
+    } else {
+      gpr_log(GPR_ERROR, "pollent is NULL");
+      r->pollent = NULL;
     }
     r->resolving = 1;
     r->addresses = NULL;
diff --git a/src/core/ext/resolver/dns/c_ares/grpc_ares_wrapper.c b/src/core/ext/resolver/dns/c_ares/grpc_ares_wrapper.c
index 224f0957dbdbd36dd05d7c25305116597c83c429..ef9ec96dc66934224d7a54454d247cda7c17e696 100644
--- a/src/core/ext/resolver/dns/c_ares/grpc_ares_wrapper.c
+++ b/src/core/ext/resolver/dns/c_ares/grpc_ares_wrapper.c
@@ -242,14 +242,18 @@ grpc_ares_request *grpc_resolve_address_ares_impl(
     err = grpc_error_set_str(GRPC_ERROR_CREATE("unparseable host:port"),
                              GRPC_ERROR_STR_TARGET_ADDRESS, name);
     grpc_exec_ctx_sched(exec_ctx, on_done, err, NULL);
+    goto done;
   } else if (port == NULL) {
     if (default_port == NULL) {
       err = grpc_error_set_str(GRPC_ERROR_CREATE("no port in name"),
                                GRPC_ERROR_STR_TARGET_ADDRESS, name);
       grpc_exec_ctx_sched(exec_ctx, on_done, err, NULL);
+      goto done;
     }
     port = gpr_strdup(default_port);
-  } else if (try_fake_resolve(host, port, addrs)) {
+  }
+
+  if (try_fake_resolve(host, port, addrs)) {
     grpc_exec_ctx_sched(exec_ctx, on_done, GRPC_ERROR_NONE, NULL);
   } else {
     err = grpc_ares_ev_driver_create(&ev_driver, pollset_set);
@@ -269,6 +273,7 @@ grpc_ares_request *grpc_resolve_address_ares_impl(
     grpc_exec_ctx_sched(exec_ctx, &r->request_closure, GRPC_ERROR_NONE, NULL);
   }
 
+done:
   gpr_free(host);
   gpr_free(port);
   return r;
diff --git a/templates/binding.gyp.template b/templates/binding.gyp.template
index 6b9f44c56fc4b821daf0d7edc946662c1b8ead4a..739c016b1df14267d3c95fa6f3dce91738ac9c68 100644
--- a/templates/binding.gyp.template
+++ b/templates/binding.gyp.template
@@ -173,6 +173,13 @@
       }]
     ],
     'targets': [
+  <%
+      for lib in libs:
+        if 'grpc' in lib.transitive_deps or lib.name == 'grpc':
+          lib.deps.append('node_modules/cares/deps/cares/cares.gyp:cares')
+      for module in node_modules:
+        module.deps.append('node_modules/cares/deps/cares/cares.gyp:cares')
+  %>
       % for module in node_modules:
       % for lib in libs:
       % if lib.name in module.transitive_deps and lib.name not in ('boringssl', 'z'):