diff --git a/BUILD b/BUILD
index e1759202d60b0e62d5de7b36b219e56e88fe28e5..c0738e209129aee570961a93498e8296f2b7493d 100644
--- a/BUILD
+++ b/BUILD
@@ -208,8 +208,6 @@ cc_library(
     "src/core/lib/client_config/resolver.h",
     "src/core/lib/client_config/resolver_factory.h",
     "src/core/lib/client_config/resolver_registry.h",
-    "src/core/lib/client_config/resolvers/dns_resolver.h",
-    "src/core/lib/client_config/resolvers/sockaddr_resolver.h",
     "src/core/lib/client_config/subchannel.h",
     "src/core/lib/client_config/subchannel_factory.h",
     "src/core/lib/client_config/subchannel_index.h",
@@ -307,6 +305,8 @@ cc_library(
     "src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.c",
     "src/core/ext/lb_policy/pick_first/pick_first.c",
     "src/core/ext/lb_policy/round_robin/round_robin.c",
+    "src/core/ext/resolver/dns/native/dns_resolver.c",
+    "src/core/ext/resolver/sockaddr/sockaddr_resolver.c",
     "src/core/ext/transport/chttp2/client/insecure/channel_create.c",
     "src/core/ext/transport/chttp2/client/secure/secure_channel_create.c",
     "src/core/ext/transport/chttp2/server/insecure/server_chttp2.c",
@@ -351,8 +351,6 @@ cc_library(
     "src/core/lib/client_config/resolver.c",
     "src/core/lib/client_config/resolver_factory.c",
     "src/core/lib/client_config/resolver_registry.c",
-    "src/core/lib/client_config/resolvers/dns_resolver.c",
-    "src/core/lib/client_config/resolvers/sockaddr_resolver.c",
     "src/core/lib/client_config/subchannel.c",
     "src/core/lib/client_config/subchannel_factory.c",
     "src/core/lib/client_config/subchannel_index.c",
@@ -578,8 +576,6 @@ cc_library(
     "src/core/lib/client_config/resolver.h",
     "src/core/lib/client_config/resolver_factory.h",
     "src/core/lib/client_config/resolver_registry.h",
-    "src/core/lib/client_config/resolvers/dns_resolver.h",
-    "src/core/lib/client_config/resolvers/sockaddr_resolver.h",
     "src/core/lib/client_config/subchannel.h",
     "src/core/lib/client_config/subchannel_factory.h",
     "src/core/lib/client_config/subchannel_index.h",
@@ -663,6 +659,8 @@ cc_library(
     "src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.c",
     "src/core/ext/lb_policy/pick_first/pick_first.c",
     "src/core/ext/lb_policy/round_robin/round_robin.c",
+    "src/core/ext/resolver/dns/native/dns_resolver.c",
+    "src/core/ext/resolver/sockaddr/sockaddr_resolver.c",
     "src/core/ext/transport/chttp2/client/insecure/channel_create.c",
     "src/core/ext/transport/chttp2/server/insecure/server_chttp2.c",
     "src/core/ext/transport/chttp2/transport/alpn.c",
@@ -705,8 +703,6 @@ cc_library(
     "src/core/lib/client_config/resolver.c",
     "src/core/lib/client_config/resolver_factory.c",
     "src/core/lib/client_config/resolver_registry.c",
-    "src/core/lib/client_config/resolvers/dns_resolver.c",
-    "src/core/lib/client_config/resolvers/sockaddr_resolver.c",
     "src/core/lib/client_config/subchannel.c",
     "src/core/lib/client_config/subchannel_factory.c",
     "src/core/lib/client_config/subchannel_index.c",
@@ -1372,6 +1368,8 @@ objc_library(
     "src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.c",
     "src/core/ext/lb_policy/pick_first/pick_first.c",
     "src/core/ext/lb_policy/round_robin/round_robin.c",
+    "src/core/ext/resolver/dns/native/dns_resolver.c",
+    "src/core/ext/resolver/sockaddr/sockaddr_resolver.c",
     "src/core/ext/transport/chttp2/client/insecure/channel_create.c",
     "src/core/ext/transport/chttp2/client/secure/secure_channel_create.c",
     "src/core/ext/transport/chttp2/server/insecure/server_chttp2.c",
@@ -1416,8 +1414,6 @@ objc_library(
     "src/core/lib/client_config/resolver.c",
     "src/core/lib/client_config/resolver_factory.c",
     "src/core/lib/client_config/resolver_registry.c",
-    "src/core/lib/client_config/resolvers/dns_resolver.c",
-    "src/core/lib/client_config/resolvers/sockaddr_resolver.c",
     "src/core/lib/client_config/subchannel.c",
     "src/core/lib/client_config/subchannel_factory.c",
     "src/core/lib/client_config/subchannel_index.c",
@@ -1585,8 +1581,6 @@ objc_library(
     "src/core/lib/client_config/resolver.h",
     "src/core/lib/client_config/resolver_factory.h",
     "src/core/lib/client_config/resolver_registry.h",
-    "src/core/lib/client_config/resolvers/dns_resolver.h",
-    "src/core/lib/client_config/resolvers/sockaddr_resolver.h",
     "src/core/lib/client_config/subchannel.h",
     "src/core/lib/client_config/subchannel_factory.h",
     "src/core/lib/client_config/subchannel_index.h",
diff --git a/Makefile b/Makefile
index 942cdbe3f76a7dbd95f39b36e51c795a5b3db139..7035c016ceee60a27c04da8f4aacfe01a518c9b3 100644
--- a/Makefile
+++ b/Makefile
@@ -2453,6 +2453,8 @@ LIBGRPC_SRC = \
     src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.c \
     src/core/ext/lb_policy/pick_first/pick_first.c \
     src/core/ext/lb_policy/round_robin/round_robin.c \
+    src/core/ext/resolver/dns/native/dns_resolver.c \
+    src/core/ext/resolver/sockaddr/sockaddr_resolver.c \
     src/core/ext/transport/chttp2/client/insecure/channel_create.c \
     src/core/ext/transport/chttp2/client/secure/secure_channel_create.c \
     src/core/ext/transport/chttp2/server/insecure/server_chttp2.c \
@@ -2497,8 +2499,6 @@ LIBGRPC_SRC = \
     src/core/lib/client_config/resolver.c \
     src/core/lib/client_config/resolver_factory.c \
     src/core/lib/client_config/resolver_registry.c \
-    src/core/lib/client_config/resolvers/dns_resolver.c \
-    src/core/lib/client_config/resolvers/sockaddr_resolver.c \
     src/core/lib/client_config/subchannel.c \
     src/core/lib/client_config/subchannel_factory.c \
     src/core/lib/client_config/subchannel_index.c \
@@ -2815,6 +2815,8 @@ LIBGRPC_UNSECURE_SRC = \
     src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.c \
     src/core/ext/lb_policy/pick_first/pick_first.c \
     src/core/ext/lb_policy/round_robin/round_robin.c \
+    src/core/ext/resolver/dns/native/dns_resolver.c \
+    src/core/ext/resolver/sockaddr/sockaddr_resolver.c \
     src/core/ext/transport/chttp2/client/insecure/channel_create.c \
     src/core/ext/transport/chttp2/server/insecure/server_chttp2.c \
     src/core/ext/transport/chttp2/transport/alpn.c \
@@ -2857,8 +2859,6 @@ LIBGRPC_UNSECURE_SRC = \
     src/core/lib/client_config/resolver.c \
     src/core/lib/client_config/resolver_factory.c \
     src/core/lib/client_config/resolver_registry.c \
-    src/core/lib/client_config/resolvers/dns_resolver.c \
-    src/core/lib/client_config/resolvers/sockaddr_resolver.c \
     src/core/lib/client_config/subchannel.c \
     src/core/lib/client_config/subchannel_factory.c \
     src/core/lib/client_config/subchannel_index.c \
diff --git a/binding.gyp b/binding.gyp
index d1d63fb3ba15aad3375810ab0834999ef71ef2e2..8f57e305eff3a8deb75e2de1e4e317648ea039c3 100644
--- a/binding.gyp
+++ b/binding.gyp
@@ -571,6 +571,8 @@
         'src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.c',
         'src/core/ext/lb_policy/pick_first/pick_first.c',
         'src/core/ext/lb_policy/round_robin/round_robin.c',
+        'src/core/ext/resolver/dns/native/dns_resolver.c',
+        'src/core/ext/resolver/sockaddr/sockaddr_resolver.c',
         'src/core/ext/transport/chttp2/client/insecure/channel_create.c',
         'src/core/ext/transport/chttp2/client/secure/secure_channel_create.c',
         'src/core/ext/transport/chttp2/server/insecure/server_chttp2.c',
@@ -615,8 +617,6 @@
         'src/core/lib/client_config/resolver.c',
         'src/core/lib/client_config/resolver_factory.c',
         'src/core/lib/client_config/resolver_registry.c',
-        'src/core/lib/client_config/resolvers/dns_resolver.c',
-        'src/core/lib/client_config/resolvers/sockaddr_resolver.c',
         'src/core/lib/client_config/subchannel.c',
         'src/core/lib/client_config/subchannel_factory.c',
         'src/core/lib/client_config/subchannel_index.c',
diff --git a/build.yaml b/build.yaml
index e34879722219c42a7d0a750807feaa60e13c907d..f644be7380b24b4ce12edabaed74b5499fc7834a 100644
--- a/build.yaml
+++ b/build.yaml
@@ -274,8 +274,6 @@ filegroups:
   - src/core/lib/client_config/resolver.h
   - src/core/lib/client_config/resolver_factory.h
   - src/core/lib/client_config/resolver_registry.h
-  - src/core/lib/client_config/resolvers/dns_resolver.h
-  - src/core/lib/client_config/resolvers/sockaddr_resolver.h
   - src/core/lib/client_config/subchannel.h
   - src/core/lib/client_config/subchannel_factory.h
   - src/core/lib/client_config/subchannel_index.h
@@ -366,8 +364,6 @@ filegroups:
   - src/core/lib/client_config/resolver.c
   - src/core/lib/client_config/resolver_factory.c
   - src/core/lib/client_config/resolver_registry.c
-  - src/core/lib/client_config/resolvers/dns_resolver.c
-  - src/core/lib/client_config/resolvers/sockaddr_resolver.c
   - src/core/lib/client_config/subchannel.c
   - src/core/lib/client_config/subchannel_factory.c
   - src/core/lib/client_config/subchannel_index.c
@@ -480,6 +476,18 @@ filegroups:
   plugin: grpc_lb_policy_round_robin
   uses:
   - grpc_base
+- name: grpc_resolver_dns_native
+  src:
+  - src/core/ext/resolver/dns/native/dns_resolver.c
+  plugin: grpc_resolver_dns_native
+  uses:
+  - grpc_base
+- name: grpc_resolver_sockaddr
+  src:
+  - src/core/ext/resolver/sockaddr/sockaddr_resolver.c
+  plugin: grpc_resolver_sockaddr
+  uses:
+  - grpc_base
 - name: grpc_secure
   headers:
   - src/core/lib/security/auth_filters.h
@@ -656,6 +664,8 @@ libs:
   - grpc_lb_policy_grpclb
   - grpc_lb_policy_pick_first
   - grpc_lb_policy_round_robin
+  - grpc_resolver_dns_native
+  - grpc_resolver_sockaddr
   - grpc_secure
   - grpc_codegen
   - census
@@ -740,6 +750,8 @@ libs:
   - grpc_base
   - grpc_transport_chttp2_server_insecure
   - grpc_transport_chttp2_client_insecure
+  - grpc_resolver_dns_native
+  - grpc_resolver_sockaddr
   - grpc_lb_policy_grpclb
   - grpc_lb_policy_pick_first
   - grpc_lb_policy_round_robin
diff --git a/config.m4 b/config.m4
index 540506ade79c190252de6095019b8de7f320a798..b9a8c35926fd24d43131110c7b34b17304e2c139 100644
--- a/config.m4
+++ b/config.m4
@@ -93,6 +93,8 @@ if test "$PHP_GRPC" != "no"; then
     src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.c \
     src/core/ext/lb_policy/pick_first/pick_first.c \
     src/core/ext/lb_policy/round_robin/round_robin.c \
+    src/core/ext/resolver/dns/native/dns_resolver.c \
+    src/core/ext/resolver/sockaddr/sockaddr_resolver.c \
     src/core/ext/transport/chttp2/client/insecure/channel_create.c \
     src/core/ext/transport/chttp2/client/secure/secure_channel_create.c \
     src/core/ext/transport/chttp2/server/insecure/server_chttp2.c \
@@ -137,8 +139,6 @@ if test "$PHP_GRPC" != "no"; then
     src/core/lib/client_config/resolver.c \
     src/core/lib/client_config/resolver_factory.c \
     src/core/lib/client_config/resolver_registry.c \
-    src/core/lib/client_config/resolvers/dns_resolver.c \
-    src/core/lib/client_config/resolvers/sockaddr_resolver.c \
     src/core/lib/client_config/subchannel.c \
     src/core/lib/client_config/subchannel_factory.c \
     src/core/lib/client_config/subchannel_index.c \
@@ -552,6 +552,8 @@ if test "$PHP_GRPC" != "no"; then
   PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0)
   PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/lb_policy/pick_first)
   PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/lb_policy/round_robin)
+  PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/resolver/dns/native)
+  PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/resolver/sockaddr)
   PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/transport/chttp2/client/insecure)
   PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/transport/chttp2/client/secure)
   PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/transport/chttp2/server/insecure)
@@ -559,7 +561,6 @@ if test "$PHP_GRPC" != "no"; then
   PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/transport/chttp2/transport)
   PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/channel)
   PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/client_config)
-  PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/client_config/resolvers)
   PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/compression)
   PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/debug)
   PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/http)
diff --git a/gRPC.podspec b/gRPC.podspec
index 73b03581127b62137d16c9b924f2abfb30442240..0ef10b28a239ef857e11cefc7e493117fcd913f4 100644
--- a/gRPC.podspec
+++ b/gRPC.podspec
@@ -210,8 +210,6 @@ Pod::Spec.new do |s|
                       'src/core/lib/client_config/resolver.h',
                       'src/core/lib/client_config/resolver_factory.h',
                       'src/core/lib/client_config/resolver_registry.h',
-                      'src/core/lib/client_config/resolvers/dns_resolver.h',
-                      'src/core/lib/client_config/resolvers/sockaddr_resolver.h',
                       'src/core/lib/client_config/subchannel.h',
                       'src/core/lib/client_config/subchannel_factory.h',
                       'src/core/lib/client_config/subchannel_index.h',
@@ -326,6 +324,8 @@ Pod::Spec.new do |s|
                       'src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.c',
                       'src/core/ext/lb_policy/pick_first/pick_first.c',
                       'src/core/ext/lb_policy/round_robin/round_robin.c',
+                      'src/core/ext/resolver/dns/native/dns_resolver.c',
+                      'src/core/ext/resolver/sockaddr/sockaddr_resolver.c',
                       'src/core/ext/transport/chttp2/client/insecure/channel_create.c',
                       'src/core/ext/transport/chttp2/client/secure/secure_channel_create.c',
                       'src/core/ext/transport/chttp2/server/insecure/server_chttp2.c',
@@ -370,8 +370,6 @@ Pod::Spec.new do |s|
                       'src/core/lib/client_config/resolver.c',
                       'src/core/lib/client_config/resolver_factory.c',
                       'src/core/lib/client_config/resolver_registry.c',
-                      'src/core/lib/client_config/resolvers/dns_resolver.c',
-                      'src/core/lib/client_config/resolvers/sockaddr_resolver.c',
                       'src/core/lib/client_config/subchannel.c',
                       'src/core/lib/client_config/subchannel_factory.c',
                       'src/core/lib/client_config/subchannel_index.c',
@@ -540,8 +538,6 @@ Pod::Spec.new do |s|
                               'src/core/lib/client_config/resolver.h',
                               'src/core/lib/client_config/resolver_factory.h',
                               'src/core/lib/client_config/resolver_registry.h',
-                              'src/core/lib/client_config/resolvers/dns_resolver.h',
-                              'src/core/lib/client_config/resolvers/sockaddr_resolver.h',
                               'src/core/lib/client_config/subchannel.h',
                               'src/core/lib/client_config/subchannel_factory.h',
                               'src/core/lib/client_config/subchannel_index.h',
diff --git a/grpc.gemspec b/grpc.gemspec
index 88e98bad582ca624a03c132bfbb78305403e6441..e97d7b68560be4541c17413cfc5f4d101cebb36a 100755
--- a/grpc.gemspec
+++ b/grpc.gemspec
@@ -206,8 +206,6 @@ Gem::Specification.new do |s|
   s.files += %w( src/core/lib/client_config/resolver.h )
   s.files += %w( src/core/lib/client_config/resolver_factory.h )
   s.files += %w( src/core/lib/client_config/resolver_registry.h )
-  s.files += %w( src/core/lib/client_config/resolvers/dns_resolver.h )
-  s.files += %w( src/core/lib/client_config/resolvers/sockaddr_resolver.h )
   s.files += %w( src/core/lib/client_config/subchannel.h )
   s.files += %w( src/core/lib/client_config/subchannel_factory.h )
   s.files += %w( src/core/lib/client_config/subchannel_index.h )
@@ -309,6 +307,8 @@ Gem::Specification.new do |s|
   s.files += %w( src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.c )
   s.files += %w( src/core/ext/lb_policy/pick_first/pick_first.c )
   s.files += %w( src/core/ext/lb_policy/round_robin/round_robin.c )
+  s.files += %w( src/core/ext/resolver/dns/native/dns_resolver.c )
+  s.files += %w( src/core/ext/resolver/sockaddr/sockaddr_resolver.c )
   s.files += %w( src/core/ext/transport/chttp2/client/insecure/channel_create.c )
   s.files += %w( src/core/ext/transport/chttp2/client/secure/secure_channel_create.c )
   s.files += %w( src/core/ext/transport/chttp2/server/insecure/server_chttp2.c )
@@ -353,8 +353,6 @@ Gem::Specification.new do |s|
   s.files += %w( src/core/lib/client_config/resolver.c )
   s.files += %w( src/core/lib/client_config/resolver_factory.c )
   s.files += %w( src/core/lib/client_config/resolver_registry.c )
-  s.files += %w( src/core/lib/client_config/resolvers/dns_resolver.c )
-  s.files += %w( src/core/lib/client_config/resolvers/sockaddr_resolver.c )
   s.files += %w( src/core/lib/client_config/subchannel.c )
   s.files += %w( src/core/lib/client_config/subchannel_factory.c )
   s.files += %w( src/core/lib/client_config/subchannel_index.c )
diff --git a/package.json b/package.json
index b91267b7b5e4a44e61a8ee79d33d50fdf08c7169..544d463e2a0167770107493572655a73c8b429a4 100644
--- a/package.json
+++ b/package.json
@@ -149,8 +149,6 @@
     "src/core/lib/client_config/resolver.h",
     "src/core/lib/client_config/resolver_factory.h",
     "src/core/lib/client_config/resolver_registry.h",
-    "src/core/lib/client_config/resolvers/dns_resolver.h",
-    "src/core/lib/client_config/resolvers/sockaddr_resolver.h",
     "src/core/lib/client_config/subchannel.h",
     "src/core/lib/client_config/subchannel_factory.h",
     "src/core/lib/client_config/subchannel_index.h",
@@ -252,6 +250,8 @@
     "src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.c",
     "src/core/ext/lb_policy/pick_first/pick_first.c",
     "src/core/ext/lb_policy/round_robin/round_robin.c",
+    "src/core/ext/resolver/dns/native/dns_resolver.c",
+    "src/core/ext/resolver/sockaddr/sockaddr_resolver.c",
     "src/core/ext/transport/chttp2/client/insecure/channel_create.c",
     "src/core/ext/transport/chttp2/client/secure/secure_channel_create.c",
     "src/core/ext/transport/chttp2/server/insecure/server_chttp2.c",
@@ -296,8 +296,6 @@
     "src/core/lib/client_config/resolver.c",
     "src/core/lib/client_config/resolver_factory.c",
     "src/core/lib/client_config/resolver_registry.c",
-    "src/core/lib/client_config/resolvers/dns_resolver.c",
-    "src/core/lib/client_config/resolvers/sockaddr_resolver.c",
     "src/core/lib/client_config/subchannel.c",
     "src/core/lib/client_config/subchannel_factory.c",
     "src/core/lib/client_config/subchannel_index.c",
diff --git a/package.xml b/package.xml
index 9b7d12c00c97fa6a8fe99a8182662ab9ffd0e793..06a6250937a256e29ea3c86ad5a143c315af240a 100644
--- a/package.xml
+++ b/package.xml
@@ -210,8 +210,6 @@
     <file baseinstalldir="/" name="src/core/lib/client_config/resolver.h" role="src" />
     <file baseinstalldir="/" name="src/core/lib/client_config/resolver_factory.h" role="src" />
     <file baseinstalldir="/" name="src/core/lib/client_config/resolver_registry.h" role="src" />
-    <file baseinstalldir="/" name="src/core/lib/client_config/resolvers/dns_resolver.h" role="src" />
-    <file baseinstalldir="/" name="src/core/lib/client_config/resolvers/sockaddr_resolver.h" role="src" />
     <file baseinstalldir="/" name="src/core/lib/client_config/subchannel.h" role="src" />
     <file baseinstalldir="/" name="src/core/lib/client_config/subchannel_factory.h" role="src" />
     <file baseinstalldir="/" name="src/core/lib/client_config/subchannel_index.h" role="src" />
@@ -313,6 +311,8 @@
     <file baseinstalldir="/" name="src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.c" role="src" />
     <file baseinstalldir="/" name="src/core/ext/lb_policy/pick_first/pick_first.c" role="src" />
     <file baseinstalldir="/" name="src/core/ext/lb_policy/round_robin/round_robin.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/resolver/dns/native/dns_resolver.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/resolver/sockaddr/sockaddr_resolver.c" role="src" />
     <file baseinstalldir="/" name="src/core/ext/transport/chttp2/client/insecure/channel_create.c" role="src" />
     <file baseinstalldir="/" name="src/core/ext/transport/chttp2/client/secure/secure_channel_create.c" role="src" />
     <file baseinstalldir="/" name="src/core/ext/transport/chttp2/server/insecure/server_chttp2.c" role="src" />
@@ -357,8 +357,6 @@
     <file baseinstalldir="/" name="src/core/lib/client_config/resolver.c" role="src" />
     <file baseinstalldir="/" name="src/core/lib/client_config/resolver_factory.c" role="src" />
     <file baseinstalldir="/" name="src/core/lib/client_config/resolver_registry.c" role="src" />
-    <file baseinstalldir="/" name="src/core/lib/client_config/resolvers/dns_resolver.c" role="src" />
-    <file baseinstalldir="/" name="src/core/lib/client_config/resolvers/sockaddr_resolver.c" role="src" />
     <file baseinstalldir="/" name="src/core/lib/client_config/subchannel.c" role="src" />
     <file baseinstalldir="/" name="src/core/lib/client_config/subchannel_factory.c" role="src" />
     <file baseinstalldir="/" name="src/core/lib/client_config/subchannel_index.c" role="src" />
diff --git a/src/core/ext/resolver/dns/native/README.md b/src/core/ext/resolver/dns/native/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..695de47b9f74f20deb136710e0f477f7d0bd44b8
--- /dev/null
+++ b/src/core/ext/resolver/dns/native/README.md
@@ -0,0 +1,2 @@
+dns: scheme name resolution, using getaddrbyname
+(or other OS specific implementation)
diff --git a/src/core/lib/client_config/resolvers/dns_resolver.c b/src/core/ext/resolver/dns/native/dns_resolver.c
similarity index 95%
rename from src/core/lib/client_config/resolvers/dns_resolver.c
rename to src/core/ext/resolver/dns/native/dns_resolver.c
index 62bccdd0459a0b69d6faaeec4a17fb98c8519157..60028848bb53a9dff57755016899aba3d72b0338 100644
--- a/src/core/lib/client_config/resolvers/dns_resolver.c
+++ b/src/core/ext/resolver/dns/native/dns_resolver.c
@@ -31,8 +31,6 @@
  *
  */
 
-#include "src/core/lib/client_config/resolvers/dns_resolver.h"
-
 #include <string.h>
 
 #include <grpc/support/alloc.h>
@@ -40,6 +38,7 @@
 #include <grpc/support/string_util.h>
 
 #include "src/core/lib/client_config/lb_policy_registry.h"
+#include "src/core/lib/client_config/resolver_registry.h"
 #include "src/core/lib/iomgr/resolve_address.h"
 #include "src/core/lib/iomgr/timer.h"
 #include "src/core/lib/support/backoff.h"
@@ -277,8 +276,8 @@ static grpc_resolver *dns_factory_create_resolver(
   return dns_create(args, "https", "pick_first");
 }
 
-char *dns_factory_get_default_host_name(grpc_resolver_factory *factory,
-                                        grpc_uri *uri) {
+static char *dns_factory_get_default_host_name(grpc_resolver_factory *factory,
+                                               grpc_uri *uri) {
   const char *path = uri->path;
   if (path[0] == '/') ++path;
   return gpr_strdup(path);
@@ -289,6 +288,12 @@ static const grpc_resolver_factory_vtable dns_factory_vtable = {
     dns_factory_get_default_host_name, "dns"};
 static grpc_resolver_factory dns_resolver_factory = {&dns_factory_vtable};
 
-grpc_resolver_factory *grpc_dns_resolver_factory_create() {
+static grpc_resolver_factory *dns_resolver_factory_create() {
   return &dns_resolver_factory;
 }
+
+void grpc_resolver_dns_native_init(void) {
+  grpc_register_resolver_type(dns_resolver_factory_create());
+}
+
+void grpc_resolver_dns_native_shutdown(void) {}
diff --git a/src/core/ext/resolver/sockaddr/README.md b/src/core/ext/resolver/sockaddr/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..e307ba88f578354dbaea5d427aa63aa1331c94f7
--- /dev/null
+++ b/src/core/ext/resolver/sockaddr/README.md
@@ -0,0 +1 @@
+Support for resolving ipv4:, ipv6:, unix: schemes
diff --git a/src/core/lib/client_config/resolvers/sockaddr_resolver.c b/src/core/ext/resolver/sockaddr/sockaddr_resolver.c
similarity index 96%
rename from src/core/lib/client_config/resolvers/sockaddr_resolver.c
rename to src/core/ext/resolver/sockaddr/sockaddr_resolver.c
index c787bd57d68ff43172379c6329ed7d4c0aed92f1..a416f10dcb3de0a0befb76f6ff19aa04e17a25df 100644
--- a/src/core/lib/client_config/resolvers/sockaddr_resolver.c
+++ b/src/core/ext/resolver/sockaddr/sockaddr_resolver.c
@@ -33,8 +33,6 @@
 
 #include <grpc/support/port_platform.h>
 
-#include "src/core/lib/client_config/resolvers/sockaddr_resolver.h"
-
 #include <stdio.h>
 #include <string.h>
 
@@ -43,6 +41,7 @@
 #include <grpc/support/string_util.h>
 
 #include "src/core/lib/client_config/lb_policy_registry.h"
+#include "src/core/lib/client_config/resolver_registry.h"
 #include "src/core/lib/iomgr/resolve_address.h"
 #include "src/core/lib/iomgr/unix_sockets_posix.h"
 #include "src/core/lib/support/string.h"
@@ -343,12 +342,20 @@ static void sockaddr_factory_unref(grpc_resolver_factory *factory) {}
       name##_factory_create_resolver, prefix##name##_get_default_authority, \
       #name};                                                               \
   static grpc_resolver_factory name##_resolver_factory = {                  \
-      &name##_factory_vtable};                                              \
-  grpc_resolver_factory *grpc_##name##_resolver_factory_create() {          \
-    return &name##_resolver_factory;                                        \
-  }
+      &name##_factory_vtable}
 
 #ifdef GPR_HAVE_UNIX_SOCKET
-DECL_FACTORY(unix, grpc_)
+DECL_FACTORY(unix, grpc_);
 #endif
-DECL_FACTORY(ipv4, ) DECL_FACTORY(ipv6, )
+DECL_FACTORY(ipv4, );
+DECL_FACTORY(ipv6, );
+
+void grpc_resolver_sockaddr_init(void) {
+  grpc_register_resolver_type(&ipv4_resolver_factory);
+  grpc_register_resolver_type(&ipv6_resolver_factory);
+#ifdef GPR_HAVE_UNIX_SOCKET
+  grpc_register_resolver_type(&unix_resolver_factory);
+#endif
+}
+
+void grpc_resolver_sockaddr_shutdown(void) {}
diff --git a/src/core/ext/resolver/zookeeper/README.md b/src/core/ext/resolver/zookeeper/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..ce6f39683bb56ab255a5e72e9eb87e453f13b57e
--- /dev/null
+++ b/src/core/ext/resolver/zookeeper/README.md
@@ -0,0 +1 @@
+Zookeeper based name resolver: WIP
diff --git a/src/core/lib/client_config/resolvers/zookeeper_resolver.c b/src/core/ext/resolver/zookeeper/zookeeper_resolver.c
similarity index 100%
rename from src/core/lib/client_config/resolvers/zookeeper_resolver.c
rename to src/core/ext/resolver/zookeeper/zookeeper_resolver.c
diff --git a/src/core/lib/client_config/resolver_registry.c b/src/core/lib/client_config/resolver_registry.c
index 29bd00c284021e834663cb5fc11152a6525899fb..fd49d49abc6d9dd398ffde85d170a00ccd238282 100644
--- a/src/core/lib/client_config/resolver_registry.c
+++ b/src/core/lib/client_config/resolver_registry.c
@@ -70,14 +70,11 @@ void grpc_register_resolver_type(grpc_resolver_factory *factory) {
   g_all_of_the_resolvers[g_number_of_resolvers++] = factory;
 }
 
-static grpc_resolver_factory *lookup_factory(grpc_uri *uri) {
+static grpc_resolver_factory *lookup_factory(const char *name) {
   int i;
 
-  /* handling NULL uri's here simplifies grpc_resolver_create */
-  if (!uri) return NULL;
-
   for (i = 0; i < g_number_of_resolvers; i++) {
-    if (0 == strcmp(uri->scheme, g_all_of_the_resolvers[i]->vtable->scheme)) {
+    if (0 == strcmp(name, g_all_of_the_resolvers[i]->vtable->scheme)) {
       return g_all_of_the_resolvers[i];
     }
   }
@@ -85,6 +82,17 @@ static grpc_resolver_factory *lookup_factory(grpc_uri *uri) {
   return NULL;
 }
 
+grpc_resolver_factory *grpc_resolver_factory_lookup(const char *name) {
+  grpc_resolver_factory *f = lookup_factory(name);
+  if (f) grpc_resolver_factory_ref(f);
+  return f;
+}
+
+static grpc_resolver_factory *lookup_factory_by_uri(grpc_uri *uri) {
+  if (!uri) return NULL;
+  return lookup_factory(uri->scheme);
+}
+
 static grpc_resolver_factory *resolve_factory(const char *target,
                                               grpc_uri **uri) {
   char *tmp;
@@ -92,13 +100,13 @@ static grpc_resolver_factory *resolve_factory(const char *target,
 
   GPR_ASSERT(uri != NULL);
   *uri = grpc_uri_parse(target, 1);
-  factory = lookup_factory(*uri);
+  factory = lookup_factory_by_uri(*uri);
   if (factory == NULL) {
     if (g_default_resolver_prefix != NULL) {
       grpc_uri_destroy(*uri);
       gpr_asprintf(&tmp, "%s%s", g_default_resolver_prefix, target);
       *uri = grpc_uri_parse(tmp, 1);
-      factory = lookup_factory(*uri);
+      factory = lookup_factory_by_uri(*uri);
       if (factory == NULL) {
         grpc_uri_destroy(grpc_uri_parse(target, 0));
         grpc_uri_destroy(grpc_uri_parse(tmp, 0));
diff --git a/src/core/lib/client_config/resolver_registry.h b/src/core/lib/client_config/resolver_registry.h
index 22289ca6bd25c92825a19790950c8c0d71981f16..7d7009b9cd05a710ea958b3a4ab6c7c6d10f1a94 100644
--- a/src/core/lib/client_config/resolver_registry.h
+++ b/src/core/lib/client_config/resolver_registry.h
@@ -58,6 +58,10 @@ void grpc_register_resolver_type(grpc_resolver_factory *factory);
 grpc_resolver *grpc_resolver_create(
     const char *target, grpc_subchannel_factory *subchannel_factory);
 
+/** Find a resolver factory given a name and return an (owned-by-the-caller)
+ *  reference to it */
+grpc_resolver_factory *grpc_resolver_factory_lookup(const char *name);
+
 /** Given a target, return a (freshly allocated with gpr_malloc) string
     representing the default authority to pass from a client. */
 char *grpc_get_default_authority(const char *target);
diff --git a/src/core/lib/client_config/resolvers/dns_resolver.h b/src/core/lib/client_config/resolvers/dns_resolver.h
deleted file mode 100644
index eb46e41c776a3fa2c2cd6e739eefddeb421c5601..0000000000000000000000000000000000000000
--- a/src/core/lib/client_config/resolvers/dns_resolver.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- *
- * Copyright 2015-2016, Google Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-#ifndef GRPC_CORE_LIB_CLIENT_CONFIG_RESOLVERS_DNS_RESOLVER_H
-#define GRPC_CORE_LIB_CLIENT_CONFIG_RESOLVERS_DNS_RESOLVER_H
-
-#include "src/core/lib/client_config/resolver_factory.h"
-
-/** Create a dns resolver factory */
-grpc_resolver_factory *grpc_dns_resolver_factory_create(void);
-
-#endif /* GRPC_CORE_LIB_CLIENT_CONFIG_RESOLVERS_DNS_RESOLVER_H */
diff --git a/src/core/lib/client_config/resolvers/sockaddr_resolver.h b/src/core/lib/client_config/resolvers/sockaddr_resolver.h
deleted file mode 100644
index 45c55bd16041dda72a13656c49473d3dd65a1f6b..0000000000000000000000000000000000000000
--- a/src/core/lib/client_config/resolvers/sockaddr_resolver.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- *
- * Copyright 2015-2016, Google Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-#ifndef GRPC_CORE_LIB_CLIENT_CONFIG_RESOLVERS_SOCKADDR_RESOLVER_H
-#define GRPC_CORE_LIB_CLIENT_CONFIG_RESOLVERS_SOCKADDR_RESOLVER_H
-
-#include <grpc/support/port_platform.h>
-
-#include "src/core/lib/client_config/resolver_factory.h"
-
-grpc_resolver_factory *grpc_ipv4_resolver_factory_create(void);
-
-grpc_resolver_factory *grpc_ipv6_resolver_factory_create(void);
-
-#ifdef GPR_POSIX_SOCKET
-/** Create a unix resolver factory */
-grpc_resolver_factory *grpc_unix_resolver_factory_create(void);
-#endif
-
-#endif /* GRPC_CORE_LIB_CLIENT_CONFIG_RESOLVERS_SOCKADDR_RESOLVER_H */
diff --git a/src/core/lib/client_config/resolvers/zookeeper_resolver.h b/src/core/lib/client_config/resolvers/zookeeper_resolver.h
deleted file mode 100644
index 7ee7604360f299952439a5e801ac263ab35ea51b..0000000000000000000000000000000000000000
--- a/src/core/lib/client_config/resolvers/zookeeper_resolver.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- *
- * Copyright 2015-2016, Google Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-#ifndef GRPC_CORE_LIB_CLIENT_CONFIG_RESOLVERS_ZOOKEEPER_RESOLVER_H
-#define GRPC_CORE_LIB_CLIENT_CONFIG_RESOLVERS_ZOOKEEPER_RESOLVER_H
-
-#include "src/core/lib/client_config/resolver_factory.h"
-
-/** Create a zookeeper resolver factory */
-grpc_resolver_factory *grpc_zookeeper_resolver_factory_create(void);
-
-#endif /* GRPC_CORE_LIB_CLIENT_CONFIG_RESOLVERS_ZOOKEEPER_RESOLVER_H */
diff --git a/src/core/lib/surface/init.c b/src/core/lib/surface/init.c
index 786bf1d5da0d74aa05b6a30d6da0b8277ff88659..51d9625e2a55b7e8965e3bf464eaf60d6ba17718 100644
--- a/src/core/lib/surface/init.c
+++ b/src/core/lib/surface/init.c
@@ -48,8 +48,6 @@
 #include "src/core/lib/channel/http_server_filter.h"
 #include "src/core/lib/client_config/lb_policy_registry.h"
 #include "src/core/lib/client_config/resolver_registry.h"
-#include "src/core/lib/client_config/resolvers/dns_resolver.h"
-#include "src/core/lib/client_config/resolvers/sockaddr_resolver.h"
 #include "src/core/lib/client_config/subchannel.h"
 #include "src/core/lib/client_config/subchannel_index.h"
 #include "src/core/lib/debug/trace.h"
@@ -165,12 +163,6 @@ void grpc_init(void) {
     grpc_channel_init_init();
     grpc_lb_policy_registry_init();
     grpc_resolver_registry_init(GRPC_DEFAULT_NAME_PREFIX);
-    grpc_register_resolver_type(grpc_dns_resolver_factory_create());
-    grpc_register_resolver_type(grpc_ipv4_resolver_factory_create());
-    grpc_register_resolver_type(grpc_ipv6_resolver_factory_create());
-#ifdef GPR_HAVE_UNIX_SOCKET
-    grpc_register_resolver_type(grpc_unix_resolver_factory_create());
-#endif
     grpc_register_tracer("api", &grpc_api_trace);
     grpc_register_tracer("channel", &grpc_trace_channel);
     grpc_register_tracer("http", &grpc_http_trace);
diff --git a/src/core/plugin_registry/grpc_plugin_registry.c b/src/core/plugin_registry/grpc_plugin_registry.c
index 422d3c92b835b3b6c3f8e5e41877b7b4cc9e1969..79df85516ea80de74a2bf70911a95caefd754abb 100644
--- a/src/core/plugin_registry/grpc_plugin_registry.c
+++ b/src/core/plugin_registry/grpc_plugin_registry.c
@@ -37,6 +37,10 @@ extern void grpc_lb_policy_pick_first_init(void);
 extern void grpc_lb_policy_pick_first_shutdown(void);
 extern void grpc_lb_policy_round_robin_init(void);
 extern void grpc_lb_policy_round_robin_shutdown(void);
+extern void grpc_resolver_dns_native_init(void);
+extern void grpc_resolver_dns_native_shutdown(void);
+extern void grpc_resolver_sockaddr_init(void);
+extern void grpc_resolver_sockaddr_shutdown(void);
 extern void census_grpc_plugin_init(void);
 extern void census_grpc_plugin_shutdown(void);
 
@@ -45,6 +49,10 @@ void grpc_register_built_in_plugins(void) {
                        grpc_lb_policy_pick_first_shutdown);
   grpc_register_plugin(grpc_lb_policy_round_robin_init,
                        grpc_lb_policy_round_robin_shutdown);
+  grpc_register_plugin(grpc_resolver_dns_native_init,
+                       grpc_resolver_dns_native_shutdown);
+  grpc_register_plugin(grpc_resolver_sockaddr_init,
+                       grpc_resolver_sockaddr_shutdown);
   grpc_register_plugin(census_grpc_plugin_init,
                        census_grpc_plugin_shutdown);
 }
diff --git a/src/core/plugin_registry/grpc_unsecure_plugin_registry.c b/src/core/plugin_registry/grpc_unsecure_plugin_registry.c
index 422d3c92b835b3b6c3f8e5e41877b7b4cc9e1969..b3786c927dcca9a02b21c2343d7f541e2b709830 100644
--- a/src/core/plugin_registry/grpc_unsecure_plugin_registry.c
+++ b/src/core/plugin_registry/grpc_unsecure_plugin_registry.c
@@ -33,6 +33,10 @@
 
 #include <grpc/grpc.h>
 
+extern void grpc_resolver_dns_native_init(void);
+extern void grpc_resolver_dns_native_shutdown(void);
+extern void grpc_resolver_sockaddr_init(void);
+extern void grpc_resolver_sockaddr_shutdown(void);
 extern void grpc_lb_policy_pick_first_init(void);
 extern void grpc_lb_policy_pick_first_shutdown(void);
 extern void grpc_lb_policy_round_robin_init(void);
@@ -41,6 +45,10 @@ extern void census_grpc_plugin_init(void);
 extern void census_grpc_plugin_shutdown(void);
 
 void grpc_register_built_in_plugins(void) {
+  grpc_register_plugin(grpc_resolver_dns_native_init,
+                       grpc_resolver_dns_native_shutdown);
+  grpc_register_plugin(grpc_resolver_sockaddr_init,
+                       grpc_resolver_sockaddr_shutdown);
   grpc_register_plugin(grpc_lb_policy_pick_first_init,
                        grpc_lb_policy_pick_first_shutdown);
   grpc_register_plugin(grpc_lb_policy_round_robin_init,
diff --git a/src/python/grpcio/grpc_core_dependencies.py b/src/python/grpcio/grpc_core_dependencies.py
index 0a516ed53451d48290d8ad24f00ed390581a197a..882ce0bb03bfa03a0fd0355c03924ac62b053511 100644
--- a/src/python/grpcio/grpc_core_dependencies.py
+++ b/src/python/grpcio/grpc_core_dependencies.py
@@ -87,6 +87,8 @@ CORE_SOURCE_FILES = [
   'src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.c',
   'src/core/ext/lb_policy/pick_first/pick_first.c',
   'src/core/ext/lb_policy/round_robin/round_robin.c',
+  'src/core/ext/resolver/dns/native/dns_resolver.c',
+  'src/core/ext/resolver/sockaddr/sockaddr_resolver.c',
   'src/core/ext/transport/chttp2/client/insecure/channel_create.c',
   'src/core/ext/transport/chttp2/client/secure/secure_channel_create.c',
   'src/core/ext/transport/chttp2/server/insecure/server_chttp2.c',
@@ -131,8 +133,6 @@ CORE_SOURCE_FILES = [
   'src/core/lib/client_config/resolver.c',
   'src/core/lib/client_config/resolver_factory.c',
   'src/core/lib/client_config/resolver_registry.c',
-  'src/core/lib/client_config/resolvers/dns_resolver.c',
-  'src/core/lib/client_config/resolvers/sockaddr_resolver.c',
   'src/core/lib/client_config/subchannel.c',
   'src/core/lib/client_config/subchannel_factory.c',
   'src/core/lib/client_config/subchannel_index.c',
diff --git a/test/core/client_config/resolvers/dns_resolver_connectivity_test.c b/test/core/client_config/resolvers/dns_resolver_connectivity_test.c
index dc6a614d555f3e853bdae42a25df40a619bf78f6..d88a46ce7b1db12fecf4464f21f4a2729b4a0024 100644
--- a/test/core/client_config/resolvers/dns_resolver_connectivity_test.c
+++ b/test/core/client_config/resolvers/dns_resolver_connectivity_test.c
@@ -31,13 +31,12 @@
  *
  */
 
-#include "src/core/lib/client_config/resolvers/dns_resolver.h"
-
 #include <string.h>
 
 #include <grpc/grpc.h>
 #include <grpc/support/alloc.h>
 
+#include "src/core/lib/client_config/resolver_registry.h"
 #include "src/core/lib/iomgr/resolve_address.h"
 #include "src/core/lib/iomgr/timer.h"
 #include "test/core/util/test_config.h"
@@ -79,7 +78,7 @@ static grpc_resolved_addresses *my_resolve_address(const char *name,
 }
 
 static grpc_resolver *create_resolver(const char *name) {
-  grpc_resolver_factory *factory = grpc_dns_resolver_factory_create();
+  grpc_resolver_factory *factory = grpc_resolver_factory_lookup("dns");
   grpc_uri *uri = grpc_uri_parse(name, 0);
   GPR_ASSERT(uri);
   grpc_resolver_args args;
diff --git a/test/core/client_config/resolvers/dns_resolver_test.c b/test/core/client_config/resolvers/dns_resolver_test.c
index 6c7a6b27e4a6289002d89d435f2d4e9b24dfa9a6..518403a0cf37feb3a983907d227d9c7942dea41a 100644
--- a/test/core/client_config/resolvers/dns_resolver_test.c
+++ b/test/core/client_config/resolvers/dns_resolver_test.c
@@ -31,13 +31,11 @@
  *
  */
 
-#include "src/core/lib/client_config/resolvers/dns_resolver.h"
-
 #include <string.h>
 
 #include <grpc/support/log.h>
 
-#include "src/core/lib/client_config/resolver.h"
+#include "src/core/lib/client_config/resolver_registry.h"
 #include "test/core/util/test_config.h"
 
 static void subchannel_factory_ref(grpc_subchannel_factory *scv) {}
@@ -92,8 +90,9 @@ static void test_fails(grpc_resolver_factory *factory, const char *string) {
 int main(int argc, char **argv) {
   grpc_resolver_factory *dns;
   grpc_test_init(argc, argv);
+  grpc_init();
 
-  dns = grpc_dns_resolver_factory_create();
+  dns = grpc_resolver_factory_lookup("dns");
 
   test_succeeds(dns, "dns:10.2.1.1");
   test_succeeds(dns, "dns:10.2.1.1:1234");
@@ -101,6 +100,7 @@ int main(int argc, char **argv) {
   test_fails(dns, "ipv4://8.8.8.8/8.8.8.8:8888");
 
   grpc_resolver_factory_unref(dns);
+  grpc_shutdown();
 
   return 0;
 }
diff --git a/test/core/client_config/resolvers/sockaddr_resolver_test.c b/test/core/client_config/resolvers/sockaddr_resolver_test.c
index fafddfd166da85624bd5fdf5ab7da997507960df..6ae830e3456c51d7c07057602b4272d4ba18b555 100644
--- a/test/core/client_config/resolvers/sockaddr_resolver_test.c
+++ b/test/core/client_config/resolvers/sockaddr_resolver_test.c
@@ -31,13 +31,11 @@
  *
  */
 
-#include "src/core/lib/client_config/resolvers/sockaddr_resolver.h"
-
 #include <string.h>
 
 #include <grpc/support/log.h>
 
-#include "src/core/lib/client_config/resolver.h"
+#include "src/core/lib/client_config/resolver_registry.h"
 #include "test/core/util/test_config.h"
 
 static void subchannel_factory_ref(grpc_subchannel_factory *scv) {}
@@ -92,9 +90,10 @@ static void test_fails(grpc_resolver_factory *factory, const char *string) {
 int main(int argc, char **argv) {
   grpc_resolver_factory *ipv4, *ipv6;
   grpc_test_init(argc, argv);
+  grpc_init();
 
-  ipv4 = grpc_ipv4_resolver_factory_create();
-  ipv6 = grpc_ipv6_resolver_factory_create();
+  ipv4 = grpc_resolver_factory_lookup("ipv4");
+  ipv6 = grpc_resolver_factory_lookup("ipv6");
 
   test_fails(ipv4, "ipv4:10.2.1.1");
   test_succeeds(ipv4, "ipv4:10.2.1.1:1234");
@@ -111,6 +110,7 @@ int main(int argc, char **argv) {
 
   grpc_resolver_factory_unref(ipv4);
   grpc_resolver_factory_unref(ipv6);
+  grpc_shutdown();
 
   return 0;
 }
diff --git a/tools/doxygen/Doxyfile.core.internal b/tools/doxygen/Doxyfile.core.internal
index dc2fd0627990c45789edfa81bf3b9ea69b3c7abd..fffbc5e30060e780deac452212d498e856a33366 100644
--- a/tools/doxygen/Doxyfile.core.internal
+++ b/tools/doxygen/Doxyfile.core.internal
@@ -822,8 +822,6 @@ src/core/lib/client_config/lb_policy_registry.h \
 src/core/lib/client_config/resolver.h \
 src/core/lib/client_config/resolver_factory.h \
 src/core/lib/client_config/resolver_registry.h \
-src/core/lib/client_config/resolvers/dns_resolver.h \
-src/core/lib/client_config/resolvers/sockaddr_resolver.h \
 src/core/lib/client_config/subchannel.h \
 src/core/lib/client_config/subchannel_factory.h \
 src/core/lib/client_config/subchannel_index.h \
@@ -925,6 +923,8 @@ src/core/ext/lb_policy/grpclb/load_balancer_api.c \
 src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.c \
 src/core/ext/lb_policy/pick_first/pick_first.c \
 src/core/ext/lb_policy/round_robin/round_robin.c \
+src/core/ext/resolver/dns/native/dns_resolver.c \
+src/core/ext/resolver/sockaddr/sockaddr_resolver.c \
 src/core/ext/transport/chttp2/client/insecure/channel_create.c \
 src/core/ext/transport/chttp2/client/secure/secure_channel_create.c \
 src/core/ext/transport/chttp2/server/insecure/server_chttp2.c \
@@ -969,8 +969,6 @@ src/core/lib/client_config/lb_policy_registry.c \
 src/core/lib/client_config/resolver.c \
 src/core/lib/client_config/resolver_factory.c \
 src/core/lib/client_config/resolver_registry.c \
-src/core/lib/client_config/resolvers/dns_resolver.c \
-src/core/lib/client_config/resolvers/sockaddr_resolver.c \
 src/core/lib/client_config/subchannel.c \
 src/core/lib/client_config/subchannel_factory.c \
 src/core/lib/client_config/subchannel_index.c \
diff --git a/tools/run_tests/sources_and_headers.json b/tools/run_tests/sources_and_headers.json
index e17470d15b32219409fb8ebf8c1e0900e28f2b93..9690ae042198e4323317af8c42e4e382109b2e07 100644
--- a/tools/run_tests/sources_and_headers.json
+++ b/tools/run_tests/sources_and_headers.json
@@ -4085,8 +4085,6 @@
       "src/core/lib/client_config/resolver.h", 
       "src/core/lib/client_config/resolver_factory.h", 
       "src/core/lib/client_config/resolver_registry.h", 
-      "src/core/lib/client_config/resolvers/dns_resolver.h", 
-      "src/core/lib/client_config/resolvers/sockaddr_resolver.h", 
       "src/core/lib/client_config/subchannel.h", 
       "src/core/lib/client_config/subchannel_factory.h", 
       "src/core/lib/client_config/subchannel_index.h", 
@@ -4214,6 +4212,8 @@
       "src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.h", 
       "src/core/ext/lb_policy/pick_first/pick_first.c", 
       "src/core/ext/lb_policy/round_robin/round_robin.c", 
+      "src/core/ext/resolver/dns/native/dns_resolver.c", 
+      "src/core/ext/resolver/sockaddr/sockaddr_resolver.c", 
       "src/core/ext/transport/chttp2/client/insecure/channel_create.c", 
       "src/core/ext/transport/chttp2/client/secure/secure_channel_create.c", 
       "src/core/ext/transport/chttp2/server/insecure/server_chttp2.c", 
@@ -4298,10 +4298,6 @@
       "src/core/lib/client_config/resolver_factory.h", 
       "src/core/lib/client_config/resolver_registry.c", 
       "src/core/lib/client_config/resolver_registry.h", 
-      "src/core/lib/client_config/resolvers/dns_resolver.c", 
-      "src/core/lib/client_config/resolvers/dns_resolver.h", 
-      "src/core/lib/client_config/resolvers/sockaddr_resolver.c", 
-      "src/core/lib/client_config/resolvers/sockaddr_resolver.h", 
       "src/core/lib/client_config/subchannel.c", 
       "src/core/lib/client_config/subchannel.h", 
       "src/core/lib/client_config/subchannel_factory.c", 
@@ -4710,8 +4706,6 @@
       "src/core/lib/client_config/resolver.h", 
       "src/core/lib/client_config/resolver_factory.h", 
       "src/core/lib/client_config/resolver_registry.h", 
-      "src/core/lib/client_config/resolvers/dns_resolver.h", 
-      "src/core/lib/client_config/resolvers/sockaddr_resolver.h", 
       "src/core/lib/client_config/subchannel.h", 
       "src/core/lib/client_config/subchannel_factory.h", 
       "src/core/lib/client_config/subchannel_index.h", 
@@ -4824,6 +4818,8 @@
       "src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.h", 
       "src/core/ext/lb_policy/pick_first/pick_first.c", 
       "src/core/ext/lb_policy/round_robin/round_robin.c", 
+      "src/core/ext/resolver/dns/native/dns_resolver.c", 
+      "src/core/ext/resolver/sockaddr/sockaddr_resolver.c", 
       "src/core/ext/transport/chttp2/client/insecure/channel_create.c", 
       "src/core/ext/transport/chttp2/server/insecure/server_chttp2.c", 
       "src/core/ext/transport/chttp2/transport/alpn.c", 
@@ -4906,10 +4902,6 @@
       "src/core/lib/client_config/resolver_factory.h", 
       "src/core/lib/client_config/resolver_registry.c", 
       "src/core/lib/client_config/resolver_registry.h", 
-      "src/core/lib/client_config/resolvers/dns_resolver.c", 
-      "src/core/lib/client_config/resolvers/dns_resolver.h", 
-      "src/core/lib/client_config/resolvers/sockaddr_resolver.c", 
-      "src/core/lib/client_config/resolvers/sockaddr_resolver.h", 
       "src/core/lib/client_config/subchannel.c", 
       "src/core/lib/client_config/subchannel.h", 
       "src/core/lib/client_config/subchannel_factory.c", 
diff --git a/vsprojects/vcxproj/grpc/grpc.vcxproj b/vsprojects/vcxproj/grpc/grpc.vcxproj
index c8c72b62f9bcdc1965e0996320e1ad8bdd79e350..ab95af9d103b7d2ff05cf054eb6d9b358df4bcfd 100644
--- a/vsprojects/vcxproj/grpc/grpc.vcxproj
+++ b/vsprojects/vcxproj/grpc/grpc.vcxproj
@@ -331,8 +331,6 @@
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\client_config\resolver.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\client_config\resolver_factory.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\client_config\resolver_registry.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\lib\client_config\resolvers\dns_resolver.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\lib\client_config\resolvers\sockaddr_resolver.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\client_config\subchannel.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\client_config\subchannel_factory.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\client_config\subchannel_index.h" />
@@ -449,6 +447,10 @@
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\ext\lb_policy\round_robin\round_robin.c">
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\resolver\dns\native\dns_resolver.c">
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\resolver\sockaddr\sockaddr_resolver.c">
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\ext\transport\chttp2\client\insecure\channel_create.c">
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\ext\transport\chttp2\client\secure\secure_channel_create.c">
@@ -537,10 +539,6 @@
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\client_config\resolver_registry.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\lib\client_config\resolvers\dns_resolver.c">
-    </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\lib\client_config\resolvers\sockaddr_resolver.c">
-    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\client_config\subchannel.c">
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\client_config\subchannel_factory.c">
diff --git a/vsprojects/vcxproj/grpc/grpc.vcxproj.filters b/vsprojects/vcxproj/grpc/grpc.vcxproj.filters
index 6c3dd65c3407044e66de327d5df445ef85012e33..ad03c802262b625b2d00ca56c4ca23534ad70a8a 100644
--- a/vsprojects/vcxproj/grpc/grpc.vcxproj.filters
+++ b/vsprojects/vcxproj/grpc/grpc.vcxproj.filters
@@ -40,6 +40,12 @@
     <ClCompile Include="$(SolutionDir)\..\src\core\ext\lb_policy\round_robin\round_robin.c">
       <Filter>src\core\ext\lb_policy\round_robin</Filter>
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\resolver\dns\native\dns_resolver.c">
+      <Filter>src\core\ext\resolver\dns\native</Filter>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\resolver\sockaddr\sockaddr_resolver.c">
+      <Filter>src\core\ext\resolver\sockaddr</Filter>
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\ext\transport\chttp2\client\insecure\channel_create.c">
       <Filter>src\core\ext\transport\chttp2\client\insecure</Filter>
     </ClCompile>
@@ -172,12 +178,6 @@
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\client_config\resolver_registry.c">
       <Filter>src\core\lib\client_config</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\lib\client_config\resolvers\dns_resolver.c">
-      <Filter>src\core\lib\client_config\resolvers</Filter>
-    </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\lib\client_config\resolvers\sockaddr_resolver.c">
-      <Filter>src\core\lib\client_config\resolvers</Filter>
-    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\client_config\subchannel.c">
       <Filter>src\core\lib\client_config</Filter>
     </ClCompile>
@@ -686,12 +686,6 @@
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\client_config\resolver_registry.h">
       <Filter>src\core\lib\client_config</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\lib\client_config\resolvers\dns_resolver.h">
-      <Filter>src\core\lib\client_config\resolvers</Filter>
-    </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\lib\client_config\resolvers\sockaddr_resolver.h">
-      <Filter>src\core\lib\client_config\resolvers</Filter>
-    </ClInclude>
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\client_config\subchannel.h">
       <Filter>src\core\lib\client_config</Filter>
     </ClInclude>
@@ -1007,6 +1001,18 @@
     <Filter Include="src\core\ext\lb_policy\round_robin">
       <UniqueIdentifier>{2472d352-cf94-f317-646e-72b769cea846}</UniqueIdentifier>
     </Filter>
+    <Filter Include="src\core\ext\resolver">
+      <UniqueIdentifier>{6bfa6808-9dcb-8990-deed-5cf58a149dda}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="src\core\ext\resolver\dns">
+      <UniqueIdentifier>{e8fe6413-ab8c-48d5-2c7b-aa79e3db4ab2}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="src\core\ext\resolver\dns\native">
+      <UniqueIdentifier>{94e34be0-29d2-1731-3c1e-617ec4986acb}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="src\core\ext\resolver\sockaddr">
+      <UniqueIdentifier>{98c1ccc2-2c91-a3d2-6040-a2e15993d51a}</UniqueIdentifier>
+    </Filter>
     <Filter Include="src\core\ext\transport">
       <UniqueIdentifier>{e3abfd0a-064e-0f2f-c8e8-7c5a7e98142a}</UniqueIdentifier>
     </Filter>
@@ -1043,9 +1049,6 @@
     <Filter Include="src\core\lib\client_config">
       <UniqueIdentifier>{2f3260de-be57-d18d-6882-61d115baa159}</UniqueIdentifier>
     </Filter>
-    <Filter Include="src\core\lib\client_config\resolvers">
-      <UniqueIdentifier>{b9d8db6c-2c68-1c90-fe5e-37da90f47ae6}</UniqueIdentifier>
-    </Filter>
     <Filter Include="src\core\lib\compression">
       <UniqueIdentifier>{dadf7fe9-3f15-d431-e4f6-f987b090536c}</UniqueIdentifier>
     </Filter>
diff --git a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj
index 8e65e759f51fb79e24c92a27b635af9bddbea9de..08a0344c1159c4a8b5999bf9f72766f9f861cdbe 100644
--- a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj
+++ b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj
@@ -321,8 +321,6 @@
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\client_config\resolver.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\client_config\resolver_factory.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\client_config\resolver_registry.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\lib\client_config\resolvers\dns_resolver.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\lib\client_config\resolvers\sockaddr_resolver.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\client_config\subchannel.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\client_config\subchannel_factory.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\client_config\subchannel_index.h" />
@@ -425,6 +423,10 @@
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\ext\lb_policy\round_robin\round_robin.c">
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\resolver\dns\native\dns_resolver.c">
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\resolver\sockaddr\sockaddr_resolver.c">
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\ext\transport\chttp2\client\insecure\channel_create.c">
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\ext\transport\chttp2\server\insecure\server_chttp2.c">
@@ -509,10 +511,6 @@
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\client_config\resolver_registry.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\lib\client_config\resolvers\dns_resolver.c">
-    </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\lib\client_config\resolvers\sockaddr_resolver.c">
-    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\client_config\subchannel.c">
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\client_config\subchannel_factory.c">
diff --git a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters
index 0fdd05d6dd1d37659c632716a0d2056fc4769cdd..a2c3aaa42543e91da435714cc18a43da55245a5f 100644
--- a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters
+++ b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters
@@ -40,6 +40,12 @@
     <ClCompile Include="$(SolutionDir)\..\src\core\ext\lb_policy\round_robin\round_robin.c">
       <Filter>src\core\ext\lb_policy\round_robin</Filter>
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\resolver\dns\native\dns_resolver.c">
+      <Filter>src\core\ext\resolver\dns\native</Filter>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\resolver\sockaddr\sockaddr_resolver.c">
+      <Filter>src\core\ext\resolver\sockaddr</Filter>
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\ext\transport\chttp2\client\insecure\channel_create.c">
       <Filter>src\core\ext\transport\chttp2\client\insecure</Filter>
     </ClCompile>
@@ -166,12 +172,6 @@
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\client_config\resolver_registry.c">
       <Filter>src\core\lib\client_config</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\lib\client_config\resolvers\dns_resolver.c">
-      <Filter>src\core\lib\client_config\resolvers</Filter>
-    </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\lib\client_config\resolvers\sockaddr_resolver.c">
-      <Filter>src\core\lib\client_config\resolvers</Filter>
-    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\client_config\subchannel.c">
       <Filter>src\core\lib\client_config</Filter>
     </ClCompile>
@@ -623,12 +623,6 @@
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\client_config\resolver_registry.h">
       <Filter>src\core\lib\client_config</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\lib\client_config\resolvers\dns_resolver.h">
-      <Filter>src\core\lib\client_config\resolvers</Filter>
-    </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\lib\client_config\resolvers\sockaddr_resolver.h">
-      <Filter>src\core\lib\client_config\resolvers</Filter>
-    </ClInclude>
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\client_config\subchannel.h">
       <Filter>src\core\lib\client_config</Filter>
     </ClInclude>
@@ -902,6 +896,18 @@
     <Filter Include="src\core\ext\lb_policy\round_robin">
       <UniqueIdentifier>{e5fc1091-5d60-404f-775b-686ef4b3266f}</UniqueIdentifier>
     </Filter>
+    <Filter Include="src\core\ext\resolver">
+      <UniqueIdentifier>{88c78e27-267a-95df-07c5-50e5fbc2f40c}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="src\core\ext\resolver\dns">
+      <UniqueIdentifier>{2e0a9b4f-6394-7c0e-6e5a-0f8b3ee29b41}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="src\core\ext\resolver\dns\native">
+      <UniqueIdentifier>{3d5398c8-928b-9096-8eb7-f8c40ee68c4d}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="src\core\ext\resolver\sockaddr">
+      <UniqueIdentifier>{71686ed0-fbf9-02a4-d65a-a73f7dc4e2be}</UniqueIdentifier>
+    </Filter>
     <Filter Include="src\core\ext\transport">
       <UniqueIdentifier>{967c89fe-c97c-27e2-aac0-9ba5854cb5fa}</UniqueIdentifier>
     </Filter>
@@ -932,9 +938,6 @@
     <Filter Include="src\core\lib\client_config">
       <UniqueIdentifier>{29ca2974-89e4-1a74-3e4d-0d63e2f77566}</UniqueIdentifier>
     </Filter>
-    <Filter Include="src\core\lib\client_config\resolvers">
-      <UniqueIdentifier>{2d959ef9-9703-dc92-a56f-9fe136dadfb9}</UniqueIdentifier>
-    </Filter>
     <Filter Include="src\core\lib\compression">
       <UniqueIdentifier>{b88002e9-185e-4e64-49f5-2d8989ce87f6}</UniqueIdentifier>
     </Filter>