diff --git a/BUILD b/BUILD
index 5c4333463c67c665d6ea0309f61522da269e4918..b64f8ab47b6ee71cd631544193ccf7282932f90e 100644
--- a/BUILD
+++ b/BUILD
@@ -291,23 +291,23 @@ cc_library(
     "src/core/lib/tsi/ssl_types.h",
     "src/core/lib/tsi/transport_security.h",
     "src/core/lib/tsi/transport_security_interface.h",
-    "src/core/ext/client_config/client_channel.h",
-    "src/core/ext/client_config/client_channel_factory.h",
-    "src/core/ext/client_config/connector.h",
-    "src/core/ext/client_config/http_connect_handshaker.h",
-    "src/core/ext/client_config/initial_connect_string.h",
-    "src/core/ext/client_config/lb_policy.h",
-    "src/core/ext/client_config/lb_policy_factory.h",
-    "src/core/ext/client_config/lb_policy_registry.h",
-    "src/core/ext/client_config/method_config.h",
-    "src/core/ext/client_config/parse_address.h",
-    "src/core/ext/client_config/resolver.h",
-    "src/core/ext/client_config/resolver_factory.h",
-    "src/core/ext/client_config/resolver_registry.h",
-    "src/core/ext/client_config/resolver_result.h",
-    "src/core/ext/client_config/subchannel.h",
-    "src/core/ext/client_config/subchannel_index.h",
-    "src/core/ext/client_config/uri_parser.h",
+    "src/core/ext/client_channel/client_channel.h",
+    "src/core/ext/client_channel/client_channel_factory.h",
+    "src/core/ext/client_channel/connector.h",
+    "src/core/ext/client_channel/http_connect_handshaker.h",
+    "src/core/ext/client_channel/initial_connect_string.h",
+    "src/core/ext/client_channel/lb_policy.h",
+    "src/core/ext/client_channel/lb_policy_factory.h",
+    "src/core/ext/client_channel/lb_policy_registry.h",
+    "src/core/ext/client_channel/method_config.h",
+    "src/core/ext/client_channel/parse_address.h",
+    "src/core/ext/client_channel/resolver.h",
+    "src/core/ext/client_channel/resolver_factory.h",
+    "src/core/ext/client_channel/resolver_registry.h",
+    "src/core/ext/client_channel/resolver_result.h",
+    "src/core/ext/client_channel/subchannel.h",
+    "src/core/ext/client_channel/subchannel_index.h",
+    "src/core/ext/client_channel/uri_parser.h",
     "src/core/ext/lb_policy/grpclb/grpclb.h",
     "src/core/ext/lb_policy/grpclb/load_balancer_api.h",
     "src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h",
@@ -470,26 +470,26 @@ cc_library(
     "src/core/lib/tsi/ssl_transport_security.c",
     "src/core/lib/tsi/transport_security.c",
     "src/core/ext/transport/chttp2/client/secure/secure_channel_create.c",
-    "src/core/ext/client_config/channel_connectivity.c",
-    "src/core/ext/client_config/client_channel.c",
-    "src/core/ext/client_config/client_channel_factory.c",
-    "src/core/ext/client_config/client_config_plugin.c",
-    "src/core/ext/client_config/connector.c",
-    "src/core/ext/client_config/default_initial_connect_string.c",
-    "src/core/ext/client_config/http_connect_handshaker.c",
-    "src/core/ext/client_config/initial_connect_string.c",
-    "src/core/ext/client_config/lb_policy.c",
-    "src/core/ext/client_config/lb_policy_factory.c",
-    "src/core/ext/client_config/lb_policy_registry.c",
-    "src/core/ext/client_config/method_config.c",
-    "src/core/ext/client_config/parse_address.c",
-    "src/core/ext/client_config/resolver.c",
-    "src/core/ext/client_config/resolver_factory.c",
-    "src/core/ext/client_config/resolver_registry.c",
-    "src/core/ext/client_config/resolver_result.c",
-    "src/core/ext/client_config/subchannel.c",
-    "src/core/ext/client_config/subchannel_index.c",
-    "src/core/ext/client_config/uri_parser.c",
+    "src/core/ext/client_channel/channel_connectivity.c",
+    "src/core/ext/client_channel/client_channel.c",
+    "src/core/ext/client_channel/client_channel_factory.c",
+    "src/core/ext/client_channel/client_channel_plugin.c",
+    "src/core/ext/client_channel/connector.c",
+    "src/core/ext/client_channel/default_initial_connect_string.c",
+    "src/core/ext/client_channel/http_connect_handshaker.c",
+    "src/core/ext/client_channel/initial_connect_string.c",
+    "src/core/ext/client_channel/lb_policy.c",
+    "src/core/ext/client_channel/lb_policy_factory.c",
+    "src/core/ext/client_channel/lb_policy_registry.c",
+    "src/core/ext/client_channel/method_config.c",
+    "src/core/ext/client_channel/parse_address.c",
+    "src/core/ext/client_channel/resolver.c",
+    "src/core/ext/client_channel/resolver_factory.c",
+    "src/core/ext/client_channel/resolver_registry.c",
+    "src/core/ext/client_channel/resolver_result.c",
+    "src/core/ext/client_channel/subchannel.c",
+    "src/core/ext/client_channel/subchannel_index.c",
+    "src/core/ext/client_channel/uri_parser.c",
     "src/core/ext/transport/chttp2/server/insecure/server_chttp2.c",
     "src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c",
     "src/core/ext/transport/chttp2/client/insecure/channel_create.c",
@@ -673,23 +673,23 @@ cc_library(
     "src/core/ext/transport/chttp2/transport/stream_map.h",
     "src/core/ext/transport/chttp2/transport/varint.h",
     "src/core/ext/transport/chttp2/alpn/alpn.h",
-    "src/core/ext/client_config/client_channel.h",
-    "src/core/ext/client_config/client_channel_factory.h",
-    "src/core/ext/client_config/connector.h",
-    "src/core/ext/client_config/http_connect_handshaker.h",
-    "src/core/ext/client_config/initial_connect_string.h",
-    "src/core/ext/client_config/lb_policy.h",
-    "src/core/ext/client_config/lb_policy_factory.h",
-    "src/core/ext/client_config/lb_policy_registry.h",
-    "src/core/ext/client_config/method_config.h",
-    "src/core/ext/client_config/parse_address.h",
-    "src/core/ext/client_config/resolver.h",
-    "src/core/ext/client_config/resolver_factory.h",
-    "src/core/ext/client_config/resolver_registry.h",
-    "src/core/ext/client_config/resolver_result.h",
-    "src/core/ext/client_config/subchannel.h",
-    "src/core/ext/client_config/subchannel_index.h",
-    "src/core/ext/client_config/uri_parser.h",
+    "src/core/ext/client_channel/client_channel.h",
+    "src/core/ext/client_channel/client_channel_factory.h",
+    "src/core/ext/client_channel/connector.h",
+    "src/core/ext/client_channel/http_connect_handshaker.h",
+    "src/core/ext/client_channel/initial_connect_string.h",
+    "src/core/ext/client_channel/lb_policy.h",
+    "src/core/ext/client_channel/lb_policy_factory.h",
+    "src/core/ext/client_channel/lb_policy_registry.h",
+    "src/core/ext/client_channel/method_config.h",
+    "src/core/ext/client_channel/parse_address.h",
+    "src/core/ext/client_channel/resolver.h",
+    "src/core/ext/client_channel/resolver_factory.h",
+    "src/core/ext/client_channel/resolver_registry.h",
+    "src/core/ext/client_channel/resolver_result.h",
+    "src/core/ext/client_channel/subchannel.h",
+    "src/core/ext/client_channel/subchannel_index.h",
+    "src/core/ext/client_channel/uri_parser.h",
     "src/core/lib/security/context/security_context.h",
     "src/core/lib/security/credentials/composite/composite_credentials.h",
     "src/core/lib/security/credentials/credentials.h",
@@ -834,26 +834,26 @@ cc_library(
     "src/core/ext/transport/chttp2/transport/varint.c",
     "src/core/ext/transport/chttp2/transport/writing.c",
     "src/core/ext/transport/chttp2/alpn/alpn.c",
-    "src/core/ext/client_config/channel_connectivity.c",
-    "src/core/ext/client_config/client_channel.c",
-    "src/core/ext/client_config/client_channel_factory.c",
-    "src/core/ext/client_config/client_config_plugin.c",
-    "src/core/ext/client_config/connector.c",
-    "src/core/ext/client_config/default_initial_connect_string.c",
-    "src/core/ext/client_config/http_connect_handshaker.c",
-    "src/core/ext/client_config/initial_connect_string.c",
-    "src/core/ext/client_config/lb_policy.c",
-    "src/core/ext/client_config/lb_policy_factory.c",
-    "src/core/ext/client_config/lb_policy_registry.c",
-    "src/core/ext/client_config/method_config.c",
-    "src/core/ext/client_config/parse_address.c",
-    "src/core/ext/client_config/resolver.c",
-    "src/core/ext/client_config/resolver_factory.c",
-    "src/core/ext/client_config/resolver_registry.c",
-    "src/core/ext/client_config/resolver_result.c",
-    "src/core/ext/client_config/subchannel.c",
-    "src/core/ext/client_config/subchannel_index.c",
-    "src/core/ext/client_config/uri_parser.c",
+    "src/core/ext/client_channel/channel_connectivity.c",
+    "src/core/ext/client_channel/client_channel.c",
+    "src/core/ext/client_channel/client_channel_factory.c",
+    "src/core/ext/client_channel/client_channel_plugin.c",
+    "src/core/ext/client_channel/connector.c",
+    "src/core/ext/client_channel/default_initial_connect_string.c",
+    "src/core/ext/client_channel/http_connect_handshaker.c",
+    "src/core/ext/client_channel/initial_connect_string.c",
+    "src/core/ext/client_channel/lb_policy.c",
+    "src/core/ext/client_channel/lb_policy_factory.c",
+    "src/core/ext/client_channel/lb_policy_registry.c",
+    "src/core/ext/client_channel/method_config.c",
+    "src/core/ext/client_channel/parse_address.c",
+    "src/core/ext/client_channel/resolver.c",
+    "src/core/ext/client_channel/resolver_factory.c",
+    "src/core/ext/client_channel/resolver_registry.c",
+    "src/core/ext/client_channel/resolver_result.c",
+    "src/core/ext/client_channel/subchannel.c",
+    "src/core/ext/client_channel/subchannel_index.c",
+    "src/core/ext/client_channel/uri_parser.c",
     "src/core/lib/http/httpcli_security_connector.c",
     "src/core/lib/security/context/security_context.c",
     "src/core/lib/security/credentials/composite/composite_credentials.c",
@@ -1032,23 +1032,23 @@ cc_library(
     "src/core/ext/transport/chttp2/transport/stream_map.h",
     "src/core/ext/transport/chttp2/transport/varint.h",
     "src/core/ext/transport/chttp2/alpn/alpn.h",
-    "src/core/ext/client_config/client_channel.h",
-    "src/core/ext/client_config/client_channel_factory.h",
-    "src/core/ext/client_config/connector.h",
-    "src/core/ext/client_config/http_connect_handshaker.h",
-    "src/core/ext/client_config/initial_connect_string.h",
-    "src/core/ext/client_config/lb_policy.h",
-    "src/core/ext/client_config/lb_policy_factory.h",
-    "src/core/ext/client_config/lb_policy_registry.h",
-    "src/core/ext/client_config/method_config.h",
-    "src/core/ext/client_config/parse_address.h",
-    "src/core/ext/client_config/resolver.h",
-    "src/core/ext/client_config/resolver_factory.h",
-    "src/core/ext/client_config/resolver_registry.h",
-    "src/core/ext/client_config/resolver_result.h",
-    "src/core/ext/client_config/subchannel.h",
-    "src/core/ext/client_config/subchannel_index.h",
-    "src/core/ext/client_config/uri_parser.h",
+    "src/core/ext/client_channel/client_channel.h",
+    "src/core/ext/client_channel/client_channel_factory.h",
+    "src/core/ext/client_channel/connector.h",
+    "src/core/ext/client_channel/http_connect_handshaker.h",
+    "src/core/ext/client_channel/initial_connect_string.h",
+    "src/core/ext/client_channel/lb_policy.h",
+    "src/core/ext/client_channel/lb_policy_factory.h",
+    "src/core/ext/client_channel/lb_policy_registry.h",
+    "src/core/ext/client_channel/method_config.h",
+    "src/core/ext/client_channel/parse_address.h",
+    "src/core/ext/client_channel/resolver.h",
+    "src/core/ext/client_channel/resolver_factory.h",
+    "src/core/ext/client_channel/resolver_registry.h",
+    "src/core/ext/client_channel/resolver_result.h",
+    "src/core/ext/client_channel/subchannel.h",
+    "src/core/ext/client_channel/subchannel_index.h",
+    "src/core/ext/client_channel/uri_parser.h",
     "src/core/ext/load_reporting/load_reporting.h",
     "src/core/ext/load_reporting/load_reporting_filter.h",
     "src/core/ext/lb_policy/grpclb/grpclb.h",
@@ -1186,26 +1186,26 @@ cc_library(
     "src/core/ext/transport/chttp2/alpn/alpn.c",
     "src/core/ext/transport/chttp2/client/insecure/channel_create.c",
     "src/core/ext/transport/chttp2/client/insecure/channel_create_posix.c",
-    "src/core/ext/client_config/channel_connectivity.c",
-    "src/core/ext/client_config/client_channel.c",
-    "src/core/ext/client_config/client_channel_factory.c",
-    "src/core/ext/client_config/client_config_plugin.c",
-    "src/core/ext/client_config/connector.c",
-    "src/core/ext/client_config/default_initial_connect_string.c",
-    "src/core/ext/client_config/http_connect_handshaker.c",
-    "src/core/ext/client_config/initial_connect_string.c",
-    "src/core/ext/client_config/lb_policy.c",
-    "src/core/ext/client_config/lb_policy_factory.c",
-    "src/core/ext/client_config/lb_policy_registry.c",
-    "src/core/ext/client_config/method_config.c",
-    "src/core/ext/client_config/parse_address.c",
-    "src/core/ext/client_config/resolver.c",
-    "src/core/ext/client_config/resolver_factory.c",
-    "src/core/ext/client_config/resolver_registry.c",
-    "src/core/ext/client_config/resolver_result.c",
-    "src/core/ext/client_config/subchannel.c",
-    "src/core/ext/client_config/subchannel_index.c",
-    "src/core/ext/client_config/uri_parser.c",
+    "src/core/ext/client_channel/channel_connectivity.c",
+    "src/core/ext/client_channel/client_channel.c",
+    "src/core/ext/client_channel/client_channel_factory.c",
+    "src/core/ext/client_channel/client_channel_plugin.c",
+    "src/core/ext/client_channel/connector.c",
+    "src/core/ext/client_channel/default_initial_connect_string.c",
+    "src/core/ext/client_channel/http_connect_handshaker.c",
+    "src/core/ext/client_channel/initial_connect_string.c",
+    "src/core/ext/client_channel/lb_policy.c",
+    "src/core/ext/client_channel/lb_policy_factory.c",
+    "src/core/ext/client_channel/lb_policy_registry.c",
+    "src/core/ext/client_channel/method_config.c",
+    "src/core/ext/client_channel/parse_address.c",
+    "src/core/ext/client_channel/resolver.c",
+    "src/core/ext/client_channel/resolver_factory.c",
+    "src/core/ext/client_channel/resolver_registry.c",
+    "src/core/ext/client_channel/resolver_result.c",
+    "src/core/ext/client_channel/subchannel.c",
+    "src/core/ext/client_channel/subchannel_index.c",
+    "src/core/ext/client_channel/uri_parser.c",
     "src/core/ext/resolver/dns/native/dns_resolver.c",
     "src/core/ext/resolver/sockaddr/sockaddr_resolver.c",
     "src/core/ext/load_reporting/load_reporting.c",
@@ -1977,26 +1977,26 @@ objc_library(
     "src/core/lib/tsi/ssl_transport_security.c",
     "src/core/lib/tsi/transport_security.c",
     "src/core/ext/transport/chttp2/client/secure/secure_channel_create.c",
-    "src/core/ext/client_config/channel_connectivity.c",
-    "src/core/ext/client_config/client_channel.c",
-    "src/core/ext/client_config/client_channel_factory.c",
-    "src/core/ext/client_config/client_config_plugin.c",
-    "src/core/ext/client_config/connector.c",
-    "src/core/ext/client_config/default_initial_connect_string.c",
-    "src/core/ext/client_config/http_connect_handshaker.c",
-    "src/core/ext/client_config/initial_connect_string.c",
-    "src/core/ext/client_config/lb_policy.c",
-    "src/core/ext/client_config/lb_policy_factory.c",
-    "src/core/ext/client_config/lb_policy_registry.c",
-    "src/core/ext/client_config/method_config.c",
-    "src/core/ext/client_config/parse_address.c",
-    "src/core/ext/client_config/resolver.c",
-    "src/core/ext/client_config/resolver_factory.c",
-    "src/core/ext/client_config/resolver_registry.c",
-    "src/core/ext/client_config/resolver_result.c",
-    "src/core/ext/client_config/subchannel.c",
-    "src/core/ext/client_config/subchannel_index.c",
-    "src/core/ext/client_config/uri_parser.c",
+    "src/core/ext/client_channel/channel_connectivity.c",
+    "src/core/ext/client_channel/client_channel.c",
+    "src/core/ext/client_channel/client_channel_factory.c",
+    "src/core/ext/client_channel/client_channel_plugin.c",
+    "src/core/ext/client_channel/connector.c",
+    "src/core/ext/client_channel/default_initial_connect_string.c",
+    "src/core/ext/client_channel/http_connect_handshaker.c",
+    "src/core/ext/client_channel/initial_connect_string.c",
+    "src/core/ext/client_channel/lb_policy.c",
+    "src/core/ext/client_channel/lb_policy_factory.c",
+    "src/core/ext/client_channel/lb_policy_registry.c",
+    "src/core/ext/client_channel/method_config.c",
+    "src/core/ext/client_channel/parse_address.c",
+    "src/core/ext/client_channel/resolver.c",
+    "src/core/ext/client_channel/resolver_factory.c",
+    "src/core/ext/client_channel/resolver_registry.c",
+    "src/core/ext/client_channel/resolver_result.c",
+    "src/core/ext/client_channel/subchannel.c",
+    "src/core/ext/client_channel/subchannel_index.c",
+    "src/core/ext/client_channel/uri_parser.c",
     "src/core/ext/transport/chttp2/server/insecure/server_chttp2.c",
     "src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c",
     "src/core/ext/transport/chttp2/client/insecure/channel_create.c",
@@ -2182,23 +2182,23 @@ objc_library(
     "src/core/lib/tsi/ssl_types.h",
     "src/core/lib/tsi/transport_security.h",
     "src/core/lib/tsi/transport_security_interface.h",
-    "src/core/ext/client_config/client_channel.h",
-    "src/core/ext/client_config/client_channel_factory.h",
-    "src/core/ext/client_config/connector.h",
-    "src/core/ext/client_config/http_connect_handshaker.h",
-    "src/core/ext/client_config/initial_connect_string.h",
-    "src/core/ext/client_config/lb_policy.h",
-    "src/core/ext/client_config/lb_policy_factory.h",
-    "src/core/ext/client_config/lb_policy_registry.h",
-    "src/core/ext/client_config/method_config.h",
-    "src/core/ext/client_config/parse_address.h",
-    "src/core/ext/client_config/resolver.h",
-    "src/core/ext/client_config/resolver_factory.h",
-    "src/core/ext/client_config/resolver_registry.h",
-    "src/core/ext/client_config/resolver_result.h",
-    "src/core/ext/client_config/subchannel.h",
-    "src/core/ext/client_config/subchannel_index.h",
-    "src/core/ext/client_config/uri_parser.h",
+    "src/core/ext/client_channel/client_channel.h",
+    "src/core/ext/client_channel/client_channel_factory.h",
+    "src/core/ext/client_channel/connector.h",
+    "src/core/ext/client_channel/http_connect_handshaker.h",
+    "src/core/ext/client_channel/initial_connect_string.h",
+    "src/core/ext/client_channel/lb_policy.h",
+    "src/core/ext/client_channel/lb_policy_factory.h",
+    "src/core/ext/client_channel/lb_policy_registry.h",
+    "src/core/ext/client_channel/method_config.h",
+    "src/core/ext/client_channel/parse_address.h",
+    "src/core/ext/client_channel/resolver.h",
+    "src/core/ext/client_channel/resolver_factory.h",
+    "src/core/ext/client_channel/resolver_registry.h",
+    "src/core/ext/client_channel/resolver_result.h",
+    "src/core/ext/client_channel/subchannel.h",
+    "src/core/ext/client_channel/subchannel_index.h",
+    "src/core/ext/client_channel/uri_parser.h",
     "src/core/ext/lb_policy/grpclb/grpclb.h",
     "src/core/ext/lb_policy/grpclb/load_balancer_api.h",
     "src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h",
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 893aac36fbbec734aa87bf5d34334820035afce2..8f352aa73e797d64ea368d0f685cfbce8ba0ebe6 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -435,26 +435,26 @@ add_library(grpc
   src/core/lib/tsi/ssl_transport_security.c
   src/core/lib/tsi/transport_security.c
   src/core/ext/transport/chttp2/client/secure/secure_channel_create.c
-  src/core/ext/client_config/channel_connectivity.c
-  src/core/ext/client_config/client_channel.c
-  src/core/ext/client_config/client_channel_factory.c
-  src/core/ext/client_config/client_config_plugin.c
-  src/core/ext/client_config/connector.c
-  src/core/ext/client_config/default_initial_connect_string.c
-  src/core/ext/client_config/http_connect_handshaker.c
-  src/core/ext/client_config/initial_connect_string.c
-  src/core/ext/client_config/lb_policy.c
-  src/core/ext/client_config/lb_policy_factory.c
-  src/core/ext/client_config/lb_policy_registry.c
-  src/core/ext/client_config/method_config.c
-  src/core/ext/client_config/parse_address.c
-  src/core/ext/client_config/resolver.c
-  src/core/ext/client_config/resolver_factory.c
-  src/core/ext/client_config/resolver_registry.c
-  src/core/ext/client_config/resolver_result.c
-  src/core/ext/client_config/subchannel.c
-  src/core/ext/client_config/subchannel_index.c
-  src/core/ext/client_config/uri_parser.c
+  src/core/ext/client_channel/channel_connectivity.c
+  src/core/ext/client_channel/client_channel.c
+  src/core/ext/client_channel/client_channel_factory.c
+  src/core/ext/client_channel/client_channel_plugin.c
+  src/core/ext/client_channel/connector.c
+  src/core/ext/client_channel/default_initial_connect_string.c
+  src/core/ext/client_channel/http_connect_handshaker.c
+  src/core/ext/client_channel/initial_connect_string.c
+  src/core/ext/client_channel/lb_policy.c
+  src/core/ext/client_channel/lb_policy_factory.c
+  src/core/ext/client_channel/lb_policy_registry.c
+  src/core/ext/client_channel/method_config.c
+  src/core/ext/client_channel/parse_address.c
+  src/core/ext/client_channel/resolver.c
+  src/core/ext/client_channel/resolver_factory.c
+  src/core/ext/client_channel/resolver_registry.c
+  src/core/ext/client_channel/resolver_result.c
+  src/core/ext/client_channel/subchannel.c
+  src/core/ext/client_channel/subchannel_index.c
+  src/core/ext/client_channel/uri_parser.c
   src/core/ext/transport/chttp2/server/insecure/server_chttp2.c
   src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c
   src/core/ext/transport/chttp2/client/insecure/channel_create.c
@@ -670,26 +670,26 @@ add_library(grpc_cronet
   src/core/ext/transport/chttp2/transport/varint.c
   src/core/ext/transport/chttp2/transport/writing.c
   src/core/ext/transport/chttp2/alpn/alpn.c
-  src/core/ext/client_config/channel_connectivity.c
-  src/core/ext/client_config/client_channel.c
-  src/core/ext/client_config/client_channel_factory.c
-  src/core/ext/client_config/client_config_plugin.c
-  src/core/ext/client_config/connector.c
-  src/core/ext/client_config/default_initial_connect_string.c
-  src/core/ext/client_config/http_connect_handshaker.c
-  src/core/ext/client_config/initial_connect_string.c
-  src/core/ext/client_config/lb_policy.c
-  src/core/ext/client_config/lb_policy_factory.c
-  src/core/ext/client_config/lb_policy_registry.c
-  src/core/ext/client_config/method_config.c
-  src/core/ext/client_config/parse_address.c
-  src/core/ext/client_config/resolver.c
-  src/core/ext/client_config/resolver_factory.c
-  src/core/ext/client_config/resolver_registry.c
-  src/core/ext/client_config/resolver_result.c
-  src/core/ext/client_config/subchannel.c
-  src/core/ext/client_config/subchannel_index.c
-  src/core/ext/client_config/uri_parser.c
+  src/core/ext/client_channel/channel_connectivity.c
+  src/core/ext/client_channel/client_channel.c
+  src/core/ext/client_channel/client_channel_factory.c
+  src/core/ext/client_channel/client_channel_plugin.c
+  src/core/ext/client_channel/connector.c
+  src/core/ext/client_channel/default_initial_connect_string.c
+  src/core/ext/client_channel/http_connect_handshaker.c
+  src/core/ext/client_channel/initial_connect_string.c
+  src/core/ext/client_channel/lb_policy.c
+  src/core/ext/client_channel/lb_policy_factory.c
+  src/core/ext/client_channel/lb_policy_registry.c
+  src/core/ext/client_channel/method_config.c
+  src/core/ext/client_channel/parse_address.c
+  src/core/ext/client_channel/resolver.c
+  src/core/ext/client_channel/resolver_factory.c
+  src/core/ext/client_channel/resolver_registry.c
+  src/core/ext/client_channel/resolver_result.c
+  src/core/ext/client_channel/subchannel.c
+  src/core/ext/client_channel/subchannel_index.c
+  src/core/ext/client_channel/uri_parser.c
   src/core/lib/http/httpcli_security_connector.c
   src/core/lib/security/context/security_context.c
   src/core/lib/security/credentials/composite/composite_credentials.c
@@ -903,26 +903,26 @@ add_library(grpc_unsecure
   src/core/ext/transport/chttp2/alpn/alpn.c
   src/core/ext/transport/chttp2/client/insecure/channel_create.c
   src/core/ext/transport/chttp2/client/insecure/channel_create_posix.c
-  src/core/ext/client_config/channel_connectivity.c
-  src/core/ext/client_config/client_channel.c
-  src/core/ext/client_config/client_channel_factory.c
-  src/core/ext/client_config/client_config_plugin.c
-  src/core/ext/client_config/connector.c
-  src/core/ext/client_config/default_initial_connect_string.c
-  src/core/ext/client_config/http_connect_handshaker.c
-  src/core/ext/client_config/initial_connect_string.c
-  src/core/ext/client_config/lb_policy.c
-  src/core/ext/client_config/lb_policy_factory.c
-  src/core/ext/client_config/lb_policy_registry.c
-  src/core/ext/client_config/method_config.c
-  src/core/ext/client_config/parse_address.c
-  src/core/ext/client_config/resolver.c
-  src/core/ext/client_config/resolver_factory.c
-  src/core/ext/client_config/resolver_registry.c
-  src/core/ext/client_config/resolver_result.c
-  src/core/ext/client_config/subchannel.c
-  src/core/ext/client_config/subchannel_index.c
-  src/core/ext/client_config/uri_parser.c
+  src/core/ext/client_channel/channel_connectivity.c
+  src/core/ext/client_channel/client_channel.c
+  src/core/ext/client_channel/client_channel_factory.c
+  src/core/ext/client_channel/client_channel_plugin.c
+  src/core/ext/client_channel/connector.c
+  src/core/ext/client_channel/default_initial_connect_string.c
+  src/core/ext/client_channel/http_connect_handshaker.c
+  src/core/ext/client_channel/initial_connect_string.c
+  src/core/ext/client_channel/lb_policy.c
+  src/core/ext/client_channel/lb_policy_factory.c
+  src/core/ext/client_channel/lb_policy_registry.c
+  src/core/ext/client_channel/method_config.c
+  src/core/ext/client_channel/parse_address.c
+  src/core/ext/client_channel/resolver.c
+  src/core/ext/client_channel/resolver_factory.c
+  src/core/ext/client_channel/resolver_registry.c
+  src/core/ext/client_channel/resolver_result.c
+  src/core/ext/client_channel/subchannel.c
+  src/core/ext/client_channel/subchannel_index.c
+  src/core/ext/client_channel/uri_parser.c
   src/core/ext/resolver/dns/native/dns_resolver.c
   src/core/ext/resolver/sockaddr/sockaddr_resolver.c
   src/core/ext/load_reporting/load_reporting.c
diff --git a/Makefile b/Makefile
index 38be9e658ce6f7b544be5b3e32d00e8f21da7478..2729e3ba8eb1e41fbcf9e87693c2c9d993f1952d 100644
--- a/Makefile
+++ b/Makefile
@@ -1228,9 +1228,9 @@ pc_cxx: $(LIBDIR)/$(CONFIG)/pkgconfig/grpc++.pc
 pc_cxx_unsecure: $(LIBDIR)/$(CONFIG)/pkgconfig/grpc++_unsecure.pc
 
 ifeq ($(EMBED_OPENSSL),true)
-privatelibs_cxx:  $(LIBDIR)/$(CONFIG)/libgrpc++_reflection_codegen.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_cli_libs.a $(LIBDIR)/$(CONFIG)/libinterop_client_helper.a $(LIBDIR)/$(CONFIG)/libinterop_client_main.a $(LIBDIR)/$(CONFIG)/libinterop_server_helper.a $(LIBDIR)/$(CONFIG)/libinterop_server_lib.a $(LIBDIR)/$(CONFIG)/libinterop_server_main.a $(LIBDIR)/$(CONFIG)/libqps.a $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl_aes_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_asn1_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_base64_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_bio_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_bn_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_bytestring_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_aead_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_cipher_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_cmac_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_ed25519_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_x25519_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_dh_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_digest_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_ec_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_ecdsa_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_err_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_evp_extra_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_evp_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_pbkdf_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_hmac_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_pkcs12_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_pkcs8_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_poly1305_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_rsa_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_x509_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_ssl_test_lib.a
+privatelibs_cxx:  $(LIBDIR)/$(CONFIG)/libgrpc++_reflection_codegen.a $(LIBDIR)/$(CONFIG)/libgrpc++_test.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_cli_libs.a $(LIBDIR)/$(CONFIG)/libinterop_client_helper.a $(LIBDIR)/$(CONFIG)/libinterop_client_main.a $(LIBDIR)/$(CONFIG)/libinterop_server_helper.a $(LIBDIR)/$(CONFIG)/libinterop_server_lib.a $(LIBDIR)/$(CONFIG)/libinterop_server_main.a $(LIBDIR)/$(CONFIG)/libqps.a $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl_aes_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_asn1_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_base64_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_bio_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_bn_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_bytestring_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_aead_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_cipher_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_cmac_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_ed25519_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_x25519_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_dh_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_digest_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_ec_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_ecdsa_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_err_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_evp_extra_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_evp_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_pbkdf_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_hmac_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_pkcs12_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_pkcs8_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_poly1305_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_rsa_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_x509_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_ssl_test_lib.a
 else
-privatelibs_cxx:  $(LIBDIR)/$(CONFIG)/libgrpc++_reflection_codegen.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_cli_libs.a $(LIBDIR)/$(CONFIG)/libinterop_client_helper.a $(LIBDIR)/$(CONFIG)/libinterop_client_main.a $(LIBDIR)/$(CONFIG)/libinterop_server_helper.a $(LIBDIR)/$(CONFIG)/libinterop_server_lib.a $(LIBDIR)/$(CONFIG)/libinterop_server_main.a $(LIBDIR)/$(CONFIG)/libqps.a
+privatelibs_cxx:  $(LIBDIR)/$(CONFIG)/libgrpc++_reflection_codegen.a $(LIBDIR)/$(CONFIG)/libgrpc++_test.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_cli_libs.a $(LIBDIR)/$(CONFIG)/libinterop_client_helper.a $(LIBDIR)/$(CONFIG)/libinterop_client_main.a $(LIBDIR)/$(CONFIG)/libinterop_server_helper.a $(LIBDIR)/$(CONFIG)/libinterop_server_lib.a $(LIBDIR)/$(CONFIG)/libinterop_server_main.a $(LIBDIR)/$(CONFIG)/libqps.a
 endif
 
 
@@ -2692,26 +2692,26 @@ LIBGRPC_SRC = \
     src/core/lib/tsi/ssl_transport_security.c \
     src/core/lib/tsi/transport_security.c \
     src/core/ext/transport/chttp2/client/secure/secure_channel_create.c \
-    src/core/ext/client_config/channel_connectivity.c \
-    src/core/ext/client_config/client_channel.c \
-    src/core/ext/client_config/client_channel_factory.c \
-    src/core/ext/client_config/client_config_plugin.c \
-    src/core/ext/client_config/connector.c \
-    src/core/ext/client_config/default_initial_connect_string.c \
-    src/core/ext/client_config/http_connect_handshaker.c \
-    src/core/ext/client_config/initial_connect_string.c \
-    src/core/ext/client_config/lb_policy.c \
-    src/core/ext/client_config/lb_policy_factory.c \
-    src/core/ext/client_config/lb_policy_registry.c \
-    src/core/ext/client_config/method_config.c \
-    src/core/ext/client_config/parse_address.c \
-    src/core/ext/client_config/resolver.c \
-    src/core/ext/client_config/resolver_factory.c \
-    src/core/ext/client_config/resolver_registry.c \
-    src/core/ext/client_config/resolver_result.c \
-    src/core/ext/client_config/subchannel.c \
-    src/core/ext/client_config/subchannel_index.c \
-    src/core/ext/client_config/uri_parser.c \
+    src/core/ext/client_channel/channel_connectivity.c \
+    src/core/ext/client_channel/client_channel.c \
+    src/core/ext/client_channel/client_channel_factory.c \
+    src/core/ext/client_channel/client_channel_plugin.c \
+    src/core/ext/client_channel/connector.c \
+    src/core/ext/client_channel/default_initial_connect_string.c \
+    src/core/ext/client_channel/http_connect_handshaker.c \
+    src/core/ext/client_channel/initial_connect_string.c \
+    src/core/ext/client_channel/lb_policy.c \
+    src/core/ext/client_channel/lb_policy_factory.c \
+    src/core/ext/client_channel/lb_policy_registry.c \
+    src/core/ext/client_channel/method_config.c \
+    src/core/ext/client_channel/parse_address.c \
+    src/core/ext/client_channel/resolver.c \
+    src/core/ext/client_channel/resolver_factory.c \
+    src/core/ext/client_channel/resolver_registry.c \
+    src/core/ext/client_channel/resolver_result.c \
+    src/core/ext/client_channel/subchannel.c \
+    src/core/ext/client_channel/subchannel_index.c \
+    src/core/ext/client_channel/uri_parser.c \
     src/core/ext/transport/chttp2/server/insecure/server_chttp2.c \
     src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c \
     src/core/ext/transport/chttp2/client/insecure/channel_create.c \
@@ -2945,26 +2945,26 @@ LIBGRPC_CRONET_SRC = \
     src/core/ext/transport/chttp2/transport/varint.c \
     src/core/ext/transport/chttp2/transport/writing.c \
     src/core/ext/transport/chttp2/alpn/alpn.c \
-    src/core/ext/client_config/channel_connectivity.c \
-    src/core/ext/client_config/client_channel.c \
-    src/core/ext/client_config/client_channel_factory.c \
-    src/core/ext/client_config/client_config_plugin.c \
-    src/core/ext/client_config/connector.c \
-    src/core/ext/client_config/default_initial_connect_string.c \
-    src/core/ext/client_config/http_connect_handshaker.c \
-    src/core/ext/client_config/initial_connect_string.c \
-    src/core/ext/client_config/lb_policy.c \
-    src/core/ext/client_config/lb_policy_factory.c \
-    src/core/ext/client_config/lb_policy_registry.c \
-    src/core/ext/client_config/method_config.c \
-    src/core/ext/client_config/parse_address.c \
-    src/core/ext/client_config/resolver.c \
-    src/core/ext/client_config/resolver_factory.c \
-    src/core/ext/client_config/resolver_registry.c \
-    src/core/ext/client_config/resolver_result.c \
-    src/core/ext/client_config/subchannel.c \
-    src/core/ext/client_config/subchannel_index.c \
-    src/core/ext/client_config/uri_parser.c \
+    src/core/ext/client_channel/channel_connectivity.c \
+    src/core/ext/client_channel/client_channel.c \
+    src/core/ext/client_channel/client_channel_factory.c \
+    src/core/ext/client_channel/client_channel_plugin.c \
+    src/core/ext/client_channel/connector.c \
+    src/core/ext/client_channel/default_initial_connect_string.c \
+    src/core/ext/client_channel/http_connect_handshaker.c \
+    src/core/ext/client_channel/initial_connect_string.c \
+    src/core/ext/client_channel/lb_policy.c \
+    src/core/ext/client_channel/lb_policy_factory.c \
+    src/core/ext/client_channel/lb_policy_registry.c \
+    src/core/ext/client_channel/method_config.c \
+    src/core/ext/client_channel/parse_address.c \
+    src/core/ext/client_channel/resolver.c \
+    src/core/ext/client_channel/resolver_factory.c \
+    src/core/ext/client_channel/resolver_registry.c \
+    src/core/ext/client_channel/resolver_result.c \
+    src/core/ext/client_channel/subchannel.c \
+    src/core/ext/client_channel/subchannel_index.c \
+    src/core/ext/client_channel/uri_parser.c \
     src/core/lib/http/httpcli_security_connector.c \
     src/core/lib/security/context/security_context.c \
     src/core/lib/security/credentials/composite/composite_credentials.c \
@@ -3409,26 +3409,26 @@ LIBGRPC_UNSECURE_SRC = \
     src/core/ext/transport/chttp2/alpn/alpn.c \
     src/core/ext/transport/chttp2/client/insecure/channel_create.c \
     src/core/ext/transport/chttp2/client/insecure/channel_create_posix.c \
-    src/core/ext/client_config/channel_connectivity.c \
-    src/core/ext/client_config/client_channel.c \
-    src/core/ext/client_config/client_channel_factory.c \
-    src/core/ext/client_config/client_config_plugin.c \
-    src/core/ext/client_config/connector.c \
-    src/core/ext/client_config/default_initial_connect_string.c \
-    src/core/ext/client_config/http_connect_handshaker.c \
-    src/core/ext/client_config/initial_connect_string.c \
-    src/core/ext/client_config/lb_policy.c \
-    src/core/ext/client_config/lb_policy_factory.c \
-    src/core/ext/client_config/lb_policy_registry.c \
-    src/core/ext/client_config/method_config.c \
-    src/core/ext/client_config/parse_address.c \
-    src/core/ext/client_config/resolver.c \
-    src/core/ext/client_config/resolver_factory.c \
-    src/core/ext/client_config/resolver_registry.c \
-    src/core/ext/client_config/resolver_result.c \
-    src/core/ext/client_config/subchannel.c \
-    src/core/ext/client_config/subchannel_index.c \
-    src/core/ext/client_config/uri_parser.c \
+    src/core/ext/client_channel/channel_connectivity.c \
+    src/core/ext/client_channel/client_channel.c \
+    src/core/ext/client_channel/client_channel_factory.c \
+    src/core/ext/client_channel/client_channel_plugin.c \
+    src/core/ext/client_channel/connector.c \
+    src/core/ext/client_channel/default_initial_connect_string.c \
+    src/core/ext/client_channel/http_connect_handshaker.c \
+    src/core/ext/client_channel/initial_connect_string.c \
+    src/core/ext/client_channel/lb_policy.c \
+    src/core/ext/client_channel/lb_policy_factory.c \
+    src/core/ext/client_channel/lb_policy_registry.c \
+    src/core/ext/client_channel/method_config.c \
+    src/core/ext/client_channel/parse_address.c \
+    src/core/ext/client_channel/resolver.c \
+    src/core/ext/client_channel/resolver_factory.c \
+    src/core/ext/client_channel/resolver_registry.c \
+    src/core/ext/client_channel/resolver_result.c \
+    src/core/ext/client_channel/subchannel.c \
+    src/core/ext/client_channel/subchannel_index.c \
+    src/core/ext/client_channel/uri_parser.c \
     src/core/ext/resolver/dns/native/dns_resolver.c \
     src/core/ext/resolver/sockaddr/sockaddr_resolver.c \
     src/core/ext/load_reporting/load_reporting.c \
@@ -7467,7 +7467,7 @@ endif
 
 
 DNS_RESOLVER_CONNECTIVITY_TEST_SRC = \
-    test/core/client_config/resolvers/dns_resolver_connectivity_test.c \
+    test/core/client_channel/resolvers/dns_resolver_connectivity_test.c \
 
 DNS_RESOLVER_CONNECTIVITY_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(DNS_RESOLVER_CONNECTIVITY_TEST_SRC))))
 ifeq ($(NO_SECURE),true)
@@ -7487,7 +7487,7 @@ $(BINDIR)/$(CONFIG)/dns_resolver_connectivity_test: $(DNS_RESOLVER_CONNECTIVITY_
 
 endif
 
-$(OBJDIR)/$(CONFIG)/test/core/client_config/resolvers/dns_resolver_connectivity_test.o:  $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+$(OBJDIR)/$(CONFIG)/test/core/client_channel/resolvers/dns_resolver_connectivity_test.o:  $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
 
 deps_dns_resolver_connectivity_test: $(DNS_RESOLVER_CONNECTIVITY_TEST_OBJS:.o=.dep)
 
@@ -7499,7 +7499,7 @@ endif
 
 
 DNS_RESOLVER_TEST_SRC = \
-    test/core/client_config/resolvers/dns_resolver_test.c \
+    test/core/client_channel/resolvers/dns_resolver_test.c \
 
 DNS_RESOLVER_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(DNS_RESOLVER_TEST_SRC))))
 ifeq ($(NO_SECURE),true)
@@ -7519,7 +7519,7 @@ $(BINDIR)/$(CONFIG)/dns_resolver_test: $(DNS_RESOLVER_TEST_OBJS) $(LIBDIR)/$(CON
 
 endif
 
-$(OBJDIR)/$(CONFIG)/test/core/client_config/resolvers/dns_resolver_test.o:  $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+$(OBJDIR)/$(CONFIG)/test/core/client_channel/resolvers/dns_resolver_test.o:  $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
 
 deps_dns_resolver_test: $(DNS_RESOLVER_TEST_OBJS:.o=.dep)
 
@@ -9675,7 +9675,7 @@ endif
 
 
 LB_POLICIES_TEST_SRC = \
-    test/core/client_config/lb_policies_test.c \
+    test/core/client_channel/lb_policies_test.c \
 
 LB_POLICIES_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LB_POLICIES_TEST_SRC))))
 ifeq ($(NO_SECURE),true)
@@ -9695,7 +9695,7 @@ $(BINDIR)/$(CONFIG)/lb_policies_test: $(LB_POLICIES_TEST_OBJS) $(LIBDIR)/$(CONFI
 
 endif
 
-$(OBJDIR)/$(CONFIG)/test/core/client_config/lb_policies_test.o:  $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+$(OBJDIR)/$(CONFIG)/test/core/client_channel/lb_policies_test.o:  $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
 
 deps_lb_policies_test: $(LB_POLICIES_TEST_OBJS:.o=.dep)
 
@@ -10283,7 +10283,7 @@ endif
 
 
 SET_INITIAL_CONNECT_STRING_TEST_SRC = \
-    test/core/client_config/set_initial_connect_string_test.c \
+    test/core/client_channel/set_initial_connect_string_test.c \
 
 SET_INITIAL_CONNECT_STRING_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(SET_INITIAL_CONNECT_STRING_TEST_SRC))))
 ifeq ($(NO_SECURE),true)
@@ -10303,7 +10303,7 @@ $(BINDIR)/$(CONFIG)/set_initial_connect_string_test: $(SET_INITIAL_CONNECT_STRIN
 
 endif
 
-$(OBJDIR)/$(CONFIG)/test/core/client_config/set_initial_connect_string_test.o:  $(LIBDIR)/$(CONFIG)/libtest_tcp_server.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+$(OBJDIR)/$(CONFIG)/test/core/client_channel/set_initial_connect_string_test.o:  $(LIBDIR)/$(CONFIG)/libtest_tcp_server.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
 
 deps_set_initial_connect_string_test: $(SET_INITIAL_CONNECT_STRING_TEST_OBJS:.o=.dep)
 
@@ -10315,7 +10315,7 @@ endif
 
 
 SOCKADDR_RESOLVER_TEST_SRC = \
-    test/core/client_config/resolvers/sockaddr_resolver_test.c \
+    test/core/client_channel/resolvers/sockaddr_resolver_test.c \
 
 SOCKADDR_RESOLVER_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(SOCKADDR_RESOLVER_TEST_SRC))))
 ifeq ($(NO_SECURE),true)
@@ -10335,7 +10335,7 @@ $(BINDIR)/$(CONFIG)/sockaddr_resolver_test: $(SOCKADDR_RESOLVER_TEST_OBJS) $(LIB
 
 endif
 
-$(OBJDIR)/$(CONFIG)/test/core/client_config/resolvers/sockaddr_resolver_test.o:  $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+$(OBJDIR)/$(CONFIG)/test/core/client_channel/resolvers/sockaddr_resolver_test.o:  $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
 
 deps_sockaddr_resolver_test: $(SOCKADDR_RESOLVER_TEST_OBJS:.o=.dep)
 
@@ -10763,7 +10763,7 @@ endif
 
 
 URI_FUZZER_TEST_SRC = \
-    test/core/client_config/uri_fuzzer_test.c \
+    test/core/client_channel/uri_fuzzer_test.c \
 
 URI_FUZZER_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(URI_FUZZER_TEST_SRC))))
 ifeq ($(NO_SECURE),true)
@@ -10783,7 +10783,7 @@ $(BINDIR)/$(CONFIG)/uri_fuzzer_test: $(URI_FUZZER_TEST_OBJS) $(LIBDIR)/$(CONFIG)
 
 endif
 
-$(OBJDIR)/$(CONFIG)/test/core/client_config/uri_fuzzer_test.o:  $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+$(OBJDIR)/$(CONFIG)/test/core/client_channel/uri_fuzzer_test.o:  $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
 
 deps_uri_fuzzer_test: $(URI_FUZZER_TEST_OBJS:.o=.dep)
 
@@ -10795,7 +10795,7 @@ endif
 
 
 URI_PARSER_TEST_SRC = \
-    test/core/client_config/uri_parser_test.c \
+    test/core/client_channel/uri_parser_test.c \
 
 URI_PARSER_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(URI_PARSER_TEST_SRC))))
 ifeq ($(NO_SECURE),true)
@@ -10815,7 +10815,7 @@ $(BINDIR)/$(CONFIG)/uri_parser_test: $(URI_PARSER_TEST_OBJS) $(LIBDIR)/$(CONFIG)
 
 endif
 
-$(OBJDIR)/$(CONFIG)/test/core/client_config/uri_parser_test.o:  $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+$(OBJDIR)/$(CONFIG)/test/core/client_channel/uri_parser_test.o:  $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
 
 deps_uri_parser_test: $(URI_PARSER_TEST_OBJS:.o=.dep)
 
@@ -12208,16 +12208,16 @@ $(BINDIR)/$(CONFIG)/interop_test: protobuf_dep_error
 
 else
 
-$(BINDIR)/$(CONFIG)/interop_test: $(PROTOBUF_DEP) $(INTEROP_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+$(BINDIR)/$(CONFIG)/interop_test: $(PROTOBUF_DEP) $(INTEROP_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a
 	$(E) "[LD]      Linking $@"
 	$(Q) mkdir -p `dirname $@`
-	$(Q) $(LDXX) $(LDFLAGS) $(INTEROP_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/interop_test
+	$(Q) $(LDXX) $(LDFLAGS) $(INTEROP_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/interop_test
 
 endif
 
 endif
 
-$(OBJDIR)/$(CONFIG)/test/cpp/interop/interop_test.o:  $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+$(OBJDIR)/$(CONFIG)/test/cpp/interop/interop_test.o:  $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a
 
 deps_interop_test: $(INTEROP_TEST_OBJS:.o=.dep)
 
@@ -15783,7 +15783,7 @@ endif
 
 
 URI_FUZZER_TEST_ONE_ENTRY_SRC = \
-    test/core/client_config/uri_fuzzer_test.c \
+    test/core/client_channel/uri_fuzzer_test.c \
     test/core/util/one_corpus_entry_fuzzer.c \
 
 URI_FUZZER_TEST_ONE_ENTRY_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(URI_FUZZER_TEST_ONE_ENTRY_SRC))))
@@ -15804,7 +15804,7 @@ $(BINDIR)/$(CONFIG)/uri_fuzzer_test_one_entry: $(URI_FUZZER_TEST_ONE_ENTRY_OBJS)
 
 endif
 
-$(OBJDIR)/$(CONFIG)/test/core/client_config/uri_fuzzer_test.o:  $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+$(OBJDIR)/$(CONFIG)/test/core/client_channel/uri_fuzzer_test.o:  $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
 
 $(OBJDIR)/$(CONFIG)/test/core/util/one_corpus_entry_fuzzer.o:  $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
 
diff --git a/binding.gyp b/binding.gyp
index 397bb1b639b8d20fd08ff5bed2d47eee9e438307..8b23cc2e7dfa6a6e72f2d63e85fc3975ccebcd06 100644
--- a/binding.gyp
+++ b/binding.gyp
@@ -710,26 +710,26 @@
         'src/core/lib/tsi/ssl_transport_security.c',
         'src/core/lib/tsi/transport_security.c',
         'src/core/ext/transport/chttp2/client/secure/secure_channel_create.c',
-        'src/core/ext/client_config/channel_connectivity.c',
-        'src/core/ext/client_config/client_channel.c',
-        'src/core/ext/client_config/client_channel_factory.c',
-        'src/core/ext/client_config/client_config_plugin.c',
-        'src/core/ext/client_config/connector.c',
-        'src/core/ext/client_config/default_initial_connect_string.c',
-        'src/core/ext/client_config/http_connect_handshaker.c',
-        'src/core/ext/client_config/initial_connect_string.c',
-        'src/core/ext/client_config/lb_policy.c',
-        'src/core/ext/client_config/lb_policy_factory.c',
-        'src/core/ext/client_config/lb_policy_registry.c',
-        'src/core/ext/client_config/method_config.c',
-        'src/core/ext/client_config/parse_address.c',
-        'src/core/ext/client_config/resolver.c',
-        'src/core/ext/client_config/resolver_factory.c',
-        'src/core/ext/client_config/resolver_registry.c',
-        'src/core/ext/client_config/resolver_result.c',
-        'src/core/ext/client_config/subchannel.c',
-        'src/core/ext/client_config/subchannel_index.c',
-        'src/core/ext/client_config/uri_parser.c',
+        'src/core/ext/client_channel/channel_connectivity.c',
+        'src/core/ext/client_channel/client_channel.c',
+        'src/core/ext/client_channel/client_channel_factory.c',
+        'src/core/ext/client_channel/client_channel_plugin.c',
+        'src/core/ext/client_channel/connector.c',
+        'src/core/ext/client_channel/default_initial_connect_string.c',
+        'src/core/ext/client_channel/http_connect_handshaker.c',
+        'src/core/ext/client_channel/initial_connect_string.c',
+        'src/core/ext/client_channel/lb_policy.c',
+        'src/core/ext/client_channel/lb_policy_factory.c',
+        'src/core/ext/client_channel/lb_policy_registry.c',
+        'src/core/ext/client_channel/method_config.c',
+        'src/core/ext/client_channel/parse_address.c',
+        'src/core/ext/client_channel/resolver.c',
+        'src/core/ext/client_channel/resolver_factory.c',
+        'src/core/ext/client_channel/resolver_registry.c',
+        'src/core/ext/client_channel/resolver_result.c',
+        'src/core/ext/client_channel/subchannel.c',
+        'src/core/ext/client_channel/subchannel_index.c',
+        'src/core/ext/client_channel/uri_parser.c',
         'src/core/ext/transport/chttp2/server/insecure/server_chttp2.c',
         'src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c',
         'src/core/ext/transport/chttp2/client/insecure/channel_create.c',
diff --git a/build.yaml b/build.yaml
index 2a066531036e2baa6e3e64d213c1717f5aba7c97..8594380658b880d2111b01be3aa7ad655c5423c6 100644
--- a/build.yaml
+++ b/build.yaml
@@ -348,47 +348,47 @@ filegroups:
   - gpr
   uses:
   - grpc_codegen
-- name: grpc_client_config
+- name: grpc_client_channel
   headers:
-  - src/core/ext/client_config/client_channel.h
-  - src/core/ext/client_config/client_channel_factory.h
-  - src/core/ext/client_config/connector.h
-  - src/core/ext/client_config/http_connect_handshaker.h
-  - src/core/ext/client_config/initial_connect_string.h
-  - src/core/ext/client_config/lb_policy.h
-  - src/core/ext/client_config/lb_policy_factory.h
-  - src/core/ext/client_config/lb_policy_registry.h
-  - src/core/ext/client_config/method_config.h
-  - src/core/ext/client_config/parse_address.h
-  - src/core/ext/client_config/resolver.h
-  - src/core/ext/client_config/resolver_factory.h
-  - src/core/ext/client_config/resolver_registry.h
-  - src/core/ext/client_config/resolver_result.h
-  - src/core/ext/client_config/subchannel.h
-  - src/core/ext/client_config/subchannel_index.h
-  - src/core/ext/client_config/uri_parser.h
-  src:
-  - src/core/ext/client_config/channel_connectivity.c
-  - src/core/ext/client_config/client_channel.c
-  - src/core/ext/client_config/client_channel_factory.c
-  - src/core/ext/client_config/client_config_plugin.c
-  - src/core/ext/client_config/connector.c
-  - src/core/ext/client_config/default_initial_connect_string.c
-  - src/core/ext/client_config/http_connect_handshaker.c
-  - src/core/ext/client_config/initial_connect_string.c
-  - src/core/ext/client_config/lb_policy.c
-  - src/core/ext/client_config/lb_policy_factory.c
-  - src/core/ext/client_config/lb_policy_registry.c
-  - src/core/ext/client_config/method_config.c
-  - src/core/ext/client_config/parse_address.c
-  - src/core/ext/client_config/resolver.c
-  - src/core/ext/client_config/resolver_factory.c
-  - src/core/ext/client_config/resolver_registry.c
-  - src/core/ext/client_config/resolver_result.c
-  - src/core/ext/client_config/subchannel.c
-  - src/core/ext/client_config/subchannel_index.c
-  - src/core/ext/client_config/uri_parser.c
-  plugin: grpc_client_config
+  - src/core/ext/client_channel/client_channel.h
+  - src/core/ext/client_channel/client_channel_factory.h
+  - src/core/ext/client_channel/connector.h
+  - src/core/ext/client_channel/http_connect_handshaker.h
+  - src/core/ext/client_channel/initial_connect_string.h
+  - src/core/ext/client_channel/lb_policy.h
+  - src/core/ext/client_channel/lb_policy_factory.h
+  - src/core/ext/client_channel/lb_policy_registry.h
+  - src/core/ext/client_channel/method_config.h
+  - src/core/ext/client_channel/parse_address.h
+  - src/core/ext/client_channel/resolver.h
+  - src/core/ext/client_channel/resolver_factory.h
+  - src/core/ext/client_channel/resolver_registry.h
+  - src/core/ext/client_channel/resolver_result.h
+  - src/core/ext/client_channel/subchannel.h
+  - src/core/ext/client_channel/subchannel_index.h
+  - src/core/ext/client_channel/uri_parser.h
+  src:
+  - src/core/ext/client_channel/channel_connectivity.c
+  - src/core/ext/client_channel/client_channel.c
+  - src/core/ext/client_channel/client_channel_factory.c
+  - src/core/ext/client_channel/client_channel_plugin.c
+  - src/core/ext/client_channel/connector.c
+  - src/core/ext/client_channel/default_initial_connect_string.c
+  - src/core/ext/client_channel/http_connect_handshaker.c
+  - src/core/ext/client_channel/initial_connect_string.c
+  - src/core/ext/client_channel/lb_policy.c
+  - src/core/ext/client_channel/lb_policy_factory.c
+  - src/core/ext/client_channel/lb_policy_registry.c
+  - src/core/ext/client_channel/method_config.c
+  - src/core/ext/client_channel/parse_address.c
+  - src/core/ext/client_channel/resolver.c
+  - src/core/ext/client_channel/resolver_factory.c
+  - src/core/ext/client_channel/resolver_registry.c
+  - src/core/ext/client_channel/resolver_result.c
+  - src/core/ext/client_channel/subchannel.c
+  - src/core/ext/client_channel/subchannel_index.c
+  - src/core/ext/client_channel/uri_parser.c
+  plugin: grpc_client_channel
   uses:
   - grpc_base
 - name: grpc_codegen
@@ -413,7 +413,7 @@ filegroups:
   plugin: grpc_lb_policy_grpclb
   uses:
   - grpc_base
-  - grpc_client_config
+  - grpc_client_channel
   - nanopb
 - name: grpc_lb_policy_pick_first
   src:
@@ -421,14 +421,14 @@ filegroups:
   plugin: grpc_lb_policy_pick_first
   uses:
   - grpc_base
-  - grpc_client_config
+  - grpc_client_channel
 - name: grpc_lb_policy_round_robin
   src:
   - src/core/ext/lb_policy/round_robin/round_robin.c
   plugin: grpc_lb_policy_round_robin
   uses:
   - grpc_base
-  - grpc_client_config
+  - grpc_client_channel
 - name: grpc_load_reporting
   headers:
   - src/core/ext/load_reporting/load_reporting.h
@@ -445,14 +445,14 @@ filegroups:
   plugin: grpc_resolver_dns_native
   uses:
   - grpc_base
-  - grpc_client_config
+  - grpc_client_channel
 - name: grpc_resolver_sockaddr
   src:
   - src/core/ext/resolver/sockaddr/sockaddr_resolver.c
   plugin: grpc_resolver_sockaddr
   uses:
   - grpc_base
-  - grpc_client_config
+  - grpc_client_channel
 - name: grpc_secure
   public_headers:
   - include/grpc/grpc_security.h
@@ -603,14 +603,14 @@ filegroups:
   uses:
   - grpc_transport_chttp2
   - grpc_base
-  - grpc_client_config
+  - grpc_client_channel
 - name: grpc_transport_chttp2_client_secure
   src:
   - src/core/ext/transport/chttp2/client/secure/secure_channel_create.c
   uses:
   - grpc_transport_chttp2
   - grpc_base
-  - grpc_client_config
+  - grpc_client_channel
   - grpc_secure
 - name: grpc_transport_chttp2_server_insecure
   src:
@@ -1027,7 +1027,7 @@ libs:
   src:
   - src/proto/grpc/reflection/v1alpha/reflection.proto
 - name: grpc++_test
-  build: test
+  build: private
   language: c++
   headers:
   - include/grpc++/test/server_context_test_spouse.h
@@ -1494,7 +1494,7 @@ targets:
   build: test
   language: c
   src:
-  - test/core/client_config/resolvers/dns_resolver_connectivity_test.c
+  - test/core/client_channel/resolvers/dns_resolver_connectivity_test.c
   deps:
   - grpc_test_util
   - grpc
@@ -1504,7 +1504,7 @@ targets:
   build: test
   language: c
   src:
-  - test/core/client_config/resolvers/dns_resolver_test.c
+  - test/core/client_channel/resolvers/dns_resolver_test.c
   deps:
   - grpc_test_util
   - grpc
@@ -2198,7 +2198,7 @@ targets:
   build: test
   language: c
   src:
-  - test/core/client_config/lb_policies_test.c
+  - test/core/client_channel/lb_policies_test.c
   deps:
   - grpc_test_util
   - grpc
@@ -2409,7 +2409,7 @@ targets:
   build: test
   language: c
   src:
-  - test/core/client_config/set_initial_connect_string_test.c
+  - test/core/client_channel/set_initial_connect_string_test.c
   deps:
   - test_tcp_server
   - grpc_test_util
@@ -2420,7 +2420,7 @@ targets:
   build: test
   language: c
   src:
-  - test/core/client_config/resolvers/sockaddr_resolver_test.c
+  - test/core/client_channel/resolvers/sockaddr_resolver_test.c
   deps:
   - grpc_test_util
   - grpc
@@ -2586,20 +2586,20 @@ targets:
   build: fuzzer
   language: c
   src:
-  - test/core/client_config/uri_fuzzer_test.c
+  - test/core/client_channel/uri_fuzzer_test.c
   deps:
   - grpc_test_util
   - grpc
   - gpr_test_util
   - gpr
   corpus_dirs:
-  - test/core/client_config/uri_corpus
+  - test/core/client_channel/uri_corpus
   maxlen: 128
 - name: uri_parser_test
   build: test
   language: c
   src:
-  - test/core/client_config/uri_parser_test.c
+  - test/core/client_channel/uri_parser_test.c
   deps:
   - grpc_test_util
   - grpc
@@ -3041,6 +3041,7 @@ targets:
   - grpc
   - gpr_test_util
   - gpr
+  - grpc++_test_config
   platforms:
   - mac
   - linux
diff --git a/config.m4 b/config.m4
index d8716753b66d2d33e3a9fb87d97d4418efd26621..3258c690c8be1582b70076b45c69fa2bd691cd43 100644
--- a/config.m4
+++ b/config.m4
@@ -229,26 +229,26 @@ if test "$PHP_GRPC" != "no"; then
     src/core/lib/tsi/ssl_transport_security.c \
     src/core/lib/tsi/transport_security.c \
     src/core/ext/transport/chttp2/client/secure/secure_channel_create.c \
-    src/core/ext/client_config/channel_connectivity.c \
-    src/core/ext/client_config/client_channel.c \
-    src/core/ext/client_config/client_channel_factory.c \
-    src/core/ext/client_config/client_config_plugin.c \
-    src/core/ext/client_config/connector.c \
-    src/core/ext/client_config/default_initial_connect_string.c \
-    src/core/ext/client_config/http_connect_handshaker.c \
-    src/core/ext/client_config/initial_connect_string.c \
-    src/core/ext/client_config/lb_policy.c \
-    src/core/ext/client_config/lb_policy_factory.c \
-    src/core/ext/client_config/lb_policy_registry.c \
-    src/core/ext/client_config/method_config.c \
-    src/core/ext/client_config/parse_address.c \
-    src/core/ext/client_config/resolver.c \
-    src/core/ext/client_config/resolver_factory.c \
-    src/core/ext/client_config/resolver_registry.c \
-    src/core/ext/client_config/resolver_result.c \
-    src/core/ext/client_config/subchannel.c \
-    src/core/ext/client_config/subchannel_index.c \
-    src/core/ext/client_config/uri_parser.c \
+    src/core/ext/client_channel/channel_connectivity.c \
+    src/core/ext/client_channel/client_channel.c \
+    src/core/ext/client_channel/client_channel_factory.c \
+    src/core/ext/client_channel/client_channel_plugin.c \
+    src/core/ext/client_channel/connector.c \
+    src/core/ext/client_channel/default_initial_connect_string.c \
+    src/core/ext/client_channel/http_connect_handshaker.c \
+    src/core/ext/client_channel/initial_connect_string.c \
+    src/core/ext/client_channel/lb_policy.c \
+    src/core/ext/client_channel/lb_policy_factory.c \
+    src/core/ext/client_channel/lb_policy_registry.c \
+    src/core/ext/client_channel/method_config.c \
+    src/core/ext/client_channel/parse_address.c \
+    src/core/ext/client_channel/resolver.c \
+    src/core/ext/client_channel/resolver_factory.c \
+    src/core/ext/client_channel/resolver_registry.c \
+    src/core/ext/client_channel/resolver_result.c \
+    src/core/ext/client_channel/subchannel.c \
+    src/core/ext/client_channel/subchannel_index.c \
+    src/core/ext/client_channel/uri_parser.c \
     src/core/ext/transport/chttp2/server/insecure/server_chttp2.c \
     src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c \
     src/core/ext/transport/chttp2/client/insecure/channel_create.c \
@@ -587,7 +587,7 @@ if test "$PHP_GRPC" != "no"; then
   PHP_ADD_BUILD_DIR($ext_builddir/src/boringssl)
   PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/census)
   PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/census/gen)
-  PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/client_config)
+  PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/client_channel)
   PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/lb_policy/grpclb)
   PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1)
   PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/lb_policy/pick_first)
diff --git a/examples/node/dynamic_codegen/route_guide/route_guide_client.js b/examples/node/dynamic_codegen/route_guide/route_guide_client.js
index 775b9addbfc84ad45726265918c26d744a472ed9..b7550b201a8b7a0317a68515dcec8f927cbd1697 100644
--- a/examples/node/dynamic_codegen/route_guide/route_guide_client.js
+++ b/examples/node/dynamic_codegen/route_guide/route_guide_client.js
@@ -55,6 +55,7 @@ function runGetFeature(callback) {
   function featureCallback(error, feature) {
     if (error) {
       callback(error);
+      return;
     }
     if (feature.name === '') {
       console.log('Found no feature at ' +
@@ -117,13 +118,17 @@ function runRecordRoute(callback) {
     string: 'db_path'
   });
   fs.readFile(path.resolve(argv.db_path), function(err, data) {
-    if (err) callback(err);
+    if (err) {
+      callback(err);
+      return;
+    }
     var feature_list = JSON.parse(data);
 
     var num_points = 10;
     var call = client.recordRoute(function(error, stats) {
       if (error) {
         callback(error);
+        return;
       }
       console.log('Finished trip with', stats.point_count, 'points');
       console.log('Passed', stats.feature_count, 'features');
diff --git a/examples/node/static_codegen/route_guide/route_guide_client.js b/examples/node/static_codegen/route_guide/route_guide_client.js
index ecde78616b5f299777900137ff3121781a79aff7..e16de44a1acd6ada2469bf79b1249f07620a45ff 100644
--- a/examples/node/static_codegen/route_guide/route_guide_client.js
+++ b/examples/node/static_codegen/route_guide/route_guide_client.js
@@ -56,6 +56,7 @@ function runGetFeature(callback) {
   function featureCallback(error, feature) {
     if (error) {
       callback(error);
+      return;
     }
     var latitude = feature.getLocation().getLatitude();
     var longitude = feature.getLocation().getLongitude();
@@ -115,7 +116,10 @@ function runRecordRoute(callback) {
     string: 'db_path'
   });
   fs.readFile(path.resolve(argv.db_path), function(err, data) {
-    if (err) callback(err);
+    if (err) {
+      callback(err);
+      return;
+    }
     // Transform the loaded features to Feature objects
     var feature_list = _.map(JSON.parse(data), function(value) {
       var feature = new messages.Feature();
@@ -131,6 +135,7 @@ function runRecordRoute(callback) {
     var call = client.recordRoute(function(error, stats) {
       if (error) {
         callback(error);
+        return;
       }
       console.log('Finished trip with', stats.getPointCount(), 'points');
       console.log('Passed', stats.getFeatureCount(), 'features');
diff --git a/gRPC-Core.podspec b/gRPC-Core.podspec
index bb1bbc5f0eb777dcceae0d48c15de29500369d9a..1ee781ecdfa5d1e0bffab3b7a8d82b7f30b5072b 100644
--- a/gRPC-Core.podspec
+++ b/gRPC-Core.podspec
@@ -378,23 +378,23 @@ Pod::Spec.new do |s|
                       'src/core/lib/tsi/ssl_types.h',
                       'src/core/lib/tsi/transport_security.h',
                       'src/core/lib/tsi/transport_security_interface.h',
-                      'src/core/ext/client_config/client_channel.h',
-                      'src/core/ext/client_config/client_channel_factory.h',
-                      'src/core/ext/client_config/connector.h',
-                      'src/core/ext/client_config/http_connect_handshaker.h',
-                      'src/core/ext/client_config/initial_connect_string.h',
-                      'src/core/ext/client_config/lb_policy.h',
-                      'src/core/ext/client_config/lb_policy_factory.h',
-                      'src/core/ext/client_config/lb_policy_registry.h',
-                      'src/core/ext/client_config/method_config.h',
-                      'src/core/ext/client_config/parse_address.h',
-                      'src/core/ext/client_config/resolver.h',
-                      'src/core/ext/client_config/resolver_factory.h',
-                      'src/core/ext/client_config/resolver_registry.h',
-                      'src/core/ext/client_config/resolver_result.h',
-                      'src/core/ext/client_config/subchannel.h',
-                      'src/core/ext/client_config/subchannel_index.h',
-                      'src/core/ext/client_config/uri_parser.h',
+                      'src/core/ext/client_channel/client_channel.h',
+                      'src/core/ext/client_channel/client_channel_factory.h',
+                      'src/core/ext/client_channel/connector.h',
+                      'src/core/ext/client_channel/http_connect_handshaker.h',
+                      'src/core/ext/client_channel/initial_connect_string.h',
+                      'src/core/ext/client_channel/lb_policy.h',
+                      'src/core/ext/client_channel/lb_policy_factory.h',
+                      'src/core/ext/client_channel/lb_policy_registry.h',
+                      'src/core/ext/client_channel/method_config.h',
+                      'src/core/ext/client_channel/parse_address.h',
+                      'src/core/ext/client_channel/resolver.h',
+                      'src/core/ext/client_channel/resolver_factory.h',
+                      'src/core/ext/client_channel/resolver_registry.h',
+                      'src/core/ext/client_channel/resolver_result.h',
+                      'src/core/ext/client_channel/subchannel.h',
+                      'src/core/ext/client_channel/subchannel_index.h',
+                      'src/core/ext/client_channel/uri_parser.h',
                       'src/core/ext/lb_policy/grpclb/grpclb.h',
                       'src/core/ext/lb_policy/grpclb/load_balancer_api.h',
                       'src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h',
@@ -561,26 +561,26 @@ Pod::Spec.new do |s|
                       'src/core/lib/tsi/ssl_transport_security.c',
                       'src/core/lib/tsi/transport_security.c',
                       'src/core/ext/transport/chttp2/client/secure/secure_channel_create.c',
-                      'src/core/ext/client_config/channel_connectivity.c',
-                      'src/core/ext/client_config/client_channel.c',
-                      'src/core/ext/client_config/client_channel_factory.c',
-                      'src/core/ext/client_config/client_config_plugin.c',
-                      'src/core/ext/client_config/connector.c',
-                      'src/core/ext/client_config/default_initial_connect_string.c',
-                      'src/core/ext/client_config/http_connect_handshaker.c',
-                      'src/core/ext/client_config/initial_connect_string.c',
-                      'src/core/ext/client_config/lb_policy.c',
-                      'src/core/ext/client_config/lb_policy_factory.c',
-                      'src/core/ext/client_config/lb_policy_registry.c',
-                      'src/core/ext/client_config/method_config.c',
-                      'src/core/ext/client_config/parse_address.c',
-                      'src/core/ext/client_config/resolver.c',
-                      'src/core/ext/client_config/resolver_factory.c',
-                      'src/core/ext/client_config/resolver_registry.c',
-                      'src/core/ext/client_config/resolver_result.c',
-                      'src/core/ext/client_config/subchannel.c',
-                      'src/core/ext/client_config/subchannel_index.c',
-                      'src/core/ext/client_config/uri_parser.c',
+                      'src/core/ext/client_channel/channel_connectivity.c',
+                      'src/core/ext/client_channel/client_channel.c',
+                      'src/core/ext/client_channel/client_channel_factory.c',
+                      'src/core/ext/client_channel/client_channel_plugin.c',
+                      'src/core/ext/client_channel/connector.c',
+                      'src/core/ext/client_channel/default_initial_connect_string.c',
+                      'src/core/ext/client_channel/http_connect_handshaker.c',
+                      'src/core/ext/client_channel/initial_connect_string.c',
+                      'src/core/ext/client_channel/lb_policy.c',
+                      'src/core/ext/client_channel/lb_policy_factory.c',
+                      'src/core/ext/client_channel/lb_policy_registry.c',
+                      'src/core/ext/client_channel/method_config.c',
+                      'src/core/ext/client_channel/parse_address.c',
+                      'src/core/ext/client_channel/resolver.c',
+                      'src/core/ext/client_channel/resolver_factory.c',
+                      'src/core/ext/client_channel/resolver_registry.c',
+                      'src/core/ext/client_channel/resolver_result.c',
+                      'src/core/ext/client_channel/subchannel.c',
+                      'src/core/ext/client_channel/subchannel_index.c',
+                      'src/core/ext/client_channel/uri_parser.c',
                       'src/core/ext/transport/chttp2/server/insecure/server_chttp2.c',
                       'src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c',
                       'src/core/ext/transport/chttp2/client/insecure/channel_create.c',
@@ -755,23 +755,23 @@ Pod::Spec.new do |s|
                               'src/core/lib/tsi/ssl_types.h',
                               'src/core/lib/tsi/transport_security.h',
                               'src/core/lib/tsi/transport_security_interface.h',
-                              'src/core/ext/client_config/client_channel.h',
-                              'src/core/ext/client_config/client_channel_factory.h',
-                              'src/core/ext/client_config/connector.h',
-                              'src/core/ext/client_config/http_connect_handshaker.h',
-                              'src/core/ext/client_config/initial_connect_string.h',
-                              'src/core/ext/client_config/lb_policy.h',
-                              'src/core/ext/client_config/lb_policy_factory.h',
-                              'src/core/ext/client_config/lb_policy_registry.h',
-                              'src/core/ext/client_config/method_config.h',
-                              'src/core/ext/client_config/parse_address.h',
-                              'src/core/ext/client_config/resolver.h',
-                              'src/core/ext/client_config/resolver_factory.h',
-                              'src/core/ext/client_config/resolver_registry.h',
-                              'src/core/ext/client_config/resolver_result.h',
-                              'src/core/ext/client_config/subchannel.h',
-                              'src/core/ext/client_config/subchannel_index.h',
-                              'src/core/ext/client_config/uri_parser.h',
+                              'src/core/ext/client_channel/client_channel.h',
+                              'src/core/ext/client_channel/client_channel_factory.h',
+                              'src/core/ext/client_channel/connector.h',
+                              'src/core/ext/client_channel/http_connect_handshaker.h',
+                              'src/core/ext/client_channel/initial_connect_string.h',
+                              'src/core/ext/client_channel/lb_policy.h',
+                              'src/core/ext/client_channel/lb_policy_factory.h',
+                              'src/core/ext/client_channel/lb_policy_registry.h',
+                              'src/core/ext/client_channel/method_config.h',
+                              'src/core/ext/client_channel/parse_address.h',
+                              'src/core/ext/client_channel/resolver.h',
+                              'src/core/ext/client_channel/resolver_factory.h',
+                              'src/core/ext/client_channel/resolver_registry.h',
+                              'src/core/ext/client_channel/resolver_result.h',
+                              'src/core/ext/client_channel/subchannel.h',
+                              'src/core/ext/client_channel/subchannel_index.h',
+                              'src/core/ext/client_channel/uri_parser.h',
                               'src/core/ext/lb_policy/grpclb/grpclb.h',
                               'src/core/ext/lb_policy/grpclb/load_balancer_api.h',
                               'src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h',
diff --git a/grpc.gemspec b/grpc.gemspec
index 85172922cc871613b909782b1782fa933bef2ec8..44e0a8700c37e776240aa5ca4961b382db46410f 100755
--- a/grpc.gemspec
+++ b/grpc.gemspec
@@ -298,23 +298,23 @@ Gem::Specification.new do |s|
   s.files += %w( src/core/lib/tsi/ssl_types.h )
   s.files += %w( src/core/lib/tsi/transport_security.h )
   s.files += %w( src/core/lib/tsi/transport_security_interface.h )
-  s.files += %w( src/core/ext/client_config/client_channel.h )
-  s.files += %w( src/core/ext/client_config/client_channel_factory.h )
-  s.files += %w( src/core/ext/client_config/connector.h )
-  s.files += %w( src/core/ext/client_config/http_connect_handshaker.h )
-  s.files += %w( src/core/ext/client_config/initial_connect_string.h )
-  s.files += %w( src/core/ext/client_config/lb_policy.h )
-  s.files += %w( src/core/ext/client_config/lb_policy_factory.h )
-  s.files += %w( src/core/ext/client_config/lb_policy_registry.h )
-  s.files += %w( src/core/ext/client_config/method_config.h )
-  s.files += %w( src/core/ext/client_config/parse_address.h )
-  s.files += %w( src/core/ext/client_config/resolver.h )
-  s.files += %w( src/core/ext/client_config/resolver_factory.h )
-  s.files += %w( src/core/ext/client_config/resolver_registry.h )
-  s.files += %w( src/core/ext/client_config/resolver_result.h )
-  s.files += %w( src/core/ext/client_config/subchannel.h )
-  s.files += %w( src/core/ext/client_config/subchannel_index.h )
-  s.files += %w( src/core/ext/client_config/uri_parser.h )
+  s.files += %w( src/core/ext/client_channel/client_channel.h )
+  s.files += %w( src/core/ext/client_channel/client_channel_factory.h )
+  s.files += %w( src/core/ext/client_channel/connector.h )
+  s.files += %w( src/core/ext/client_channel/http_connect_handshaker.h )
+  s.files += %w( src/core/ext/client_channel/initial_connect_string.h )
+  s.files += %w( src/core/ext/client_channel/lb_policy.h )
+  s.files += %w( src/core/ext/client_channel/lb_policy_factory.h )
+  s.files += %w( src/core/ext/client_channel/lb_policy_registry.h )
+  s.files += %w( src/core/ext/client_channel/method_config.h )
+  s.files += %w( src/core/ext/client_channel/parse_address.h )
+  s.files += %w( src/core/ext/client_channel/resolver.h )
+  s.files += %w( src/core/ext/client_channel/resolver_factory.h )
+  s.files += %w( src/core/ext/client_channel/resolver_registry.h )
+  s.files += %w( src/core/ext/client_channel/resolver_result.h )
+  s.files += %w( src/core/ext/client_channel/subchannel.h )
+  s.files += %w( src/core/ext/client_channel/subchannel_index.h )
+  s.files += %w( src/core/ext/client_channel/uri_parser.h )
   s.files += %w( src/core/ext/lb_policy/grpclb/grpclb.h )
   s.files += %w( src/core/ext/lb_policy/grpclb/load_balancer_api.h )
   s.files += %w( src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h )
@@ -481,26 +481,26 @@ Gem::Specification.new do |s|
   s.files += %w( src/core/lib/tsi/ssl_transport_security.c )
   s.files += %w( src/core/lib/tsi/transport_security.c )
   s.files += %w( src/core/ext/transport/chttp2/client/secure/secure_channel_create.c )
-  s.files += %w( src/core/ext/client_config/channel_connectivity.c )
-  s.files += %w( src/core/ext/client_config/client_channel.c )
-  s.files += %w( src/core/ext/client_config/client_channel_factory.c )
-  s.files += %w( src/core/ext/client_config/client_config_plugin.c )
-  s.files += %w( src/core/ext/client_config/connector.c )
-  s.files += %w( src/core/ext/client_config/default_initial_connect_string.c )
-  s.files += %w( src/core/ext/client_config/http_connect_handshaker.c )
-  s.files += %w( src/core/ext/client_config/initial_connect_string.c )
-  s.files += %w( src/core/ext/client_config/lb_policy.c )
-  s.files += %w( src/core/ext/client_config/lb_policy_factory.c )
-  s.files += %w( src/core/ext/client_config/lb_policy_registry.c )
-  s.files += %w( src/core/ext/client_config/method_config.c )
-  s.files += %w( src/core/ext/client_config/parse_address.c )
-  s.files += %w( src/core/ext/client_config/resolver.c )
-  s.files += %w( src/core/ext/client_config/resolver_factory.c )
-  s.files += %w( src/core/ext/client_config/resolver_registry.c )
-  s.files += %w( src/core/ext/client_config/resolver_result.c )
-  s.files += %w( src/core/ext/client_config/subchannel.c )
-  s.files += %w( src/core/ext/client_config/subchannel_index.c )
-  s.files += %w( src/core/ext/client_config/uri_parser.c )
+  s.files += %w( src/core/ext/client_channel/channel_connectivity.c )
+  s.files += %w( src/core/ext/client_channel/client_channel.c )
+  s.files += %w( src/core/ext/client_channel/client_channel_factory.c )
+  s.files += %w( src/core/ext/client_channel/client_channel_plugin.c )
+  s.files += %w( src/core/ext/client_channel/connector.c )
+  s.files += %w( src/core/ext/client_channel/default_initial_connect_string.c )
+  s.files += %w( src/core/ext/client_channel/http_connect_handshaker.c )
+  s.files += %w( src/core/ext/client_channel/initial_connect_string.c )
+  s.files += %w( src/core/ext/client_channel/lb_policy.c )
+  s.files += %w( src/core/ext/client_channel/lb_policy_factory.c )
+  s.files += %w( src/core/ext/client_channel/lb_policy_registry.c )
+  s.files += %w( src/core/ext/client_channel/method_config.c )
+  s.files += %w( src/core/ext/client_channel/parse_address.c )
+  s.files += %w( src/core/ext/client_channel/resolver.c )
+  s.files += %w( src/core/ext/client_channel/resolver_factory.c )
+  s.files += %w( src/core/ext/client_channel/resolver_registry.c )
+  s.files += %w( src/core/ext/client_channel/resolver_result.c )
+  s.files += %w( src/core/ext/client_channel/subchannel.c )
+  s.files += %w( src/core/ext/client_channel/subchannel_index.c )
+  s.files += %w( src/core/ext/client_channel/uri_parser.c )
   s.files += %w( src/core/ext/transport/chttp2/server/insecure/server_chttp2.c )
   s.files += %w( src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c )
   s.files += %w( src/core/ext/transport/chttp2/client/insecure/channel_create.c )
diff --git a/include/grpc++/ext/reflection.grpc.pb.h b/include/grpc++/ext/reflection.grpc.pb.h
index 6e56088497ac537c73783accc037ef381ffcb00e..151271c65b8aadb9bff1f8614e8bbc56ce7c8ab5 100644
--- a/include/grpc++/ext/reflection.grpc.pb.h
+++ b/include/grpc++/ext/reflection.grpc.pb.h
@@ -176,6 +176,8 @@ class ServerReflection GRPC_FINAL {
     }
   };
   typedef Service StreamedUnaryService;
+  typedef Service SplitStreamedService;
+  typedef Service StreamedService;
 };
 
 }  // namespace v1alpha
diff --git a/include/grpc++/impl/codegen/method_handler_impl.h b/include/grpc++/impl/codegen/method_handler_impl.h
index 52f927631c9dbed00204e3788bc27a907526bee9..bb992f0e185500677990e974ebc267170d9f2b45 100644
--- a/include/grpc++/impl/codegen/method_handler_impl.h
+++ b/include/grpc++/impl/codegen/method_handler_impl.h
@@ -236,6 +236,19 @@ class StreamedUnaryHandler
             ServerUnaryStreamer<RequestType, ResponseType>, true>(func) {}
 };
 
+template <class RequestType, class ResponseType>
+class SplitServerStreamingHandler
+    : public TemplatedBidiStreamingHandler<
+          ServerSplitStreamer<RequestType, ResponseType>, false> {
+ public:
+  explicit SplitServerStreamingHandler(
+      std::function<Status(ServerContext*,
+                           ServerSplitStreamer<RequestType, ResponseType>*)>
+          func)
+      : TemplatedBidiStreamingHandler<
+            ServerSplitStreamer<RequestType, ResponseType>, false>(func) {}
+};
+
 // Handle unknown method by returning UNIMPLEMENTED error.
 class UnknownMethodHandler : public MethodHandler {
  public:
diff --git a/include/grpc++/impl/codegen/server_context.h b/include/grpc++/impl/codegen/server_context.h
index 975f710f132886ff8f10c6c2f96886a22c5f258e..ddf50b019da22aeb2403ee9de8e9c8d2c9e55bd8 100644
--- a/include/grpc++/impl/codegen/server_context.h
+++ b/include/grpc++/impl/codegen/server_context.h
@@ -44,7 +44,6 @@
 #include <grpc++/impl/codegen/time.h>
 #include <grpc/impl/codegen/compression_types.h>
 
-struct gpr_timespec;
 struct grpc_metadata;
 struct grpc_call;
 struct census_context;
diff --git a/include/grpc++/impl/codegen/service_type.h b/include/grpc++/impl/codegen/service_type.h
index 72b22253128de73caab978b181a0865e7049349c..bd65ea009e25258934caa49fd20b3319a328ec1e 100644
--- a/include/grpc++/impl/codegen/service_type.h
+++ b/include/grpc++/impl/codegen/service_type.h
@@ -147,14 +147,15 @@ class Service {
     methods_[index].reset();
   }
 
-  void MarkMethodStreamedUnary(int index,
-                               MethodHandler* streamed_unary_method) {
+  void MarkMethodStreamed(int index, MethodHandler* streamed_method) {
     GPR_CODEGEN_ASSERT(methods_[index] && methods_[index]->handler() &&
-                       "Cannot mark an async or generic method Streamed Unary");
-    methods_[index]->SetHandler(streamed_unary_method);
+                       "Cannot mark an async or generic method Streamed");
+    methods_[index]->SetHandler(streamed_method);
 
     // From the server's point of view, streamed unary is a special
-    // case of BIDI_STREAMING that has 1 read and 1 write, in that order.
+    // case of BIDI_STREAMING that has 1 read and 1 write, in that order,
+    // and split server-side streaming is BIDI_STREAMING with 1 read and
+    // any number of writes, in that order
     methods_[index]->SetMethodType(::grpc::RpcMethod::BIDI_STREAMING);
   }
 
diff --git a/include/grpc++/impl/codegen/sync_stream.h b/include/grpc++/impl/codegen/sync_stream.h
index e3c5a919b1e08b216ce683651d3bd50b7a6508d3..9a3efb51193f0b33419f41577034117832a2d811 100644
--- a/include/grpc++/impl/codegen/sync_stream.h
+++ b/include/grpc++/impl/codegen/sync_stream.h
@@ -538,7 +538,7 @@ class ServerReaderWriter GRPC_FINAL : public ServerReaderWriterInterface<W, R> {
 /// the \a NextMessageSize method to determine an upper-bound on the size of
 /// the message.
 /// A key difference relative to streaming: ServerUnaryStreamer
-///  must have exactly 1 Read and exactly 1 Write, in that order, to function
+/// must have exactly 1 Read and exactly 1 Write, in that order, to function
 /// correctly. Otherwise, the RPC is in error.
 template <class RequestType, class ResponseType>
 class ServerUnaryStreamer GRPC_FINAL
@@ -577,6 +577,43 @@ class ServerUnaryStreamer GRPC_FINAL
   bool write_done_;
 };
 
+/// A class to represent a flow-controlled server-side streaming call.
+/// This is something of a hybrid between server-side and bidi streaming.
+/// This is invoked through a server-side streaming call on the client side,
+/// but the server responds to it as though it were a bidi streaming call that
+/// must first have exactly 1 Read and then any number of Writes.
+template <class RequestType, class ResponseType>
+class ServerSplitStreamer GRPC_FINAL
+    : public ServerReaderWriterInterface<ResponseType, RequestType> {
+ public:
+  ServerSplitStreamer(Call* call, ServerContext* ctx)
+      : body_(call, ctx), read_done_(false) {}
+
+  void SendInitialMetadata() GRPC_OVERRIDE { body_.SendInitialMetadata(); }
+
+  bool NextMessageSize(uint32_t* sz) GRPC_OVERRIDE {
+    return body_.NextMessageSize(sz);
+  }
+
+  bool Read(RequestType* request) GRPC_OVERRIDE {
+    if (read_done_) {
+      return false;
+    }
+    read_done_ = true;
+    return body_.Read(request);
+  }
+
+  using WriterInterface<ResponseType>::Write;
+  bool Write(const ResponseType& response,
+             const WriteOptions& options) GRPC_OVERRIDE {
+    return read_done_ && body_.Write(response, options);
+  }
+
+ private:
+  internal::ServerReaderWriterBody<ResponseType, RequestType> body_;
+  bool read_done_;
+};
+
 }  // namespace grpc
 
 #endif  // GRPCXX_IMPL_CODEGEN_SYNC_STREAM_H
diff --git a/package.xml b/package.xml
index 31a2822a758ca0afe0d788adb0e32bc2809ecfba..82bdd4adb2f301a76374220f039f7ddee19b9f71 100644
--- a/package.xml
+++ b/package.xml
@@ -305,23 +305,23 @@
     <file baseinstalldir="/" name="src/core/lib/tsi/ssl_types.h" role="src" />
     <file baseinstalldir="/" name="src/core/lib/tsi/transport_security.h" role="src" />
     <file baseinstalldir="/" name="src/core/lib/tsi/transport_security_interface.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/client_channel.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/client_channel_factory.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/connector.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/http_connect_handshaker.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/initial_connect_string.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/lb_policy.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/lb_policy_factory.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/lb_policy_registry.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/method_config.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/parse_address.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/resolver.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/resolver_factory.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/resolver_registry.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/resolver_result.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/subchannel.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/subchannel_index.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/uri_parser.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/client_channel.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/client_channel_factory.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/connector.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/http_connect_handshaker.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/initial_connect_string.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/lb_policy.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/lb_policy_factory.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/lb_policy_registry.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/method_config.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/parse_address.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/resolver.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/resolver_factory.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/resolver_registry.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/resolver_result.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/subchannel.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/subchannel_index.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/uri_parser.h" role="src" />
     <file baseinstalldir="/" name="src/core/ext/lb_policy/grpclb/grpclb.h" role="src" />
     <file baseinstalldir="/" name="src/core/ext/lb_policy/grpclb/load_balancer_api.h" role="src" />
     <file baseinstalldir="/" name="src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h" role="src" />
@@ -488,26 +488,26 @@
     <file baseinstalldir="/" name="src/core/lib/tsi/ssl_transport_security.c" role="src" />
     <file baseinstalldir="/" name="src/core/lib/tsi/transport_security.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/client_config/channel_connectivity.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/client_channel.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/client_channel_factory.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/client_config_plugin.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/connector.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/default_initial_connect_string.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/http_connect_handshaker.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/initial_connect_string.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/lb_policy.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/lb_policy_factory.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/lb_policy_registry.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/method_config.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/parse_address.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/resolver.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/resolver_factory.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/resolver_registry.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/resolver_result.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/subchannel.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/subchannel_index.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/uri_parser.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/channel_connectivity.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/client_channel.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/client_channel_factory.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/client_channel_plugin.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/connector.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/default_initial_connect_string.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/http_connect_handshaker.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/initial_connect_string.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/lb_policy.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/lb_policy_factory.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/lb_policy_registry.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/method_config.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/parse_address.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/resolver.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/resolver_factory.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/resolver_registry.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/resolver_result.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/subchannel.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/subchannel_index.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/uri_parser.c" role="src" />
     <file baseinstalldir="/" name="src/core/ext/transport/chttp2/server/insecure/server_chttp2.c" role="src" />
     <file baseinstalldir="/" name="src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c" role="src" />
     <file baseinstalldir="/" name="src/core/ext/transport/chttp2/client/insecure/channel_create.c" role="src" />
diff --git a/src/compiler/cpp_generator.cc b/src/compiler/cpp_generator.cc
index d0c35ea1ab396aba46c65227aab04d7f88aeaf94..fa72f9b0d97aeb2b8abb51a65fe13e82f71f2228 100644
--- a/src/compiler/cpp_generator.cc
+++ b/src/compiler/cpp_generator.cc
@@ -624,7 +624,7 @@ void PrintHeaderServerMethodStreamedUnary(
     printer->Indent();
     printer->Print(*vars,
                    "WithStreamedUnaryMethod_$Method$() {\n"
-                   "  ::grpc::Service::MarkMethodStreamedUnary($Idx$,\n"
+                   "  ::grpc::Service::MarkMethodStreamed($Idx$,\n"
                    "    new ::grpc::StreamedUnaryHandler< $Request$, "
                    "$Response$>(std::bind"
                    "(&WithStreamedUnaryMethod_$Method$<BaseClass>::"
@@ -656,6 +656,58 @@ void PrintHeaderServerMethodStreamedUnary(
   }
 }
 
+void PrintHeaderServerMethodSplitStreaming(
+    Printer *printer, const Method *method,
+    std::map<grpc::string, grpc::string> *vars) {
+  (*vars)["Method"] = method->name();
+  (*vars)["Request"] = method->input_type_name();
+  (*vars)["Response"] = method->output_type_name();
+  if (method->ServerOnlyStreaming()) {
+    printer->Print(*vars, "template <class BaseClass>\n");
+    printer->Print(*vars,
+                   "class WithSplitStreamingMethod_$Method$ : "
+                   "public BaseClass {\n");
+    printer->Print(
+        " private:\n"
+        "  void BaseClassMustBeDerivedFromService(const Service *service) "
+        "{}\n");
+    printer->Print(" public:\n");
+    printer->Indent();
+    printer->Print(*vars,
+                   "WithSplitStreamingMethod_$Method$() {\n"
+                   "  ::grpc::Service::MarkMethodStreamed($Idx$,\n"
+                   "    new ::grpc::SplitServerStreamingHandler< $Request$, "
+                   "$Response$>(std::bind"
+                   "(&WithSplitStreamingMethod_$Method$<BaseClass>::"
+                   "Streamed$Method$, this, std::placeholders::_1, "
+                   "std::placeholders::_2)));\n"
+                   "}\n");
+    printer->Print(*vars,
+                   "~WithSplitStreamingMethod_$Method$() GRPC_OVERRIDE {\n"
+                   "  BaseClassMustBeDerivedFromService(this);\n"
+                   "}\n");
+    printer->Print(
+        *vars,
+        "// disable regular version of this method\n"
+        "::grpc::Status $Method$("
+        "::grpc::ServerContext* context, const $Request$* request, "
+        "::grpc::ServerWriter< $Response$>* writer) GRPC_FINAL GRPC_OVERRIDE "
+        "{\n"
+        "  abort();\n"
+        "  return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, \"\");\n"
+        "}\n");
+    printer->Print(*vars,
+                   "// replace default version of method with split streamed\n"
+                   "virtual ::grpc::Status Streamed$Method$("
+                   "::grpc::ServerContext* context, "
+                   "::grpc::ServerSplitStreamer< "
+                   "$Request$,$Response$>* server_split_streamer)"
+                   " = 0;\n");
+    printer->Outdent();
+    printer->Print(*vars, "};\n");
+  }
+}
+
 void PrintHeaderServerMethodGeneric(
     Printer *printer, const Method *method,
     std::map<grpc::string, grpc::string> *vars) {
@@ -844,6 +896,48 @@ void PrintHeaderService(Printer *printer, const Service *service,
   }
   printer->Print(" StreamedUnaryService;\n");
 
+  // Server side - controlled server-side streaming
+  for (int i = 0; i < service->method_count(); ++i) {
+    (*vars)["Idx"] = as_string(i);
+    PrintHeaderServerMethodSplitStreaming(printer, service->method(i).get(),
+                                          vars);
+  }
+
+  printer->Print("typedef ");
+  for (int i = 0; i < service->method_count(); ++i) {
+    (*vars)["method_name"] = service->method(i).get()->name();
+    if (service->method(i)->ServerOnlyStreaming()) {
+      printer->Print(*vars, "WithSplitStreamingMethod_$method_name$<");
+    }
+  }
+  printer->Print("Service");
+  for (int i = 0; i < service->method_count(); ++i) {
+    if (service->method(i)->ServerOnlyStreaming()) {
+      printer->Print(" >");
+    }
+  }
+  printer->Print(" SplitStreamedService;\n");
+
+  // Server side - typedef for controlled both unary and server-side streaming
+  printer->Print("typedef ");
+  for (int i = 0; i < service->method_count(); ++i) {
+    (*vars)["method_name"] = service->method(i).get()->name();
+    if (service->method(i)->ServerOnlyStreaming()) {
+      printer->Print(*vars, "WithSplitStreamingMethod_$method_name$<");
+    }
+    if (service->method(i)->NoStreaming()) {
+      printer->Print(*vars, "WithStreamedUnaryMethod_$method_name$<");
+    }
+  }
+  printer->Print("Service");
+  for (int i = 0; i < service->method_count(); ++i) {
+    if (service->method(i)->NoStreaming() ||
+        service->method(i)->ServerOnlyStreaming()) {
+      printer->Print(" >");
+    }
+  }
+  printer->Print(" StreamedService;\n");
+
   printer->Outdent();
   printer->Print("};\n");
   printer->Print(service->GetTrailingComments().c_str());
diff --git a/src/core/ext/client_config/README.md b/src/core/ext/client_channel/README.md
similarity index 100%
rename from src/core/ext/client_config/README.md
rename to src/core/ext/client_channel/README.md
diff --git a/src/core/ext/client_config/channel_connectivity.c b/src/core/ext/client_channel/channel_connectivity.c
similarity index 99%
rename from src/core/ext/client_config/channel_connectivity.c
rename to src/core/ext/client_channel/channel_connectivity.c
index ce3c13a4ee350b54b11902297b56c6592b54d339..9797e665643b24aa9e1b67d343cbdbaf30233588 100644
--- a/src/core/ext/client_config/channel_connectivity.c
+++ b/src/core/ext/client_channel/channel_connectivity.c
@@ -36,7 +36,7 @@
 #include <grpc/support/alloc.h>
 #include <grpc/support/log.h>
 
-#include "src/core/ext/client_config/client_channel.h"
+#include "src/core/ext/client_channel/client_channel.h"
 #include "src/core/lib/iomgr/timer.h"
 #include "src/core/lib/surface/api_trace.h"
 #include "src/core/lib/surface/completion_queue.h"
diff --git a/src/core/ext/client_config/client_channel.c b/src/core/ext/client_channel/client_channel.c
similarity index 99%
rename from src/core/ext/client_config/client_channel.c
rename to src/core/ext/client_channel/client_channel.c
index 2c6867e76b902f9632400f29918751ce0b099ed9..52f60b6ebf179a5487d44668dd01e7c586c2f2a9 100644
--- a/src/core/ext/client_config/client_channel.c
+++ b/src/core/ext/client_channel/client_channel.c
@@ -31,7 +31,7 @@
  *
  */
 
-#include "src/core/ext/client_config/client_channel.h"
+#include "src/core/ext/client_channel/client_channel.h"
 
 #include <stdbool.h>
 #include <stdio.h>
@@ -42,9 +42,9 @@
 #include <grpc/support/sync.h>
 #include <grpc/support/useful.h>
 
-#include "src/core/ext/client_config/lb_policy_registry.h"
-#include "src/core/ext/client_config/method_config.h"
-#include "src/core/ext/client_config/subchannel.h"
+#include "src/core/ext/client_channel/lb_policy_registry.h"
+#include "src/core/ext/client_channel/method_config.h"
+#include "src/core/ext/client_channel/subchannel.h"
 #include "src/core/lib/channel/channel_args.h"
 #include "src/core/lib/channel/connected_channel.h"
 #include "src/core/lib/channel/deadline_filter.h"
diff --git a/src/core/ext/client_config/client_channel.h b/src/core/ext/client_channel/client_channel.h
similarity index 90%
rename from src/core/ext/client_config/client_channel.h
rename to src/core/ext/client_channel/client_channel.h
index abb5ac4d878a2a21d397d9a74972a634d2c37251..ab5a84fdfbe1319ccc222279989bebe9487dd1e0 100644
--- a/src/core/ext/client_config/client_channel.h
+++ b/src/core/ext/client_channel/client_channel.h
@@ -31,11 +31,11 @@
  *
  */
 
-#ifndef GRPC_CORE_EXT_CLIENT_CONFIG_CLIENT_CHANNEL_H
-#define GRPC_CORE_EXT_CLIENT_CONFIG_CLIENT_CHANNEL_H
+#ifndef GRPC_CORE_EXT_CLIENT_CHANNEL_CLIENT_CHANNEL_H
+#define GRPC_CORE_EXT_CLIENT_CHANNEL_CLIENT_CHANNEL_H
 
-#include "src/core/ext/client_config/client_channel_factory.h"
-#include "src/core/ext/client_config/resolver.h"
+#include "src/core/ext/client_channel/client_channel_factory.h"
+#include "src/core/ext/client_channel/resolver.h"
 #include "src/core/lib/channel/channel_stack.h"
 
 /* A client channel is a channel that begins disconnected, and can connect
@@ -61,4 +61,4 @@ void grpc_client_channel_watch_connectivity_state(
     grpc_exec_ctx *exec_ctx, grpc_channel_element *elem, grpc_pollset *pollset,
     grpc_connectivity_state *state, grpc_closure *on_complete);
 
-#endif /* GRPC_CORE_EXT_CLIENT_CONFIG_CLIENT_CHANNEL_H */
+#endif /* GRPC_CORE_EXT_CLIENT_CHANNEL_CLIENT_CHANNEL_H */
diff --git a/src/core/ext/client_config/client_channel_factory.c b/src/core/ext/client_channel/client_channel_factory.c
similarity index 97%
rename from src/core/ext/client_config/client_channel_factory.c
rename to src/core/ext/client_channel/client_channel_factory.c
index 71c64c0da1b4ab20b9342646f2cb4cc4ac49db65..db1cc9093c6de0d496184b1ed96b5cf473cf57a6 100644
--- a/src/core/ext/client_config/client_channel_factory.c
+++ b/src/core/ext/client_channel/client_channel_factory.c
@@ -31,7 +31,7 @@
  *
  */
 
-#include "src/core/ext/client_config/client_channel_factory.h"
+#include "src/core/ext/client_channel/client_channel_factory.h"
 
 void grpc_client_channel_factory_ref(grpc_client_channel_factory* factory) {
   factory->vtable->ref(factory);
diff --git a/src/core/ext/client_config/client_channel_factory.h b/src/core/ext/client_channel/client_channel_factory.h
similarity index 93%
rename from src/core/ext/client_config/client_channel_factory.h
rename to src/core/ext/client_channel/client_channel_factory.h
index 1241b9b781ff02a7d5f58f5b9ba4739a288d0ed8..28828c2eb606fee61abbfb50dc3a3f18e8a30880 100644
--- a/src/core/ext/client_config/client_channel_factory.h
+++ b/src/core/ext/client_channel/client_channel_factory.h
@@ -31,12 +31,12 @@
  *
  */
 
-#ifndef GRPC_CORE_EXT_CLIENT_CONFIG_CLIENT_CHANNEL_FACTORY_H
-#define GRPC_CORE_EXT_CLIENT_CONFIG_CLIENT_CHANNEL_FACTORY_H
+#ifndef GRPC_CORE_EXT_CLIENT_CHANNEL_CLIENT_CHANNEL_FACTORY_H
+#define GRPC_CORE_EXT_CLIENT_CHANNEL_CLIENT_CHANNEL_FACTORY_H
 
 #include <grpc/impl/codegen/grpc_types.h>
 
-#include "src/core/ext/client_config/subchannel.h"
+#include "src/core/ext/client_channel/subchannel.h"
 #include "src/core/lib/channel/channel_stack.h"
 
 typedef struct grpc_client_channel_factory grpc_client_channel_factory;
@@ -82,4 +82,4 @@ grpc_channel *grpc_client_channel_factory_create_channel(
     grpc_exec_ctx *exec_ctx, grpc_client_channel_factory *factory,
     const char *target, grpc_client_channel_type type, grpc_channel_args *args);
 
-#endif /* GRPC_CORE_EXT_CLIENT_CONFIG_CLIENT_CHANNEL_FACTORY_H */
+#endif /* GRPC_CORE_EXT_CLIENT_CHANNEL_CLIENT_CHANNEL_FACTORY_H */
diff --git a/src/core/ext/client_config/client_config_plugin.c b/src/core/ext/client_channel/client_channel_plugin.c
similarity index 91%
rename from src/core/ext/client_config/client_config_plugin.c
rename to src/core/ext/client_channel/client_channel_plugin.c
index dc3629d38336011555ff73d1d5e5c595d91aa36a..a3e5079843906f6aa77f659b7ba7950000b20122 100644
--- a/src/core/ext/client_config/client_config_plugin.c
+++ b/src/core/ext/client_channel/client_channel_plugin.c
@@ -37,10 +37,10 @@
 
 #include <grpc/support/alloc.h>
 
-#include "src/core/ext/client_config/client_channel.h"
-#include "src/core/ext/client_config/lb_policy_registry.h"
-#include "src/core/ext/client_config/resolver_registry.h"
-#include "src/core/ext/client_config/subchannel_index.h"
+#include "src/core/ext/client_channel/client_channel.h"
+#include "src/core/ext/client_channel/lb_policy_registry.h"
+#include "src/core/ext/client_channel/resolver_registry.h"
+#include "src/core/ext/client_channel/subchannel_index.h"
 #include "src/core/lib/surface/channel_init.h"
 
 static bool append_filter(grpc_channel_stack_builder *builder, void *arg) {
@@ -73,7 +73,7 @@ static bool set_default_host_if_unset(grpc_channel_stack_builder *builder,
   return true;
 }
 
-void grpc_client_config_init(void) {
+void grpc_client_channel_init(void) {
   grpc_lb_policy_registry_init();
   grpc_resolver_registry_init();
   grpc_subchannel_index_init();
@@ -83,7 +83,7 @@ void grpc_client_config_init(void) {
                                    (void *)&grpc_client_channel_filter);
 }
 
-void grpc_client_config_shutdown(void) {
+void grpc_client_channel_shutdown(void) {
   grpc_subchannel_index_shutdown();
   grpc_channel_init_shutdown();
   grpc_resolver_registry_shutdown();
diff --git a/src/core/ext/client_config/connector.c b/src/core/ext/client_channel/connector.c
similarity index 97%
rename from src/core/ext/client_config/connector.c
rename to src/core/ext/client_channel/connector.c
index 5b629ed5fb1c01cbc64f1a5927140b8f70c43ccd..0582e5b3726fe518c848a22e0a3569145c73db3c 100644
--- a/src/core/ext/client_config/connector.c
+++ b/src/core/ext/client_channel/connector.c
@@ -31,7 +31,7 @@
  *
  */
 
-#include "src/core/ext/client_config/connector.h"
+#include "src/core/ext/client_channel/connector.h"
 
 grpc_connector* grpc_connector_ref(grpc_connector* connector) {
   connector->vtable->ref(connector);
diff --git a/src/core/ext/client_config/connector.h b/src/core/ext/client_channel/connector.h
similarity index 96%
rename from src/core/ext/client_config/connector.h
rename to src/core/ext/client_channel/connector.h
index ea9d23706e4df5bfdb72820e5cc0def9ea00992c..e08244b2c027e24ab5a3d686eea1c3224422d401 100644
--- a/src/core/ext/client_config/connector.h
+++ b/src/core/ext/client_channel/connector.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef GRPC_CORE_EXT_CLIENT_CONFIG_CONNECTOR_H
-#define GRPC_CORE_EXT_CLIENT_CONFIG_CONNECTOR_H
+#ifndef GRPC_CORE_EXT_CLIENT_CHANNEL_CONNECTOR_H
+#define GRPC_CORE_EXT_CLIENT_CHANNEL_CONNECTOR_H
 
 #include "src/core/lib/channel/channel_stack.h"
 #include "src/core/lib/iomgr/sockaddr.h"
@@ -89,4 +89,4 @@ void grpc_connector_connect(grpc_exec_ctx *exec_ctx, grpc_connector *connector,
 void grpc_connector_shutdown(grpc_exec_ctx *exec_ctx,
                              grpc_connector *connector);
 
-#endif /* GRPC_CORE_EXT_CLIENT_CONFIG_CONNECTOR_H */
+#endif /* GRPC_CORE_EXT_CLIENT_CHANNEL_CONNECTOR_H */
diff --git a/src/core/ext/client_config/default_initial_connect_string.c b/src/core/ext/client_channel/default_initial_connect_string.c
similarity index 100%
rename from src/core/ext/client_config/default_initial_connect_string.c
rename to src/core/ext/client_channel/default_initial_connect_string.c
diff --git a/src/core/ext/client_config/http_connect_handshaker.c b/src/core/ext/client_channel/http_connect_handshaker.c
similarity index 98%
rename from src/core/ext/client_config/http_connect_handshaker.c
rename to src/core/ext/client_channel/http_connect_handshaker.c
index fda1df173e1c216a50e4f2626a95f4ac623f5f1c..ea2cbbdd970e7ea7fe689f46ff490ffec360b652 100644
--- a/src/core/ext/client_config/http_connect_handshaker.c
+++ b/src/core/ext/client_channel/http_connect_handshaker.c
@@ -31,7 +31,7 @@
  *
  */
 
-#include "src/core/ext/client_config/http_connect_handshaker.h"
+#include "src/core/ext/client_channel/http_connect_handshaker.h"
 
 #include <string.h>
 
@@ -40,7 +40,7 @@
 #include <grpc/support/slice_buffer.h>
 #include <grpc/support/string_util.h>
 
-#include "src/core/ext/client_config/uri_parser.h"
+#include "src/core/ext/client_channel/uri_parser.h"
 #include "src/core/lib/http/format_request.h"
 #include "src/core/lib/http/parser.h"
 #include "src/core/lib/iomgr/timer.h"
diff --git a/src/core/ext/client_config/http_connect_handshaker.h b/src/core/ext/client_channel/http_connect_handshaker.h
similarity index 91%
rename from src/core/ext/client_config/http_connect_handshaker.h
rename to src/core/ext/client_channel/http_connect_handshaker.h
index 1fc394826789b4fbb264e39e615368df4036aaaf..c689df2b2b52ec6a5dbf7b98351ba9e7a7e9cad2 100644
--- a/src/core/ext/client_config/http_connect_handshaker.h
+++ b/src/core/ext/client_channel/http_connect_handshaker.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef GRPC_CORE_EXT_CLIENT_CONFIG_HTTP_CONNECT_HANDSHAKER_H
-#define GRPC_CORE_EXT_CLIENT_CONFIG_HTTP_CONNECT_HANDSHAKER_H
+#ifndef GRPC_CORE_EXT_CLIENT_CHANNEL_HTTP_CONNECT_HANDSHAKER_H
+#define GRPC_CORE_EXT_CLIENT_CHANNEL_HTTP_CONNECT_HANDSHAKER_H
 
 #include "src/core/lib/channel/handshaker.h"
 
@@ -44,4 +44,4 @@ grpc_handshaker* grpc_http_connect_handshaker_create(const char* proxy_server,
 /// Caller takes ownership of result.
 char* grpc_get_http_proxy_server();
 
-#endif /* GRPC_CORE_EXT_CLIENT_CONFIG_HTTP_CONNECT_HANDSHAKER_H */
+#endif /* GRPC_CORE_EXT_CLIENT_CHANNEL_HTTP_CONNECT_HANDSHAKER_H */
diff --git a/src/core/ext/client_config/initial_connect_string.c b/src/core/ext/client_channel/initial_connect_string.c
similarity index 97%
rename from src/core/ext/client_config/initial_connect_string.c
rename to src/core/ext/client_channel/initial_connect_string.c
index 41580d2106ca16fa1868dfa70f126d43aebbb6d0..fd8ddb83a8e1566451ae80aed2cb0fda897e78f2 100644
--- a/src/core/ext/client_config/initial_connect_string.c
+++ b/src/core/ext/client_channel/initial_connect_string.c
@@ -31,7 +31,7 @@
  *
  */
 
-#include "src/core/ext/client_config/initial_connect_string.h"
+#include "src/core/ext/client_channel/initial_connect_string.h"
 
 #include <stddef.h>
 
diff --git a/src/core/ext/client_config/initial_connect_string.h b/src/core/ext/client_channel/initial_connect_string.h
similarity index 91%
rename from src/core/ext/client_config/initial_connect_string.h
rename to src/core/ext/client_channel/initial_connect_string.h
index 06f0767832a582cce0f684f324b54972631ea1c4..39f6465fc99d3255bff304b5b68acd1816c3e586 100644
--- a/src/core/ext/client_config/initial_connect_string.h
+++ b/src/core/ext/client_channel/initial_connect_string.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef GRPC_CORE_EXT_CLIENT_CONFIG_INITIAL_CONNECT_STRING_H
-#define GRPC_CORE_EXT_CLIENT_CONFIG_INITIAL_CONNECT_STRING_H
+#ifndef GRPC_CORE_EXT_CLIENT_CHANNEL_INITIAL_CONNECT_STRING_H
+#define GRPC_CORE_EXT_CLIENT_CHANNEL_INITIAL_CONNECT_STRING_H
 
 #include <grpc/support/slice.h>
 #include "src/core/lib/iomgr/sockaddr.h"
@@ -47,4 +47,4 @@ void grpc_test_set_initial_connect_string_function(
 void grpc_set_initial_connect_string(struct sockaddr **addr, size_t *addr_len,
                                      gpr_slice *connect_string);
 
-#endif /* GRPC_CORE_EXT_CLIENT_CONFIG_INITIAL_CONNECT_STRING_H */
+#endif /* GRPC_CORE_EXT_CLIENT_CHANNEL_INITIAL_CONNECT_STRING_H */
diff --git a/src/core/ext/client_config/lb_policy.c b/src/core/ext/client_channel/lb_policy.c
similarity index 99%
rename from src/core/ext/client_config/lb_policy.c
rename to src/core/ext/client_channel/lb_policy.c
index 46391272a69088ff6546183c1564ee455d53dacd..45ee72e2f0c937cc21bc51b24c47576759535def 100644
--- a/src/core/ext/client_config/lb_policy.c
+++ b/src/core/ext/client_channel/lb_policy.c
@@ -31,7 +31,7 @@
  *
  */
 
-#include "src/core/ext/client_config/lb_policy.h"
+#include "src/core/ext/client_channel/lb_policy.h"
 
 #define WEAK_REF_BITS 16
 
diff --git a/src/core/ext/client_config/lb_policy.h b/src/core/ext/client_channel/lb_policy.h
similarity index 97%
rename from src/core/ext/client_config/lb_policy.h
rename to src/core/ext/client_channel/lb_policy.h
index de424cd10522f29d2e15fff379844d8ca21398b5..54ad7797920eb8ae99298debbd238a43d1e0da3e 100644
--- a/src/core/ext/client_config/lb_policy.h
+++ b/src/core/ext/client_channel/lb_policy.h
@@ -31,10 +31,11 @@
  *
  */
 
-#ifndef GRPC_CORE_EXT_CLIENT_CONFIG_LB_POLICY_H
-#define GRPC_CORE_EXT_CLIENT_CONFIG_LB_POLICY_H
+#ifndef GRPC_CORE_EXT_CLIENT_CHANNEL_LB_POLICY_H
+#define GRPC_CORE_EXT_CLIENT_CHANNEL_LB_POLICY_H
 
-#include "src/core/ext/client_config/subchannel.h"
+#include "src/core/ext/client_channel/subchannel.h"
+#include "src/core/lib/iomgr/polling_entity.h"
 #include "src/core/lib/transport/connectivity_state.h"
 
 /** A load balancing policy: specified by a vtable and a struct (which
@@ -192,4 +193,4 @@ grpc_connectivity_state grpc_lb_policy_check_connectivity(
     grpc_exec_ctx *exec_ctx, grpc_lb_policy *policy,
     grpc_error **connectivity_error);
 
-#endif /* GRPC_CORE_EXT_CLIENT_CONFIG_LB_POLICY_H */
+#endif /* GRPC_CORE_EXT_CLIENT_CHANNEL_LB_POLICY_H */
diff --git a/src/core/ext/client_config/lb_policy_factory.c b/src/core/ext/client_channel/lb_policy_factory.c
similarity index 98%
rename from src/core/ext/client_config/lb_policy_factory.c
rename to src/core/ext/client_channel/lb_policy_factory.c
index c17af91a09e4b762771a9bd24aca708341206242..45753e69420d41e6b93f06303c4db4ecea61b0df 100644
--- a/src/core/ext/client_config/lb_policy_factory.c
+++ b/src/core/ext/client_channel/lb_policy_factory.c
@@ -36,7 +36,7 @@
 #include <grpc/support/alloc.h>
 #include <grpc/support/string_util.h>
 
-#include "src/core/ext/client_config/lb_policy_factory.h"
+#include "src/core/ext/client_channel/lb_policy_factory.h"
 
 grpc_lb_addresses* grpc_lb_addresses_create(size_t num_addresses) {
   grpc_lb_addresses* addresses = gpr_malloc(sizeof(grpc_lb_addresses));
diff --git a/src/core/ext/client_config/lb_policy_factory.h b/src/core/ext/client_channel/lb_policy_factory.h
similarity index 94%
rename from src/core/ext/client_config/lb_policy_factory.h
rename to src/core/ext/client_channel/lb_policy_factory.h
index ade55704f25b873ac3c6cddd1d8ebb78eea97812..3e53972445fb78e03436dd8d5b8eb94db9862054 100644
--- a/src/core/ext/client_config/lb_policy_factory.h
+++ b/src/core/ext/client_channel/lb_policy_factory.h
@@ -31,11 +31,11 @@
  *
  */
 
-#ifndef GRPC_CORE_EXT_CLIENT_CONFIG_LB_POLICY_FACTORY_H
-#define GRPC_CORE_EXT_CLIENT_CONFIG_LB_POLICY_FACTORY_H
+#ifndef GRPC_CORE_EXT_CLIENT_CHANNEL_LB_POLICY_FACTORY_H
+#define GRPC_CORE_EXT_CLIENT_CHANNEL_LB_POLICY_FACTORY_H
 
-#include "src/core/ext/client_config/client_channel_factory.h"
-#include "src/core/ext/client_config/lb_policy.h"
+#include "src/core/ext/client_channel/client_channel_factory.h"
+#include "src/core/ext/client_channel/lb_policy.h"
 
 #include "src/core/lib/iomgr/exec_ctx.h"
 #include "src/core/lib/iomgr/resolve_address.h"
@@ -118,4 +118,4 @@ grpc_lb_policy *grpc_lb_policy_factory_create_lb_policy(
     grpc_exec_ctx *exec_ctx, grpc_lb_policy_factory *factory,
     grpc_lb_policy_args *args);
 
-#endif /* GRPC_CORE_EXT_CLIENT_CONFIG_LB_POLICY_FACTORY_H */
+#endif /* GRPC_CORE_EXT_CLIENT_CHANNEL_LB_POLICY_FACTORY_H */
diff --git a/src/core/ext/client_config/lb_policy_registry.c b/src/core/ext/client_channel/lb_policy_registry.c
similarity index 98%
rename from src/core/ext/client_config/lb_policy_registry.c
rename to src/core/ext/client_channel/lb_policy_registry.c
index a23643ecc65dfbb8c92170a6909dc645673255dc..f46a721f9d4eda22ac9bde7105d9b9c8f14e2c7e 100644
--- a/src/core/ext/client_config/lb_policy_registry.c
+++ b/src/core/ext/client_channel/lb_policy_registry.c
@@ -31,7 +31,7 @@
  *
  */
 
-#include "src/core/ext/client_config/lb_policy_registry.h"
+#include "src/core/ext/client_channel/lb_policy_registry.h"
 
 #include <string.h>
 
diff --git a/src/core/ext/client_config/lb_policy_registry.h b/src/core/ext/client_channel/lb_policy_registry.h
similarity index 90%
rename from src/core/ext/client_config/lb_policy_registry.h
rename to src/core/ext/client_channel/lb_policy_registry.h
index 92f38d6de64a4de466a1b4f3cdb966c566acd9cc..21c468e02107656a3a99c287f1d67bddbba96f30 100644
--- a/src/core/ext/client_config/lb_policy_registry.h
+++ b/src/core/ext/client_channel/lb_policy_registry.h
@@ -31,10 +31,10 @@
  *
  */
 
-#ifndef GRPC_CORE_EXT_CLIENT_CONFIG_LB_POLICY_REGISTRY_H
-#define GRPC_CORE_EXT_CLIENT_CONFIG_LB_POLICY_REGISTRY_H
+#ifndef GRPC_CORE_EXT_CLIENT_CHANNEL_LB_POLICY_REGISTRY_H
+#define GRPC_CORE_EXT_CLIENT_CHANNEL_LB_POLICY_REGISTRY_H
 
-#include "src/core/ext/client_config/lb_policy_factory.h"
+#include "src/core/ext/client_channel/lb_policy_factory.h"
 #include "src/core/lib/iomgr/exec_ctx.h"
 
 /** Initialize the registry and set \a default_factory as the factory to be
@@ -52,4 +52,4 @@ void grpc_register_lb_policy(grpc_lb_policy_factory *factory);
 grpc_lb_policy *grpc_lb_policy_create(grpc_exec_ctx *exec_ctx, const char *name,
                                       grpc_lb_policy_args *args);
 
-#endif /* GRPC_CORE_EXT_CLIENT_CONFIG_LB_POLICY_REGISTRY_H */
+#endif /* GRPC_CORE_EXT_CLIENT_CHANNEL_LB_POLICY_REGISTRY_H */
diff --git a/src/core/ext/client_config/method_config.c b/src/core/ext/client_channel/method_config.c
similarity index 99%
rename from src/core/ext/client_config/method_config.c
rename to src/core/ext/client_channel/method_config.c
index a42fe2bfd91bc80484eb527e522336a1a044f76a..4313ad5e0e6599ad625d8955d31fba6b15a5d122 100644
--- a/src/core/ext/client_config/method_config.c
+++ b/src/core/ext/client_channel/method_config.c
@@ -29,7 +29,7 @@
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 //
 
-#include "src/core/ext/client_config/method_config.h"
+#include "src/core/ext/client_channel/method_config.h"
 
 #include <string.h>
 
diff --git a/src/core/ext/client_config/method_config.h b/src/core/ext/client_channel/method_config.h
similarity index 97%
rename from src/core/ext/client_config/method_config.h
rename to src/core/ext/client_channel/method_config.h
index 87c72ec0647781f92b41bc95ae6dd82421566754..8e107b55c47e28bb0f4010d64dfc977e2d7feca8 100644
--- a/src/core/ext/client_config/method_config.h
+++ b/src/core/ext/client_channel/method_config.h
@@ -29,8 +29,8 @@
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 //
 
-#ifndef GRPC_CORE_EXT_CLIENT_CONFIG_METHOD_CONFIG_H
-#define GRPC_CORE_EXT_CLIENT_CONFIG_METHOD_CONFIG_H
+#ifndef GRPC_CORE_EXT_CLIENT_CHANNEL_METHOD_CONFIG_H
+#define GRPC_CORE_EXT_CLIENT_CHANNEL_METHOD_CONFIG_H
 
 #include <stdbool.h>
 
@@ -125,4 +125,4 @@ grpc_mdstr_hash_table* grpc_method_config_table_convert(
     void* (*convert_value)(const grpc_method_config* method_config),
     const grpc_mdstr_hash_table_vtable* vtable);
 
-#endif /* GRPC_CORE_EXT_CLIENT_CONFIG_METHOD_CONFIG_H */
+#endif /* GRPC_CORE_EXT_CLIENT_CHANNEL_METHOD_CONFIG_H */
diff --git a/src/core/ext/client_config/parse_address.c b/src/core/ext/client_channel/parse_address.c
similarity index 98%
rename from src/core/ext/client_config/parse_address.c
rename to src/core/ext/client_channel/parse_address.c
index 8b4abe24a6118f752ddc2cd0ff7c626ddb0e2e06..31ca44299b5ede83a9a637b2195634c3673edd34 100644
--- a/src/core/ext/client_config/parse_address.c
+++ b/src/core/ext/client_channel/parse_address.c
@@ -31,7 +31,7 @@
  *
  */
 
-#include "src/core/ext/client_config/parse_address.h"
+#include "src/core/ext/client_channel/parse_address.h"
 
 #include <stdio.h>
 #include <string.h>
diff --git a/src/core/ext/client_config/parse_address.h b/src/core/ext/client_channel/parse_address.h
similarity index 91%
rename from src/core/ext/client_config/parse_address.h
rename to src/core/ext/client_channel/parse_address.h
index 74c86f4d938b97d2cebf01f28e413d94e0ca12c1..3aa6c41546cc52150cbf735fe6bc36130b5315b0 100644
--- a/src/core/ext/client_config/parse_address.h
+++ b/src/core/ext/client_channel/parse_address.h
@@ -31,12 +31,12 @@
  *
  */
 
-#ifndef GRPC_CORE_EXT_CLIENT_CONFIG_PARSE_ADDRESS_H
-#define GRPC_CORE_EXT_CLIENT_CONFIG_PARSE_ADDRESS_H
+#ifndef GRPC_CORE_EXT_CLIENT_CHANNEL_PARSE_ADDRESS_H
+#define GRPC_CORE_EXT_CLIENT_CHANNEL_PARSE_ADDRESS_H
 
 #include <stddef.h>
 
-#include "src/core/ext/client_config/uri_parser.h"
+#include "src/core/ext/client_channel/uri_parser.h"
 #include "src/core/lib/iomgr/sockaddr.h"
 
 #ifdef GPR_HAVE_UNIX_SOCKET
@@ -53,4 +53,4 @@ int parse_ipv4(grpc_uri *uri, struct sockaddr_storage *addr, size_t *len);
  * host:port pair. Returns true upon success. */
 int parse_ipv6(grpc_uri *uri, struct sockaddr_storage *addr, size_t *len);
 
-#endif /* GRPC_CORE_EXT_CLIENT_CONFIG_PARSE_ADDRESS_H */
+#endif /* GRPC_CORE_EXT_CLIENT_CHANNEL_PARSE_ADDRESS_H */
diff --git a/src/core/ext/client_config/resolver.c b/src/core/ext/client_channel/resolver.c
similarity index 98%
rename from src/core/ext/client_config/resolver.c
rename to src/core/ext/client_channel/resolver.c
index 7534ea62af5f9e2e5be4b98e551e7dd027d4f638..0c26d95f2f1533b51e40931d43b382880d7cde92 100644
--- a/src/core/ext/client_config/resolver.c
+++ b/src/core/ext/client_channel/resolver.c
@@ -31,7 +31,7 @@
  *
  */
 
-#include "src/core/ext/client_config/resolver.h"
+#include "src/core/ext/client_channel/resolver.h"
 
 void grpc_resolver_init(grpc_resolver *resolver,
                         const grpc_resolver_vtable *vtable) {
diff --git a/src/core/ext/client_config/resolver.h b/src/core/ext/client_channel/resolver.h
similarity index 93%
rename from src/core/ext/client_config/resolver.h
rename to src/core/ext/client_channel/resolver.h
index 88ac262d513b7b8ed63328d0cfc0d52354ea9da8..0951613175a642b1569918f641dc5de6c506b8c8 100644
--- a/src/core/ext/client_config/resolver.h
+++ b/src/core/ext/client_channel/resolver.h
@@ -31,11 +31,11 @@
  *
  */
 
-#ifndef GRPC_CORE_EXT_CLIENT_CONFIG_RESOLVER_H
-#define GRPC_CORE_EXT_CLIENT_CONFIG_RESOLVER_H
+#ifndef GRPC_CORE_EXT_CLIENT_CHANNEL_RESOLVER_H
+#define GRPC_CORE_EXT_CLIENT_CHANNEL_RESOLVER_H
 
-#include "src/core/ext/client_config/resolver_result.h"
-#include "src/core/ext/client_config/subchannel.h"
+#include "src/core/ext/client_channel/resolver_result.h"
+#include "src/core/ext/client_channel/subchannel.h"
 #include "src/core/lib/iomgr/iomgr.h"
 
 typedef struct grpc_resolver grpc_resolver;
@@ -91,4 +91,4 @@ void grpc_resolver_next(grpc_exec_ctx *exec_ctx, grpc_resolver *resolver,
                         grpc_resolver_result **result,
                         grpc_closure *on_complete);
 
-#endif /* GRPC_CORE_EXT_CLIENT_CONFIG_RESOLVER_H */
+#endif /* GRPC_CORE_EXT_CLIENT_CHANNEL_RESOLVER_H */
diff --git a/src/core/ext/client_config/resolver_factory.c b/src/core/ext/client_channel/resolver_factory.c
similarity index 97%
rename from src/core/ext/client_config/resolver_factory.c
rename to src/core/ext/client_channel/resolver_factory.c
index 67832dcf59e8568ac170e553cf7e308690cde1b1..7c3d644257ca0d28469e8b39745a5f0f707f3ae4 100644
--- a/src/core/ext/client_config/resolver_factory.c
+++ b/src/core/ext/client_channel/resolver_factory.c
@@ -31,7 +31,7 @@
  *
  */
 
-#include "src/core/ext/client_config/resolver_factory.h"
+#include "src/core/ext/client_channel/resolver_factory.h"
 
 void grpc_resolver_factory_ref(grpc_resolver_factory* factory) {
   factory->vtable->ref(factory);
diff --git a/src/core/ext/client_config/resolver_factory.h b/src/core/ext/client_channel/resolver_factory.h
similarity index 89%
rename from src/core/ext/client_config/resolver_factory.h
rename to src/core/ext/client_channel/resolver_factory.h
index 9ec5b9a70e70de38849cbb827a642ba350759202..1ad018ce1fe8e0c401d9726d84802e47f5d48f73 100644
--- a/src/core/ext/client_config/resolver_factory.h
+++ b/src/core/ext/client_channel/resolver_factory.h
@@ -31,12 +31,12 @@
  *
  */
 
-#ifndef GRPC_CORE_EXT_CLIENT_CONFIG_RESOLVER_FACTORY_H
-#define GRPC_CORE_EXT_CLIENT_CONFIG_RESOLVER_FACTORY_H
+#ifndef GRPC_CORE_EXT_CLIENT_CHANNEL_RESOLVER_FACTORY_H
+#define GRPC_CORE_EXT_CLIENT_CHANNEL_RESOLVER_FACTORY_H
 
-#include "src/core/ext/client_config/client_channel_factory.h"
-#include "src/core/ext/client_config/resolver.h"
-#include "src/core/ext/client_config/uri_parser.h"
+#include "src/core/ext/client_channel/client_channel_factory.h"
+#include "src/core/ext/client_channel/resolver.h"
+#include "src/core/ext/client_channel/uri_parser.h"
 
 typedef struct grpc_resolver_factory grpc_resolver_factory;
 typedef struct grpc_resolver_factory_vtable grpc_resolver_factory_vtable;
@@ -76,4 +76,4 @@ grpc_resolver *grpc_resolver_factory_create_resolver(
 char *grpc_resolver_factory_get_default_authority(
     grpc_resolver_factory *factory, grpc_uri *uri);
 
-#endif /* GRPC_CORE_EXT_CLIENT_CONFIG_RESOLVER_FACTORY_H */
+#endif /* GRPC_CORE_EXT_CLIENT_CHANNEL_RESOLVER_FACTORY_H */
diff --git a/src/core/ext/client_config/resolver_registry.c b/src/core/ext/client_channel/resolver_registry.c
similarity index 97%
rename from src/core/ext/client_config/resolver_registry.c
rename to src/core/ext/client_channel/resolver_registry.c
index bd5c683878d5957dc4720ca4ca8c85e37c9f2f55..ee43329874620c831d1ff8477207a9b1abfa75ec 100644
--- a/src/core/ext/client_config/resolver_registry.c
+++ b/src/core/ext/client_channel/resolver_registry.c
@@ -31,7 +31,7 @@
  *
  */
 
-#include "src/core/ext/client_config/resolver_registry.h"
+#include "src/core/ext/client_channel/resolver_registry.h"
 
 #include <string.h>
 
@@ -55,7 +55,7 @@ void grpc_resolver_registry_shutdown(void) {
     grpc_resolver_factory_unref(g_all_of_the_resolvers[i]);
   }
   // FIXME(ctiller): this should live in grpc_resolver_registry_init,
-  // however that would have the client_config plugin call this AFTER we start
+  // however that would have the client_channel plugin call this AFTER we start
   // registering resolvers from third party plugins, and so they'd never show
   // up.
   // We likely need some kind of dependency system for plugins.... what form
diff --git a/src/core/ext/client_config/resolver_registry.h b/src/core/ext/client_channel/resolver_registry.h
similarity index 92%
rename from src/core/ext/client_config/resolver_registry.h
rename to src/core/ext/client_channel/resolver_registry.h
index 4c6279b978906368eb7a38821af557906b5accd3..0a39d4a1878194dc41beaa76acb2807e8cd34246 100644
--- a/src/core/ext/client_config/resolver_registry.h
+++ b/src/core/ext/client_channel/resolver_registry.h
@@ -31,10 +31,10 @@
  *
  */
 
-#ifndef GRPC_CORE_EXT_CLIENT_CONFIG_RESOLVER_REGISTRY_H
-#define GRPC_CORE_EXT_CLIENT_CONFIG_RESOLVER_REGISTRY_H
+#ifndef GRPC_CORE_EXT_CLIENT_CHANNEL_RESOLVER_REGISTRY_H
+#define GRPC_CORE_EXT_CLIENT_CHANNEL_RESOLVER_REGISTRY_H
 
-#include "src/core/ext/client_config/resolver_factory.h"
+#include "src/core/ext/client_channel/resolver_factory.h"
 
 void grpc_resolver_registry_init();
 void grpc_resolver_registry_shutdown(void);
@@ -68,4 +68,4 @@ grpc_resolver_factory *grpc_resolver_factory_lookup(const char *name);
     representing the default authority to pass from a client. */
 char *grpc_get_default_authority(const char *target);
 
-#endif /* GRPC_CORE_EXT_CLIENT_CONFIG_RESOLVER_REGISTRY_H */
+#endif /* GRPC_CORE_EXT_CLIENT_CHANNEL_RESOLVER_REGISTRY_H */
diff --git a/src/core/ext/client_config/resolver_result.c b/src/core/ext/client_channel/resolver_result.c
similarity index 98%
rename from src/core/ext/client_config/resolver_result.c
rename to src/core/ext/client_channel/resolver_result.c
index 63480d152b7f773f221ec71f3e03a7e9481e32aa..ab1c215955b56dc6001986e78727184d15cd213f 100644
--- a/src/core/ext/client_config/resolver_result.c
+++ b/src/core/ext/client_channel/resolver_result.c
@@ -29,7 +29,7 @@
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 //
 
-#include "src/core/ext/client_config/resolver_result.h"
+#include "src/core/ext/client_channel/resolver_result.h"
 
 #include <string.h>
 
diff --git a/src/core/ext/client_config/resolver_result.h b/src/core/ext/client_channel/resolver_result.h
similarity index 91%
rename from src/core/ext/client_config/resolver_result.h
rename to src/core/ext/client_channel/resolver_result.h
index a7ea7c0f4b84f699f485143c27768bc8e716d9ef..5421fd9470591d280d73852f9fae12e8e37f3ef8 100644
--- a/src/core/ext/client_config/resolver_result.h
+++ b/src/core/ext/client_channel/resolver_result.h
@@ -29,11 +29,10 @@
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 //
 
-#ifndef GRPC_CORE_EXT_CLIENT_CONFIG_RESOLVER_RESULT_H
-#define GRPC_CORE_EXT_CLIENT_CONFIG_RESOLVER_RESULT_H
+#ifndef GRPC_CORE_EXT_CLIENT_CHANNEL_RESOLVER_RESULT_H
+#define GRPC_CORE_EXT_CLIENT_CHANNEL_RESOLVER_RESULT_H
 
-#include "src/core/ext/client_config/lb_policy_factory.h"
-#include "src/core/lib/iomgr/resolve_address.h"
+#include "src/core/ext/client_channel/lb_policy_factory.h"
 
 // TODO(roth, ctiller): In the long term, we are considering replacing
 // the resolver_result data structure with grpc_channel_args.  The idea is
@@ -66,4 +65,4 @@ const char* grpc_resolver_result_get_lb_policy_name(
 grpc_channel_args* grpc_resolver_result_get_lb_policy_args(
     grpc_resolver_result* result);
 
-#endif /* GRPC_CORE_EXT_CLIENT_CONFIG_RESOLVER_RESULT_H */
+#endif /* GRPC_CORE_EXT_CLIENT_CHANNEL_RESOLVER_RESULT_H */
diff --git a/src/core/ext/client_config/subchannel.c b/src/core/ext/client_channel/subchannel.c
similarity index 99%
rename from src/core/ext/client_config/subchannel.c
rename to src/core/ext/client_channel/subchannel.c
index c531b3b1a809e7c420ec58d327fe22a52821e908..672e5c3a9137864249efde4ad8bb3354814351b9 100644
--- a/src/core/ext/client_config/subchannel.c
+++ b/src/core/ext/client_channel/subchannel.c
@@ -31,7 +31,7 @@
  *
  */
 
-#include "src/core/ext/client_config/subchannel.h"
+#include "src/core/ext/client_channel/subchannel.h"
 
 #include <limits.h>
 #include <string.h>
@@ -39,9 +39,9 @@
 #include <grpc/support/alloc.h>
 #include <grpc/support/avl.h>
 
-#include "src/core/ext/client_config/client_channel.h"
-#include "src/core/ext/client_config/initial_connect_string.h"
-#include "src/core/ext/client_config/subchannel_index.h"
+#include "src/core/ext/client_channel/client_channel.h"
+#include "src/core/ext/client_channel/initial_connect_string.h"
+#include "src/core/ext/client_channel/subchannel_index.h"
 #include "src/core/lib/channel/channel_args.h"
 #include "src/core/lib/channel/connected_channel.h"
 #include "src/core/lib/iomgr/timer.h"
diff --git a/src/core/ext/client_config/subchannel.h b/src/core/ext/client_channel/subchannel.h
similarity index 97%
rename from src/core/ext/client_config/subchannel.h
rename to src/core/ext/client_channel/subchannel.h
index f8de26dfd5130b1ed9ff47ede4ed744416135e0d..c4a7da0c24a16e602eb6e95df96de25af5360f13 100644
--- a/src/core/ext/client_config/subchannel.h
+++ b/src/core/ext/client_channel/subchannel.h
@@ -31,10 +31,10 @@
  *
  */
 
-#ifndef GRPC_CORE_EXT_CLIENT_CONFIG_SUBCHANNEL_H
-#define GRPC_CORE_EXT_CLIENT_CONFIG_SUBCHANNEL_H
+#ifndef GRPC_CORE_EXT_CLIENT_CHANNEL_SUBCHANNEL_H
+#define GRPC_CORE_EXT_CLIENT_CHANNEL_SUBCHANNEL_H
 
-#include "src/core/ext/client_config/connector.h"
+#include "src/core/ext/client_channel/connector.h"
 #include "src/core/lib/channel/channel_stack.h"
 #include "src/core/lib/iomgr/polling_entity.h"
 #include "src/core/lib/transport/connectivity_state.h"
@@ -176,4 +176,4 @@ grpc_subchannel *grpc_subchannel_create(grpc_exec_ctx *exec_ctx,
                                         grpc_connector *connector,
                                         grpc_subchannel_args *args);
 
-#endif /* GRPC_CORE_EXT_CLIENT_CONFIG_SUBCHANNEL_H */
+#endif /* GRPC_CORE_EXT_CLIENT_CHANNEL_SUBCHANNEL_H */
diff --git a/src/core/ext/client_config/subchannel_index.c b/src/core/ext/client_channel/subchannel_index.c
similarity index 99%
rename from src/core/ext/client_config/subchannel_index.c
rename to src/core/ext/client_channel/subchannel_index.c
index 673f85b8cbcabc8c053b4243b4448f2917edc206..bf22975fba4c126ec172fcf42c3da1461e2f4436 100644
--- a/src/core/ext/client_config/subchannel_index.c
+++ b/src/core/ext/client_channel/subchannel_index.c
@@ -31,7 +31,7 @@
 //
 //
 
-#include "src/core/ext/client_config/subchannel_index.h"
+#include "src/core/ext/client_channel/subchannel_index.h"
 
 #include <stdbool.h>
 #include <string.h>
diff --git a/src/core/ext/client_config/subchannel_index.h b/src/core/ext/client_channel/subchannel_index.h
similarity index 92%
rename from src/core/ext/client_config/subchannel_index.h
rename to src/core/ext/client_channel/subchannel_index.h
index 6b8d063855e52479e1b22778cf3e17a365e736cd..5b3af6b05463fe1d398083911c52fbacdc993998 100644
--- a/src/core/ext/client_config/subchannel_index.h
+++ b/src/core/ext/client_channel/subchannel_index.h
@@ -31,11 +31,11 @@
  *
  */
 
-#ifndef GRPC_CORE_EXT_CLIENT_CONFIG_SUBCHANNEL_INDEX_H
-#define GRPC_CORE_EXT_CLIENT_CONFIG_SUBCHANNEL_INDEX_H
+#ifndef GRPC_CORE_EXT_CLIENT_CHANNEL_SUBCHANNEL_INDEX_H
+#define GRPC_CORE_EXT_CLIENT_CHANNEL_SUBCHANNEL_INDEX_H
 
-#include "src/core/ext/client_config/connector.h"
-#include "src/core/ext/client_config/subchannel.h"
+#include "src/core/ext/client_channel/connector.h"
+#include "src/core/ext/client_channel/subchannel.h"
 
 /** \file Provides an index of active subchannels so that they can be
     shared amongst channels */
@@ -74,4 +74,4 @@ void grpc_subchannel_index_init(void);
 /** Shutdown the subchannel index (global) */
 void grpc_subchannel_index_shutdown(void);
 
-#endif /* GRPC_CORE_EXT_CLIENT_CONFIG_SUBCHANNEL_INDEX_H */
+#endif /* GRPC_CORE_EXT_CLIENT_CHANNEL_SUBCHANNEL_INDEX_H */
diff --git a/src/core/ext/client_config/uri_parser.c b/src/core/ext/client_channel/uri_parser.c
similarity index 99%
rename from src/core/ext/client_config/uri_parser.c
rename to src/core/ext/client_channel/uri_parser.c
index 3ca1a58e692a98eca408ca6dd4f03ba0ee32125a..bcb6a1dee4383c68e6a19d2a19153ada0e1c96da 100644
--- a/src/core/ext/client_config/uri_parser.c
+++ b/src/core/ext/client_channel/uri_parser.c
@@ -31,7 +31,7 @@
  *
  */
 
-#include "src/core/ext/client_config/uri_parser.h"
+#include "src/core/ext/client_channel/uri_parser.h"
 
 #include <string.h>
 
diff --git a/src/core/ext/client_config/uri_parser.h b/src/core/ext/client_channel/uri_parser.h
similarity index 93%
rename from src/core/ext/client_config/uri_parser.h
rename to src/core/ext/client_channel/uri_parser.h
index 875a7cb07ca8036a52e503a55dca3391fc781156..5fe0e8f35e3d4bbca84a4b93805e2d5384f12659 100644
--- a/src/core/ext/client_config/uri_parser.h
+++ b/src/core/ext/client_channel/uri_parser.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef GRPC_CORE_EXT_CLIENT_CONFIG_URI_PARSER_H
-#define GRPC_CORE_EXT_CLIENT_CONFIG_URI_PARSER_H
+#ifndef GRPC_CORE_EXT_CLIENT_CHANNEL_URI_PARSER_H
+#define GRPC_CORE_EXT_CLIENT_CHANNEL_URI_PARSER_H
 
 #include <stddef.h>
 
@@ -60,4 +60,4 @@ const char *grpc_uri_get_query_arg(const grpc_uri *uri, const char *key);
 /** destroy a uri */
 void grpc_uri_destroy(grpc_uri *uri);
 
-#endif /* GRPC_CORE_EXT_CLIENT_CONFIG_URI_PARSER_H */
+#endif /* GRPC_CORE_EXT_CLIENT_CHANNEL_URI_PARSER_H */
diff --git a/src/core/ext/lb_policy/grpclb/grpclb.c b/src/core/ext/lb_policy/grpclb/grpclb.c
index b24b522449dc520c4330f1d5f63a3c2f488494ca..412090158ae2814199f413394bd936bdfe87b0d2 100644
--- a/src/core/ext/lb_policy/grpclb/grpclb.c
+++ b/src/core/ext/lb_policy/grpclb/grpclb.c
@@ -107,10 +107,10 @@
 #include <grpc/support/string_util.h>
 #include <grpc/support/time.h>
 
-#include "src/core/ext/client_config/client_channel_factory.h"
-#include "src/core/ext/client_config/lb_policy_factory.h"
-#include "src/core/ext/client_config/lb_policy_registry.h"
-#include "src/core/ext/client_config/parse_address.h"
+#include "src/core/ext/client_channel/client_channel_factory.h"
+#include "src/core/ext/client_channel/lb_policy_factory.h"
+#include "src/core/ext/client_channel/lb_policy_registry.h"
+#include "src/core/ext/client_channel/parse_address.h"
 #include "src/core/ext/lb_policy/grpclb/grpclb.h"
 #include "src/core/ext/lb_policy/grpclb/load_balancer_api.h"
 #include "src/core/lib/channel/channel_args.h"
diff --git a/src/core/ext/lb_policy/grpclb/grpclb.h b/src/core/ext/lb_policy/grpclb/grpclb.h
index 83552b4fa020cb55de57400217490ee1e757039b..ff23f3a54586f39f45a5146a9a1b55fca5c21c08 100644
--- a/src/core/ext/lb_policy/grpclb/grpclb.h
+++ b/src/core/ext/lb_policy/grpclb/grpclb.h
@@ -34,7 +34,7 @@
 #ifndef GRPC_CORE_EXT_LB_POLICY_GRPCLB_GRPCLB_H
 #define GRPC_CORE_EXT_LB_POLICY_GRPCLB_GRPCLB_H
 
-#include "src/core/ext/client_config/lb_policy_factory.h"
+#include "src/core/ext/client_channel/lb_policy_factory.h"
 
 /** Returns a load balancing factory for the glb policy, which tries to connect
  * to a load balancing server to decide the next successfully connected
diff --git a/src/core/ext/lb_policy/grpclb/load_balancer_api.h b/src/core/ext/lb_policy/grpclb/load_balancer_api.h
index c1e73d08effcecce8d3ab7a35445634eb32dc907..079a64a3f320c57dcb83d16f18a5531ddbba8581 100644
--- a/src/core/ext/lb_policy/grpclb/load_balancer_api.h
+++ b/src/core/ext/lb_policy/grpclb/load_balancer_api.h
@@ -36,7 +36,7 @@
 
 #include <grpc/support/slice_buffer.h>
 
-#include "src/core/ext/client_config/lb_policy_factory.h"
+#include "src/core/ext/client_channel/lb_policy_factory.h"
 #include "src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h"
 
 #ifdef __cplusplus
diff --git a/src/core/ext/lb_policy/pick_first/pick_first.c b/src/core/ext/lb_policy/pick_first/pick_first.c
index da20b9281bae9e83d4de2bef760ba2291b534133..270fe3fe702529de76bf2e5993295f92632484cd 100644
--- a/src/core/ext/lb_policy/pick_first/pick_first.c
+++ b/src/core/ext/lb_policy/pick_first/pick_first.c
@@ -34,7 +34,7 @@
 #include <string.h>
 
 #include <grpc/support/alloc.h>
-#include "src/core/ext/client_config/lb_policy_registry.h"
+#include "src/core/ext/client_channel/lb_policy_registry.h"
 #include "src/core/lib/transport/connectivity_state.h"
 
 typedef struct pending_pick {
diff --git a/src/core/ext/lb_policy/round_robin/round_robin.c b/src/core/ext/lb_policy/round_robin/round_robin.c
index b8f4f67aeba5d0879559a68c274f7bba2e2969d6..b32f6be99e19848e954b7f0efc2aed19f4f7cf01 100644
--- a/src/core/ext/lb_policy/round_robin/round_robin.c
+++ b/src/core/ext/lb_policy/round_robin/round_robin.c
@@ -63,7 +63,7 @@
 
 #include <grpc/support/alloc.h>
 
-#include "src/core/ext/client_config/lb_policy_registry.h"
+#include "src/core/ext/client_channel/lb_policy_registry.h"
 #include "src/core/lib/debug/trace.h"
 #include "src/core/lib/transport/connectivity_state.h"
 #include "src/core/lib/transport/static_metadata.h"
diff --git a/src/core/ext/load_reporting/load_reporting.h b/src/core/ext/load_reporting/load_reporting.h
index e13097654d5aec038cfb03f1516775de65a3110c..a157844734e8acf424a4ecfff43dc14839b73125 100644
--- a/src/core/ext/load_reporting/load_reporting.h
+++ b/src/core/ext/load_reporting/load_reporting.h
@@ -51,7 +51,7 @@
  * The value corresponding to this key is an opaque binary blob reported by the
  * backend as part of its trailing metadata containing cost information for the
  * call. */
-#define GRPC_LB_COST_MD_KEY "lb-cost"
+#define GRPC_LB_COST_MD_KEY "lb-cost-bin"
 
 /** Identifiers for the invocation point of the users LR callback */
 typedef enum grpc_load_reporting_source {
diff --git a/src/core/ext/load_reporting/load_reporting_filter.c b/src/core/ext/load_reporting/load_reporting_filter.c
index 22bf36367f6d51c469f250318525e2659d99e049..eeae2400fbc80c8dd1cd37a35bbd7b73ff333b05 100644
--- a/src/core/ext/load_reporting/load_reporting_filter.c
+++ b/src/core/ext/load_reporting/load_reporting_filter.c
@@ -193,7 +193,7 @@ static grpc_mdelem *lr_trailing_md_filter(void *user_data, grpc_mdelem *md) {
   grpc_call_element *elem = user_data;
   call_data *calld = elem->call_data;
 
-  if (md->key == GRPC_MDSTR_LB_COST) {
+  if (md->key == GRPC_MDSTR_LB_COST_BIN) {
     calld->trailing_md_string = gpr_strdup(grpc_mdstr_as_c_string(md->value));
     return NULL;
   }
diff --git a/src/core/ext/resolver/dns/native/dns_resolver.c b/src/core/ext/resolver/dns/native/dns_resolver.c
index fa33ffd7bd5111320ffcfc721a030ff050439cc9..b4ceee340e904d80109bbaa90baf478471950ae8 100644
--- a/src/core/ext/resolver/dns/native/dns_resolver.c
+++ b/src/core/ext/resolver/dns/native/dns_resolver.c
@@ -37,9 +37,9 @@
 #include <grpc/support/host_port.h>
 #include <grpc/support/string_util.h>
 
-#include "src/core/ext/client_config/http_connect_handshaker.h"
-#include "src/core/ext/client_config/lb_policy_registry.h"
-#include "src/core/ext/client_config/resolver_registry.h"
+#include "src/core/ext/client_channel/http_connect_handshaker.h"
+#include "src/core/ext/client_channel/lb_policy_registry.h"
+#include "src/core/ext/client_channel/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"
diff --git a/src/core/ext/resolver/sockaddr/sockaddr_resolver.c b/src/core/ext/resolver/sockaddr/sockaddr_resolver.c
index 28dd2569e8101e7ab8f5adda9874261842b2ddeb..9924fc6fec23324c05bca25bc0e42f8a9e09b3bd 100644
--- a/src/core/ext/resolver/sockaddr/sockaddr_resolver.c
+++ b/src/core/ext/resolver/sockaddr/sockaddr_resolver.c
@@ -41,9 +41,8 @@
 #include <grpc/support/port_platform.h>
 #include <grpc/support/string_util.h>
 
-#include "src/core/ext/client_config/parse_address.h"
-#include "src/core/ext/client_config/resolver_registry.h"
-#include "src/core/lib/channel/channel_args.h"
+#include "src/core/ext/client_channel/parse_address.h"
+#include "src/core/ext/client_channel/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"
diff --git a/src/core/ext/transport/chttp2/client/insecure/channel_create.c b/src/core/ext/transport/chttp2/client/insecure/channel_create.c
index c2b59569fd32e2252071187e6bcea4f96a0a6f0d..4b1764ad436523918c259c7375b6b17288fa0637 100644
--- a/src/core/ext/transport/chttp2/client/insecure/channel_create.c
+++ b/src/core/ext/transport/chttp2/client/insecure/channel_create.c
@@ -40,9 +40,9 @@
 #include <grpc/support/slice.h>
 #include <grpc/support/slice_buffer.h>
 
-#include "src/core/ext/client_config/client_channel.h"
-#include "src/core/ext/client_config/http_connect_handshaker.h"
-#include "src/core/ext/client_config/resolver_registry.h"
+#include "src/core/ext/client_channel/client_channel.h"
+#include "src/core/ext/client_channel/http_connect_handshaker.h"
+#include "src/core/ext/client_channel/resolver_registry.h"
 #include "src/core/ext/transport/chttp2/transport/chttp2_transport.h"
 #include "src/core/lib/channel/channel_args.h"
 #include "src/core/lib/channel/compress_filter.h"
diff --git a/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c b/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c
index 31c54ff74c61e8656e204439164d3cdcaaa54791..1e27d88fe684898394554e37ff6edb7f7f8168fd 100644
--- a/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c
+++ b/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c
@@ -40,9 +40,9 @@
 #include <grpc/support/slice.h>
 #include <grpc/support/slice_buffer.h>
 
-#include "src/core/ext/client_config/client_channel.h"
-#include "src/core/ext/client_config/http_connect_handshaker.h"
-#include "src/core/ext/client_config/resolver_registry.h"
+#include "src/core/ext/client_channel/client_channel.h"
+#include "src/core/ext/client_channel/http_connect_handshaker.h"
+#include "src/core/ext/client_channel/resolver_registry.h"
 #include "src/core/ext/transport/chttp2/transport/chttp2_transport.h"
 #include "src/core/lib/channel/channel_args.h"
 #include "src/core/lib/channel/handshaker.h"
@@ -290,8 +290,6 @@ static grpc_channel *client_channel_factory_create_channel(
     channel = NULL;
   }
 
-  GRPC_SECURITY_CONNECTOR_UNREF(&f->security_connector->base,
-                                "client_channel_factory_create_channel");
   return channel;
 }
 
@@ -360,6 +358,9 @@ grpc_channel *grpc_secure_channel_create(grpc_channel_credentials *creds,
   grpc_channel *channel = client_channel_factory_create_channel(
       &exec_ctx, &f->base, target, GRPC_CLIENT_CHANNEL_TYPE_REGULAR, NULL);
 
+  GRPC_SECURITY_CONNECTOR_UNREF(&f->security_connector->base,
+                                "client_channel_factory_create_channel");
+
   grpc_client_channel_factory_unref(&exec_ctx, &f->base);
   grpc_exec_ctx_finish(&exec_ctx);
 
diff --git a/src/core/lib/channel/http_server_filter.c b/src/core/lib/channel/http_server_filter.c
index 0f2bf97824b217b72bfe35c46e6c36348f40c218..f2221fb0fbe3e939279e105acf7acbbd53826bc6 100644
--- a/src/core/lib/channel/http_server_filter.c
+++ b/src/core/lib/channel/http_server_filter.c
@@ -42,6 +42,8 @@
 #define EXPECTED_CONTENT_TYPE "application/grpc"
 #define EXPECTED_CONTENT_TYPE_LENGTH sizeof(EXPECTED_CONTENT_TYPE) - 1
 
+extern int grpc_http_trace;
+
 typedef struct call_data {
   uint8_t seen_path;
   uint8_t seen_method;
@@ -209,6 +211,11 @@ static void hs_on_recv(grpc_exec_ctx *exec_ctx, void *user_data,
             err, GRPC_ERROR_CREATE("Missing te: trailers header"));
       }
       /* Error this call out */
+      if (grpc_http_trace) {
+        const char *error_str = grpc_error_string(err);
+        gpr_log(GPR_ERROR, "Invalid http2 headers: %s", error_str);
+        grpc_error_free_string(error_str);
+      }
       grpc_call_element_send_cancel(exec_ctx, elem);
     }
   } else {
diff --git a/src/core/lib/channel/message_size_filter.c b/src/core/lib/channel/message_size_filter.c
index c402cf78a3689fd57803a298ba5555e5ac360435..b8b25460356c3a5fd3be55acf7fd857ada01c781 100644
--- a/src/core/lib/channel/message_size_filter.c
+++ b/src/core/lib/channel/message_size_filter.c
@@ -38,7 +38,7 @@
 #include <grpc/support/log.h>
 #include <grpc/support/string_util.h>
 
-#include "src/core/ext/client_config/method_config.h"
+#include "src/core/ext/client_channel/method_config.h"
 #include "src/core/lib/channel/channel_args.h"
 
 #define DEFAULT_MAX_SEND_MESSAGE_LENGTH -1  // Unlimited.
diff --git a/src/core/lib/transport/static_metadata.c b/src/core/lib/transport/static_metadata.c
index f019ef156a778c061702417203f54a9b330fd802..8b22592b45dec33975cd41164f2a3dc70285f73f 100644
--- a/src/core/lib/transport/static_metadata.c
+++ b/src/core/lib/transport/static_metadata.c
@@ -126,7 +126,7 @@ const char *const grpc_static_metadata_strings[GRPC_STATIC_MDSTR_COUNT] = {
     "if-range",
     "if-unmodified-since",
     "last-modified",
-    "lb-cost",
+    "lb-cost-bin",
     "lb-token",
     "link",
     "location",
diff --git a/src/core/lib/transport/static_metadata.h b/src/core/lib/transport/static_metadata.h
index e0a8196419e5db8cefaf3b4b3c4177c00585dfad..28ad6f2961afc6fe7f80ca0489f3c94a341fc9c6 100644
--- a/src/core/lib/transport/static_metadata.h
+++ b/src/core/lib/transport/static_metadata.h
@@ -175,8 +175,8 @@ extern grpc_mdstr grpc_static_mdstr_table[GRPC_STATIC_MDSTR_COUNT];
 #define GRPC_MDSTR_IF_UNMODIFIED_SINCE (&grpc_static_mdstr_table[62])
 /* "last-modified" */
 #define GRPC_MDSTR_LAST_MODIFIED (&grpc_static_mdstr_table[63])
-/* "lb-cost" */
-#define GRPC_MDSTR_LB_COST (&grpc_static_mdstr_table[64])
+/* "lb-cost-bin" */
+#define GRPC_MDSTR_LB_COST_BIN (&grpc_static_mdstr_table[64])
 /* "lb-token" */
 #define GRPC_MDSTR_LB_TOKEN (&grpc_static_mdstr_table[65])
 /* "link" */
@@ -337,8 +337,8 @@ extern uintptr_t grpc_static_mdelem_user_data[GRPC_STATIC_MDELEM_COUNT];
 #define GRPC_MDELEM_IF_UNMODIFIED_SINCE_EMPTY (&grpc_static_mdelem_table[44])
 /* "last-modified": "" */
 #define GRPC_MDELEM_LAST_MODIFIED_EMPTY (&grpc_static_mdelem_table[45])
-/* "lb-cost": "" */
-#define GRPC_MDELEM_LB_COST_EMPTY (&grpc_static_mdelem_table[46])
+/* "lb-cost-bin": "" */
+#define GRPC_MDELEM_LB_COST_BIN_EMPTY (&grpc_static_mdelem_table[46])
 /* "lb-token": "" */
 #define GRPC_MDELEM_LB_TOKEN_EMPTY (&grpc_static_mdelem_table[47])
 /* "link": "" */
diff --git a/src/core/plugin_registry/grpc_cronet_plugin_registry.c b/src/core/plugin_registry/grpc_cronet_plugin_registry.c
index d0b5f5c702782231811b20400dc30d33fe461dc4..d339ed327fdc3a3ae7f35c176b9212275b52ed69 100644
--- a/src/core/plugin_registry/grpc_cronet_plugin_registry.c
+++ b/src/core/plugin_registry/grpc_cronet_plugin_registry.c
@@ -35,12 +35,12 @@
 
 extern void grpc_chttp2_plugin_init(void);
 extern void grpc_chttp2_plugin_shutdown(void);
-extern void grpc_client_config_init(void);
-extern void grpc_client_config_shutdown(void);
+extern void grpc_client_channel_init(void);
+extern void grpc_client_channel_shutdown(void);
 
 void grpc_register_built_in_plugins(void) {
   grpc_register_plugin(grpc_chttp2_plugin_init,
                        grpc_chttp2_plugin_shutdown);
-  grpc_register_plugin(grpc_client_config_init,
-                       grpc_client_config_shutdown);
+  grpc_register_plugin(grpc_client_channel_init,
+                       grpc_client_channel_shutdown);
 }
diff --git a/src/core/plugin_registry/grpc_plugin_registry.c b/src/core/plugin_registry/grpc_plugin_registry.c
index 7a7a9ce477a59580516a1cdbde92c9543c269a6b..2efd9cd1ad7a76043371a436910b96e9210f4318 100644
--- a/src/core/plugin_registry/grpc_plugin_registry.c
+++ b/src/core/plugin_registry/grpc_plugin_registry.c
@@ -35,8 +35,8 @@
 
 extern void grpc_chttp2_plugin_init(void);
 extern void grpc_chttp2_plugin_shutdown(void);
-extern void grpc_client_config_init(void);
-extern void grpc_client_config_shutdown(void);
+extern void grpc_client_channel_init(void);
+extern void grpc_client_channel_shutdown(void);
 extern void grpc_lb_policy_grpclb_init(void);
 extern void grpc_lb_policy_grpclb_shutdown(void);
 extern void grpc_lb_policy_pick_first_init(void);
@@ -55,8 +55,8 @@ extern void census_grpc_plugin_shutdown(void);
 void grpc_register_built_in_plugins(void) {
   grpc_register_plugin(grpc_chttp2_plugin_init,
                        grpc_chttp2_plugin_shutdown);
-  grpc_register_plugin(grpc_client_config_init,
-                       grpc_client_config_shutdown);
+  grpc_register_plugin(grpc_client_channel_init,
+                       grpc_client_channel_shutdown);
   grpc_register_plugin(grpc_lb_policy_grpclb_init,
                        grpc_lb_policy_grpclb_shutdown);
   grpc_register_plugin(grpc_lb_policy_pick_first_init,
diff --git a/src/core/plugin_registry/grpc_unsecure_plugin_registry.c b/src/core/plugin_registry/grpc_unsecure_plugin_registry.c
index ad4ddf0ff4803488a4583f1a560ebe30a0f26249..8b18af699dbc1b3fa0e71f10ab0a5751a3b0065b 100644
--- a/src/core/plugin_registry/grpc_unsecure_plugin_registry.c
+++ b/src/core/plugin_registry/grpc_unsecure_plugin_registry.c
@@ -35,8 +35,8 @@
 
 extern void grpc_chttp2_plugin_init(void);
 extern void grpc_chttp2_plugin_shutdown(void);
-extern void grpc_client_config_init(void);
-extern void grpc_client_config_shutdown(void);
+extern void grpc_client_channel_init(void);
+extern void grpc_client_channel_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);
@@ -55,8 +55,8 @@ extern void census_grpc_plugin_shutdown(void);
 void grpc_register_built_in_plugins(void) {
   grpc_register_plugin(grpc_chttp2_plugin_init,
                        grpc_chttp2_plugin_shutdown);
-  grpc_register_plugin(grpc_client_config_init,
-                       grpc_client_config_shutdown);
+  grpc_register_plugin(grpc_client_channel_init,
+                       grpc_client_channel_shutdown);
   grpc_register_plugin(grpc_resolver_dns_native_init,
                        grpc_resolver_dns_native_shutdown);
   grpc_register_plugin(grpc_resolver_sockaddr_init,
diff --git a/src/csharp/Grpc.Auth/GoogleAuthInterceptors.cs b/src/csharp/Grpc.Auth/GoogleAuthInterceptors.cs
index 96d6ee87ae4d4a0113ed98228ffdbc3043eab497..722b51f470cd5af896fed7787f170e8850828d62 100644
--- a/src/csharp/Grpc.Auth/GoogleAuthInterceptors.cs
+++ b/src/csharp/Grpc.Auth/GoogleAuthInterceptors.cs
@@ -33,6 +33,7 @@
 
 using System;
 using System.Threading;
+using System.Threading.Tasks;
 
 using Google.Apis.Auth.OAuth2;
 using Grpc.Core;
@@ -72,9 +73,10 @@ namespace Grpc.Auth
         public static AsyncAuthInterceptor FromAccessToken(string accessToken)
         {
             GrpcPreconditions.CheckNotNull(accessToken);
-            return new AsyncAuthInterceptor(async (context, metadata) =>
+            return new AsyncAuthInterceptor((context, metadata) =>
             {
                 metadata.Add(CreateBearerTokenHeader(accessToken));
+                return Task.FromResult<object>(null);
             });
         }
 
diff --git a/src/csharp/Grpc.Core/DefaultCallInvoker.cs b/src/csharp/Grpc.Core/DefaultCallInvoker.cs
index 1a99e41153b3bd5c0419bbe141c97006aaa8676e..b15aaefcd6a6aa5758590ca0bce0533cdeb022e1 100644
--- a/src/csharp/Grpc.Core/DefaultCallInvoker.cs
+++ b/src/csharp/Grpc.Core/DefaultCallInvoker.cs
@@ -102,6 +102,7 @@ namespace Grpc.Core
             return Calls.AsyncDuplexStreamingCall(call);
         }
 
+        /// <summary>Creates call invocation details for given method.</summary>
         protected virtual CallInvocationDetails<TRequest, TResponse> CreateCall<TRequest, TResponse>(Method<TRequest, TResponse> method, string host, CallOptions options)
                 where TRequest : class
                 where TResponse : class
diff --git a/src/csharp/Grpc.Core/Grpc.Core.csproj b/src/csharp/Grpc.Core/Grpc.Core.csproj
index 622813fb3813680007e93186fcfdf9fbea275e16..e75dc9faf1ec865ea37d46ba6c44d56f08497e62 100644
--- a/src/csharp/Grpc.Core/Grpc.Core.csproj
+++ b/src/csharp/Grpc.Core/Grpc.Core.csproj
@@ -138,6 +138,7 @@
     <Compile Include="Internal\CallError.cs" />
     <Compile Include="Logging\LogLevel.cs" />
     <Compile Include="Logging\LogLevelFilterLogger.cs" />
+    <Compile Include="Internal\RequestCallContextSafeHandle.cs" />
   </ItemGroup>
   <ItemGroup>
     <None Include="Grpc.Core.nuspec" />
diff --git a/src/csharp/Grpc.Core/GrpcEnvironment.cs b/src/csharp/Grpc.Core/GrpcEnvironment.cs
index 3ed2df203de3c182c8896b6ab06f6099d3cf3dd8..c57c904eb9d4ad4e478e4046310357bcafb8ed2a 100644
--- a/src/csharp/Grpc.Core/GrpcEnvironment.cs
+++ b/src/csharp/Grpc.Core/GrpcEnvironment.cs
@@ -59,7 +59,6 @@ namespace Grpc.Core
 
         static ILogger logger = new NullLogger();
 
-        readonly object myLock = new object();
         readonly GrpcThreadPool threadPool;
         readonly DebugStats debugStats = new DebugStats();
         readonly AtomicCounter cqPickerCounter = new AtomicCounter();
diff --git a/src/csharp/Grpc.Core/Internal/BatchContextSafeHandle.cs b/src/csharp/Grpc.Core/Internal/BatchContextSafeHandle.cs
index c28a6f64d39f3a4b170d06247f51b41466bb9556..26449ee53937156ad06e9a71c387025e63ef95bd 100644
--- a/src/csharp/Grpc.Core/Internal/BatchContextSafeHandle.cs
+++ b/src/csharp/Grpc.Core/Internal/BatchContextSafeHandle.cs
@@ -93,21 +93,6 @@ namespace Grpc.Core.Internal
             return data;
         }
 
-        // Gets data of server_rpc_new completion.
-        public ServerRpcNew GetServerRpcNew(Server server)
-        {
-            var call = Native.grpcsharp_batch_context_server_rpc_new_call(this);
-
-            var method = Marshal.PtrToStringAnsi(Native.grpcsharp_batch_context_server_rpc_new_method(this));
-            var host = Marshal.PtrToStringAnsi(Native.grpcsharp_batch_context_server_rpc_new_host(this));
-            var deadline = Native.grpcsharp_batch_context_server_rpc_new_deadline(this);
-
-            IntPtr metadataArrayPtr = Native.grpcsharp_batch_context_server_rpc_new_request_metadata(this);
-            var metadata = MetadataArraySafeHandle.ReadMetadataFromPtrUnsafe(metadataArrayPtr);
-
-            return new ServerRpcNew(server, call, method, host, deadline, metadata);
-        }
-
         // Gets data of receive_close_on_server completion.
         public bool GetReceivedCloseOnServerCancelled()
         {
diff --git a/src/csharp/Grpc.Core/Internal/CompletionRegistry.cs b/src/csharp/Grpc.Core/Internal/CompletionRegistry.cs
index 628844f242218d9228bbb5536356fbab70e05f40..7e2f0e9c6c9ed4803309e76e1a2cdc459d9ae892 100644
--- a/src/csharp/Grpc.Core/Internal/CompletionRegistry.cs
+++ b/src/csharp/Grpc.Core/Internal/CompletionRegistry.cs
@@ -44,6 +44,8 @@ namespace Grpc.Core.Internal
 
     internal delegate void BatchCompletionDelegate(bool success, BatchContextSafeHandle ctx);
 
+    internal delegate void RequestCallCompletionDelegate(bool success, RequestCallContextSafeHandle ctx);
+
     internal class CompletionRegistry
     {
         static readonly ILogger Logger = GrpcEnvironment.Logger.ForType<CompletionRegistry>();
@@ -68,6 +70,12 @@ namespace Grpc.Core.Internal
             Register(ctx.Handle, opCallback);
         }
 
+        public void RegisterRequestCallCompletion(RequestCallContextSafeHandle ctx, RequestCallCompletionDelegate callback)
+        {
+            OpCompletionDelegate opCallback = ((success) => HandleRequestCallCompletion(success, ctx, callback));
+            Register(ctx.Handle, opCallback);
+        }
+
         public OpCompletionDelegate Extract(IntPtr key)
         {
             OpCompletionDelegate value;
@@ -84,7 +92,26 @@ namespace Grpc.Core.Internal
             }
             catch (Exception e)
             {
-                Logger.Error(e, "Exception occured while invoking completion delegate.");
+                Logger.Error(e, "Exception occured while invoking batch completion delegate.");
+            }
+            finally
+            {
+                if (ctx != null)
+                {
+                    ctx.Dispose();
+                }
+            }
+        }
+
+        private static void HandleRequestCallCompletion(bool success, RequestCallContextSafeHandle ctx, RequestCallCompletionDelegate callback)
+        {
+            try
+            {
+                callback(success, ctx);
+            }
+            catch (Exception e)
+            {
+                Logger.Error(e, "Exception occured while invoking request call completion delegate.");
             }
             finally
             {
diff --git a/src/csharp/Grpc.Core/Internal/InterceptingCallInvoker.cs b/src/csharp/Grpc.Core/Internal/InterceptingCallInvoker.cs
index ef48dc712121c048e392a418c3f6955c738cd569..0c63e2092a5b20a81d6f3a462154050b0a2078d9 100644
--- a/src/csharp/Grpc.Core/Internal/InterceptingCallInvoker.cs
+++ b/src/csharp/Grpc.Core/Internal/InterceptingCallInvoker.cs
@@ -48,7 +48,7 @@ namespace Grpc.Core.Internal
         readonly Func<CallOptions, CallOptions> callOptionsInterceptor;
 
         /// <summary>
-        /// Initializes a new instance of the <see cref="Grpc.Core.InterceptingCallInvoker"/> class.
+        /// Initializes a new instance of the <see cref="Grpc.Core.Internal.InterceptingCallInvoker"/> class.
         /// </summary>
         public InterceptingCallInvoker(CallInvoker callInvoker,
             Func<string, string> hostInterceptor = null,
diff --git a/src/csharp/Grpc.Core/Internal/NativeMetadataCredentialsPlugin.cs b/src/csharp/Grpc.Core/Internal/NativeMetadataCredentialsPlugin.cs
index 26af6311d529b3997dd83b6bccf9d621d63eb256..b3714481eb28c5d35e532cfb3be9db6d2b8dbf05 100644
--- a/src/csharp/Grpc.Core/Internal/NativeMetadataCredentialsPlugin.cs
+++ b/src/csharp/Grpc.Core/Internal/NativeMetadataCredentialsPlugin.cs
@@ -78,7 +78,10 @@ namespace Grpc.Core.Internal
             {
                 var context = new AuthInterceptorContext(Marshal.PtrToStringAnsi(serviceUrlPtr),
                                                          Marshal.PtrToStringAnsi(methodNamePtr));
-                StartGetMetadata(context, callbackPtr, userDataPtr);
+                // Don't await, we are in a native callback and need to return.
+                #pragma warning disable 4014
+                GetMetadataAsync(context, callbackPtr, userDataPtr);
+                #pragma warning restore 4014
             }
             catch (Exception e)
             {
@@ -87,7 +90,7 @@ namespace Grpc.Core.Internal
             }
         }
 
-        private async Task StartGetMetadata(AuthInterceptorContext context, IntPtr callbackPtr, IntPtr userDataPtr)
+        private async Task GetMetadataAsync(AuthInterceptorContext context, IntPtr callbackPtr, IntPtr userDataPtr)
         {
             try
             {
diff --git a/src/csharp/Grpc.Core/Internal/NativeMethods.cs b/src/csharp/Grpc.Core/Internal/NativeMethods.cs
index f457c9dbf1e8b3093079b1bf613301bf76f0eaba..40ba7e30cb02b125ac016d34aa736aa917216b4a 100644
--- a/src/csharp/Grpc.Core/Internal/NativeMethods.cs
+++ b/src/csharp/Grpc.Core/Internal/NativeMethods.cs
@@ -64,14 +64,17 @@ namespace Grpc.Core.Internal
         public readonly Delegates.grpcsharp_batch_context_recv_status_on_client_status_delegate grpcsharp_batch_context_recv_status_on_client_status;
         public readonly Delegates.grpcsharp_batch_context_recv_status_on_client_details_delegate grpcsharp_batch_context_recv_status_on_client_details;
         public readonly Delegates.grpcsharp_batch_context_recv_status_on_client_trailing_metadata_delegate grpcsharp_batch_context_recv_status_on_client_trailing_metadata;
-        public readonly Delegates.grpcsharp_batch_context_server_rpc_new_call_delegate grpcsharp_batch_context_server_rpc_new_call;
-        public readonly Delegates.grpcsharp_batch_context_server_rpc_new_method_delegate grpcsharp_batch_context_server_rpc_new_method;
-        public readonly Delegates.grpcsharp_batch_context_server_rpc_new_host_delegate grpcsharp_batch_context_server_rpc_new_host;
-        public readonly Delegates.grpcsharp_batch_context_server_rpc_new_deadline_delegate grpcsharp_batch_context_server_rpc_new_deadline;
-        public readonly Delegates.grpcsharp_batch_context_server_rpc_new_request_metadata_delegate grpcsharp_batch_context_server_rpc_new_request_metadata;
         public readonly Delegates.grpcsharp_batch_context_recv_close_on_server_cancelled_delegate grpcsharp_batch_context_recv_close_on_server_cancelled;
         public readonly Delegates.grpcsharp_batch_context_destroy_delegate grpcsharp_batch_context_destroy;
 
+        public readonly Delegates.grpcsharp_request_call_context_create_delegate grpcsharp_request_call_context_create;
+        public readonly Delegates.grpcsharp_request_call_context_call_delegate grpcsharp_request_call_context_call;
+        public readonly Delegates.grpcsharp_request_call_context_method_delegate grpcsharp_request_call_context_method;
+        public readonly Delegates.grpcsharp_request_call_context_host_delegate grpcsharp_request_call_context_host;
+        public readonly Delegates.grpcsharp_request_call_context_deadline_delegate grpcsharp_request_call_context_deadline;
+        public readonly Delegates.grpcsharp_request_call_context_request_metadata_delegate grpcsharp_request_call_context_request_metadata;
+        public readonly Delegates.grpcsharp_request_call_context_destroy_delegate grpcsharp_request_call_context_destroy;
+
         public readonly Delegates.grpcsharp_composite_call_credentials_create_delegate grpcsharp_composite_call_credentials_create;
         public readonly Delegates.grpcsharp_call_credentials_release_delegate grpcsharp_call_credentials_release;
 
@@ -170,14 +173,17 @@ namespace Grpc.Core.Internal
             this.grpcsharp_batch_context_recv_status_on_client_status = GetMethodDelegate<Delegates.grpcsharp_batch_context_recv_status_on_client_status_delegate>(library);
             this.grpcsharp_batch_context_recv_status_on_client_details = GetMethodDelegate<Delegates.grpcsharp_batch_context_recv_status_on_client_details_delegate>(library);
             this.grpcsharp_batch_context_recv_status_on_client_trailing_metadata = GetMethodDelegate<Delegates.grpcsharp_batch_context_recv_status_on_client_trailing_metadata_delegate>(library);
-            this.grpcsharp_batch_context_server_rpc_new_call = GetMethodDelegate<Delegates.grpcsharp_batch_context_server_rpc_new_call_delegate>(library);
-            this.grpcsharp_batch_context_server_rpc_new_method = GetMethodDelegate<Delegates.grpcsharp_batch_context_server_rpc_new_method_delegate>(library);
-            this.grpcsharp_batch_context_server_rpc_new_host = GetMethodDelegate<Delegates.grpcsharp_batch_context_server_rpc_new_host_delegate>(library);
-            this.grpcsharp_batch_context_server_rpc_new_deadline = GetMethodDelegate<Delegates.grpcsharp_batch_context_server_rpc_new_deadline_delegate>(library);
-            this.grpcsharp_batch_context_server_rpc_new_request_metadata = GetMethodDelegate<Delegates.grpcsharp_batch_context_server_rpc_new_request_metadata_delegate>(library);
             this.grpcsharp_batch_context_recv_close_on_server_cancelled = GetMethodDelegate<Delegates.grpcsharp_batch_context_recv_close_on_server_cancelled_delegate>(library);
             this.grpcsharp_batch_context_destroy = GetMethodDelegate<Delegates.grpcsharp_batch_context_destroy_delegate>(library);
 
+            this.grpcsharp_request_call_context_create = GetMethodDelegate<Delegates.grpcsharp_request_call_context_create_delegate>(library);
+            this.grpcsharp_request_call_context_call = GetMethodDelegate<Delegates.grpcsharp_request_call_context_call_delegate>(library);
+            this.grpcsharp_request_call_context_method = GetMethodDelegate<Delegates.grpcsharp_request_call_context_method_delegate>(library);
+            this.grpcsharp_request_call_context_host = GetMethodDelegate<Delegates.grpcsharp_request_call_context_host_delegate>(library);
+            this.grpcsharp_request_call_context_deadline = GetMethodDelegate<Delegates.grpcsharp_request_call_context_deadline_delegate>(library);
+            this.grpcsharp_request_call_context_request_metadata = GetMethodDelegate<Delegates.grpcsharp_request_call_context_request_metadata_delegate>(library);
+            this.grpcsharp_request_call_context_destroy = GetMethodDelegate<Delegates.grpcsharp_request_call_context_destroy_delegate>(library);
+
             this.grpcsharp_composite_call_credentials_create = GetMethodDelegate<Delegates.grpcsharp_composite_call_credentials_create_delegate>(library);
             this.grpcsharp_call_credentials_release = GetMethodDelegate<Delegates.grpcsharp_call_credentials_release_delegate>(library);
 
@@ -302,14 +308,17 @@ namespace Grpc.Core.Internal
             public delegate StatusCode grpcsharp_batch_context_recv_status_on_client_status_delegate(BatchContextSafeHandle ctx);
             public delegate IntPtr grpcsharp_batch_context_recv_status_on_client_details_delegate(BatchContextSafeHandle ctx);  // returns const char*
             public delegate IntPtr grpcsharp_batch_context_recv_status_on_client_trailing_metadata_delegate(BatchContextSafeHandle ctx);
-            public delegate CallSafeHandle grpcsharp_batch_context_server_rpc_new_call_delegate(BatchContextSafeHandle ctx);
-            public delegate IntPtr grpcsharp_batch_context_server_rpc_new_method_delegate(BatchContextSafeHandle ctx);  // returns const char*
-            public delegate IntPtr grpcsharp_batch_context_server_rpc_new_host_delegate(BatchContextSafeHandle ctx);  // returns const char*
-            public delegate Timespec grpcsharp_batch_context_server_rpc_new_deadline_delegate(BatchContextSafeHandle ctx);
-            public delegate IntPtr grpcsharp_batch_context_server_rpc_new_request_metadata_delegate(BatchContextSafeHandle ctx);
             public delegate int grpcsharp_batch_context_recv_close_on_server_cancelled_delegate(BatchContextSafeHandle ctx);
             public delegate void grpcsharp_batch_context_destroy_delegate(IntPtr ctx);
 
+            public delegate RequestCallContextSafeHandle grpcsharp_request_call_context_create_delegate();
+            public delegate CallSafeHandle grpcsharp_request_call_context_call_delegate(RequestCallContextSafeHandle ctx);
+            public delegate IntPtr grpcsharp_request_call_context_method_delegate(RequestCallContextSafeHandle ctx);  // returns const char*
+            public delegate IntPtr grpcsharp_request_call_context_host_delegate(RequestCallContextSafeHandle ctx);  // returns const char*
+            public delegate Timespec grpcsharp_request_call_context_deadline_delegate(RequestCallContextSafeHandle ctx);
+            public delegate IntPtr grpcsharp_request_call_context_request_metadata_delegate(RequestCallContextSafeHandle ctx);
+            public delegate void grpcsharp_request_call_context_destroy_delegate(IntPtr ctx);
+
             public delegate CallCredentialsSafeHandle grpcsharp_composite_call_credentials_create_delegate(CallCredentialsSafeHandle creds1, CallCredentialsSafeHandle creds2);
             public delegate void grpcsharp_call_credentials_release_delegate(IntPtr credentials);
 
@@ -393,7 +402,7 @@ namespace Grpc.Core.Internal
             public delegate int grpcsharp_server_add_insecure_http2_port_delegate(ServerSafeHandle server, string addr);
             public delegate int grpcsharp_server_add_secure_http2_port_delegate(ServerSafeHandle server, string addr, ServerCredentialsSafeHandle creds);
             public delegate void grpcsharp_server_start_delegate(ServerSafeHandle server);
-            public delegate CallError grpcsharp_server_request_call_delegate(ServerSafeHandle server, CompletionQueueSafeHandle cq, BatchContextSafeHandle ctx);
+            public delegate CallError grpcsharp_server_request_call_delegate(ServerSafeHandle server, CompletionQueueSafeHandle cq, RequestCallContextSafeHandle ctx);
             public delegate void grpcsharp_server_cancel_all_calls_delegate(ServerSafeHandle server);
             public delegate void grpcsharp_server_shutdown_and_notify_callback_delegate(ServerSafeHandle server, CompletionQueueSafeHandle cq, BatchContextSafeHandle ctx);
             public delegate void grpcsharp_server_destroy_delegate(IntPtr server);
diff --git a/src/csharp/Grpc.Core/Internal/RequestCallContextSafeHandle.cs b/src/csharp/Grpc.Core/Internal/RequestCallContextSafeHandle.cs
new file mode 100644
index 0000000000000000000000000000000000000000..ea7819d7b1f2406f7f4d3bc3b8c55d6a2018dd61
--- /dev/null
+++ b/src/csharp/Grpc.Core/Internal/RequestCallContextSafeHandle.cs
@@ -0,0 +1,85 @@
+#region Copyright notice and license
+
+// Copyright 2015, 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.
+
+#endregion
+
+using System;
+using System.Runtime.InteropServices;
+using Grpc.Core;
+
+namespace Grpc.Core.Internal
+{
+    /// <summary>
+    /// grpcsharp_request_call_context
+    /// </summary>
+    internal class RequestCallContextSafeHandle : SafeHandleZeroIsInvalid
+    {
+        static readonly NativeMethods Native = NativeMethods.Get();
+
+        private RequestCallContextSafeHandle()
+        {
+        }
+
+        public static RequestCallContextSafeHandle Create()
+        {
+            return Native.grpcsharp_request_call_context_create();
+        }
+
+        public IntPtr Handle
+        {
+            get
+            {
+                return handle;
+            }
+        }
+
+        // Gets data of server_rpc_new completion.
+        public ServerRpcNew GetServerRpcNew(Server server)
+        {
+            var call = Native.grpcsharp_request_call_context_call(this);
+
+            var method = Marshal.PtrToStringAnsi(Native.grpcsharp_request_call_context_method(this));
+            var host = Marshal.PtrToStringAnsi(Native.grpcsharp_request_call_context_host(this));
+            var deadline = Native.grpcsharp_request_call_context_deadline(this);
+
+            IntPtr metadataArrayPtr = Native.grpcsharp_request_call_context_request_metadata(this);
+            var metadata = MetadataArraySafeHandle.ReadMetadataFromPtrUnsafe(metadataArrayPtr);
+
+            return new ServerRpcNew(server, call, method, host, deadline, metadata);
+        }
+
+        protected override bool ReleaseHandle()
+        {
+            Native.grpcsharp_request_call_context_destroy(handle);
+            return true;
+        }
+    }
+}
diff --git a/src/csharp/Grpc.Core/Internal/ServerSafeHandle.cs b/src/csharp/Grpc.Core/Internal/ServerSafeHandle.cs
index 014a8db78f2bb6629b9336377fbf18ee35a5b7e6..7d7b83861623cf66328c4f27e6cdbc1174f2acf0 100644
--- a/src/csharp/Grpc.Core/Internal/ServerSafeHandle.cs
+++ b/src/csharp/Grpc.Core/Internal/ServerSafeHandle.cs
@@ -85,12 +85,12 @@ namespace Grpc.Core.Internal
             }
         }
 
-        public void RequestCall(BatchCompletionDelegate callback, CompletionQueueSafeHandle completionQueue)
+        public void RequestCall(RequestCallCompletionDelegate callback, CompletionQueueSafeHandle completionQueue)
         {
             using (completionQueue.NewScope())
             {
-                var ctx = BatchContextSafeHandle.Create();
-                completionQueue.CompletionRegistry.RegisterBatchCompletion(ctx, callback);
+                var ctx = RequestCallContextSafeHandle.Create();
+                completionQueue.CompletionRegistry.RegisterRequestCallCompletion(ctx, callback);
                 Native.grpcsharp_server_request_call(this, completionQueue, ctx).CheckOk();
             }
         }
diff --git a/src/csharp/Grpc.Core/Internal/UnmanagedLibrary.cs b/src/csharp/Grpc.Core/Internal/UnmanagedLibrary.cs
index 31e14028494719085a11d12c37c7b6239d38be46..1553bdd687e6e2631851974a591cd8f18ee60d15 100644
--- a/src/csharp/Grpc.Core/Internal/UnmanagedLibrary.cs
+++ b/src/csharp/Grpc.Core/Internal/UnmanagedLibrary.cs
@@ -134,7 +134,11 @@ namespace Grpc.Core.Internal
             {
                 throw new MissingMethodException(string.Format("The native method \"{0}\" does not exist", methodName));
             }
-            return Marshal.GetDelegateForFunctionPointer(ptr, typeof(T)) as T;
+#if NETSTANDARD1_5
+            return Marshal.GetDelegateForFunctionPointer<T>(ptr);  // non-generic version is obsolete
+#else
+            return Marshal.GetDelegateForFunctionPointer(ptr, typeof(T)) as T;  // generic version not available in .NET45
+#endif
         }
 
         /// <summary>
diff --git a/src/csharp/Grpc.Core/Metadata.cs b/src/csharp/Grpc.Core/Metadata.cs
index 915bec146c9878d5d7c5646b5e0d46d821ae5cf4..6fc715d6ee1a8c75a935044f194faf25bd7ba476 100644
--- a/src/csharp/Grpc.Core/Metadata.cs
+++ b/src/csharp/Grpc.Core/Metadata.cs
@@ -95,11 +95,18 @@ namespace Grpc.Core
 
         #region IList members
 
+
+        /// <summary>
+        /// <see cref="T:IList`1"/>
+        /// </summary>
         public int IndexOf(Metadata.Entry item)
         {
             return entries.IndexOf(item);
         }
 
+        /// <summary>
+        /// <see cref="T:IList`1"/>
+        /// </summary>
         public void Insert(int index, Metadata.Entry item)
         {
             GrpcPreconditions.CheckNotNull(item);
@@ -107,12 +114,18 @@ namespace Grpc.Core
             entries.Insert(index, item);
         }
 
+        /// <summary>
+        /// <see cref="T:IList`1"/>
+        /// </summary>
         public void RemoveAt(int index)
         {
             CheckWriteable();
             entries.RemoveAt(index);
         }
 
+        /// <summary>
+        /// <see cref="T:IList`1"/>
+        /// </summary>
         public Metadata.Entry this[int index]
         {
             get
@@ -128,6 +141,9 @@ namespace Grpc.Core
             }
         }
 
+        /// <summary>
+        /// <see cref="T:IList`1"/>
+        /// </summary>
         public void Add(Metadata.Entry item)
         {
             GrpcPreconditions.CheckNotNull(item);
@@ -135,48 +151,75 @@ namespace Grpc.Core
             entries.Add(item);
         }
 
+        /// <summary>
+        /// <see cref="T:IList`1"/>
+        /// </summary>
         public void Add(string key, string value)
         {
             Add(new Entry(key, value));
         }
 
+        /// <summary>
+        /// <see cref="T:IList`1"/>
+        /// </summary>
         public void Add(string key, byte[] valueBytes)
         {
             Add(new Entry(key, valueBytes));
         }
 
+        /// <summary>
+        /// <see cref="T:IList`1"/>
+        /// </summary>
         public void Clear()
         {
             CheckWriteable();
             entries.Clear();
         }
 
+        /// <summary>
+        /// <see cref="T:IList`1"/>
+        /// </summary>
         public bool Contains(Metadata.Entry item)
         {
             return entries.Contains(item);
         }
 
+        /// <summary>
+        /// <see cref="T:IList`1"/>
+        /// </summary>
         public void CopyTo(Metadata.Entry[] array, int arrayIndex)
         {
             entries.CopyTo(array, arrayIndex);
         }
 
+        /// <summary>
+        /// <see cref="T:IList`1"/>
+        /// </summary>
         public int Count
         {
             get { return entries.Count; }
         }
 
+        /// <summary>
+        /// <see cref="T:IList`1"/>
+        /// </summary>
         public bool IsReadOnly
         {
             get { return readOnly; }
         }
 
+        /// <summary>
+        /// <see cref="T:IList`1"/>
+        /// </summary>
         public bool Remove(Metadata.Entry item)
         {
             CheckWriteable();
             return entries.Remove(item);
         }
 
+        /// <summary>
+        /// <see cref="T:IList`1"/>
+        /// </summary>
         public IEnumerator<Metadata.Entry> GetEnumerator()
         {
             return entries.GetEnumerator();
@@ -221,7 +264,7 @@ namespace Grpc.Core
             public Entry(string key, byte[] valueBytes)
             {
                 this.key = NormalizeKey(key);
-                GrpcPreconditions.CheckArgument(this.key.EndsWith(BinaryHeaderSuffix),
+                GrpcPreconditions.CheckArgument(HasBinaryHeaderSuffix(this.key),
                     "Key for binary valued metadata entry needs to have suffix indicating binary value.");
                 this.value = null;
                 GrpcPreconditions.CheckNotNull(valueBytes, "valueBytes");
@@ -237,7 +280,7 @@ namespace Grpc.Core
             public Entry(string key, string value)
             {
                 this.key = NormalizeKey(key);
-                GrpcPreconditions.CheckArgument(!this.key.EndsWith(BinaryHeaderSuffix),
+                GrpcPreconditions.CheckArgument(!HasBinaryHeaderSuffix(this.key),
                     "Key for ASCII valued metadata entry cannot have suffix indicating binary value.");
                 this.value = GrpcPreconditions.CheckNotNull(value, "value");
                 this.valueBytes = null;
@@ -324,7 +367,7 @@ namespace Grpc.Core
             /// </summary>
             internal static Entry CreateUnsafe(string key, byte[] valueBytes)
             {
-                if (key.EndsWith(BinaryHeaderSuffix))
+                if (HasBinaryHeaderSuffix(key))
                 {
                     return new Entry(key, null, valueBytes);
                 }
@@ -338,6 +381,27 @@ namespace Grpc.Core
                     "Metadata entry key not valid. Keys can only contain lowercase alphanumeric characters, underscores and hyphens.");
                 return normalized;
             }
+
+            /// <summary>
+            /// Returns <c>true</c> if the key has "-bin" binary header suffix.
+            /// </summary>
+            private static bool HasBinaryHeaderSuffix(string key)
+            {
+                // We don't use just string.EndsWith because its implementation is extremely slow
+                // on CoreCLR and we've seen significant differences in gRPC benchmarks caused by it.
+                // See https://github.com/dotnet/coreclr/issues/5612
+
+                int len = key.Length;
+                if (len >= 4 &&
+                    key[len - 4] == '-' &&
+                    key[len - 3] == 'b' &&
+                    key[len - 2] == 'i' &&
+                    key[len - 1] == 'n')
+                {
+                    return true;
+                }
+                return false;
+            }
         }
     }
 }
diff --git a/src/csharp/Grpc.Core/Server.cs b/src/csharp/Grpc.Core/Server.cs
index dd4a405ed92d74dd6e8927beb65e5ea307f154ea..961b911fbb17eaf13c3baf76a488551c172778c7 100644
--- a/src/csharp/Grpc.Core/Server.cs
+++ b/src/csharp/Grpc.Core/Server.cs
@@ -47,7 +47,7 @@ namespace Grpc.Core
     /// </summary>
     public class Server
     {
-        const int InitialAllowRpcTokenCountPerCq = 10;
+        const int DefaultRequestCallTokensPerCq = 2000;
         static readonly ILogger Logger = GrpcEnvironment.Logger.ForType<Server>();
 
         readonly AtomicCounter activeCallCounter = new AtomicCounter();
@@ -66,7 +66,7 @@ namespace Grpc.Core
 
         bool startRequested;
         volatile bool shutdownRequested;
-
+        int requestCallTokensPerCq = DefaultRequestCallTokensPerCq;
 
         /// <summary>
         /// Creates a new server.
@@ -132,6 +132,27 @@ namespace Grpc.Core
             }
         }
 
+        /// <summary>
+        /// Experimental API. Might anytime change without prior notice.
+        /// Number or calls requested via grpc_server_request_call at any given time for each completion queue.
+        /// </summary>
+        public int RequestCallTokensPerCompletionQueue
+        {
+            get
+            {
+                return requestCallTokensPerCq;
+            }
+            set
+            {
+                lock (myLock)
+                {
+                    GrpcPreconditions.CheckState(!startRequested);
+                    GrpcPreconditions.CheckArgument(value > 0);
+                    requestCallTokensPerCq = value;
+                }
+            }
+        }
+
         /// <summary>
         /// Starts the server.
         /// </summary>
@@ -145,9 +166,7 @@ namespace Grpc.Core
                 
                 handle.Start();
 
-                // Starting with more than one AllowOneRpc tokens can significantly increase
-                // unary RPC throughput.
-                for (int i = 0; i < InitialAllowRpcTokenCountPerCq; i++)
+                for (int i = 0; i < requestCallTokensPerCq; i++)
                 {
                     foreach (var cq in environment.CompletionQueues)
                     {
@@ -310,7 +329,7 @@ namespace Grpc.Core
         /// <summary>
         /// Selects corresponding handler for given call and handles the call.
         /// </summary>
-        private async Task HandleCallAsync(ServerRpcNew newRpc, CompletionQueueSafeHandle cq)
+        private async Task HandleCallAsync(ServerRpcNew newRpc, CompletionQueueSafeHandle cq, Action continuation)
         {
             try
             {
@@ -325,25 +344,41 @@ namespace Grpc.Core
             {
                 Logger.Warning(e, "Exception while handling RPC.");
             }
+
+            if (continuation != null)
+            {
+                continuation();
+            }
         }
 
         /// <summary>
         /// Handles the native callback.
         /// </summary>
-        private void HandleNewServerRpc(bool success, BatchContextSafeHandle ctx, CompletionQueueSafeHandle cq)
+        private void HandleNewServerRpc(bool success, RequestCallContextSafeHandle ctx, CompletionQueueSafeHandle cq)
         {
-			Task.Run(() => AllowOneRpc(cq));
-
+            bool nextRpcRequested = false;
             if (success)
             {
-                ServerRpcNew newRpc = ctx.GetServerRpcNew(this);
+                var newRpc = ctx.GetServerRpcNew(this);
 
                 // after server shutdown, the callback returns with null call
                 if (!newRpc.Call.IsInvalid)
                 {
-                    HandleCallAsync(newRpc, cq);  // we don't need to await.
+                    nextRpcRequested = true;
+
+                    // Start asynchronous handler for the call.
+                    // Don't await, the continuations will run on gRPC thread pool once triggered
+                    // by cq.Next().
+                    #pragma warning disable 4014
+                    HandleCallAsync(newRpc, cq, () => AllowOneRpc(cq));
+                    #pragma warning restore 4014
                 }
             }
+
+            if (!nextRpcRequested)
+            {
+                AllowOneRpc(cq);
+            }
         }
 
         /// <summary>
diff --git a/src/csharp/Grpc.IntegrationTesting.QpsWorker/project.json b/src/csharp/Grpc.IntegrationTesting.QpsWorker/project.json
index 1b900c8af3270baafe9a421f7ae4a672dae5a8b4..fe200f8d4406da87234543221f74ac5293d69027 100644
--- a/src/csharp/Grpc.IntegrationTesting.QpsWorker/project.json
+++ b/src/csharp/Grpc.IntegrationTesting.QpsWorker/project.json
@@ -67,5 +67,10 @@
         }
       }
     }
+  },
+  "runtimeOptions": {
+    "configProperties": {
+      "System.GC.Server": true
+    }
   }
 }
diff --git a/src/csharp/Grpc.IntegrationTesting/InteropClient.cs b/src/csharp/Grpc.IntegrationTesting/InteropClient.cs
index cb926328e0840d824d89128b05b8d44b2dfdac1e..7a46a55a5b8b31d03c55f0653a151b672624c79d 100644
--- a/src/csharp/Grpc.IntegrationTesting/InteropClient.cs
+++ b/src/csharp/Grpc.IntegrationTesting/InteropClient.cs
@@ -583,7 +583,6 @@ namespace Grpc.IntegrationTesting
             var e = Assert.Throws<RpcException>(() => client.UnimplementedCall(new Empty()));
 
             Assert.AreEqual(StatusCode.Unimplemented, e.Status.StatusCode);
-            Assert.AreEqual("", e.Status.Detail);
             Console.WriteLine("Passed!");
         }
 
diff --git a/src/csharp/Grpc.IntegrationTesting/QpsWorker.cs b/src/csharp/Grpc.IntegrationTesting/QpsWorker.cs
index 865556c2426fe62ec17cee22a9dae43199b5b20f..62a7347d420074cdd29ab831f9550f3b0d6b79b5 100644
--- a/src/csharp/Grpc.IntegrationTesting/QpsWorker.cs
+++ b/src/csharp/Grpc.IntegrationTesting/QpsWorker.cs
@@ -76,6 +76,11 @@ namespace Grpc.IntegrationTesting
 
         private async Task RunAsync()
         {
+            // (ThreadPoolSize == ProcessorCount) gives best throughput in benchmarks
+            // and doesn't seem to harm performance even when server and client
+            // are running on the same machine.
+            GrpcEnvironment.SetThreadPoolSize(Environment.ProcessorCount);
+
             string host = "0.0.0.0";
             int port = options.DriverPort;
 
diff --git a/src/csharp/ext/grpc_csharp_ext.c b/src/csharp/ext/grpc_csharp_ext.c
index 068bf709b81b8d55ea2469063e5e0afbb7a1c0f0..9a5d7869d34e0ae583f08313822b05fc4772bfc6 100644
--- a/src/csharp/ext/grpc_csharp_ext.c
+++ b/src/csharp/ext/grpc_csharp_ext.c
@@ -84,11 +84,6 @@ typedef struct grpcsharp_batch_context {
     size_t status_details_capacity;
   } recv_status_on_client;
   int recv_close_on_server_cancelled;
-  struct {
-    grpc_call *call;
-    grpc_call_details call_details;
-    grpc_metadata_array request_metadata;
-  } server_rpc_new;
 } grpcsharp_batch_context;
 
 GPR_EXPORT grpcsharp_batch_context *GPR_CALLTYPE grpcsharp_batch_context_create() {
@@ -97,6 +92,18 @@ GPR_EXPORT grpcsharp_batch_context *GPR_CALLTYPE grpcsharp_batch_context_create(
   return ctx;
 }
 
+typedef struct {
+  grpc_call *call;
+  grpc_call_details call_details;
+  grpc_metadata_array request_metadata;
+} grpcsharp_request_call_context;
+
+GPR_EXPORT grpcsharp_request_call_context *GPR_CALLTYPE grpcsharp_request_call_context_create() {
+  grpcsharp_request_call_context *ctx = gpr_malloc(sizeof(grpcsharp_request_call_context));
+  memset(ctx, 0, sizeof(grpcsharp_request_call_context));
+  return ctx;
+}
+
 /*
  * Destroys array->metadata.
  * The array pointer itself is not freed.
@@ -230,13 +237,20 @@ GPR_EXPORT void GPR_CALLTYPE grpcsharp_batch_context_destroy(grpcsharp_batch_con
       &(ctx->recv_status_on_client.trailing_metadata));
   gpr_free((void *)ctx->recv_status_on_client.status_details);
 
+  gpr_free(ctx);
+}
+
+GPR_EXPORT void GPR_CALLTYPE grpcsharp_request_call_context_destroy(grpcsharp_request_call_context *ctx) {
+  if (!ctx) {
+    return;
+  }
   /* NOTE: ctx->server_rpc_new.call is not destroyed because callback handler is
      supposed
      to take its ownership. */
 
-  grpc_call_details_destroy(&(ctx->server_rpc_new.call_details));
+  grpc_call_details_destroy(&(ctx->call_details));
   grpcsharp_metadata_array_destroy_metadata_only(
-      &(ctx->server_rpc_new.request_metadata));
+      &(ctx->request_metadata));
 
   gpr_free(ctx);
 }
@@ -303,32 +317,32 @@ grpcsharp_batch_context_recv_status_on_client_trailing_metadata(
   return &(ctx->recv_status_on_client.trailing_metadata);
 }
 
-GPR_EXPORT grpc_call *GPR_CALLTYPE grpcsharp_batch_context_server_rpc_new_call(
-    const grpcsharp_batch_context *ctx) {
-  return ctx->server_rpc_new.call;
+GPR_EXPORT grpc_call *GPR_CALLTYPE grpcsharp_request_call_context_call(
+    const grpcsharp_request_call_context *ctx) {
+  return ctx->call;
 }
 
 GPR_EXPORT const char *GPR_CALLTYPE
-grpcsharp_batch_context_server_rpc_new_method(
-    const grpcsharp_batch_context *ctx) {
-  return ctx->server_rpc_new.call_details.method;
+grpcsharp_request_call_context_method(
+    const grpcsharp_request_call_context *ctx) {
+  return ctx->call_details.method;
 }
 
-GPR_EXPORT const char *GPR_CALLTYPE grpcsharp_batch_context_server_rpc_new_host(
-    const grpcsharp_batch_context *ctx) {
-  return ctx->server_rpc_new.call_details.host;
+GPR_EXPORT const char *GPR_CALLTYPE grpcsharp_request_call_context_host(
+    const grpcsharp_request_call_context *ctx) {
+  return ctx->call_details.host;
 }
 
 GPR_EXPORT gpr_timespec GPR_CALLTYPE
-grpcsharp_batch_context_server_rpc_new_deadline(
-    const grpcsharp_batch_context *ctx) {
-  return ctx->server_rpc_new.call_details.deadline;
+grpcsharp_request_call_context_deadline(
+    const grpcsharp_request_call_context *ctx) {
+  return ctx->call_details.deadline;
 }
 
 GPR_EXPORT const grpc_metadata_array *GPR_CALLTYPE
-grpcsharp_batch_context_server_rpc_new_request_metadata(
-    const grpcsharp_batch_context *ctx) {
-  return &(ctx->server_rpc_new.request_metadata);
+grpcsharp_request_call_context_request_metadata(
+    const grpcsharp_request_call_context *ctx) {
+  return &(ctx->request_metadata);
 }
 
 GPR_EXPORT int32_t GPR_CALLTYPE
@@ -853,10 +867,10 @@ GPR_EXPORT void GPR_CALLTYPE grpcsharp_server_destroy(grpc_server *server) {
 
 GPR_EXPORT grpc_call_error GPR_CALLTYPE
 grpcsharp_server_request_call(grpc_server *server, grpc_completion_queue *cq,
-                              grpcsharp_batch_context *ctx) {
+                              grpcsharp_request_call_context *ctx) {
   return grpc_server_request_call(
-      server, &(ctx->server_rpc_new.call), &(ctx->server_rpc_new.call_details),
-      &(ctx->server_rpc_new.request_metadata), cq, cq, ctx);
+      server, &(ctx->call), &(ctx->call_details),
+      &(ctx->request_metadata), cq, cq, ctx);
 }
 
 /* Security */
diff --git a/src/node/ext/node_grpc.cc b/src/node/ext/node_grpc.cc
index 745b5023d591a0565339c11d309ae7e01ef5075d..848c601587fa333995b4798e54a63ab7a7ec3f76 100644
--- a/src/node/ext/node_grpc.cc
+++ b/src/node/ext/node_grpc.cc
@@ -261,10 +261,10 @@ void InitLogConstants(Local<Object> exports) {
   Nan::HandleScope scope;
   Local<Object> log_verbosity = Nan::New<Object>();
   Nan::Set(exports, Nan::New("logVerbosity").ToLocalChecked(), log_verbosity);
-  Local<Value> DEBUG(Nan::New<Uint32, uint32_t>(GPR_LOG_SEVERITY_DEBUG));
-  Nan::Set(log_verbosity, Nan::New("DEBUG").ToLocalChecked(), DEBUG);
-  Local<Value> INFO(Nan::New<Uint32, uint32_t>(GPR_LOG_SEVERITY_INFO));
-  Nan::Set(log_verbosity, Nan::New("INFO").ToLocalChecked(), INFO);
+  Local<Value> LOG_DEBUG(Nan::New<Uint32, uint32_t>(GPR_LOG_SEVERITY_DEBUG));
+  Nan::Set(log_verbosity, Nan::New("DEBUG").ToLocalChecked(), LOG_DEBUG);
+  Local<Value> LOG_INFO(Nan::New<Uint32, uint32_t>(GPR_LOG_SEVERITY_INFO));
+  Nan::Set(log_verbosity, Nan::New("INFO").ToLocalChecked(), LOG_INFO);
   Local<Value> LOG_ERROR(Nan::New<Uint32, uint32_t>(GPR_LOG_SEVERITY_ERROR));
   Nan::Set(log_verbosity, Nan::New("ERROR").ToLocalChecked(), LOG_ERROR);
 }
diff --git a/src/objective-c/examples/Sample/Sample.xcodeproj/project.pbxproj b/src/objective-c/examples/Sample/Sample.xcodeproj/project.pbxproj
index 8d34b26c4fc53677a22b44db53d4e7a29fc06838..ab7159cda2f802c47e1f7e80303d795a9e85d8cf 100644
--- a/src/objective-c/examples/Sample/Sample.xcodeproj/project.pbxproj
+++ b/src/objective-c/examples/Sample/Sample.xcodeproj/project.pbxproj
@@ -3,7 +3,7 @@
 	archiveVersion = 1;
 	classes = {
 	};
-	objectVersion = 48;
+	objectVersion = 46;
 	objects = {
 
 /* Begin PBXBuildFile section */
@@ -129,7 +129,7 @@
 		6369A2621A9322E20015FC5C /* Project object */ = {
 			isa = PBXProject;
 			attributes = {
-				LastUpgradeCheck = 0800;
+				LastUpgradeCheck = 0730;
 				ORGANIZATIONNAME = gRPC;
 				TargetAttributes = {
 					6369A2691A9322E20015FC5C = {
@@ -138,7 +138,7 @@
 				};
 			};
 			buildConfigurationList = 6369A2651A9322E20015FC5C /* Build configuration list for PBXProject "Sample" */;
-			compatibilityVersion = "Xcode 8.0";
+			compatibilityVersion = "Xcode 3.2";
 			developmentRegion = English;
 			hasScannedForEncodings = 0;
 			knownRegions = (
@@ -253,10 +253,8 @@
 				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
 				CLANG_WARN_EMPTY_BODY = YES;
 				CLANG_WARN_ENUM_CONVERSION = YES;
-				CLANG_WARN_INFINITE_RECURSION = YES;
 				CLANG_WARN_INT_CONVERSION = YES;
 				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
-				CLANG_WARN_SUSPICIOUS_MOVE = YES;
 				CLANG_WARN_UNREACHABLE_CODE = YES;
 				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
 				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
@@ -265,7 +263,6 @@
 				ENABLE_TESTABILITY = YES;
 				GCC_C_LANGUAGE_STANDARD = gnu99;
 				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_NO_COMMON_BLOCKS = YES;
 				GCC_OPTIMIZATION_LEVEL = 0;
 				GCC_PREPROCESSOR_DEFINITIONS = (
 					"DEBUG=1",
@@ -299,10 +296,8 @@
 				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
 				CLANG_WARN_EMPTY_BODY = YES;
 				CLANG_WARN_ENUM_CONVERSION = YES;
-				CLANG_WARN_INFINITE_RECURSION = YES;
 				CLANG_WARN_INT_CONVERSION = YES;
 				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
-				CLANG_WARN_SUSPICIOUS_MOVE = YES;
 				CLANG_WARN_UNREACHABLE_CODE = YES;
 				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
 				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
@@ -310,7 +305,6 @@
 				ENABLE_NS_ASSERTIONS = NO;
 				ENABLE_STRICT_OBJC_MSGSEND = YES;
 				GCC_C_LANGUAGE_STANDARD = gnu99;
-				GCC_NO_COMMON_BLOCKS = YES;
 				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
 				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
 				GCC_WARN_UNDECLARED_SELECTOR = YES;
diff --git a/src/objective-c/examples/Sample/Sample.xcodeproj/xcshareddata/xcschemes/Sample.xcscheme b/src/objective-c/examples/Sample/Sample.xcodeproj/xcshareddata/xcschemes/Sample.xcscheme
index 881474b111c8de8331764c7fd0512e9afe2c4f37..d399e22e460ad9408616bc7085fc43b2728bfbad 100644
--- a/src/objective-c/examples/Sample/Sample.xcodeproj/xcshareddata/xcschemes/Sample.xcscheme
+++ b/src/objective-c/examples/Sample/Sample.xcodeproj/xcshareddata/xcschemes/Sample.xcscheme
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <Scheme
-   LastUpgradeVersion = "0800"
+   LastUpgradeVersion = "0730"
    version = "1.3">
    <BuildAction
       parallelizeBuildables = "YES"
diff --git a/src/objective-c/examples/SwiftSample/SwiftSample.xcodeproj/project.pbxproj b/src/objective-c/examples/SwiftSample/SwiftSample.xcodeproj/project.pbxproj
index 55b392e7783ae11fa4790bbaa7cd125085e61591..afc3da71168c965d82cafc3e4d305cd0c82134eb 100644
--- a/src/objective-c/examples/SwiftSample/SwiftSample.xcodeproj/project.pbxproj
+++ b/src/objective-c/examples/SwiftSample/SwiftSample.xcodeproj/project.pbxproj
@@ -3,7 +3,7 @@
 	archiveVersion = 1;
 	classes = {
 	};
-	objectVersion = 48;
+	objectVersion = 46;
 	objects = {
 
 /* Begin PBXBuildFile section */
@@ -123,17 +123,16 @@
 			isa = PBXProject;
 			attributes = {
 				LastSwiftUpdateCheck = 0710;
-				LastUpgradeCheck = 0800;
+				LastUpgradeCheck = 0730;
 				ORGANIZATIONNAME = gRPC;
 				TargetAttributes = {
 					633BFFC11B950B210007E424 = {
 						CreatedOnToolsVersion = 6.4;
-						LastSwiftMigration = 0800;
 					};
 				};
 			};
 			buildConfigurationList = 633BFFBD1B950B210007E424 /* Build configuration list for PBXProject "SwiftSample" */;
-			compatibilityVersion = "Xcode 8.0";
+			compatibilityVersion = "Xcode 3.2";
 			developmentRegion = English;
 			hasScannedForEncodings = 0;
 			knownRegions = (
@@ -247,10 +246,8 @@
 				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
 				CLANG_WARN_EMPTY_BODY = YES;
 				CLANG_WARN_ENUM_CONVERSION = YES;
-				CLANG_WARN_INFINITE_RECURSION = YES;
 				CLANG_WARN_INT_CONVERSION = YES;
 				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
-				CLANG_WARN_SUSPICIOUS_MOVE = YES;
 				CLANG_WARN_UNREACHABLE_CODE = YES;
 				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
 				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
@@ -295,10 +292,8 @@
 				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
 				CLANG_WARN_EMPTY_BODY = YES;
 				CLANG_WARN_ENUM_CONVERSION = YES;
-				CLANG_WARN_INFINITE_RECURSION = YES;
 				CLANG_WARN_INT_CONVERSION = YES;
 				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
-				CLANG_WARN_SUSPICIOUS_MOVE = YES;
 				CLANG_WARN_UNREACHABLE_CODE = YES;
 				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
 				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
@@ -317,7 +312,6 @@
 				IPHONEOS_DEPLOYMENT_TARGET = 8.4;
 				MTL_ENABLE_DEBUG_INFO = NO;
 				SDKROOT = iphoneos;
-				SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
 				TARGETED_DEVICE_FAMILY = "1,2";
 				VALIDATE_PRODUCT = YES;
 			};
@@ -333,7 +327,6 @@
 				PRODUCT_BUNDLE_IDENTIFIER = "io.grpc.$(PRODUCT_NAME:rfc1034identifier)";
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				SWIFT_OBJC_BRIDGING_HEADER = "";
-				SWIFT_VERSION = 3.0;
 				USER_HEADER_SEARCH_PATHS = "";
 			};
 			name = Debug;
@@ -348,7 +341,6 @@
 				PRODUCT_BUNDLE_IDENTIFIER = "io.grpc.$(PRODUCT_NAME:rfc1034identifier)";
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				SWIFT_OBJC_BRIDGING_HEADER = "";
-				SWIFT_VERSION = 3.0;
 				USER_HEADER_SEARCH_PATHS = "";
 			};
 			name = Release;
@@ -363,7 +355,7 @@
 				633BFFE01B950B210007E424 /* Release */,
 			);
 			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
+			defaultConfigurationName = Release;
 		};
 		633BFFE11B950B210007E424 /* Build configuration list for PBXNativeTarget "SwiftSample" */ = {
 			isa = XCConfigurationList;
@@ -372,7 +364,7 @@
 				633BFFE31B950B210007E424 /* Release */,
 			);
 			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
+			defaultConfigurationName = Release;
 		};
 /* End XCConfigurationList section */
 	};
diff --git a/src/objective-c/examples/SwiftSample/SwiftSample.xcodeproj/xcshareddata/xcschemes/SwiftSample.xcscheme b/src/objective-c/examples/SwiftSample/SwiftSample.xcodeproj/xcshareddata/xcschemes/SwiftSample.xcscheme
index 87bca5ec6818338520d8800cc1de6504e0d4f2fc..bba6a02b2b43e6ca0e9206da5d00b68602faef84 100644
--- a/src/objective-c/examples/SwiftSample/SwiftSample.xcodeproj/xcshareddata/xcschemes/SwiftSample.xcscheme
+++ b/src/objective-c/examples/SwiftSample/SwiftSample.xcodeproj/xcshareddata/xcschemes/SwiftSample.xcscheme
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <Scheme
-   LastUpgradeVersion = "0800"
+   LastUpgradeVersion = "0730"
    version = "1.3">
    <BuildAction
       parallelizeBuildables = "YES"
diff --git a/src/objective-c/examples/SwiftSample/ViewController.swift b/src/objective-c/examples/SwiftSample/ViewController.swift
index 6b25e71f2d950829b3c7c4c96e3143a5aea5b39f..66d4fa9412c41d63eff499e568aa2f8adbe5c272 100644
--- a/src/objective-c/examples/SwiftSample/ViewController.swift
+++ b/src/objective-c/examples/SwiftSample/ViewController.swift
@@ -51,7 +51,7 @@ class ViewController: UIViewController {
     // Example gRPC call using a generated proto client library:
 
     let service = RMTTestService(host: RemoteHost)
-    service.unaryCall(with: request) { response, error in
+    service.unaryCallWithRequest(request) { response, error in
       if let response = response {
         NSLog("1. Finished successfully with response:\n\(response)")
       } else {
@@ -63,39 +63,40 @@ class ViewController: UIViewController {
     // Same but manipulating headers:
 
     var RPC : GRPCProtoCall! // Needed to convince Swift to capture by reference (__block)
-    RPC = service.rpcToUnaryCall(with: request) { response, error in
+    RPC = service.RPCToUnaryCallWithRequest(request) { response, error in
       if let response = response {
         NSLog("2. Finished successfully with response:\n\(response)")
       } else {
         NSLog("2. Finished with error: \(error!)")
       }
-      NSLog("2. Response headers: \(RPC.responseHeaders!)")
-      NSLog("2. Response trailers: \(RPC.responseTrailers!)")
+      NSLog("2. Response headers: \(RPC.responseHeaders)")
+      NSLog("2. Response trailers: \(RPC.responseTrailers)")
     }
 
-    RPC.requestHeaders["My-Header"] = "My value";
+    // TODO(jcanizales): Revert to using subscript syntax once XCode 8 is released.
+    RPC.requestHeaders.setObject("My value", forKey: "My-Header")
 
     RPC.start()
 
 
     // Same example call using the generic gRPC client library:
 
-    let method = GRPCProtoMethod(package: "grpc.testing", service: "TestService", method: "UnaryCall")!
+    let method = GRPCProtoMethod(package: "grpc.testing", service: "TestService", method: "UnaryCall")
 
     let requestsWriter = GRXWriter(value: request.data())
 
-    let call = GRPCCall(host: RemoteHost, path: method.httpPath, requestsWriter: requestsWriter)!
+    let call = GRPCCall(host: RemoteHost, path: method.HTTPPath, requestsWriter: requestsWriter)
 
-    call.requestHeaders["My-Header"] = "My value";
+    call.requestHeaders.setObject("My value", forKey: "My-Header")
 
-    call.start(with: GRXWriteable { response, error in
-      if let response = response as? Data {
+    call.startWithWriteable(GRXWriteable { response, error in
+      if let response = response as? NSData {
         NSLog("3. Received response:\n\(try! RMTSimpleResponse(data: response))")
       } else {
         NSLog("3. Finished with error: \(error!)")
       }
-      NSLog("3. Response headers: \(call.responseHeaders!)")
-      NSLog("3. Response trailers: \(call.responseTrailers!)")
+      NSLog("3. Response headers: \(call.responseHeaders)")
+      NSLog("3. Response trailers: \(call.responseTrailers)")
     })
   }
 }
diff --git a/src/objective-c/tests/Info.plist b/src/objective-c/tests/Info.plist
index ba72822e8728ef2951005e49b6c27a2f1da6572d..fbeeb96ba6cb24080092b014db710833e4c62b62 100644
--- a/src/objective-c/tests/Info.plist
+++ b/src/objective-c/tests/Info.plist
@@ -7,7 +7,7 @@
 	<key>CFBundleExecutable</key>
 	<string>$(EXECUTABLE_NAME)</string>
 	<key>CFBundleIdentifier</key>
-	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
+	<string>gRPC.$(PRODUCT_NAME:rfc1034identifier)</string>
 	<key>CFBundleInfoDictionaryVersion</key>
 	<string>6.0</string>
 	<key>CFBundleName</key>
diff --git a/src/objective-c/tests/Tests.xcodeproj/project.pbxproj b/src/objective-c/tests/Tests.xcodeproj/project.pbxproj
index 8dccbf0f72b6484c0c8105c28d2e4d71c597b7fe..c4a6567ae0e6c514f1193e856db476296644b5ff 100644
--- a/src/objective-c/tests/Tests.xcodeproj/project.pbxproj
+++ b/src/objective-c/tests/Tests.xcodeproj/project.pbxproj
@@ -3,7 +3,7 @@
 	archiveVersion = 1;
 	classes = {
 	};
-	objectVersion = 48;
+	objectVersion = 46;
 	objects = {
 
 /* Begin PBXBuildFile section */
@@ -535,7 +535,7 @@
 		635697BF1B14FC11007A7283 /* Project object */ = {
 			isa = PBXProject;
 			attributes = {
-				LastUpgradeCheck = 0800;
+				LastUpgradeCheck = 0630;
 				ORGANIZATIONNAME = gRPC;
 				TargetAttributes = {
 					5E8A5DA31D3840B4000F8BC4 = {
@@ -565,7 +565,7 @@
 				};
 			};
 			buildConfigurationList = 635697C21B14FC11007A7283 /* Build configuration list for PBXProject "Tests" */;
-			compatibilityVersion = "Xcode 8.0";
+			compatibilityVersion = "Xcode 3.2";
 			developmentRegion = English;
 			hasScannedForEncodings = 0;
 			knownRegions = (
@@ -1151,10 +1151,8 @@
 				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
 				CLANG_WARN_EMPTY_BODY = YES;
 				CLANG_WARN_ENUM_CONVERSION = YES;
-				CLANG_WARN_INFINITE_RECURSION = YES;
 				CLANG_WARN_INT_CONVERSION = YES;
 				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
-				CLANG_WARN_SUSPICIOUS_MOVE = YES;
 				CLANG_WARN_UNREACHABLE_CODE = YES;
 				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
 				COPY_PHASE_STRIP = NO;
@@ -1207,7 +1205,6 @@
 				);
 				INFOPLIST_FILE = Info.plist;
 				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
-				PRODUCT_BUNDLE_IDENTIFIER = "gRPC.$(PRODUCT_NAME:rfc1034identifier)";
 				PRODUCT_NAME = "$(TARGET_NAME)";
 			};
 			name = Cronet;
@@ -1365,7 +1362,6 @@
 				);
 				INFOPLIST_FILE = Info.plist;
 				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
-				PRODUCT_BUNDLE_IDENTIFIER = "gRPC.$(PRODUCT_NAME:rfc1034identifier)";
 				PRODUCT_NAME = "$(TARGET_NAME)";
 			};
 			name = Debug;
@@ -1380,7 +1376,6 @@
 				);
 				INFOPLIST_FILE = Info.plist;
 				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
-				PRODUCT_BUNDLE_IDENTIFIER = "gRPC.$(PRODUCT_NAME:rfc1034identifier)";
 				PRODUCT_NAME = "$(TARGET_NAME)";
 			};
 			name = Release;
@@ -1398,16 +1393,13 @@
 				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
 				CLANG_WARN_EMPTY_BODY = YES;
 				CLANG_WARN_ENUM_CONVERSION = YES;
-				CLANG_WARN_INFINITE_RECURSION = YES;
 				CLANG_WARN_INT_CONVERSION = YES;
 				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
-				CLANG_WARN_SUSPICIOUS_MOVE = YES;
 				CLANG_WARN_UNREACHABLE_CODE = YES;
 				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
 				COPY_PHASE_STRIP = NO;
 				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
 				ENABLE_STRICT_OBJC_MSGSEND = YES;
-				ENABLE_TESTABILITY = YES;
 				GCC_C_LANGUAGE_STANDARD = gnu99;
 				GCC_DYNAMIC_NO_PIC = NO;
 				GCC_NO_COMMON_BLOCKS = YES;
@@ -1444,10 +1436,8 @@
 				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
 				CLANG_WARN_EMPTY_BODY = YES;
 				CLANG_WARN_ENUM_CONVERSION = YES;
-				CLANG_WARN_INFINITE_RECURSION = YES;
 				CLANG_WARN_INT_CONVERSION = YES;
 				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
-				CLANG_WARN_SUSPICIOUS_MOVE = YES;
 				CLANG_WARN_UNREACHABLE_CODE = YES;
 				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
 				COPY_PHASE_STRIP = NO;
diff --git a/src/objective-c/tests/Tests.xcodeproj/xcshareddata/xcschemes/AllTests.xcscheme b/src/objective-c/tests/Tests.xcodeproj/xcshareddata/xcschemes/AllTests.xcscheme
index 740a1c0672d2955a4c277fc2b043d89ff2f99882..d1d616c4cf2411c2caad658377820991791743ea 100644
--- a/src/objective-c/tests/Tests.xcodeproj/xcshareddata/xcschemes/AllTests.xcscheme
+++ b/src/objective-c/tests/Tests.xcodeproj/xcshareddata/xcschemes/AllTests.xcscheme
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <Scheme
-   LastUpgradeVersion = "0800"
+   LastUpgradeVersion = "0630"
    version = "1.3">
    <BuildAction
       parallelizeBuildables = "YES"
diff --git a/src/objective-c/tests/Tests.xcodeproj/xcshareddata/xcschemes/CoreCronetEnd2EndTests.xcscheme b/src/objective-c/tests/Tests.xcodeproj/xcshareddata/xcschemes/CoreCronetEnd2EndTests.xcscheme
index 538149c4ee3865d5c9bb1c292e44f9d168dd3ed8..a1da2e0c97cb0846503e045dc05a0459b2d81d2c 100644
--- a/src/objective-c/tests/Tests.xcodeproj/xcshareddata/xcschemes/CoreCronetEnd2EndTests.xcscheme
+++ b/src/objective-c/tests/Tests.xcodeproj/xcshareddata/xcschemes/CoreCronetEnd2EndTests.xcscheme
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <Scheme
-   LastUpgradeVersion = "0800"
+   LastUpgradeVersion = "0730"
    version = "1.3">
    <BuildAction
       parallelizeBuildables = "YES"
diff --git a/src/objective-c/tests/Tests.xcodeproj/xcshareddata/xcschemes/InteropTestsLocalCleartext.xcscheme b/src/objective-c/tests/Tests.xcodeproj/xcshareddata/xcschemes/InteropTestsLocalCleartext.xcscheme
index acf6f38ef222cf3a28288dc675c58a6c9ff22a2e..ce358bf69f5945e6da83b11eb4c47af4b7a75004 100644
--- a/src/objective-c/tests/Tests.xcodeproj/xcshareddata/xcschemes/InteropTestsLocalCleartext.xcscheme
+++ b/src/objective-c/tests/Tests.xcodeproj/xcshareddata/xcschemes/InteropTestsLocalCleartext.xcscheme
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <Scheme
-   LastUpgradeVersion = "0800"
+   LastUpgradeVersion = "0700"
    version = "1.3">
    <BuildAction
       parallelizeBuildables = "YES"
diff --git a/src/objective-c/tests/Tests.xcodeproj/xcshareddata/xcschemes/InteropTestsLocalSSL.xcscheme b/src/objective-c/tests/Tests.xcodeproj/xcshareddata/xcschemes/InteropTestsLocalSSL.xcscheme
index 95cc3170932db84e726690e1be91b689ffd30a12..f268da1fb0c1abdcdb3316385f1b284d16d00906 100644
--- a/src/objective-c/tests/Tests.xcodeproj/xcshareddata/xcschemes/InteropTestsLocalSSL.xcscheme
+++ b/src/objective-c/tests/Tests.xcodeproj/xcshareddata/xcschemes/InteropTestsLocalSSL.xcscheme
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <Scheme
-   LastUpgradeVersion = "0800"
+   LastUpgradeVersion = "0700"
    version = "1.3">
    <BuildAction
       parallelizeBuildables = "YES"
diff --git a/src/objective-c/tests/Tests.xcodeproj/xcshareddata/xcschemes/InteropTestsRemote.xcscheme b/src/objective-c/tests/Tests.xcodeproj/xcshareddata/xcschemes/InteropTestsRemote.xcscheme
index 8504845da40078ad25253dc25f252adcf20f7ffd..186d7208e04acc9c1bc9705d37d4e53ead431915 100644
--- a/src/objective-c/tests/Tests.xcodeproj/xcshareddata/xcschemes/InteropTestsRemote.xcscheme
+++ b/src/objective-c/tests/Tests.xcodeproj/xcshareddata/xcschemes/InteropTestsRemote.xcscheme
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <Scheme
-   LastUpgradeVersion = "0800"
+   LastUpgradeVersion = "0700"
    version = "1.3">
    <BuildAction
       parallelizeBuildables = "YES"
diff --git a/src/objective-c/tests/Tests.xcodeproj/xcshareddata/xcschemes/InteropTestsRemoteWithCronet.xcscheme b/src/objective-c/tests/Tests.xcodeproj/xcshareddata/xcschemes/InteropTestsRemoteWithCronet.xcscheme
index 08955e1e03e5bab3fad9e08b27695ac972d66656..1d211115f754faa2194e0773fb206765453dc7ee 100644
--- a/src/objective-c/tests/Tests.xcodeproj/xcshareddata/xcschemes/InteropTestsRemoteWithCronet.xcscheme
+++ b/src/objective-c/tests/Tests.xcodeproj/xcshareddata/xcschemes/InteropTestsRemoteWithCronet.xcscheme
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <Scheme
-   LastUpgradeVersion = "0800"
+   LastUpgradeVersion = "0730"
    version = "1.3">
    <BuildAction
       parallelizeBuildables = "YES"
diff --git a/src/objective-c/tests/Tests.xcodeproj/xcshareddata/xcschemes/RxLibraryUnitTests.xcscheme b/src/objective-c/tests/Tests.xcodeproj/xcshareddata/xcschemes/RxLibraryUnitTests.xcscheme
index b5672fce02ef80059273e1e7bea08d6580139afa..3abc1d42e4d8f578d2f59f2e53ecc70685a1393f 100644
--- a/src/objective-c/tests/Tests.xcodeproj/xcshareddata/xcschemes/RxLibraryUnitTests.xcscheme
+++ b/src/objective-c/tests/Tests.xcodeproj/xcshareddata/xcschemes/RxLibraryUnitTests.xcscheme
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <Scheme
-   LastUpgradeVersion = "0800"
+   LastUpgradeVersion = "0700"
    version = "1.3">
    <BuildAction
       parallelizeBuildables = "YES"
diff --git a/src/proto/grpc/testing/duplicate/echo_duplicate.proto b/src/proto/grpc/testing/duplicate/echo_duplicate.proto
index 94130ea767841ace09ead6e8340abfcc9ad1c93e..97fdbc4fd3091cafaf80df015243356686b3654c 100644
--- a/src/proto/grpc/testing/duplicate/echo_duplicate.proto
+++ b/src/proto/grpc/testing/duplicate/echo_duplicate.proto
@@ -38,4 +38,5 @@ package grpc.testing.duplicate;
 
 service EchoTestService {
   rpc Echo(grpc.testing.EchoRequest) returns (grpc.testing.EchoResponse);
+  rpc ResponseStream(EchoRequest) returns (stream EchoResponse);
 }
diff --git a/src/proto/grpc/testing/test.proto b/src/proto/grpc/testing/test.proto
index d6ef58ab12206df6668559c8a1882d9a4c664487..2b0dcde5a941122e6b9fdca2c3b17c93e1ec43c8 100644
--- a/src/proto/grpc/testing/test.proto
+++ b/src/proto/grpc/testing/test.proto
@@ -77,7 +77,7 @@ service TestService {
 
   // The test server will not implement this method. It will be used
   // to test the behavior when clients call unimplemented methods.
-  rpc UnimplementedMethod(grpc.testing.Empty) returns (grpc.testing.Empty);
+  rpc UnimplementedCall(grpc.testing.Empty) returns (grpc.testing.Empty);
 }
 
 // A simple service NOT implemented at servers so clients can test for
diff --git a/src/python/grpcio/grpc_core_dependencies.py b/src/python/grpcio/grpc_core_dependencies.py
index a40edfb090544b022c16611e8cee73ef0479b4ee..fb24e12d9b7f606ca16c03f7786da520d538f784 100644
--- a/src/python/grpcio/grpc_core_dependencies.py
+++ b/src/python/grpcio/grpc_core_dependencies.py
@@ -223,26 +223,26 @@ CORE_SOURCE_FILES = [
   'src/core/lib/tsi/ssl_transport_security.c',
   'src/core/lib/tsi/transport_security.c',
   'src/core/ext/transport/chttp2/client/secure/secure_channel_create.c',
-  'src/core/ext/client_config/channel_connectivity.c',
-  'src/core/ext/client_config/client_channel.c',
-  'src/core/ext/client_config/client_channel_factory.c',
-  'src/core/ext/client_config/client_config_plugin.c',
-  'src/core/ext/client_config/connector.c',
-  'src/core/ext/client_config/default_initial_connect_string.c',
-  'src/core/ext/client_config/http_connect_handshaker.c',
-  'src/core/ext/client_config/initial_connect_string.c',
-  'src/core/ext/client_config/lb_policy.c',
-  'src/core/ext/client_config/lb_policy_factory.c',
-  'src/core/ext/client_config/lb_policy_registry.c',
-  'src/core/ext/client_config/method_config.c',
-  'src/core/ext/client_config/parse_address.c',
-  'src/core/ext/client_config/resolver.c',
-  'src/core/ext/client_config/resolver_factory.c',
-  'src/core/ext/client_config/resolver_registry.c',
-  'src/core/ext/client_config/resolver_result.c',
-  'src/core/ext/client_config/subchannel.c',
-  'src/core/ext/client_config/subchannel_index.c',
-  'src/core/ext/client_config/uri_parser.c',
+  'src/core/ext/client_channel/channel_connectivity.c',
+  'src/core/ext/client_channel/client_channel.c',
+  'src/core/ext/client_channel/client_channel_factory.c',
+  'src/core/ext/client_channel/client_channel_plugin.c',
+  'src/core/ext/client_channel/connector.c',
+  'src/core/ext/client_channel/default_initial_connect_string.c',
+  'src/core/ext/client_channel/http_connect_handshaker.c',
+  'src/core/ext/client_channel/initial_connect_string.c',
+  'src/core/ext/client_channel/lb_policy.c',
+  'src/core/ext/client_channel/lb_policy_factory.c',
+  'src/core/ext/client_channel/lb_policy_registry.c',
+  'src/core/ext/client_channel/method_config.c',
+  'src/core/ext/client_channel/parse_address.c',
+  'src/core/ext/client_channel/resolver.c',
+  'src/core/ext/client_channel/resolver_factory.c',
+  'src/core/ext/client_channel/resolver_registry.c',
+  'src/core/ext/client_channel/resolver_result.c',
+  'src/core/ext/client_channel/subchannel.c',
+  'src/core/ext/client_channel/subchannel_index.c',
+  'src/core/ext/client_channel/uri_parser.c',
   'src/core/ext/transport/chttp2/server/insecure/server_chttp2.c',
   'src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c',
   'src/core/ext/transport/chttp2/client/insecure/channel_create.c',
diff --git a/src/ruby/README.md b/src/ruby/README.md
index f476fe72be2fecc1ef2c9f2438e41dd19772f109..266d6b2c1682bc9e3dd8c1f07c7a962ae118a0d6 100644
--- a/src/ruby/README.md
+++ b/src/ruby/README.md
@@ -59,7 +59,7 @@ Directory structure is the layout for [ruby extensions][]
 - bin: example gRPC clients and servers, e.g,
 
   ```ruby
-  stub = Math::Math::Stub.new('my.test.math.server.com:8080')
+  stub = Math::Math::Stub.new('my.test.math.server.com:8080', :this_channel_is_insecure)
   req = Math::DivArgs.new(dividend: 7, divisor: 3)
   GRPC.logger.info("div(7/3): req=#{req.inspect}")
   resp = stub.div(req)
diff --git a/templates/src/csharp/Grpc.IntegrationTesting.QpsWorker/project.json.template b/templates/src/csharp/Grpc.IntegrationTesting.QpsWorker/project.json.template
index 83b8a9befa366dc047160eca6ecf7487ba51addd..8304d20f2ec41a42a3402339dcc01f6a27de2d3b 100644
--- a/templates/src/csharp/Grpc.IntegrationTesting.QpsWorker/project.json.template
+++ b/templates/src/csharp/Grpc.IntegrationTesting.QpsWorker/project.json.template
@@ -20,5 +20,10 @@
           }
         }
       }
+    },
+    "runtimeOptions": {
+      "configProperties": {
+        "System.GC.Server": true
+      }
     }
   }
diff --git a/test/core/client_config/lb_policies_test.c b/test/core/client_channel/lb_policies_test.c
similarity index 99%
rename from test/core/client_config/lb_policies_test.c
rename to test/core/client_channel/lb_policies_test.c
index fafff7bd69ff572f37c9369bfdadfb9ab761466c..844db5e6cb5b370056c32c9c53689ed700bc6891 100644
--- a/test/core/client_config/lb_policies_test.c
+++ b/test/core/client_channel/lb_policies_test.c
@@ -41,8 +41,8 @@
 #include <grpc/support/string_util.h>
 #include <grpc/support/time.h>
 
-#include "src/core/ext/client_config/client_channel.h"
-#include "src/core/ext/client_config/lb_policy_registry.h"
+#include "src/core/ext/client_channel/client_channel.h"
+#include "src/core/ext/client_channel/lb_policy_registry.h"
 #include "src/core/lib/channel/channel_stack.h"
 #include "src/core/lib/support/string.h"
 #include "src/core/lib/surface/channel.h"
diff --git a/test/core/client_config/resolvers/dns_resolver_connectivity_test.c b/test/core/client_channel/resolvers/dns_resolver_connectivity_test.c
similarity index 98%
rename from test/core/client_config/resolvers/dns_resolver_connectivity_test.c
rename to test/core/client_channel/resolvers/dns_resolver_connectivity_test.c
index d3b961959d2700eff4b7f4c3aaf5f3c1d62d0b02..07723c229d291fe594016e622182a96c6f00151c 100644
--- a/test/core/client_config/resolvers/dns_resolver_connectivity_test.c
+++ b/test/core/client_channel/resolvers/dns_resolver_connectivity_test.c
@@ -36,7 +36,7 @@
 #include <grpc/grpc.h>
 #include <grpc/support/alloc.h>
 
-#include "src/core/ext/client_config/resolver_registry.h"
+#include "src/core/ext/client_channel/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"
diff --git a/test/core/client_config/resolvers/dns_resolver_test.c b/test/core/client_channel/resolvers/dns_resolver_test.c
similarity index 98%
rename from test/core/client_config/resolvers/dns_resolver_test.c
rename to test/core/client_channel/resolvers/dns_resolver_test.c
index c3f4cb1244417ed6bd3dc3b58220d71e57d93333..41a9125431f3f4fb37452337ec05d5d2f7b6956a 100644
--- a/test/core/client_config/resolvers/dns_resolver_test.c
+++ b/test/core/client_channel/resolvers/dns_resolver_test.c
@@ -35,7 +35,7 @@
 
 #include <grpc/support/log.h>
 
-#include "src/core/ext/client_config/resolver_registry.h"
+#include "src/core/ext/client_channel/resolver_registry.h"
 #include "test/core/util/test_config.h"
 
 static void test_succeeds(grpc_resolver_factory *factory, const char *string) {
diff --git a/test/core/client_config/resolvers/sockaddr_resolver_test.c b/test/core/client_channel/resolvers/sockaddr_resolver_test.c
similarity index 97%
rename from test/core/client_config/resolvers/sockaddr_resolver_test.c
rename to test/core/client_channel/resolvers/sockaddr_resolver_test.c
index b5d96efa1d9446a6d27eeb309e7f0c8a0ddc7770..c39052cd9dd6570722df3a4e869bfa813bcbf3b9 100644
--- a/test/core/client_config/resolvers/sockaddr_resolver_test.c
+++ b/test/core/client_channel/resolvers/sockaddr_resolver_test.c
@@ -37,8 +37,8 @@
 #include <grpc/support/log.h>
 #include <grpc/support/string_util.h>
 
-#include "src/core/ext/client_config/resolver_registry.h"
-#include "src/core/ext/client_config/resolver_result.h"
+#include "src/core/ext/client_channel/resolver_registry.h"
+#include "src/core/ext/client_channel/resolver_result.h"
 
 #include "test/core/util/test_config.h"
 
diff --git a/test/core/client_config/set_initial_connect_string_test.c b/test/core/client_channel/set_initial_connect_string_test.c
similarity index 99%
rename from test/core/client_config/set_initial_connect_string_test.c
rename to test/core/client_channel/set_initial_connect_string_test.c
index 1b51424f7edb8f943ed84062ac10d88171b08a40..b7bd67567cf08e60a8510a03df4de0b4347272f9 100644
--- a/test/core/client_config/set_initial_connect_string_test.c
+++ b/test/core/client_channel/set_initial_connect_string_test.c
@@ -39,7 +39,7 @@
 #include <grpc/support/slice.h>
 #include <grpc/support/thd.h>
 
-#include "src/core/ext/client_config/initial_connect_string.h"
+#include "src/core/ext/client_channel/initial_connect_string.h"
 #include "src/core/lib/iomgr/sockaddr.h"
 #include "src/core/lib/security/credentials/fake/fake_credentials.h"
 #include "src/core/lib/support/string.h"
diff --git a/test/core/client_config/uri_corpus/02d156dc5e6f2c11c90c2e06fcee04adf036a342 b/test/core/client_channel/uri_corpus/02d156dc5e6f2c11c90c2e06fcee04adf036a342
similarity index 100%
rename from test/core/client_config/uri_corpus/02d156dc5e6f2c11c90c2e06fcee04adf036a342
rename to test/core/client_channel/uri_corpus/02d156dc5e6f2c11c90c2e06fcee04adf036a342
diff --git a/test/core/client_config/uri_corpus/042dc4512fa3d391c5170cf3aa61e6a638f84342 b/test/core/client_channel/uri_corpus/042dc4512fa3d391c5170cf3aa61e6a638f84342
similarity index 100%
rename from test/core/client_config/uri_corpus/042dc4512fa3d391c5170cf3aa61e6a638f84342
rename to test/core/client_channel/uri_corpus/042dc4512fa3d391c5170cf3aa61e6a638f84342
diff --git a/test/core/client_config/uri_corpus/0e9bbe975f2027e8c39c89f85f667530368e7d11 b/test/core/client_channel/uri_corpus/0e9bbe975f2027e8c39c89f85f667530368e7d11
similarity index 100%
rename from test/core/client_config/uri_corpus/0e9bbe975f2027e8c39c89f85f667530368e7d11
rename to test/core/client_channel/uri_corpus/0e9bbe975f2027e8c39c89f85f667530368e7d11
diff --git a/test/core/client_config/uri_corpus/1155aa6ea7ef262a81a63692513ea395f84dad6f b/test/core/client_channel/uri_corpus/1155aa6ea7ef262a81a63692513ea395f84dad6f
similarity index 100%
rename from test/core/client_config/uri_corpus/1155aa6ea7ef262a81a63692513ea395f84dad6f
rename to test/core/client_channel/uri_corpus/1155aa6ea7ef262a81a63692513ea395f84dad6f
diff --git a/test/core/client_config/uri_corpus/13856a5569ffd085a4d5c07af5f8e9310835a118 b/test/core/client_channel/uri_corpus/13856a5569ffd085a4d5c07af5f8e9310835a118
similarity index 100%
rename from test/core/client_config/uri_corpus/13856a5569ffd085a4d5c07af5f8e9310835a118
rename to test/core/client_channel/uri_corpus/13856a5569ffd085a4d5c07af5f8e9310835a118
diff --git a/test/core/client_config/uri_corpus/14b57bcbf1e17b1db1de491ef2ba3768f704b7dc b/test/core/client_channel/uri_corpus/14b57bcbf1e17b1db1de491ef2ba3768f704b7dc
similarity index 100%
rename from test/core/client_config/uri_corpus/14b57bcbf1e17b1db1de491ef2ba3768f704b7dc
rename to test/core/client_channel/uri_corpus/14b57bcbf1e17b1db1de491ef2ba3768f704b7dc
diff --git a/test/core/client_config/uri_corpus/1794310671a060eead6e5ee66ac978a18ec7e84f b/test/core/client_channel/uri_corpus/1794310671a060eead6e5ee66ac978a18ec7e84f
similarity index 100%
rename from test/core/client_config/uri_corpus/1794310671a060eead6e5ee66ac978a18ec7e84f
rename to test/core/client_channel/uri_corpus/1794310671a060eead6e5ee66ac978a18ec7e84f
diff --git a/test/core/client_config/uri_corpus/1d30b2a79afbaf2828ff42b9a9647e942ba1ab80 b/test/core/client_channel/uri_corpus/1d30b2a79afbaf2828ff42b9a9647e942ba1ab80
similarity index 100%
rename from test/core/client_config/uri_corpus/1d30b2a79afbaf2828ff42b9a9647e942ba1ab80
rename to test/core/client_channel/uri_corpus/1d30b2a79afbaf2828ff42b9a9647e942ba1ab80
diff --git a/test/core/client_config/uri_corpus/1fcf5d9c333b70596cf5ba04d1f7affdf445b971 b/test/core/client_channel/uri_corpus/1fcf5d9c333b70596cf5ba04d1f7affdf445b971
similarity index 100%
rename from test/core/client_config/uri_corpus/1fcf5d9c333b70596cf5ba04d1f7affdf445b971
rename to test/core/client_channel/uri_corpus/1fcf5d9c333b70596cf5ba04d1f7affdf445b971
diff --git a/test/core/client_config/uri_corpus/23162c8a8936e20b195404c21337ee734d02a6bc b/test/core/client_channel/uri_corpus/23162c8a8936e20b195404c21337ee734d02a6bc
similarity index 100%
rename from test/core/client_config/uri_corpus/23162c8a8936e20b195404c21337ee734d02a6bc
rename to test/core/client_channel/uri_corpus/23162c8a8936e20b195404c21337ee734d02a6bc
diff --git a/test/core/client_config/uri_corpus/23f3198b815ca60bdadcaae682b9f965dda387f1 b/test/core/client_channel/uri_corpus/23f3198b815ca60bdadcaae682b9f965dda387f1
similarity index 100%
rename from test/core/client_config/uri_corpus/23f3198b815ca60bdadcaae682b9f965dda387f1
rename to test/core/client_channel/uri_corpus/23f3198b815ca60bdadcaae682b9f965dda387f1
diff --git a/test/core/client_config/uri_corpus/2ef3893b43f1f60b77b59ce06a6bce9815d78eaf b/test/core/client_channel/uri_corpus/2ef3893b43f1f60b77b59ce06a6bce9815d78eaf
similarity index 100%
rename from test/core/client_config/uri_corpus/2ef3893b43f1f60b77b59ce06a6bce9815d78eaf
rename to test/core/client_channel/uri_corpus/2ef3893b43f1f60b77b59ce06a6bce9815d78eaf
diff --git a/test/core/client_config/uri_corpus/356c3c129e203b5c74550b4209764d74b9caefce b/test/core/client_channel/uri_corpus/356c3c129e203b5c74550b4209764d74b9caefce
similarity index 100%
rename from test/core/client_config/uri_corpus/356c3c129e203b5c74550b4209764d74b9caefce
rename to test/core/client_channel/uri_corpus/356c3c129e203b5c74550b4209764d74b9caefce
diff --git a/test/core/client_config/uri_corpus/396568fc41c8ccb31ec925b4a862e4d29ead1327 b/test/core/client_channel/uri_corpus/396568fc41c8ccb31ec925b4a862e4d29ead1327
similarity index 100%
rename from test/core/client_config/uri_corpus/396568fc41c8ccb31ec925b4a862e4d29ead1327
rename to test/core/client_channel/uri_corpus/396568fc41c8ccb31ec925b4a862e4d29ead1327
diff --git a/test/core/client_config/uri_corpus/3b1e7526a99918006b87e499d2beb6c4ac9c3c0c b/test/core/client_channel/uri_corpus/3b1e7526a99918006b87e499d2beb6c4ac9c3c0c
similarity index 100%
rename from test/core/client_config/uri_corpus/3b1e7526a99918006b87e499d2beb6c4ac9c3c0c
rename to test/core/client_channel/uri_corpus/3b1e7526a99918006b87e499d2beb6c4ac9c3c0c
diff --git a/test/core/client_config/uri_corpus/3b58860f3451d3e7aad99690a8d39782ca5116fc b/test/core/client_channel/uri_corpus/3b58860f3451d3e7aad99690a8d39782ca5116fc
similarity index 100%
rename from test/core/client_config/uri_corpus/3b58860f3451d3e7aad99690a8d39782ca5116fc
rename to test/core/client_channel/uri_corpus/3b58860f3451d3e7aad99690a8d39782ca5116fc
diff --git a/test/core/client_config/uri_corpus/41963cc10752f70c3af7e3d85868efb097a0ea9c b/test/core/client_channel/uri_corpus/41963cc10752f70c3af7e3d85868efb097a0ea9c
similarity index 100%
rename from test/core/client_config/uri_corpus/41963cc10752f70c3af7e3d85868efb097a0ea9c
rename to test/core/client_channel/uri_corpus/41963cc10752f70c3af7e3d85868efb097a0ea9c
diff --git a/test/core/client_config/uri_corpus/47b5228404451fc9d4071fa69192514bb4ce33c1 b/test/core/client_channel/uri_corpus/47b5228404451fc9d4071fa69192514bb4ce33c1
similarity index 100%
rename from test/core/client_config/uri_corpus/47b5228404451fc9d4071fa69192514bb4ce33c1
rename to test/core/client_channel/uri_corpus/47b5228404451fc9d4071fa69192514bb4ce33c1
diff --git a/test/core/client_config/uri_corpus/56a2da4b2e6fb795243901023ed8d0aa083d1aab b/test/core/client_channel/uri_corpus/56a2da4b2e6fb795243901023ed8d0aa083d1aab
similarity index 100%
rename from test/core/client_config/uri_corpus/56a2da4b2e6fb795243901023ed8d0aa083d1aab
rename to test/core/client_channel/uri_corpus/56a2da4b2e6fb795243901023ed8d0aa083d1aab
diff --git a/test/core/client_config/uri_corpus/574c2f13858a9a6d724654bd913ede9ae3abf822 b/test/core/client_channel/uri_corpus/574c2f13858a9a6d724654bd913ede9ae3abf822
similarity index 100%
rename from test/core/client_config/uri_corpus/574c2f13858a9a6d724654bd913ede9ae3abf822
rename to test/core/client_channel/uri_corpus/574c2f13858a9a6d724654bd913ede9ae3abf822
diff --git a/test/core/client_config/uri_corpus/582f789c19033a152094cbf8565f14154a778ddb b/test/core/client_channel/uri_corpus/582f789c19033a152094cbf8565f14154a778ddb
similarity index 100%
rename from test/core/client_config/uri_corpus/582f789c19033a152094cbf8565f14154a778ddb
rename to test/core/client_channel/uri_corpus/582f789c19033a152094cbf8565f14154a778ddb
diff --git a/test/core/client_config/uri_corpus/636c5606fc23713a1bae88c8899c0541cfad4fd8 b/test/core/client_channel/uri_corpus/636c5606fc23713a1bae88c8899c0541cfad4fd8
similarity index 100%
rename from test/core/client_config/uri_corpus/636c5606fc23713a1bae88c8899c0541cfad4fd8
rename to test/core/client_channel/uri_corpus/636c5606fc23713a1bae88c8899c0541cfad4fd8
diff --git a/test/core/client_config/uri_corpus/63fe493b270b17426d77a27cbf3abac5b2c2794a b/test/core/client_channel/uri_corpus/63fe493b270b17426d77a27cbf3abac5b2c2794a
similarity index 100%
rename from test/core/client_config/uri_corpus/63fe493b270b17426d77a27cbf3abac5b2c2794a
rename to test/core/client_channel/uri_corpus/63fe493b270b17426d77a27cbf3abac5b2c2794a
diff --git a/test/core/client_config/uri_corpus/655300a902b62662296a8e46bfb04fbcb07182cb b/test/core/client_channel/uri_corpus/655300a902b62662296a8e46bfb04fbcb07182cb
similarity index 100%
rename from test/core/client_config/uri_corpus/655300a902b62662296a8e46bfb04fbcb07182cb
rename to test/core/client_channel/uri_corpus/655300a902b62662296a8e46bfb04fbcb07182cb
diff --git a/test/core/client_config/uri_corpus/6ae3acd9d8507b61bf235748026080a4138dba58 b/test/core/client_channel/uri_corpus/6ae3acd9d8507b61bf235748026080a4138dba58
similarity index 100%
rename from test/core/client_config/uri_corpus/6ae3acd9d8507b61bf235748026080a4138dba58
rename to test/core/client_channel/uri_corpus/6ae3acd9d8507b61bf235748026080a4138dba58
diff --git a/test/core/client_config/uri_corpus/6b70979a70a038ff6607d6cf85485ee95baf58e6 b/test/core/client_channel/uri_corpus/6b70979a70a038ff6607d6cf85485ee95baf58e6
similarity index 100%
rename from test/core/client_config/uri_corpus/6b70979a70a038ff6607d6cf85485ee95baf58e6
rename to test/core/client_channel/uri_corpus/6b70979a70a038ff6607d6cf85485ee95baf58e6
diff --git a/test/core/client_config/uri_corpus/7314ab3545a7535a26e0e8aad67caea5534d68b1 b/test/core/client_channel/uri_corpus/7314ab3545a7535a26e0e8aad67caea5534d68b1
similarity index 100%
rename from test/core/client_config/uri_corpus/7314ab3545a7535a26e0e8aad67caea5534d68b1
rename to test/core/client_channel/uri_corpus/7314ab3545a7535a26e0e8aad67caea5534d68b1
diff --git a/test/core/client_config/uri_corpus/7ff4d8b8d1ffd0d42c48bbb91e5856a9ec31aecb b/test/core/client_channel/uri_corpus/7ff4d8b8d1ffd0d42c48bbb91e5856a9ec31aecb
similarity index 100%
rename from test/core/client_config/uri_corpus/7ff4d8b8d1ffd0d42c48bbb91e5856a9ec31aecb
rename to test/core/client_channel/uri_corpus/7ff4d8b8d1ffd0d42c48bbb91e5856a9ec31aecb
diff --git a/test/core/client_config/uri_corpus/87daa131e0973b77a232a870ed749ef29cf58e6d b/test/core/client_channel/uri_corpus/87daa131e0973b77a232a870ed749ef29cf58e6d
similarity index 100%
rename from test/core/client_config/uri_corpus/87daa131e0973b77a232a870ed749ef29cf58e6d
rename to test/core/client_channel/uri_corpus/87daa131e0973b77a232a870ed749ef29cf58e6d
diff --git a/test/core/client_config/uri_corpus/884dcaee2908ffe5f12b65b8eba81016099c4266 b/test/core/client_channel/uri_corpus/884dcaee2908ffe5f12b65b8eba81016099c4266
similarity index 100%
rename from test/core/client_config/uri_corpus/884dcaee2908ffe5f12b65b8eba81016099c4266
rename to test/core/client_channel/uri_corpus/884dcaee2908ffe5f12b65b8eba81016099c4266
diff --git a/test/core/client_config/uri_corpus/8d7e944fd5d0ede94097fcc98b47b09a3f9c76cb b/test/core/client_channel/uri_corpus/8d7e944fd5d0ede94097fcc98b47b09a3f9c76cb
similarity index 100%
rename from test/core/client_config/uri_corpus/8d7e944fd5d0ede94097fcc98b47b09a3f9c76cb
rename to test/core/client_channel/uri_corpus/8d7e944fd5d0ede94097fcc98b47b09a3f9c76cb
diff --git a/test/core/client_config/uri_corpus/9671149af0b444f59bbdf71340d3441dadd8a7b4 b/test/core/client_channel/uri_corpus/9671149af0b444f59bbdf71340d3441dadd8a7b4
similarity index 100%
rename from test/core/client_config/uri_corpus/9671149af0b444f59bbdf71340d3441dadd8a7b4
rename to test/core/client_channel/uri_corpus/9671149af0b444f59bbdf71340d3441dadd8a7b4
diff --git a/test/core/client_config/uri_corpus/96c8d266b7dc037288ef305c996608270f72e7fb b/test/core/client_channel/uri_corpus/96c8d266b7dc037288ef305c996608270f72e7fb
similarity index 100%
rename from test/core/client_config/uri_corpus/96c8d266b7dc037288ef305c996608270f72e7fb
rename to test/core/client_channel/uri_corpus/96c8d266b7dc037288ef305c996608270f72e7fb
diff --git a/test/core/client_config/uri_corpus/975536c71ade4800415a7e9c2f1b45c35a6d5ea8 b/test/core/client_channel/uri_corpus/975536c71ade4800415a7e9c2f1b45c35a6d5ea8
similarity index 100%
rename from test/core/client_config/uri_corpus/975536c71ade4800415a7e9c2f1b45c35a6d5ea8
rename to test/core/client_channel/uri_corpus/975536c71ade4800415a7e9c2f1b45c35a6d5ea8
diff --git a/test/core/client_config/uri_corpus/99750aa67d30beaea8af565c829d4999aa8cb91b b/test/core/client_channel/uri_corpus/99750aa67d30beaea8af565c829d4999aa8cb91b
similarity index 100%
rename from test/core/client_config/uri_corpus/99750aa67d30beaea8af565c829d4999aa8cb91b
rename to test/core/client_channel/uri_corpus/99750aa67d30beaea8af565c829d4999aa8cb91b
diff --git a/test/core/client_config/uri_corpus/a1140f3f8b5cffc1010221b9a4084a25fb75c1f6 b/test/core/client_channel/uri_corpus/a1140f3f8b5cffc1010221b9a4084a25fb75c1f6
similarity index 100%
rename from test/core/client_config/uri_corpus/a1140f3f8b5cffc1010221b9a4084a25fb75c1f6
rename to test/core/client_channel/uri_corpus/a1140f3f8b5cffc1010221b9a4084a25fb75c1f6
diff --git a/test/core/client_config/uri_corpus/a1f0f9b75bb354eb063d7cba4fcfa2d0b88d63de b/test/core/client_channel/uri_corpus/a1f0f9b75bb354eb063d7cba4fcfa2d0b88d63de
similarity index 100%
rename from test/core/client_config/uri_corpus/a1f0f9b75bb354eb063d7cba4fcfa2d0b88d63de
rename to test/core/client_channel/uri_corpus/a1f0f9b75bb354eb063d7cba4fcfa2d0b88d63de
diff --git a/test/core/client_config/uri_corpus/a296eb3d1d436ed7df7195b10aa3c4de3896f98d b/test/core/client_channel/uri_corpus/a296eb3d1d436ed7df7195b10aa3c4de3896f98d
similarity index 100%
rename from test/core/client_config/uri_corpus/a296eb3d1d436ed7df7195b10aa3c4de3896f98d
rename to test/core/client_channel/uri_corpus/a296eb3d1d436ed7df7195b10aa3c4de3896f98d
diff --git a/test/core/client_config/uri_corpus/a8b8e66050b424f1b8c07d46f868199fb7f60e38 b/test/core/client_channel/uri_corpus/a8b8e66050b424f1b8c07d46f868199fb7f60e38
similarity index 100%
rename from test/core/client_config/uri_corpus/a8b8e66050b424f1b8c07d46f868199fb7f60e38
rename to test/core/client_channel/uri_corpus/a8b8e66050b424f1b8c07d46f868199fb7f60e38
diff --git a/test/core/client_config/uri_corpus/aba1472880406a318ce207ee79815b7acf087757 b/test/core/client_channel/uri_corpus/aba1472880406a318ce207ee79815b7acf087757
similarity index 100%
rename from test/core/client_config/uri_corpus/aba1472880406a318ce207ee79815b7acf087757
rename to test/core/client_channel/uri_corpus/aba1472880406a318ce207ee79815b7acf087757
diff --git a/test/core/client_config/uri_corpus/af55baf8c8855e563befdf1eefbcbd46c5ddb8d2 b/test/core/client_channel/uri_corpus/af55baf8c8855e563befdf1eefbcbd46c5ddb8d2
similarity index 100%
rename from test/core/client_config/uri_corpus/af55baf8c8855e563befdf1eefbcbd46c5ddb8d2
rename to test/core/client_channel/uri_corpus/af55baf8c8855e563befdf1eefbcbd46c5ddb8d2
diff --git a/test/core/client_config/uri_corpus/b3c0bf66c2bf5d24ef1daf4cc5a9d6d5bd0e8bfd b/test/core/client_channel/uri_corpus/b3c0bf66c2bf5d24ef1daf4cc5a9d6d5bd0e8bfd
similarity index 100%
rename from test/core/client_config/uri_corpus/b3c0bf66c2bf5d24ef1daf4cc5a9d6d5bd0e8bfd
rename to test/core/client_channel/uri_corpus/b3c0bf66c2bf5d24ef1daf4cc5a9d6d5bd0e8bfd
diff --git a/test/core/client_config/uri_corpus/c28a47409cf5d95bb372238d01e73d8b831408e4 b/test/core/client_channel/uri_corpus/c28a47409cf5d95bb372238d01e73d8b831408e4
similarity index 100%
rename from test/core/client_config/uri_corpus/c28a47409cf5d95bb372238d01e73d8b831408e4
rename to test/core/client_channel/uri_corpus/c28a47409cf5d95bb372238d01e73d8b831408e4
diff --git a/test/core/client_config/uri_corpus/c3ef1d41888063a08700c3add1e4465aabcf8807 b/test/core/client_channel/uri_corpus/c3ef1d41888063a08700c3add1e4465aabcf8807
similarity index 100%
rename from test/core/client_config/uri_corpus/c3ef1d41888063a08700c3add1e4465aabcf8807
rename to test/core/client_channel/uri_corpus/c3ef1d41888063a08700c3add1e4465aabcf8807
diff --git a/test/core/client_config/uri_corpus/c550a76af21f9b9cc92a386d5c8998b26f8f2e4d b/test/core/client_channel/uri_corpus/c550a76af21f9b9cc92a386d5c8998b26f8f2e4d
similarity index 100%
rename from test/core/client_config/uri_corpus/c550a76af21f9b9cc92a386d5c8998b26f8f2e4d
rename to test/core/client_channel/uri_corpus/c550a76af21f9b9cc92a386d5c8998b26f8f2e4d
diff --git a/test/core/client_config/uri_corpus/c79721406d0ab80495f186fd88e37fba98637ae9 b/test/core/client_channel/uri_corpus/c79721406d0ab80495f186fd88e37fba98637ae9
similarity index 100%
rename from test/core/client_config/uri_corpus/c79721406d0ab80495f186fd88e37fba98637ae9
rename to test/core/client_channel/uri_corpus/c79721406d0ab80495f186fd88e37fba98637ae9
diff --git a/test/core/client_config/uri_corpus/ceb4e2264ba7a8d5be47d276b37ec09489e00245 b/test/core/client_channel/uri_corpus/ceb4e2264ba7a8d5be47d276b37ec09489e00245
similarity index 100%
rename from test/core/client_config/uri_corpus/ceb4e2264ba7a8d5be47d276b37ec09489e00245
rename to test/core/client_channel/uri_corpus/ceb4e2264ba7a8d5be47d276b37ec09489e00245
diff --git a/test/core/client_config/uri_corpus/cf4395958f5bfb46fd6f535a39657d016c75114c b/test/core/client_channel/uri_corpus/cf4395958f5bfb46fd6f535a39657d016c75114c
similarity index 100%
rename from test/core/client_config/uri_corpus/cf4395958f5bfb46fd6f535a39657d016c75114c
rename to test/core/client_channel/uri_corpus/cf4395958f5bfb46fd6f535a39657d016c75114c
diff --git a/test/core/client_config/uri_corpus/d46668372b7e20154a89409a7430a28e642afdca b/test/core/client_channel/uri_corpus/d46668372b7e20154a89409a7430a28e642afdca
similarity index 100%
rename from test/core/client_config/uri_corpus/d46668372b7e20154a89409a7430a28e642afdca
rename to test/core/client_channel/uri_corpus/d46668372b7e20154a89409a7430a28e642afdca
diff --git a/test/core/client_config/uri_corpus/d6fe7412a0a1d1c733160246f3fa425f4f97682a b/test/core/client_channel/uri_corpus/d6fe7412a0a1d1c733160246f3fa425f4f97682a
similarity index 100%
rename from test/core/client_config/uri_corpus/d6fe7412a0a1d1c733160246f3fa425f4f97682a
rename to test/core/client_channel/uri_corpus/d6fe7412a0a1d1c733160246f3fa425f4f97682a
diff --git a/test/core/client_config/uri_corpus/dns.txt b/test/core/client_channel/uri_corpus/dns.txt
similarity index 100%
rename from test/core/client_config/uri_corpus/dns.txt
rename to test/core/client_channel/uri_corpus/dns.txt
diff --git a/test/core/client_config/uri_corpus/e241f29957b0e30ec11aaaf91b2339f7015fa5fd b/test/core/client_channel/uri_corpus/e241f29957b0e30ec11aaaf91b2339f7015fa5fd
similarity index 100%
rename from test/core/client_config/uri_corpus/e241f29957b0e30ec11aaaf91b2339f7015fa5fd
rename to test/core/client_channel/uri_corpus/e241f29957b0e30ec11aaaf91b2339f7015fa5fd
diff --git a/test/core/client_config/uri_corpus/ea02d9fea9bad5b89cf353a0169238f584177e71 b/test/core/client_channel/uri_corpus/ea02d9fea9bad5b89cf353a0169238f584177e71
similarity index 100%
rename from test/core/client_config/uri_corpus/ea02d9fea9bad5b89cf353a0169238f584177e71
rename to test/core/client_channel/uri_corpus/ea02d9fea9bad5b89cf353a0169238f584177e71
diff --git a/test/core/client_config/uri_corpus/ec4731dddf94ed3ea92ae4d5a71f145ab6e3f6ee b/test/core/client_channel/uri_corpus/ec4731dddf94ed3ea92ae4d5a71f145ab6e3f6ee
similarity index 100%
rename from test/core/client_config/uri_corpus/ec4731dddf94ed3ea92ae4d5a71f145ab6e3f6ee
rename to test/core/client_channel/uri_corpus/ec4731dddf94ed3ea92ae4d5a71f145ab6e3f6ee
diff --git a/test/core/client_config/uri_corpus/ed2f78646f19fc47dd85ff0877c232b71913ece2 b/test/core/client_channel/uri_corpus/ed2f78646f19fc47dd85ff0877c232b71913ece2
similarity index 100%
rename from test/core/client_config/uri_corpus/ed2f78646f19fc47dd85ff0877c232b71913ece2
rename to test/core/client_channel/uri_corpus/ed2f78646f19fc47dd85ff0877c232b71913ece2
diff --git a/test/core/client_config/uri_corpus/f6889f4a6350fea1596a3adea5cdac02bd5d1ff3 b/test/core/client_channel/uri_corpus/f6889f4a6350fea1596a3adea5cdac02bd5d1ff3
similarity index 100%
rename from test/core/client_config/uri_corpus/f6889f4a6350fea1596a3adea5cdac02bd5d1ff3
rename to test/core/client_channel/uri_corpus/f6889f4a6350fea1596a3adea5cdac02bd5d1ff3
diff --git a/test/core/client_config/uri_corpus/f6f3bd030f0d321efe7c51ca3f057de23509af67 b/test/core/client_channel/uri_corpus/f6f3bd030f0d321efe7c51ca3f057de23509af67
similarity index 100%
rename from test/core/client_config/uri_corpus/f6f3bd030f0d321efe7c51ca3f057de23509af67
rename to test/core/client_channel/uri_corpus/f6f3bd030f0d321efe7c51ca3f057de23509af67
diff --git a/test/core/client_config/uri_corpus/f97598cff03306af3c70400608fec47268b5075d b/test/core/client_channel/uri_corpus/f97598cff03306af3c70400608fec47268b5075d
similarity index 100%
rename from test/core/client_config/uri_corpus/f97598cff03306af3c70400608fec47268b5075d
rename to test/core/client_channel/uri_corpus/f97598cff03306af3c70400608fec47268b5075d
diff --git a/test/core/client_config/uri_corpus/f9e1ec1fc642b575bc9955618b7065747f56b101 b/test/core/client_channel/uri_corpus/f9e1ec1fc642b575bc9955618b7065747f56b101
similarity index 100%
rename from test/core/client_config/uri_corpus/f9e1ec1fc642b575bc9955618b7065747f56b101
rename to test/core/client_channel/uri_corpus/f9e1ec1fc642b575bc9955618b7065747f56b101
diff --git a/test/core/client_config/uri_corpus/fe0630a3aeed2ec6f474f362e4c839478290d5c4 b/test/core/client_channel/uri_corpus/fe0630a3aeed2ec6f474f362e4c839478290d5c4
similarity index 100%
rename from test/core/client_config/uri_corpus/fe0630a3aeed2ec6f474f362e4c839478290d5c4
rename to test/core/client_channel/uri_corpus/fe0630a3aeed2ec6f474f362e4c839478290d5c4
diff --git a/test/core/client_config/uri_corpus/ipv4.txt b/test/core/client_channel/uri_corpus/ipv4.txt
similarity index 100%
rename from test/core/client_config/uri_corpus/ipv4.txt
rename to test/core/client_channel/uri_corpus/ipv4.txt
diff --git a/test/core/client_config/uri_corpus/ipv6.txt b/test/core/client_channel/uri_corpus/ipv6.txt
similarity index 100%
rename from test/core/client_config/uri_corpus/ipv6.txt
rename to test/core/client_channel/uri_corpus/ipv6.txt
diff --git a/test/core/client_config/uri_corpus/unix.txt b/test/core/client_channel/uri_corpus/unix.txt
similarity index 100%
rename from test/core/client_config/uri_corpus/unix.txt
rename to test/core/client_channel/uri_corpus/unix.txt
diff --git a/test/core/client_config/uri_fuzzer_test.c b/test/core/client_channel/uri_fuzzer_test.c
similarity index 97%
rename from test/core/client_config/uri_fuzzer_test.c
rename to test/core/client_channel/uri_fuzzer_test.c
index f297140559c2c01eb7aa8033c66130567c60ad75..d2e3fb40eacce5c804c3fb3f2aea9287d7ecc0a8 100644
--- a/test/core/client_config/uri_fuzzer_test.c
+++ b/test/core/client_channel/uri_fuzzer_test.c
@@ -37,7 +37,7 @@
 
 #include <grpc/support/alloc.h>
 
-#include "src/core/ext/client_config/uri_parser.h"
+#include "src/core/ext/client_channel/uri_parser.h"
 
 bool squelch = true;
 bool leak_check = true;
diff --git a/test/core/client_config/uri_parser_test.c b/test/core/client_channel/uri_parser_test.c
similarity index 99%
rename from test/core/client_config/uri_parser_test.c
rename to test/core/client_channel/uri_parser_test.c
index 323e8b6f70b1d6229126ddf949cd7239c40f4bab..5f32d3270c1ac6e61aabcb1f016cf908d9a05d36 100644
--- a/test/core/client_config/uri_parser_test.c
+++ b/test/core/client_channel/uri_parser_test.c
@@ -31,7 +31,7 @@
  *
  */
 
-#include "src/core/ext/client_config/uri_parser.h"
+#include "src/core/ext/client_channel/uri_parser.h"
 
 #include <string.h>
 
diff --git a/test/core/end2end/fake_resolver.c b/test/core/end2end/fake_resolver.c
index 32dc9e2711dadd911849053c9c255290b091c68b..5669ce51e880778f1b411027f2b1b8104d18e97a 100644
--- a/test/core/end2end/fake_resolver.c
+++ b/test/core/end2end/fake_resolver.c
@@ -42,9 +42,9 @@
 #include <grpc/support/port_platform.h>
 #include <grpc/support/string_util.h>
 
-#include "src/core/ext/client_config/method_config.h"
-#include "src/core/ext/client_config/parse_address.h"
-#include "src/core/ext/client_config/resolver_registry.h"
+#include "src/core/ext/client_channel/method_config.h"
+#include "src/core/ext/client_channel/parse_address.h"
+#include "src/core/ext/client_channel/resolver_registry.h"
 #include "src/core/lib/channel/channel_args.h"
 #include "src/core/lib/iomgr/resolve_address.h"
 #include "src/core/lib/iomgr/unix_sockets_posix.h"
diff --git a/test/core/end2end/fixtures/h2_census.c b/test/core/end2end/fixtures/h2_census.c
index 36c2d24329c0bfa9765782a427a2e0d4969f95d6..c2e1acf57f6a16be59898609434171db570307e6 100644
--- a/test/core/end2end/fixtures/h2_census.c
+++ b/test/core/end2end/fixtures/h2_census.c
@@ -41,7 +41,7 @@
 #include <grpc/support/sync.h>
 #include <grpc/support/thd.h>
 #include <grpc/support/useful.h>
-#include "src/core/ext/client_config/client_channel.h"
+#include "src/core/ext/client_channel/client_channel.h"
 #include "src/core/ext/transport/chttp2/transport/chttp2_transport.h"
 #include "src/core/lib/channel/channel_args.h"
 #include "src/core/lib/channel/connected_channel.h"
diff --git a/test/core/end2end/fixtures/h2_compress.c b/test/core/end2end/fixtures/h2_compress.c
index 0e84588517ae164cc8b21fbf733187eb2521a71c..94a198f380d582d24a6eee126d157041549f3985 100644
--- a/test/core/end2end/fixtures/h2_compress.c
+++ b/test/core/end2end/fixtures/h2_compress.c
@@ -41,7 +41,7 @@
 #include <grpc/support/sync.h>
 #include <grpc/support/thd.h>
 #include <grpc/support/useful.h>
-#include "src/core/ext/client_config/client_channel.h"
+#include "src/core/ext/client_channel/client_channel.h"
 #include "src/core/ext/transport/chttp2/transport/chttp2_transport.h"
 #include "src/core/lib/channel/channel_args.h"
 #include "src/core/lib/channel/connected_channel.h"
diff --git a/test/core/end2end/fixtures/h2_fake_resolver.c b/test/core/end2end/fixtures/h2_fake_resolver.c
index 89debddb0442a96b1ff1fa5fa4a1f661c6014558..429f3c95f91010101b5559a54cf463dc5af8dc03 100644
--- a/test/core/end2end/fixtures/h2_fake_resolver.c
+++ b/test/core/end2end/fixtures/h2_fake_resolver.c
@@ -41,7 +41,7 @@
 #include <grpc/support/thd.h>
 #include <grpc/support/useful.h>
 
-#include "src/core/ext/client_config/client_channel.h"
+#include "src/core/ext/client_channel/client_channel.h"
 #include "src/core/ext/transport/chttp2/transport/chttp2_transport.h"
 #include "src/core/lib/channel/connected_channel.h"
 #include "src/core/lib/channel/http_server_filter.h"
diff --git a/test/core/end2end/fixtures/h2_full+pipe.c b/test/core/end2end/fixtures/h2_full+pipe.c
index 359af1aaf8cd42071c6dff6777e2141471d74653..5d4c44ce94f70ce98d298f4d4e29e6e09d749516 100644
--- a/test/core/end2end/fixtures/h2_full+pipe.c
+++ b/test/core/end2end/fixtures/h2_full+pipe.c
@@ -41,7 +41,7 @@
 #include <grpc/support/sync.h>
 #include <grpc/support/thd.h>
 #include <grpc/support/useful.h>
-#include "src/core/ext/client_config/client_channel.h"
+#include "src/core/ext/client_channel/client_channel.h"
 #include "src/core/ext/transport/chttp2/transport/chttp2_transport.h"
 #include "src/core/lib/channel/connected_channel.h"
 #include "src/core/lib/channel/http_server_filter.h"
diff --git a/test/core/end2end/fixtures/h2_full+trace.c b/test/core/end2end/fixtures/h2_full+trace.c
index ac997b05abf0ba5bb01ca2ab6c971cfd5cf31629..64aa53a5ae84557c580450e6079ab85a51fe3dea 100644
--- a/test/core/end2end/fixtures/h2_full+trace.c
+++ b/test/core/end2end/fixtures/h2_full+trace.c
@@ -41,7 +41,7 @@
 #include <grpc/support/sync.h>
 #include <grpc/support/thd.h>
 #include <grpc/support/useful.h>
-#include "src/core/ext/client_config/client_channel.h"
+#include "src/core/ext/client_channel/client_channel.h"
 #include "src/core/ext/transport/chttp2/transport/chttp2_transport.h"
 #include "src/core/lib/channel/connected_channel.h"
 #include "src/core/lib/channel/http_server_filter.h"
diff --git a/test/core/end2end/fixtures/h2_full.c b/test/core/end2end/fixtures/h2_full.c
index a72ab3aedd386904d1edaed5f16da141e636e8ba..182ce23a51bf09c9db70a9755f07d09739310d79 100644
--- a/test/core/end2end/fixtures/h2_full.c
+++ b/test/core/end2end/fixtures/h2_full.c
@@ -41,7 +41,7 @@
 #include <grpc/support/sync.h>
 #include <grpc/support/thd.h>
 #include <grpc/support/useful.h>
-#include "src/core/ext/client_config/client_channel.h"
+#include "src/core/ext/client_channel/client_channel.h"
 #include "src/core/ext/transport/chttp2/transport/chttp2_transport.h"
 #include "src/core/lib/channel/connected_channel.h"
 #include "src/core/lib/channel/http_server_filter.h"
diff --git a/test/core/end2end/fixtures/h2_http_proxy.c b/test/core/end2end/fixtures/h2_http_proxy.c
index f616da9ed5cd52fa4d0b5d2b37462429d890a304..2acc06f5496d7beeab57c50e0ca548d8c917afb6 100644
--- a/test/core/end2end/fixtures/h2_http_proxy.c
+++ b/test/core/end2end/fixtures/h2_http_proxy.c
@@ -42,7 +42,7 @@
 #include <grpc/support/sync.h>
 #include <grpc/support/thd.h>
 #include <grpc/support/useful.h>
-#include "src/core/ext/client_config/client_channel.h"
+#include "src/core/ext/client_channel/client_channel.h"
 #include "src/core/ext/transport/chttp2/transport/chttp2_transport.h"
 #include "src/core/lib/channel/connected_channel.h"
 #include "src/core/lib/channel/http_server_filter.h"
diff --git a/test/core/end2end/fixtures/h2_load_reporting.c b/test/core/end2end/fixtures/h2_load_reporting.c
index fc4db27e3ce9aa15e48914daa52dddc5e93761fc..0957666a443e978e4b2122fe787a24f73dedecb4 100644
--- a/test/core/end2end/fixtures/h2_load_reporting.c
+++ b/test/core/end2end/fixtures/h2_load_reporting.c
@@ -41,7 +41,7 @@
 #include <grpc/support/sync.h>
 #include <grpc/support/thd.h>
 #include <grpc/support/useful.h>
-#include "src/core/ext/client_config/client_channel.h"
+#include "src/core/ext/client_channel/client_channel.h"
 #include "src/core/ext/load_reporting/load_reporting.h"
 #include "src/core/ext/transport/chttp2/transport/chttp2_transport.h"
 #include "src/core/lib/channel/channel_args.h"
diff --git a/test/core/end2end/fixtures/h2_proxy.c b/test/core/end2end/fixtures/h2_proxy.c
index ea1da2abc119db264cffd127c15ce0e8c074af7a..2671e0abde8787089a670f28de80448cacb66363 100644
--- a/test/core/end2end/fixtures/h2_proxy.c
+++ b/test/core/end2end/fixtures/h2_proxy.c
@@ -41,7 +41,7 @@
 #include <grpc/support/sync.h>
 #include <grpc/support/thd.h>
 #include <grpc/support/useful.h>
-#include "src/core/ext/client_config/client_channel.h"
+#include "src/core/ext/client_channel/client_channel.h"
 #include "src/core/ext/transport/chttp2/transport/chttp2_transport.h"
 #include "src/core/lib/channel/connected_channel.h"
 #include "src/core/lib/channel/http_server_filter.h"
diff --git a/test/core/end2end/fixtures/h2_sockpair+trace.c b/test/core/end2end/fixtures/h2_sockpair+trace.c
index 1ca11853096128a3328fc480a91beac83f5d1116..dd4376f04667132f788c0c294d29012ee91da2db 100644
--- a/test/core/end2end/fixtures/h2_sockpair+trace.c
+++ b/test/core/end2end/fixtures/h2_sockpair+trace.c
@@ -40,7 +40,7 @@
 #include <grpc/support/sync.h>
 #include <grpc/support/thd.h>
 #include <grpc/support/useful.h>
-#include "src/core/ext/client_config/client_channel.h"
+#include "src/core/ext/client_channel/client_channel.h"
 #include "src/core/ext/transport/chttp2/transport/chttp2_transport.h"
 #include "src/core/lib/channel/compress_filter.h"
 #include "src/core/lib/channel/connected_channel.h"
diff --git a/test/core/end2end/fixtures/h2_sockpair.c b/test/core/end2end/fixtures/h2_sockpair.c
index 265491b56ddd909df21e3337496659949e636c2f..87091f77a3b922e3d2ab93e4c2c3465661d8a344 100644
--- a/test/core/end2end/fixtures/h2_sockpair.c
+++ b/test/core/end2end/fixtures/h2_sockpair.c
@@ -40,7 +40,7 @@
 #include <grpc/support/sync.h>
 #include <grpc/support/thd.h>
 #include <grpc/support/useful.h>
-#include "src/core/ext/client_config/client_channel.h"
+#include "src/core/ext/client_channel/client_channel.h"
 #include "src/core/ext/transport/chttp2/transport/chttp2_transport.h"
 #include "src/core/lib/channel/compress_filter.h"
 #include "src/core/lib/channel/connected_channel.h"
diff --git a/test/core/end2end/fixtures/h2_sockpair_1byte.c b/test/core/end2end/fixtures/h2_sockpair_1byte.c
index 647585d46c2e59b04bab42d368700ad1b6f71813..7d0a14cd63426bcf4c651fd90607287200b06c4d 100644
--- a/test/core/end2end/fixtures/h2_sockpair_1byte.c
+++ b/test/core/end2end/fixtures/h2_sockpair_1byte.c
@@ -40,7 +40,7 @@
 #include <grpc/support/sync.h>
 #include <grpc/support/thd.h>
 #include <grpc/support/useful.h>
-#include "src/core/ext/client_config/client_channel.h"
+#include "src/core/ext/client_channel/client_channel.h"
 #include "src/core/ext/transport/chttp2/transport/chttp2_transport.h"
 #include "src/core/lib/channel/compress_filter.h"
 #include "src/core/lib/channel/connected_channel.h"
diff --git a/test/core/end2end/fixtures/h2_uds.c b/test/core/end2end/fixtures/h2_uds.c
index e280bb8c291a5440226fed9f2c1b6b598449eb2d..888d6c0a10aaf65923f072fc954a9f71e8266995 100644
--- a/test/core/end2end/fixtures/h2_uds.c
+++ b/test/core/end2end/fixtures/h2_uds.c
@@ -44,7 +44,7 @@
 #include <grpc/support/sync.h>
 #include <grpc/support/thd.h>
 #include <grpc/support/useful.h>
-#include "src/core/ext/client_config/client_channel.h"
+#include "src/core/ext/client_channel/client_channel.h"
 #include "src/core/ext/transport/chttp2/transport/chttp2_transport.h"
 #include "src/core/lib/channel/connected_channel.h"
 #include "src/core/lib/channel/http_server_filter.h"
diff --git a/test/core/end2end/fuzzers/hpack.dictionary b/test/core/end2end/fuzzers/hpack.dictionary
index 181bbe845e12ca775bdbbac55992ef485fa055bc..12db0ff02485b2e040dcc7f08a8dd5f05a2c10cc 100644
--- a/test/core/end2end/fuzzers/hpack.dictionary
+++ b/test/core/end2end/fuzzers/hpack.dictionary
@@ -63,7 +63,7 @@
 "\x08if-range"
 "\x13if-unmodified-since"
 "\x0Dlast-modified"
-"\x07lb-cost"
+"\x0Blb-cost-bin"
 "\x08lb-token"
 "\x04link"
 "\x08location"
@@ -138,7 +138,7 @@
 "\x00\x08if-range\x00"
 "\x00\x13if-unmodified-since\x00"
 "\x00\x0Dlast-modified\x00"
-"\x00\x07lb-cost\x00"
+"\x00\x0Blb-cost-bin\x00"
 "\x00\x08lb-token\x00"
 "\x00\x04link\x00"
 "\x00\x08location\x00"
diff --git a/test/core/iomgr/tcp_server_posix_test.c b/test/core/iomgr/tcp_server_posix_test.c
index 6b1dd428a13f949edaa1c4e4ae07e1244ab38b13..5791f562e114b5a2ebb2a91292e562b9c64b3208 100644
--- a/test/core/iomgr/tcp_server_posix_test.c
+++ b/test/core/iomgr/tcp_server_posix_test.c
@@ -118,8 +118,11 @@ static void on_connect(grpc_exec_ctx *exec_ctx, void *arg, grpc_endpoint *tcp,
   grpc_endpoint_shutdown(exec_ctx, tcp);
   grpc_endpoint_destroy(exec_ctx, tcp);
 
+  on_connect_result temp_result;
+  on_connect_result_set(&temp_result, acceptor);
+
   gpr_mu_lock(g_mu);
-  on_connect_result_set(&g_result, acceptor);
+  g_result = temp_result;
   g_nconnects++;
   GPR_ASSERT(
       GRPC_LOG_IF_ERROR("pollset_kick", grpc_pollset_kick(g_pollset, NULL)));
diff --git a/test/core/surface/channel_create_test.c b/test/core/surface/channel_create_test.c
index 580eb303f68604cdf36eff5ac1e06424f7ada89b..ad7970aab9d220a4ec50c93a0a48b1dc107a7a4f 100644
--- a/test/core/surface/channel_create_test.c
+++ b/test/core/surface/channel_create_test.c
@@ -33,7 +33,7 @@
 
 #include <grpc/grpc.h>
 #include <grpc/support/log.h>
-#include "src/core/ext/client_config/resolver_registry.h"
+#include "src/core/ext/client_channel/resolver_registry.h"
 #include "test/core/util/test_config.h"
 
 void test_unknown_scheme_target(void) {
diff --git a/test/core/surface/secure_channel_create_test.c b/test/core/surface/secure_channel_create_test.c
index f8a9a6421155edfb9cc3508c1f698d0b241f8332..444ebdc093816948c9aa829d2c9b489a4f631afe 100644
--- a/test/core/surface/secure_channel_create_test.c
+++ b/test/core/surface/secure_channel_create_test.c
@@ -36,7 +36,7 @@
 #include <grpc/grpc.h>
 #include <grpc/grpc_security.h>
 #include <grpc/support/log.h>
-#include "src/core/ext/client_config/resolver_registry.h"
+#include "src/core/ext/client_channel/resolver_registry.h"
 #include "src/core/lib/security/credentials/fake/fake_credentials.h"
 #include "src/core/lib/security/transport/security_connector.h"
 #include "src/core/lib/surface/channel.h"
diff --git a/test/cpp/codegen/compiler_test_golden b/test/cpp/codegen/compiler_test_golden
index 7b0fd6ce80498b820cb7a1242bec7522020749a5..5f0e8246551a02f313a6e6904c377c172eeedb44 100644
--- a/test/cpp/codegen/compiler_test_golden
+++ b/test/cpp/codegen/compiler_test_golden
@@ -213,7 +213,7 @@ class ServiceA GRPC_FINAL {
     void BaseClassMustBeDerivedFromService(const Service *service) {}
    public:
     WithStreamedUnaryMethod_MethodA1() {
-      ::grpc::Service::MarkMethodStreamedUnary(0,
+      ::grpc::Service::MarkMethodStreamed(0,
         new ::grpc::StreamedUnaryHandler< ::grpc::testing::Request, ::grpc::testing::Response>(std::bind(&WithStreamedUnaryMethod_MethodA1<BaseClass>::StreamedMethodA1, this, std::placeholders::_1, std::placeholders::_2)));
     }
     ~WithStreamedUnaryMethod_MethodA1() GRPC_OVERRIDE {
@@ -228,6 +228,8 @@ class ServiceA GRPC_FINAL {
     virtual ::grpc::Status StreamedMethodA1(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::grpc::testing::Request,::grpc::testing::Response>* server_unary_streamer) = 0;
   };
   typedef WithStreamedUnaryMethod_MethodA1<Service > StreamedUnaryService;
+  typedef Service SplitStreamedService;
+  typedef WithStreamedUnaryMethod_MethodA1<Service > StreamedService;
 };
 
 // ServiceB leading comment 1
@@ -312,7 +314,7 @@ class ServiceB GRPC_FINAL {
     void BaseClassMustBeDerivedFromService(const Service *service) {}
    public:
     WithStreamedUnaryMethod_MethodB1() {
-      ::grpc::Service::MarkMethodStreamedUnary(0,
+      ::grpc::Service::MarkMethodStreamed(0,
         new ::grpc::StreamedUnaryHandler< ::grpc::testing::Request, ::grpc::testing::Response>(std::bind(&WithStreamedUnaryMethod_MethodB1<BaseClass>::StreamedMethodB1, this, std::placeholders::_1, std::placeholders::_2)));
     }
     ~WithStreamedUnaryMethod_MethodB1() GRPC_OVERRIDE {
@@ -327,6 +329,8 @@ class ServiceB GRPC_FINAL {
     virtual ::grpc::Status StreamedMethodB1(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::grpc::testing::Request,::grpc::testing::Response>* server_unary_streamer) = 0;
   };
   typedef WithStreamedUnaryMethod_MethodB1<Service > StreamedUnaryService;
+  typedef Service SplitStreamedService;
+  typedef WithStreamedUnaryMethod_MethodB1<Service > StreamedService;
 };
 // ServiceB trailing comment 1
 
diff --git a/test/cpp/end2end/hybrid_end2end_test.cc b/test/cpp/end2end/hybrid_end2end_test.cc
index 8cd2e663470ceae2bc01e5ce8db01e85ed06a485..76a5732f338adfae3068204929e9921e81f998d3 100644
--- a/test/cpp/end2end/hybrid_end2end_test.cc
+++ b/test/cpp/end2end/hybrid_end2end_test.cc
@@ -320,6 +320,29 @@ class HybridEnd2endTest : public ::testing::Test {
     EXPECT_TRUE(s.ok());
   }
 
+  void SendSimpleServerStreamingToDupService() {
+    std::shared_ptr<Channel> channel =
+        CreateChannel(server_address_.str(), InsecureChannelCredentials());
+    auto stub = grpc::testing::duplicate::EchoTestService::NewStub(channel);
+    EchoRequest request;
+    EchoResponse response;
+    ClientContext context;
+    context.set_wait_for_ready(true);
+    request.set_message("hello");
+
+    auto stream = stub->ResponseStream(&context, request);
+    EXPECT_TRUE(stream->Read(&response));
+    EXPECT_EQ(response.message(), request.message() + "0_dup");
+    EXPECT_TRUE(stream->Read(&response));
+    EXPECT_EQ(response.message(), request.message() + "1_dup");
+    EXPECT_TRUE(stream->Read(&response));
+    EXPECT_EQ(response.message(), request.message() + "2_dup");
+    EXPECT_FALSE(stream->Read(&response));
+
+    Status s = stream->Finish();
+    EXPECT_TRUE(s.ok());
+  }
+
   void SendBidiStreaming() {
     EchoRequest request;
     EchoResponse response;
@@ -498,6 +521,140 @@ TEST_F(HybridEnd2endTest,
   request_stream_handler_thread.join();
 }
 
+// Add a second service with one sync split server streaming method.
+class SplitResponseStreamDupPkg
+    : public duplicate::EchoTestService::
+          WithSplitStreamingMethod_ResponseStream<TestServiceImplDupPkg> {
+ public:
+  Status StreamedResponseStream(
+      ServerContext* context,
+      ServerSplitStreamer<EchoRequest, EchoResponse>* stream) GRPC_OVERRIDE {
+    EchoRequest req;
+    EchoResponse resp;
+    uint32_t next_msg_sz;
+    stream->NextMessageSize(&next_msg_sz);
+    gpr_log(GPR_INFO, "Split Streamed Next Message Size is %u", next_msg_sz);
+    GPR_ASSERT(stream->Read(&req));
+    for (int i = 0; i < kNumResponseStreamsMsgs; i++) {
+      resp.set_message(req.message() + grpc::to_string(i) + "_dup");
+      GPR_ASSERT(stream->Write(resp));
+    }
+    return Status::OK;
+  }
+};
+
+TEST_F(HybridEnd2endTest,
+       AsyncRequestStreamResponseStream_SyncSplitStreamedDupService) {
+  typedef EchoTestService::WithAsyncMethod_RequestStream<
+      EchoTestService::WithAsyncMethod_ResponseStream<TestServiceImpl>>
+      SType;
+  SType service;
+  SplitResponseStreamDupPkg dup_service;
+  SetUpServer(&service, &dup_service, nullptr, 8192);
+  ResetStub();
+  std::thread response_stream_handler_thread(HandleServerStreaming<SType>,
+                                             &service, cqs_[0].get());
+  std::thread request_stream_handler_thread(HandleClientStreaming<SType>,
+                                            &service, cqs_[1].get());
+  TestAllMethods();
+  SendSimpleServerStreamingToDupService();
+  response_stream_handler_thread.join();
+  request_stream_handler_thread.join();
+}
+
+// Add a second service that is fully split server streamed
+class FullySplitStreamedDupPkg
+    : public duplicate::EchoTestService::SplitStreamedService {
+ public:
+  Status StreamedResponseStream(
+      ServerContext* context,
+      ServerSplitStreamer<EchoRequest, EchoResponse>* stream) GRPC_OVERRIDE {
+    EchoRequest req;
+    EchoResponse resp;
+    uint32_t next_msg_sz;
+    stream->NextMessageSize(&next_msg_sz);
+    gpr_log(GPR_INFO, "Split Streamed Next Message Size is %u", next_msg_sz);
+    GPR_ASSERT(stream->Read(&req));
+    for (int i = 0; i < kNumResponseStreamsMsgs; i++) {
+      resp.set_message(req.message() + grpc::to_string(i) + "_dup");
+      GPR_ASSERT(stream->Write(resp));
+    }
+    return Status::OK;
+  }
+};
+
+TEST_F(HybridEnd2endTest,
+       AsyncRequestStreamResponseStream_FullySplitStreamedDupService) {
+  typedef EchoTestService::WithAsyncMethod_RequestStream<
+      EchoTestService::WithAsyncMethod_ResponseStream<TestServiceImpl>>
+      SType;
+  SType service;
+  FullySplitStreamedDupPkg dup_service;
+  SetUpServer(&service, &dup_service, nullptr, 8192);
+  ResetStub();
+  std::thread response_stream_handler_thread(HandleServerStreaming<SType>,
+                                             &service, cqs_[0].get());
+  std::thread request_stream_handler_thread(HandleClientStreaming<SType>,
+                                            &service, cqs_[1].get());
+  TestAllMethods();
+  SendSimpleServerStreamingToDupService();
+  response_stream_handler_thread.join();
+  request_stream_handler_thread.join();
+}
+
+// Add a second service that is fully server streamed
+class FullyStreamedDupPkg : public duplicate::EchoTestService::StreamedService {
+ public:
+  Status StreamedEcho(ServerContext* context,
+                      ServerUnaryStreamer<EchoRequest, EchoResponse>* stream)
+      GRPC_OVERRIDE {
+    EchoRequest req;
+    EchoResponse resp;
+    uint32_t next_msg_sz;
+    stream->NextMessageSize(&next_msg_sz);
+    gpr_log(GPR_INFO, "Streamed Unary Next Message Size is %u", next_msg_sz);
+    GPR_ASSERT(stream->Read(&req));
+    resp.set_message(req.message() + "_dup");
+    GPR_ASSERT(stream->Write(resp));
+    return Status::OK;
+  }
+  Status StreamedResponseStream(
+      ServerContext* context,
+      ServerSplitStreamer<EchoRequest, EchoResponse>* stream) GRPC_OVERRIDE {
+    EchoRequest req;
+    EchoResponse resp;
+    uint32_t next_msg_sz;
+    stream->NextMessageSize(&next_msg_sz);
+    gpr_log(GPR_INFO, "Split Streamed Next Message Size is %u", next_msg_sz);
+    GPR_ASSERT(stream->Read(&req));
+    for (int i = 0; i < kNumResponseStreamsMsgs; i++) {
+      resp.set_message(req.message() + grpc::to_string(i) + "_dup");
+      GPR_ASSERT(stream->Write(resp));
+    }
+    return Status::OK;
+  }
+};
+
+TEST_F(HybridEnd2endTest,
+       AsyncRequestStreamResponseStream_FullyStreamedDupService) {
+  typedef EchoTestService::WithAsyncMethod_RequestStream<
+      EchoTestService::WithAsyncMethod_ResponseStream<TestServiceImpl>>
+      SType;
+  SType service;
+  FullyStreamedDupPkg dup_service;
+  SetUpServer(&service, &dup_service, nullptr, 8192);
+  ResetStub();
+  std::thread response_stream_handler_thread(HandleServerStreaming<SType>,
+                                             &service, cqs_[0].get());
+  std::thread request_stream_handler_thread(HandleClientStreaming<SType>,
+                                            &service, cqs_[1].get());
+  TestAllMethods();
+  SendEchoToDupService();
+  SendSimpleServerStreamingToDupService();
+  response_stream_handler_thread.join();
+  request_stream_handler_thread.join();
+}
+
 // Add a second service with one async method.
 TEST_F(HybridEnd2endTest, AsyncRequestStreamResponseStream_AsyncDupService) {
   typedef EchoTestService::WithAsyncMethod_RequestStream<
diff --git a/test/cpp/grpclb/grpclb_test.cc b/test/cpp/grpclb/grpclb_test.cc
index 80f2fa4f4d922f68c46dfbbe42e881ff357b8285..b6056f9ae4c695b6c05228979cf74124c54fc86b 100644
--- a/test/cpp/grpclb/grpclb_test.cc
+++ b/test/cpp/grpclb/grpclb_test.cc
@@ -51,7 +51,7 @@
 
 #include <grpc++/impl/codegen/config.h>
 extern "C" {
-#include "src/core/ext/client_config/client_channel.h"
+#include "src/core/ext/client_channel/client_channel.h"
 #include "src/core/lib/channel/channel_stack.h"
 #include "src/core/lib/iomgr/sockaddr.h"
 #include "src/core/lib/support/string.h"
diff --git a/test/cpp/interop/client.cc b/test/cpp/interop/client.cc
index 245e27b2bbae237c6e321496b6d2e0aac70eca71..4197ba8bab222f6b6732b6bd7600e33b36d6ecce 100644
--- a/test/cpp/interop/client.cc
+++ b/test/cpp/interop/client.cc
@@ -80,7 +80,7 @@ DEFINE_string(test_case, "large_unary",
               "slow client consumer;\n"
               "status_code_and_message: verify status code & message;\n"
               "timeout_on_sleeping_server: deadline exceeds on stream;\n"
-              "unimplemented_method: client calls an unimplemented_method;\n");
+              "unimplemented_method: client calls an unimplemented method;\n");
 DEFINE_string(default_service_account, "",
               "Email of GCE default service account");
 DEFINE_string(service_account_key_file, "",
diff --git a/test/cpp/interop/interop_client.cc b/test/cpp/interop/interop_client.cc
index f95d8c6ef6d26d6eb623426bbafe480dd3444d16..1668589cc4a891f199f2a0b74cd1111c10650a97 100644
--- a/test/cpp/interop/interop_client.cc
+++ b/test/cpp/interop/interop_client.cc
@@ -1010,7 +1010,7 @@ bool InteropClient::DoUnimplementedMethod() {
   ClientContext context;
 
   Status s =
-      serviceStub_.Get()->UnimplementedMethod(&context, request, &response);
+      serviceStub_.Get()->UnimplementedCall(&context, request, &response);
 
   if (!AssertStatusCode(s, StatusCode::UNIMPLEMENTED)) {
     return false;
diff --git a/test/cpp/interop/interop_test.cc b/test/cpp/interop/interop_test.cc
index 8e71a2bb295f72087c02dfea48f2fb30ded0fa36..c066598d363d2e57398aa700a11ff144762f0538 100644
--- a/test/cpp/interop/interop_test.cc
+++ b/test/cpp/interop/interop_test.cc
@@ -44,17 +44,21 @@
 #include <sys/wait.h>
 #include <unistd.h>
 
+#include <gflags/gflags.h>
 #include <grpc/support/alloc.h>
 #include <grpc/support/host_port.h>
 #include <grpc/support/log.h>
 #include <grpc/support/string_util.h>
 #include "test/core/util/port.h"
+#include "test/cpp/util/test_config.h"
 
 extern "C" {
 #include "src/core/lib/iomgr/socket_utils_posix.h"
 #include "src/core/lib/support/string.h"
 }
 
+DEFINE_string(extra_server_flags, "", "Extra flags to pass to server.");
+
 int test_client(const char* root, const char* host, int port) {
   int status;
   pid_t cli;
@@ -80,6 +84,7 @@ int test_client(const char* root, const char* host, int port) {
 }
 
 int main(int argc, char** argv) {
+  grpc::testing::InitTest(&argc, &argv, true);
   char* me = argv[0];
   char* lslash = strrchr(me, '/');
   char root[1024];
@@ -105,15 +110,19 @@ int main(int argc, char** argv) {
   /* start the server */
   svr = fork();
   if (svr == 0) {
-    char* binary_path;
-    char* port_arg;
-    gpr_asprintf(&binary_path, "%s/interop_server", root);
-    gpr_asprintf(&port_arg, "--port=%d", port);
-
-    execl(binary_path, binary_path, port_arg, NULL);
-
-    gpr_free(binary_path);
-    gpr_free(port_arg);
+    const size_t num_args = 3 + !FLAGS_extra_server_flags.empty();
+    char** args = (char**)gpr_malloc(sizeof(char*) * num_args);
+    memset(args, 0, sizeof(char*) * num_args);
+    gpr_asprintf(&args[0], "%s/interop_server", root);
+    gpr_asprintf(&args[1], "--port=%d", port);
+    if (!FLAGS_extra_server_flags.empty()) {
+      args[2] = gpr_strdup(FLAGS_extra_server_flags.c_str());
+    }
+    execv(args[0], args);
+    for (size_t i = 0; i < num_args - 1; ++i) {
+      gpr_free(args[i]);
+    }
+    gpr_free(args);
     return 1;
   }
   /* wait a little */
diff --git a/test/cpp/qps/server_async.cc b/test/cpp/qps/server_async.cc
index 73a96a84432164a65c40193b03aadcaabcd31252..2fcc64819b3b919d118f81ab43d41447a5d06461 100644
--- a/test/cpp/qps/server_async.cc
+++ b/test/cpp/qps/server_async.cc
@@ -57,7 +57,7 @@ namespace testing {
 
 template <class RequestType, class ResponseType, class ServiceType,
           class ServerContextType>
-class AsyncQpsServerTest : public Server {
+class AsyncQpsServerTest GRPC_FINAL : public grpc::testing::Server {
  public:
   AsyncQpsServerTest(
       const ServerConfig &config,
diff --git a/test/cpp/qps/server_sync.cc b/test/cpp/qps/server_sync.cc
index c774985bfa9650600c459e5d2c52831efa7e78c0..0caed0ab49e5cfd574a609e27cede7ee16044145 100644
--- a/test/cpp/qps/server_sync.cc
+++ b/test/cpp/qps/server_sync.cc
@@ -31,8 +31,6 @@
  *
  */
 
-#include <thread>
-
 #include <grpc++/security/server_credentials.h>
 #include <grpc++/server.h>
 #include <grpc++/server_builder.h>
diff --git a/tools/codegen/core/gen_static_metadata.py b/tools/codegen/core/gen_static_metadata.py
index 6f8cad279c82aa38938c319d4ce2d4cea058fd1c..cf3762dbb8d031d7ca4fcece97843fedc1e6213b 100755
--- a/tools/codegen/core/gen_static_metadata.py
+++ b/tools/codegen/core/gen_static_metadata.py
@@ -110,7 +110,7 @@ CONFIG = [
     ('if-unmodified-since', ''),
     ('last-modified', ''),
     ('lb-token', ''),
-    ('lb-cost', ''),
+    ('lb-cost-bin', ''),
     ('link', ''),
     ('location', ''),
     ('max-forwards', ''),
diff --git a/tools/doxygen/Doxyfile.core.internal b/tools/doxygen/Doxyfile.core.internal
index e5c91cbb131ecb0f048049c2264b62e95a50da05..89d8e708e62d281d1e66e8fe3ccb31a70616c249 100644
--- a/tools/doxygen/Doxyfile.core.internal
+++ b/tools/doxygen/Doxyfile.core.internal
@@ -915,23 +915,23 @@ src/core/lib/tsi/ssl_transport_security.h \
 src/core/lib/tsi/ssl_types.h \
 src/core/lib/tsi/transport_security.h \
 src/core/lib/tsi/transport_security_interface.h \
-src/core/ext/client_config/client_channel.h \
-src/core/ext/client_config/client_channel_factory.h \
-src/core/ext/client_config/connector.h \
-src/core/ext/client_config/http_connect_handshaker.h \
-src/core/ext/client_config/initial_connect_string.h \
-src/core/ext/client_config/lb_policy.h \
-src/core/ext/client_config/lb_policy_factory.h \
-src/core/ext/client_config/lb_policy_registry.h \
-src/core/ext/client_config/method_config.h \
-src/core/ext/client_config/parse_address.h \
-src/core/ext/client_config/resolver.h \
-src/core/ext/client_config/resolver_factory.h \
-src/core/ext/client_config/resolver_registry.h \
-src/core/ext/client_config/resolver_result.h \
-src/core/ext/client_config/subchannel.h \
-src/core/ext/client_config/subchannel_index.h \
-src/core/ext/client_config/uri_parser.h \
+src/core/ext/client_channel/client_channel.h \
+src/core/ext/client_channel/client_channel_factory.h \
+src/core/ext/client_channel/connector.h \
+src/core/ext/client_channel/http_connect_handshaker.h \
+src/core/ext/client_channel/initial_connect_string.h \
+src/core/ext/client_channel/lb_policy.h \
+src/core/ext/client_channel/lb_policy_factory.h \
+src/core/ext/client_channel/lb_policy_registry.h \
+src/core/ext/client_channel/method_config.h \
+src/core/ext/client_channel/parse_address.h \
+src/core/ext/client_channel/resolver.h \
+src/core/ext/client_channel/resolver_factory.h \
+src/core/ext/client_channel/resolver_registry.h \
+src/core/ext/client_channel/resolver_result.h \
+src/core/ext/client_channel/subchannel.h \
+src/core/ext/client_channel/subchannel_index.h \
+src/core/ext/client_channel/uri_parser.h \
 src/core/ext/lb_policy/grpclb/grpclb.h \
 src/core/ext/lb_policy/grpclb/load_balancer_api.h \
 src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h \
@@ -1098,26 +1098,26 @@ src/core/lib/tsi/fake_transport_security.c \
 src/core/lib/tsi/ssl_transport_security.c \
 src/core/lib/tsi/transport_security.c \
 src/core/ext/transport/chttp2/client/secure/secure_channel_create.c \
-src/core/ext/client_config/channel_connectivity.c \
-src/core/ext/client_config/client_channel.c \
-src/core/ext/client_config/client_channel_factory.c \
-src/core/ext/client_config/client_config_plugin.c \
-src/core/ext/client_config/connector.c \
-src/core/ext/client_config/default_initial_connect_string.c \
-src/core/ext/client_config/http_connect_handshaker.c \
-src/core/ext/client_config/initial_connect_string.c \
-src/core/ext/client_config/lb_policy.c \
-src/core/ext/client_config/lb_policy_factory.c \
-src/core/ext/client_config/lb_policy_registry.c \
-src/core/ext/client_config/method_config.c \
-src/core/ext/client_config/parse_address.c \
-src/core/ext/client_config/resolver.c \
-src/core/ext/client_config/resolver_factory.c \
-src/core/ext/client_config/resolver_registry.c \
-src/core/ext/client_config/resolver_result.c \
-src/core/ext/client_config/subchannel.c \
-src/core/ext/client_config/subchannel_index.c \
-src/core/ext/client_config/uri_parser.c \
+src/core/ext/client_channel/channel_connectivity.c \
+src/core/ext/client_channel/client_channel.c \
+src/core/ext/client_channel/client_channel_factory.c \
+src/core/ext/client_channel/client_channel_plugin.c \
+src/core/ext/client_channel/connector.c \
+src/core/ext/client_channel/default_initial_connect_string.c \
+src/core/ext/client_channel/http_connect_handshaker.c \
+src/core/ext/client_channel/initial_connect_string.c \
+src/core/ext/client_channel/lb_policy.c \
+src/core/ext/client_channel/lb_policy_factory.c \
+src/core/ext/client_channel/lb_policy_registry.c \
+src/core/ext/client_channel/method_config.c \
+src/core/ext/client_channel/parse_address.c \
+src/core/ext/client_channel/resolver.c \
+src/core/ext/client_channel/resolver_factory.c \
+src/core/ext/client_channel/resolver_registry.c \
+src/core/ext/client_channel/resolver_result.c \
+src/core/ext/client_channel/subchannel.c \
+src/core/ext/client_channel/subchannel_index.c \
+src/core/ext/client_channel/uri_parser.c \
 src/core/ext/transport/chttp2/server/insecure/server_chttp2.c \
 src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c \
 src/core/ext/transport/chttp2/client/insecure/channel_create.c \
diff --git a/tools/fuzzer/runners/uri_fuzzer_test.sh b/tools/fuzzer/runners/uri_fuzzer_test.sh
index 84d63bf4142fe30ac8b18f5c9e0153facd574f61..316f6c2599faf1398b299ea7b5e1fe764d2ff77b 100644
--- a/tools/fuzzer/runners/uri_fuzzer_test.sh
+++ b/tools/fuzzer/runners/uri_fuzzer_test.sh
@@ -42,4 +42,4 @@ then
   flags="-use_traces=1 $flags"
 fi
 
-bins/$config/uri_fuzzer_test $flags fuzzer_output test/core/client_config/uri_corpus
+bins/$config/uri_fuzzer_test $flags fuzzer_output test/core/client_channel/uri_corpus
diff --git a/tools/run_tests/filter_pull_request_tests.py b/tools/run_tests/filter_pull_request_tests.py
index 55dab42f8a7a6afba1488a6e25cdecc7550bcf02..e2027a234029c01b0a229625de0d81487fa3809a 100644
--- a/tools/run_tests/filter_pull_request_tests.py
+++ b/tools/run_tests/filter_pull_request_tests.py
@@ -36,18 +36,16 @@ from subprocess import call, check_output
 
 class TestSuite:
   """
-  Contains tag to identify job as belonging to this test suite and
+  Contains label to identify job as belonging to this test suite and
   triggers to identify if changed files are relevant
   """
-  def __init__(self, tags):
+  def __init__(self, labels):
     """
-    Build TestSuite to group tests by their tags
-    :param tag: string used to identify if a job belongs to this TestSuite
-    todo(mattkwong): Change the use of tag because do not want to depend on
-    job.shortname to identify what suite a test belongs to
+    Build TestSuite to group tests based on labeling
+    :param label: strings that should match a jobs's platform, config, language, or test group
     """
     self.triggers = []
-    self.tags = tags
+    self.labels = labels
 
   def add_trigger(self, trigger):
     """
@@ -56,46 +54,75 @@ class TestSuite:
     """
     self.triggers.append(trigger)
 
+
 # Create test suites
-_core_test_suite = TestSuite(['_c_'])
-_cpp_test_suite = TestSuite(['_c++_'])
-_csharp_test_suite = TestSuite(['_csharp_'])
-_node_test_suite = TestSuite(['_node_'])
-_objc_test_suite = TestSuite(['_objc_'])
-_php_test_suite = TestSuite(['_php_', '_php7_'])
-_python_test_suite = TestSuite(['_python_'])
-_ruby_test_suite = TestSuite(['_ruby'])
-_all_test_suites = [_core_test_suite, _cpp_test_suite, _csharp_test_suite,
-                    _node_test_suite, _objc_test_suite, _php_test_suite,
-                    _python_test_suite, _ruby_test_suite]
+_SANITY_TEST_SUITE = TestSuite(['sanity'])
+_CORE_TEST_SUITE = TestSuite(['c'])
+_CPP_TEST_SUITE = TestSuite(['c++'])
+_CSHARP_TEST_SUITE = TestSuite(['csharp'])
+_NODE_TEST_SUITE = TestSuite(['node'])
+_OBJC_TEST_SUITE = TestSuite(['objc'])
+_PHP_TEST_SUITE = TestSuite(['php', 'php7'])
+_PYTHON_TEST_SUITE = TestSuite(['python'])
+_RUBY_TEST_SUITE = TestSuite(['ruby'])
+_LINUX_TEST_SUITE = TestSuite(['linux'])
+_WINDOWS_TEST_SUITE = TestSuite(['windows'])
+_MACOS_TEST_SUITE = TestSuite(['macos'])
+_ALL_TEST_SUITES = [_SANITY_TEST_SUITE, _CORE_TEST_SUITE, _CPP_TEST_SUITE,
+                    _CSHARP_TEST_SUITE, _NODE_TEST_SUITE, _OBJC_TEST_SUITE,
+                    _PHP_TEST_SUITE, _PYTHON_TEST_SUITE, _RUBY_TEST_SUITE,
+                    _LINUX_TEST_SUITE, _WINDOWS_TEST_SUITE, _MACOS_TEST_SUITE]
 
 # Dictionary of whitelistable files where the key is a regex matching changed files
 # and the value is a list of tests that should be run. An empty list means that
 # the changed files should not trigger any tests. Any changed file that does not
 # match any of these regexes will trigger all tests
 _WHITELIST_DICT = {
-  '^templates/.*': [],
-  '^doc/.*': [],
-  '^examples/.*': [],
-  '^summerofcode/.*': [],
-  '.*README.md$': [],
-  '.*LICENSE$': [],
-  '^src/cpp.*': [_cpp_test_suite],
-  '^src/csharp.*': [_csharp_test_suite],
-  '^src/node.*': [_node_test_suite],
-  '^src/objective-c.*': [_objc_test_suite],
-  '^src/php.*': [_php_test_suite],
-  '^src/python.*': [_python_test_suite],
-  '^src/ruby.*': [_ruby_test_suite],
-  '^test/core.*': [_core_test_suite],
-  '^test/cpp.*': [_cpp_test_suite],
-  '^test/distrib/cpp.*': [_cpp_test_suite],
-  '^test/distrib/csharp.*': [_csharp_test_suite],
-  '^test/distrib/node.*': [_node_test_suite],
-  '^test/distrib/php.*': [_php_test_suite],
-  '^test/distrib/python.*': [_python_test_suite],
-  '^test/distrib/ruby.*': [_ruby_test_suite]
+  '^doc/': [],
+  '^examples/': [],
+  '^include/grpc\+\+/': [_CPP_TEST_SUITE],
+  '^summerofcode/': [],
+  '^src/cpp/': [_CPP_TEST_SUITE],
+  '^src/csharp/': [_CSHARP_TEST_SUITE],
+  '^src/node/': [_NODE_TEST_SUITE],
+  '^src/objective\-c/': [_OBJC_TEST_SUITE],
+  '^src/php/': [_PHP_TEST_SUITE],
+  '^src/python/': [_PYTHON_TEST_SUITE],
+  '^src/ruby/': [_RUBY_TEST_SUITE],
+  '^templates/': [_SANITY_TEST_SUITE],
+  '^test/core/': [_CORE_TEST_SUITE],
+  '^test/cpp/': [_CPP_TEST_SUITE],
+  '^test/distrib/cpp/': [_CPP_TEST_SUITE],
+  '^test/distrib/csharp/': [_CSHARP_TEST_SUITE],
+  '^test/distrib/node/': [_NODE_TEST_SUITE],
+  '^test/distrib/php/': [_PHP_TEST_SUITE],
+  '^test/distrib/python/': [_PYTHON_TEST_SUITE],
+  '^test/distrib/ruby/': [_RUBY_TEST_SUITE],
+  '^vsprojects/': [_WINDOWS_TEST_SUITE],
+  'binding\.gyp$': [_NODE_TEST_SUITE],
+  'composer\.json$': [_PHP_TEST_SUITE],
+  'config\.m4$': [_PHP_TEST_SUITE],
+  'CONTRIBUTING\.md$': [],
+  'Gemfile$': [_RUBY_TEST_SUITE],
+  'grpc.def$': [_WINDOWS_TEST_SUITE],
+  'grpc\.gemspec$': [_RUBY_TEST_SUITE],
+  'gRPC\.podspec$': [_OBJC_TEST_SUITE],
+  'gRPC\-Core\.podspec$': [_OBJC_TEST_SUITE],
+  'gRPC\-ProtoRPC\.podspec$': [_OBJC_TEST_SUITE],
+  'gRPC\-RxLibrary\.podspec$': [_OBJC_TEST_SUITE],
+  'INSTALL\.md$': [],
+  'LICENSE$': [],
+  'MANIFEST\.md$': [],
+  'package\.json$': [_PHP_TEST_SUITE],
+  'package\.xml$': [_PHP_TEST_SUITE],
+  'PATENTS$': [],
+  'PYTHON\-MANIFEST\.in$': [_PYTHON_TEST_SUITE],
+  'README\.md$': [],
+  'requirements\.txt$': [_PYTHON_TEST_SUITE],
+  'setup\.cfg$': [_PYTHON_TEST_SUITE],
+  'setup\.py$': [_PYTHON_TEST_SUITE]
 }
+
 # Add all triggers to their respective test suites
 for trigger, test_suites in _WHITELIST_DICT.iteritems():
   for test_suite in test_suites:
@@ -106,10 +133,6 @@ def _get_changed_files(base_branch):
   """
   Get list of changed files between current branch and base of target merge branch
   """
-  # git fetch might need to be called on Jenkins slave
-  # todo(mattkwong): remove or uncomment below after seeing if Jenkins needs this
-  # call(['git', 'fetch'])
-
   # Get file changes between branch and merge-base of specified branch
   # Not combined to be Windows friendly
   base_commit = check_output(["git", "merge-base", base_branch, "HEAD"]).rstrip()
@@ -129,27 +152,17 @@ def _can_skip_tests(file_names, triggers):
   return True
 
 
-def _remove_irrelevant_tests(tests, tag):
+def _remove_irrelevant_tests(tests, skippable_labels):
   """
   Filters out tests by config or language - will not remove sanitizer tests
   :param tests: list of all tests generated by run_tests_matrix.py
-  :param tag: string representing language or config to filter - "_(language)_" or "_(config)"
-  :return: list of relevant tests
-  """
-  # todo(mattkwong): find a more reliable way to filter tests - don't use shortname
-  return [test for test in tests if tag not in test.shortname or
-          any(san_tag in test.shortname for san_tag in ['_asan', '_tsan', '_msan'])]
-
-
-def _remove_sanitizer_tests(tests):
-  """
-  Filters out sanitizer tests
-  :param tests: list of all tests generated by run_tests_matrix.py
+  :param skippable_labels: list of languages and platforms with skippable tests
   :return: list of relevant tests
   """
-  # todo(mattkwong): find a more reliable way to filter tests - don't use shortname
-  return [test for test in tests if
-          all(san_tag not in test.shortname for san_tag in ['_asan', '_tsan', '_msan'])]
+  # test.labels[0] is platform and test.labels[2] is language
+  # We skip a test if both are considered safe to skip
+  return [test for test in tests if test.labels[0] not in skippable_labels or \
+          test.labels[2] not in skippable_labels]
 
 
 def filter_tests(tests, base_branch):
@@ -158,7 +171,7 @@ def filter_tests(tests, base_branch):
   :param tests: list of all tests generated by run_tests_matrix.py
   :return: list of relevant tests
   """
-  print("Finding file differences between %s repo and current branch...\n" % base_branch)
+  print("Finding file differences between gRPC %s branch and pull request...\n" % base_branch)
   changed_files = _get_changed_files(base_branch)
   for changed_file in changed_files:
     print(changed_file)
@@ -170,15 +183,13 @@ def filter_tests(tests, base_branch):
   for changed_file in changed_files:
     if not re.match(all_triggers, changed_file):
       return(tests)
-  # Filter out tests by language
-  for test_suite in _all_test_suites:
+  # Figure out which language and platform tests to run
+  skippable_labels = []
+  for test_suite in _ALL_TEST_SUITES:
     if _can_skip_tests(changed_files, test_suite.triggers):
-      for tag in test_suite.tags:
-        print("  Filtering %s tests" % tag)
-        tests = _remove_irrelevant_tests(tests, tag)
-  # Sanitizer tests skipped if core and c++ are skipped
-  if _can_skip_tests(changed_files, _cpp_test_suite.triggers + _core_test_suite.triggers):
-    print("  Filtering Sanitizer tests")
-    tests = _remove_sanitizer_tests(tests)
+      for label in test_suite.labels:
+        print("  Filtering %s tests" % label)
+        skippable_labels.append(label)
 
+  tests = _remove_irrelevant_tests(tests, skippable_labels)
   return tests
diff --git a/tools/run_tests/performance/scenario_config.py b/tools/run_tests/performance/scenario_config.py
index 725ca299bd49b35d458d7b625ffc51b48e88f89b..e1c1bc65b6b48eb7928883cee6be483d052710db 100644
--- a/tools/run_tests/performance/scenario_config.py
+++ b/tools/run_tests/performance/scenario_config.py
@@ -219,6 +219,16 @@ class CXXLanguage:
           server_core_limit=1, async_server_threads=1,
           secure=secure)
 
+      yield _ping_pong_scenario(
+          'cpp_protobuf_async_client_sync_server_unary_qps_unconstrained_%s' %
+          (secstr),
+          rpc_type='UNARY',
+          client_type='ASYNC_CLIENT',
+          server_type='SYNC_SERVER',
+          unconstrained_client='async',
+          secure=secure,
+          categories=smoketest_categories + [SCALABLE])
+
       for rpc_type in ['unary', 'streaming']:
         for synchronicity in ['sync', 'async']:
           yield _ping_pong_scenario(
diff --git a/tools/run_tests/run_performance_tests.py b/tools/run_tests/run_performance_tests.py
index 92149115fe2387ac6e2d79cef5a54d4c67ec1339..099ab89ddffb89fac4fb28a68d2534daff51da90 100755
--- a/tools/run_tests/run_performance_tests.py
+++ b/tools/run_tests/run_performance_tests.py
@@ -91,12 +91,11 @@ def create_qpsworker_job(language, shortname=None,
   else:
     host_and_port='localhost:%s' % port
 
-  # TODO(jtattermusch): with some care, we can calculate the right timeout
-  # of a worker from the sum of warmup + benchmark times for all the scenarios
   jobspec = jobset.JobSpec(
       cmdline=cmdline,
       shortname=shortname,
-      timeout_seconds=2*60*60)
+      timeout_seconds=5*60,  # workers get restarted after each scenario
+      verbose_success=True)
   return QpsWorkerJob(jobspec, language, host_and_port)
 
 
@@ -357,6 +356,7 @@ def create_scenarios(languages, workers_by_lang, remote_host=None, regex='.*',
 def finish_qps_workers(jobs):
   """Waits for given jobs to finish and eventually kills them."""
   retries = 0
+  num_killed = 0
   while any(job.is_running() for job in jobs):
     for job in qpsworker_jobs:
       if job.is_running():
@@ -365,10 +365,11 @@ def finish_qps_workers(jobs):
       print('Killing all QPS workers.')
       for job in jobs:
         job.kill()
+        num_killed += 1
     retries += 1
     time.sleep(3)
   print('All QPS workers finished.')
-
+  return num_killed
 
 argp = argparse.ArgumentParser(description='Run performance tests.')
 argp.add_argument('-l', '--language',
@@ -450,6 +451,8 @@ scenarios = create_scenarios(languages,
 if not scenarios:
   raise Exception('No scenarios to run')
 
+total_scenario_failures = 0
+qps_workers_killed = 0
 for scenario in scenarios:
   if args.dry_run:
     print(scenario.name)
@@ -457,8 +460,14 @@ for scenario in scenarios:
     try:
       for worker in scenario.workers:
         worker.start()
-      jobset.run([scenario.jobspec,
-                  create_quit_jobspec(scenario.workers, remote_host=args.remote_driver_host)],
-                 newline_on_success=True, maxjobs=1)
+      scenario_failures, _ = jobset.run([scenario.jobspec,
+                                 create_quit_jobspec(scenario.workers, remote_host=args.remote_driver_host)],
+                                 newline_on_success=True, maxjobs=1)
+      total_scenario_failures += scenario_failures
     finally:
-      finish_qps_workers(scenario.workers)
+      # Consider qps workers that need to be killed as failures
+      qps_workers_killed += finish_qps_workers(scenario.workers)
+
+if total_scenario_failures > 0 or qps_workers_killed > 0:
+  print ("%s scenarios failed and %s qps worker jobs killed" % (total_scenario_failures, qps_workers_killed))
+  sys.exit(1)
diff --git a/tools/run_tests/sources_and_headers.json b/tools/run_tests/sources_and_headers.json
index 7cfb1d4c17e39213f954a4dfc4c93516f8228347..5e8290ad9078f3a167d89ecf960cebe2b4ae6da6 100644
--- a/tools/run_tests/sources_and_headers.json
+++ b/tools/run_tests/sources_and_headers.json
@@ -365,7 +365,7 @@
     "language": "c", 
     "name": "dns_resolver_connectivity_test", 
     "src": [
-      "test/core/client_config/resolvers/dns_resolver_connectivity_test.c"
+      "test/core/client_channel/resolvers/dns_resolver_connectivity_test.c"
     ], 
     "third_party": false, 
     "type": "target"
@@ -382,7 +382,7 @@
     "language": "c", 
     "name": "dns_resolver_test", 
     "src": [
-      "test/core/client_config/resolvers/dns_resolver_test.c"
+      "test/core/client_channel/resolvers/dns_resolver_test.c"
     ], 
     "third_party": false, 
     "type": "target"
@@ -1480,7 +1480,7 @@
     "language": "c", 
     "name": "lb_policies_test", 
     "src": [
-      "test/core/client_config/lb_policies_test.c"
+      "test/core/client_channel/lb_policies_test.c"
     ], 
     "third_party": false, 
     "type": "target"
@@ -1802,7 +1802,7 @@
     "language": "c", 
     "name": "set_initial_connect_string_test", 
     "src": [
-      "test/core/client_config/set_initial_connect_string_test.c"
+      "test/core/client_channel/set_initial_connect_string_test.c"
     ], 
     "third_party": false, 
     "type": "target"
@@ -1819,7 +1819,7 @@
     "language": "c", 
     "name": "sockaddr_resolver_test", 
     "src": [
-      "test/core/client_config/resolvers/sockaddr_resolver_test.c"
+      "test/core/client_channel/resolvers/sockaddr_resolver_test.c"
     ], 
     "third_party": false, 
     "type": "target"
@@ -2057,7 +2057,7 @@
     "language": "c", 
     "name": "uri_fuzzer_test", 
     "src": [
-      "test/core/client_config/uri_fuzzer_test.c"
+      "test/core/client_channel/uri_fuzzer_test.c"
     ], 
     "third_party": false, 
     "type": "target"
@@ -2074,7 +2074,7 @@
     "language": "c", 
     "name": "uri_parser_test", 
     "src": [
-      "test/core/client_config/uri_parser_test.c"
+      "test/core/client_channel/uri_parser_test.c"
     ], 
     "third_party": false, 
     "type": "target"
@@ -2695,6 +2695,7 @@
       "gpr", 
       "gpr_test_util", 
       "grpc", 
+      "grpc++_test_config", 
       "grpc_test_util"
     ], 
     "headers": [], 
@@ -4732,7 +4733,7 @@
     "language": "c", 
     "name": "uri_fuzzer_test_one_entry", 
     "src": [
-      "test/core/client_config/uri_fuzzer_test.c", 
+      "test/core/client_channel/uri_fuzzer_test.c", 
       "test/core/util/one_corpus_entry_fuzzer.c"
     ], 
     "third_party": false, 
@@ -6722,65 +6723,65 @@
       "grpc_base"
     ], 
     "headers": [
-      "src/core/ext/client_config/client_channel.h", 
-      "src/core/ext/client_config/client_channel_factory.h", 
-      "src/core/ext/client_config/connector.h", 
-      "src/core/ext/client_config/http_connect_handshaker.h", 
-      "src/core/ext/client_config/initial_connect_string.h", 
-      "src/core/ext/client_config/lb_policy.h", 
-      "src/core/ext/client_config/lb_policy_factory.h", 
-      "src/core/ext/client_config/lb_policy_registry.h", 
-      "src/core/ext/client_config/method_config.h", 
-      "src/core/ext/client_config/parse_address.h", 
-      "src/core/ext/client_config/resolver.h", 
-      "src/core/ext/client_config/resolver_factory.h", 
-      "src/core/ext/client_config/resolver_registry.h", 
-      "src/core/ext/client_config/resolver_result.h", 
-      "src/core/ext/client_config/subchannel.h", 
-      "src/core/ext/client_config/subchannel_index.h", 
-      "src/core/ext/client_config/uri_parser.h"
+      "src/core/ext/client_channel/client_channel.h", 
+      "src/core/ext/client_channel/client_channel_factory.h", 
+      "src/core/ext/client_channel/connector.h", 
+      "src/core/ext/client_channel/http_connect_handshaker.h", 
+      "src/core/ext/client_channel/initial_connect_string.h", 
+      "src/core/ext/client_channel/lb_policy.h", 
+      "src/core/ext/client_channel/lb_policy_factory.h", 
+      "src/core/ext/client_channel/lb_policy_registry.h", 
+      "src/core/ext/client_channel/method_config.h", 
+      "src/core/ext/client_channel/parse_address.h", 
+      "src/core/ext/client_channel/resolver.h", 
+      "src/core/ext/client_channel/resolver_factory.h", 
+      "src/core/ext/client_channel/resolver_registry.h", 
+      "src/core/ext/client_channel/resolver_result.h", 
+      "src/core/ext/client_channel/subchannel.h", 
+      "src/core/ext/client_channel/subchannel_index.h", 
+      "src/core/ext/client_channel/uri_parser.h"
     ], 
     "is_filegroup": true, 
     "language": "c", 
-    "name": "grpc_client_config", 
-    "src": [
-      "src/core/ext/client_config/channel_connectivity.c", 
-      "src/core/ext/client_config/client_channel.c", 
-      "src/core/ext/client_config/client_channel.h", 
-      "src/core/ext/client_config/client_channel_factory.c", 
-      "src/core/ext/client_config/client_channel_factory.h", 
-      "src/core/ext/client_config/client_config_plugin.c", 
-      "src/core/ext/client_config/connector.c", 
-      "src/core/ext/client_config/connector.h", 
-      "src/core/ext/client_config/default_initial_connect_string.c", 
-      "src/core/ext/client_config/http_connect_handshaker.c", 
-      "src/core/ext/client_config/http_connect_handshaker.h", 
-      "src/core/ext/client_config/initial_connect_string.c", 
-      "src/core/ext/client_config/initial_connect_string.h", 
-      "src/core/ext/client_config/lb_policy.c", 
-      "src/core/ext/client_config/lb_policy.h", 
-      "src/core/ext/client_config/lb_policy_factory.c", 
-      "src/core/ext/client_config/lb_policy_factory.h", 
-      "src/core/ext/client_config/lb_policy_registry.c", 
-      "src/core/ext/client_config/lb_policy_registry.h", 
-      "src/core/ext/client_config/method_config.c", 
-      "src/core/ext/client_config/method_config.h", 
-      "src/core/ext/client_config/parse_address.c", 
-      "src/core/ext/client_config/parse_address.h", 
-      "src/core/ext/client_config/resolver.c", 
-      "src/core/ext/client_config/resolver.h", 
-      "src/core/ext/client_config/resolver_factory.c", 
-      "src/core/ext/client_config/resolver_factory.h", 
-      "src/core/ext/client_config/resolver_registry.c", 
-      "src/core/ext/client_config/resolver_registry.h", 
-      "src/core/ext/client_config/resolver_result.c", 
-      "src/core/ext/client_config/resolver_result.h", 
-      "src/core/ext/client_config/subchannel.c", 
-      "src/core/ext/client_config/subchannel.h", 
-      "src/core/ext/client_config/subchannel_index.c", 
-      "src/core/ext/client_config/subchannel_index.h", 
-      "src/core/ext/client_config/uri_parser.c", 
-      "src/core/ext/client_config/uri_parser.h"
+    "name": "grpc_client_channel", 
+    "src": [
+      "src/core/ext/client_channel/channel_connectivity.c", 
+      "src/core/ext/client_channel/client_channel.c", 
+      "src/core/ext/client_channel/client_channel.h", 
+      "src/core/ext/client_channel/client_channel_factory.c", 
+      "src/core/ext/client_channel/client_channel_factory.h", 
+      "src/core/ext/client_channel/client_channel_plugin.c", 
+      "src/core/ext/client_channel/connector.c", 
+      "src/core/ext/client_channel/connector.h", 
+      "src/core/ext/client_channel/default_initial_connect_string.c", 
+      "src/core/ext/client_channel/http_connect_handshaker.c", 
+      "src/core/ext/client_channel/http_connect_handshaker.h", 
+      "src/core/ext/client_channel/initial_connect_string.c", 
+      "src/core/ext/client_channel/initial_connect_string.h", 
+      "src/core/ext/client_channel/lb_policy.c", 
+      "src/core/ext/client_channel/lb_policy.h", 
+      "src/core/ext/client_channel/lb_policy_factory.c", 
+      "src/core/ext/client_channel/lb_policy_factory.h", 
+      "src/core/ext/client_channel/lb_policy_registry.c", 
+      "src/core/ext/client_channel/lb_policy_registry.h", 
+      "src/core/ext/client_channel/method_config.c", 
+      "src/core/ext/client_channel/method_config.h", 
+      "src/core/ext/client_channel/parse_address.c", 
+      "src/core/ext/client_channel/parse_address.h", 
+      "src/core/ext/client_channel/resolver.c", 
+      "src/core/ext/client_channel/resolver.h", 
+      "src/core/ext/client_channel/resolver_factory.c", 
+      "src/core/ext/client_channel/resolver_factory.h", 
+      "src/core/ext/client_channel/resolver_registry.c", 
+      "src/core/ext/client_channel/resolver_registry.h", 
+      "src/core/ext/client_channel/resolver_result.c", 
+      "src/core/ext/client_channel/resolver_result.h", 
+      "src/core/ext/client_channel/subchannel.c", 
+      "src/core/ext/client_channel/subchannel.h", 
+      "src/core/ext/client_channel/subchannel_index.c", 
+      "src/core/ext/client_channel/subchannel_index.h", 
+      "src/core/ext/client_channel/uri_parser.c", 
+      "src/core/ext/client_channel/uri_parser.h"
     ], 
     "third_party": false, 
     "type": "filegroup"
@@ -6815,7 +6816,7 @@
     "deps": [
       "gpr", 
       "grpc_base", 
-      "grpc_client_config", 
+      "grpc_client_channel", 
       "nanopb"
     ], 
     "headers": [
@@ -6841,7 +6842,7 @@
     "deps": [
       "gpr", 
       "grpc_base", 
-      "grpc_client_config"
+      "grpc_client_channel"
     ], 
     "headers": [], 
     "is_filegroup": true, 
@@ -6857,7 +6858,7 @@
     "deps": [
       "gpr", 
       "grpc_base", 
-      "grpc_client_config"
+      "grpc_client_channel"
     ], 
     "headers": [], 
     "is_filegroup": true, 
@@ -6894,7 +6895,7 @@
     "deps": [
       "gpr", 
       "grpc_base", 
-      "grpc_client_config"
+      "grpc_client_channel"
     ], 
     "headers": [], 
     "is_filegroup": true, 
@@ -6910,7 +6911,7 @@
     "deps": [
       "gpr", 
       "grpc_base", 
-      "grpc_client_config"
+      "grpc_client_channel"
     ], 
     "headers": [], 
     "is_filegroup": true, 
@@ -7157,7 +7158,7 @@
     "deps": [
       "gpr", 
       "grpc_base", 
-      "grpc_client_config", 
+      "grpc_client_channel", 
       "grpc_transport_chttp2"
     ], 
     "headers": [], 
@@ -7175,7 +7176,7 @@
     "deps": [
       "gpr", 
       "grpc_base", 
-      "grpc_client_config", 
+      "grpc_client_channel", 
       "grpc_secure", 
       "grpc_transport_chttp2"
     ], 
diff --git a/tools/run_tests/tests.json b/tools/run_tests/tests.json
index 9ca4908ecacedc248465b7f058f1b8a9d518cb9c..938aa2edde2025d53e887b30b6868d3879615c2f 100644
--- a/tools/run_tests/tests.json
+++ b/tools/run_tests/tests.json
@@ -17002,7 +17002,9 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -17023,7 +17025,9 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -17044,7 +17048,9 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -17065,7 +17071,9 @@
       "posix"
     ], 
     "cpu_cost": 0.1, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -17086,7 +17094,9 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -17107,7 +17117,9 @@
       "posix"
     ], 
     "cpu_cost": 0.1, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -17128,7 +17140,9 @@
       "posix"
     ], 
     "cpu_cost": 0.1, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -17149,7 +17163,9 @@
       "posix"
     ], 
     "cpu_cost": 0.1, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -17170,7 +17186,9 @@
       "posix"
     ], 
     "cpu_cost": 0.1, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -17191,7 +17209,9 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -17212,7 +17232,9 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -17233,7 +17255,9 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -17254,7 +17278,9 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -17275,7 +17301,9 @@
       "posix"
     ], 
     "cpu_cost": 0.1, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -17296,7 +17324,9 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -17317,7 +17347,9 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -17338,7 +17370,9 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -17359,7 +17393,9 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -17380,7 +17416,9 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -17401,7 +17439,9 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -17422,7 +17462,9 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -17443,7 +17485,9 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -17464,7 +17508,9 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -17485,7 +17531,9 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -17506,7 +17554,9 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -17527,7 +17577,9 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -17548,7 +17600,9 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -17569,7 +17623,9 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -17590,7 +17646,9 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -17611,7 +17669,9 @@
       "posix"
     ], 
     "cpu_cost": 0.1, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -17632,7 +17692,9 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -17653,7 +17715,9 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -17674,7 +17738,9 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -17695,7 +17761,9 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -17716,7 +17784,9 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -17737,7 +17807,9 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -17758,7 +17830,9 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -17779,7 +17853,9 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -17800,7 +17876,9 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -17822,9 +17900,7 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [
-      "msan"
-    ], 
+    "exclude_configs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -17846,9 +17922,7 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [
-      "msan"
-    ], 
+    "exclude_configs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -17870,9 +17944,7 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [
-      "msan"
-    ], 
+    "exclude_configs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -17894,9 +17966,7 @@
       "posix"
     ], 
     "cpu_cost": 0.1, 
-    "exclude_configs": [
-      "msan"
-    ], 
+    "exclude_configs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -17918,9 +17988,7 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [
-      "msan"
-    ], 
+    "exclude_configs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -17942,9 +18010,7 @@
       "posix"
     ], 
     "cpu_cost": 0.1, 
-    "exclude_configs": [
-      "msan"
-    ], 
+    "exclude_configs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -17966,9 +18032,7 @@
       "posix"
     ], 
     "cpu_cost": 0.1, 
-    "exclude_configs": [
-      "msan"
-    ], 
+    "exclude_configs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -17990,9 +18054,7 @@
       "posix"
     ], 
     "cpu_cost": 0.1, 
-    "exclude_configs": [
-      "msan"
-    ], 
+    "exclude_configs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -18014,9 +18076,7 @@
       "posix"
     ], 
     "cpu_cost": 0.1, 
-    "exclude_configs": [
-      "msan"
-    ], 
+    "exclude_configs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -18038,9 +18098,7 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [
-      "msan"
-    ], 
+    "exclude_configs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -18128,9 +18186,7 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [
-      "msan"
-    ], 
+    "exclude_configs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -18152,9 +18208,7 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [
-      "msan"
-    ], 
+    "exclude_configs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -18176,9 +18230,7 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [
-      "msan"
-    ], 
+    "exclude_configs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -18200,9 +18252,7 @@
       "posix"
     ], 
     "cpu_cost": 0.1, 
-    "exclude_configs": [
-      "msan"
-    ], 
+    "exclude_configs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -18224,9 +18274,7 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [
-      "msan"
-    ], 
+    "exclude_configs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -18248,9 +18296,7 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [
-      "msan"
-    ], 
+    "exclude_configs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -18272,9 +18318,7 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [
-      "msan"
-    ], 
+    "exclude_configs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -18318,9 +18362,7 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [
-      "msan"
-    ], 
+    "exclude_configs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -18342,9 +18384,7 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [
-      "msan"
-    ], 
+    "exclude_configs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -18366,9 +18406,7 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [
-      "msan"
-    ], 
+    "exclude_configs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -18390,9 +18428,7 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [
-      "msan"
-    ], 
+    "exclude_configs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -18414,9 +18450,7 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [
-      "msan"
-    ], 
+    "exclude_configs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -18438,9 +18472,7 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [
-      "msan"
-    ], 
+    "exclude_configs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -18462,9 +18494,7 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [
-      "msan"
-    ], 
+    "exclude_configs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -18486,9 +18516,7 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [
-      "msan"
-    ], 
+    "exclude_configs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -18510,9 +18538,7 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [
-      "msan"
-    ], 
+    "exclude_configs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -18534,9 +18560,7 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [
-      "msan"
-    ], 
+    "exclude_configs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -18558,9 +18582,7 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [
-      "msan"
-    ], 
+    "exclude_configs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -18582,9 +18604,7 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [
-      "msan"
-    ], 
+    "exclude_configs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -18606,9 +18626,7 @@
       "posix"
     ], 
     "cpu_cost": 0.1, 
-    "exclude_configs": [
-      "msan"
-    ], 
+    "exclude_configs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -18630,9 +18648,7 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [
-      "msan"
-    ], 
+    "exclude_configs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -18654,9 +18670,7 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [
-      "msan"
-    ], 
+    "exclude_configs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -18678,9 +18692,7 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [
-      "msan"
-    ], 
+    "exclude_configs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -18702,9 +18714,7 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [
-      "msan"
-    ], 
+    "exclude_configs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -18726,9 +18736,7 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [
-      "msan"
-    ], 
+    "exclude_configs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -18772,9 +18780,7 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [
-      "msan"
-    ], 
+    "exclude_configs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -18796,9 +18802,7 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [
-      "msan"
-    ], 
+    "exclude_configs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -18820,9 +18824,7 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [
-      "msan"
-    ], 
+    "exclude_configs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -18844,9 +18846,7 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [
-      "msan"
-    ], 
+    "exclude_configs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -33574,6 +33574,27 @@
     "shortname": "json_run_localhost:cpp_generic_async_streaming_qps_one_server_core_secure", 
     "timeout_seconds": 180
   }, 
+  {
+    "args": [
+      "--scenarios_json", 
+      "{\"scenarios\": [{\"name\": \"cpp_protobuf_async_client_sync_server_unary_qps_unconstrained_secure\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 0, \"core_limit\": 0, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"server_type\": \"SYNC_SERVER\"}, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 100, \"rpc_type\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 0}]}"
+    ], 
+    "boringssl": true, 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 8, 
+    "defaults": "boringssl", 
+    "exclude_configs": [], 
+    "flaky": false, 
+    "language": "c++", 
+    "name": "json_run_localhost", 
+    "platforms": [
+      "linux"
+    ], 
+    "shortname": "json_run_localhost:cpp_protobuf_async_client_sync_server_unary_qps_unconstrained_secure", 
+    "timeout_seconds": 180
+  }, 
   {
     "args": [
       "--scenarios_json", 
@@ -33805,6 +33826,27 @@
     "shortname": "json_run_localhost:cpp_generic_async_streaming_qps_one_server_core_insecure", 
     "timeout_seconds": 180
   }, 
+  {
+    "args": [
+      "--scenarios_json", 
+      "{\"scenarios\": [{\"name\": \"cpp_protobuf_async_client_sync_server_unary_qps_unconstrained_insecure\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 0, \"core_limit\": 0, \"security_params\": null, \"server_type\": \"SYNC_SERVER\"}, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 100, \"rpc_type\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 0}]}"
+    ], 
+    "boringssl": true, 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 8, 
+    "defaults": "boringssl", 
+    "exclude_configs": [], 
+    "flaky": false, 
+    "language": "c++", 
+    "name": "json_run_localhost", 
+    "platforms": [
+      "linux"
+    ], 
+    "shortname": "json_run_localhost:cpp_protobuf_async_client_sync_server_unary_qps_unconstrained_insecure", 
+    "timeout_seconds": 180
+  }, 
   {
     "args": [
       "--scenarios_json", 
@@ -99544,7 +99586,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/02d156dc5e6f2c11c90c2e06fcee04adf036a342"
+      "test/core/client_channel/uri_corpus/02d156dc5e6f2c11c90c2e06fcee04adf036a342"
     ], 
     "ci_platforms": [
       "linux"
@@ -99563,7 +99605,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/042dc4512fa3d391c5170cf3aa61e6a638f84342"
+      "test/core/client_channel/uri_corpus/042dc4512fa3d391c5170cf3aa61e6a638f84342"
     ], 
     "ci_platforms": [
       "linux"
@@ -99582,7 +99624,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/0e9bbe975f2027e8c39c89f85f667530368e7d11"
+      "test/core/client_channel/uri_corpus/0e9bbe975f2027e8c39c89f85f667530368e7d11"
     ], 
     "ci_platforms": [
       "linux"
@@ -99601,7 +99643,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/1155aa6ea7ef262a81a63692513ea395f84dad6f"
+      "test/core/client_channel/uri_corpus/1155aa6ea7ef262a81a63692513ea395f84dad6f"
     ], 
     "ci_platforms": [
       "linux"
@@ -99620,7 +99662,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/13856a5569ffd085a4d5c07af5f8e9310835a118"
+      "test/core/client_channel/uri_corpus/13856a5569ffd085a4d5c07af5f8e9310835a118"
     ], 
     "ci_platforms": [
       "linux"
@@ -99639,7 +99681,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/14b57bcbf1e17b1db1de491ef2ba3768f704b7dc"
+      "test/core/client_channel/uri_corpus/14b57bcbf1e17b1db1de491ef2ba3768f704b7dc"
     ], 
     "ci_platforms": [
       "linux"
@@ -99658,7 +99700,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/1794310671a060eead6e5ee66ac978a18ec7e84f"
+      "test/core/client_channel/uri_corpus/1794310671a060eead6e5ee66ac978a18ec7e84f"
     ], 
     "ci_platforms": [
       "linux"
@@ -99677,7 +99719,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/1d30b2a79afbaf2828ff42b9a9647e942ba1ab80"
+      "test/core/client_channel/uri_corpus/1d30b2a79afbaf2828ff42b9a9647e942ba1ab80"
     ], 
     "ci_platforms": [
       "linux"
@@ -99696,7 +99738,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/1fcf5d9c333b70596cf5ba04d1f7affdf445b971"
+      "test/core/client_channel/uri_corpus/1fcf5d9c333b70596cf5ba04d1f7affdf445b971"
     ], 
     "ci_platforms": [
       "linux"
@@ -99715,7 +99757,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/23162c8a8936e20b195404c21337ee734d02a6bc"
+      "test/core/client_channel/uri_corpus/23162c8a8936e20b195404c21337ee734d02a6bc"
     ], 
     "ci_platforms": [
       "linux"
@@ -99734,7 +99776,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/23f3198b815ca60bdadcaae682b9f965dda387f1"
+      "test/core/client_channel/uri_corpus/23f3198b815ca60bdadcaae682b9f965dda387f1"
     ], 
     "ci_platforms": [
       "linux"
@@ -99753,7 +99795,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/2ef3893b43f1f60b77b59ce06a6bce9815d78eaf"
+      "test/core/client_channel/uri_corpus/2ef3893b43f1f60b77b59ce06a6bce9815d78eaf"
     ], 
     "ci_platforms": [
       "linux"
@@ -99772,7 +99814,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/356c3c129e203b5c74550b4209764d74b9caefce"
+      "test/core/client_channel/uri_corpus/356c3c129e203b5c74550b4209764d74b9caefce"
     ], 
     "ci_platforms": [
       "linux"
@@ -99791,7 +99833,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/396568fc41c8ccb31ec925b4a862e4d29ead1327"
+      "test/core/client_channel/uri_corpus/396568fc41c8ccb31ec925b4a862e4d29ead1327"
     ], 
     "ci_platforms": [
       "linux"
@@ -99810,7 +99852,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/3b1e7526a99918006b87e499d2beb6c4ac9c3c0c"
+      "test/core/client_channel/uri_corpus/3b1e7526a99918006b87e499d2beb6c4ac9c3c0c"
     ], 
     "ci_platforms": [
       "linux"
@@ -99829,7 +99871,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/3b58860f3451d3e7aad99690a8d39782ca5116fc"
+      "test/core/client_channel/uri_corpus/3b58860f3451d3e7aad99690a8d39782ca5116fc"
     ], 
     "ci_platforms": [
       "linux"
@@ -99848,7 +99890,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/41963cc10752f70c3af7e3d85868efb097a0ea9c"
+      "test/core/client_channel/uri_corpus/41963cc10752f70c3af7e3d85868efb097a0ea9c"
     ], 
     "ci_platforms": [
       "linux"
@@ -99867,7 +99909,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/47b5228404451fc9d4071fa69192514bb4ce33c1"
+      "test/core/client_channel/uri_corpus/47b5228404451fc9d4071fa69192514bb4ce33c1"
     ], 
     "ci_platforms": [
       "linux"
@@ -99886,7 +99928,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/56a2da4b2e6fb795243901023ed8d0aa083d1aab"
+      "test/core/client_channel/uri_corpus/56a2da4b2e6fb795243901023ed8d0aa083d1aab"
     ], 
     "ci_platforms": [
       "linux"
@@ -99905,7 +99947,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/574c2f13858a9a6d724654bd913ede9ae3abf822"
+      "test/core/client_channel/uri_corpus/574c2f13858a9a6d724654bd913ede9ae3abf822"
     ], 
     "ci_platforms": [
       "linux"
@@ -99924,7 +99966,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/582f789c19033a152094cbf8565f14154a778ddb"
+      "test/core/client_channel/uri_corpus/582f789c19033a152094cbf8565f14154a778ddb"
     ], 
     "ci_platforms": [
       "linux"
@@ -99943,7 +99985,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/636c5606fc23713a1bae88c8899c0541cfad4fd8"
+      "test/core/client_channel/uri_corpus/636c5606fc23713a1bae88c8899c0541cfad4fd8"
     ], 
     "ci_platforms": [
       "linux"
@@ -99962,7 +100004,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/63fe493b270b17426d77a27cbf3abac5b2c2794a"
+      "test/core/client_channel/uri_corpus/63fe493b270b17426d77a27cbf3abac5b2c2794a"
     ], 
     "ci_platforms": [
       "linux"
@@ -99981,7 +100023,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/655300a902b62662296a8e46bfb04fbcb07182cb"
+      "test/core/client_channel/uri_corpus/655300a902b62662296a8e46bfb04fbcb07182cb"
     ], 
     "ci_platforms": [
       "linux"
@@ -100000,7 +100042,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/6ae3acd9d8507b61bf235748026080a4138dba58"
+      "test/core/client_channel/uri_corpus/6ae3acd9d8507b61bf235748026080a4138dba58"
     ], 
     "ci_platforms": [
       "linux"
@@ -100019,7 +100061,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/6b70979a70a038ff6607d6cf85485ee95baf58e6"
+      "test/core/client_channel/uri_corpus/6b70979a70a038ff6607d6cf85485ee95baf58e6"
     ], 
     "ci_platforms": [
       "linux"
@@ -100038,7 +100080,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/7314ab3545a7535a26e0e8aad67caea5534d68b1"
+      "test/core/client_channel/uri_corpus/7314ab3545a7535a26e0e8aad67caea5534d68b1"
     ], 
     "ci_platforms": [
       "linux"
@@ -100057,7 +100099,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/7ff4d8b8d1ffd0d42c48bbb91e5856a9ec31aecb"
+      "test/core/client_channel/uri_corpus/7ff4d8b8d1ffd0d42c48bbb91e5856a9ec31aecb"
     ], 
     "ci_platforms": [
       "linux"
@@ -100076,7 +100118,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/87daa131e0973b77a232a870ed749ef29cf58e6d"
+      "test/core/client_channel/uri_corpus/87daa131e0973b77a232a870ed749ef29cf58e6d"
     ], 
     "ci_platforms": [
       "linux"
@@ -100095,7 +100137,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/884dcaee2908ffe5f12b65b8eba81016099c4266"
+      "test/core/client_channel/uri_corpus/884dcaee2908ffe5f12b65b8eba81016099c4266"
     ], 
     "ci_platforms": [
       "linux"
@@ -100114,7 +100156,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/8d7e944fd5d0ede94097fcc98b47b09a3f9c76cb"
+      "test/core/client_channel/uri_corpus/8d7e944fd5d0ede94097fcc98b47b09a3f9c76cb"
     ], 
     "ci_platforms": [
       "linux"
@@ -100133,7 +100175,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/9671149af0b444f59bbdf71340d3441dadd8a7b4"
+      "test/core/client_channel/uri_corpus/9671149af0b444f59bbdf71340d3441dadd8a7b4"
     ], 
     "ci_platforms": [
       "linux"
@@ -100152,7 +100194,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/96c8d266b7dc037288ef305c996608270f72e7fb"
+      "test/core/client_channel/uri_corpus/96c8d266b7dc037288ef305c996608270f72e7fb"
     ], 
     "ci_platforms": [
       "linux"
@@ -100171,7 +100213,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/975536c71ade4800415a7e9c2f1b45c35a6d5ea8"
+      "test/core/client_channel/uri_corpus/975536c71ade4800415a7e9c2f1b45c35a6d5ea8"
     ], 
     "ci_platforms": [
       "linux"
@@ -100190,7 +100232,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/99750aa67d30beaea8af565c829d4999aa8cb91b"
+      "test/core/client_channel/uri_corpus/99750aa67d30beaea8af565c829d4999aa8cb91b"
     ], 
     "ci_platforms": [
       "linux"
@@ -100209,7 +100251,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/a1140f3f8b5cffc1010221b9a4084a25fb75c1f6"
+      "test/core/client_channel/uri_corpus/a1140f3f8b5cffc1010221b9a4084a25fb75c1f6"
     ], 
     "ci_platforms": [
       "linux"
@@ -100228,7 +100270,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/a1f0f9b75bb354eb063d7cba4fcfa2d0b88d63de"
+      "test/core/client_channel/uri_corpus/a1f0f9b75bb354eb063d7cba4fcfa2d0b88d63de"
     ], 
     "ci_platforms": [
       "linux"
@@ -100247,7 +100289,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/a296eb3d1d436ed7df7195b10aa3c4de3896f98d"
+      "test/core/client_channel/uri_corpus/a296eb3d1d436ed7df7195b10aa3c4de3896f98d"
     ], 
     "ci_platforms": [
       "linux"
@@ -100266,7 +100308,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/a8b8e66050b424f1b8c07d46f868199fb7f60e38"
+      "test/core/client_channel/uri_corpus/a8b8e66050b424f1b8c07d46f868199fb7f60e38"
     ], 
     "ci_platforms": [
       "linux"
@@ -100285,7 +100327,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/aba1472880406a318ce207ee79815b7acf087757"
+      "test/core/client_channel/uri_corpus/aba1472880406a318ce207ee79815b7acf087757"
     ], 
     "ci_platforms": [
       "linux"
@@ -100304,7 +100346,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/af55baf8c8855e563befdf1eefbcbd46c5ddb8d2"
+      "test/core/client_channel/uri_corpus/af55baf8c8855e563befdf1eefbcbd46c5ddb8d2"
     ], 
     "ci_platforms": [
       "linux"
@@ -100323,7 +100365,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/b3c0bf66c2bf5d24ef1daf4cc5a9d6d5bd0e8bfd"
+      "test/core/client_channel/uri_corpus/b3c0bf66c2bf5d24ef1daf4cc5a9d6d5bd0e8bfd"
     ], 
     "ci_platforms": [
       "linux"
@@ -100342,7 +100384,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/c28a47409cf5d95bb372238d01e73d8b831408e4"
+      "test/core/client_channel/uri_corpus/c28a47409cf5d95bb372238d01e73d8b831408e4"
     ], 
     "ci_platforms": [
       "linux"
@@ -100361,7 +100403,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/c3ef1d41888063a08700c3add1e4465aabcf8807"
+      "test/core/client_channel/uri_corpus/c3ef1d41888063a08700c3add1e4465aabcf8807"
     ], 
     "ci_platforms": [
       "linux"
@@ -100380,7 +100422,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/c550a76af21f9b9cc92a386d5c8998b26f8f2e4d"
+      "test/core/client_channel/uri_corpus/c550a76af21f9b9cc92a386d5c8998b26f8f2e4d"
     ], 
     "ci_platforms": [
       "linux"
@@ -100399,7 +100441,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/c79721406d0ab80495f186fd88e37fba98637ae9"
+      "test/core/client_channel/uri_corpus/c79721406d0ab80495f186fd88e37fba98637ae9"
     ], 
     "ci_platforms": [
       "linux"
@@ -100418,7 +100460,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/ceb4e2264ba7a8d5be47d276b37ec09489e00245"
+      "test/core/client_channel/uri_corpus/ceb4e2264ba7a8d5be47d276b37ec09489e00245"
     ], 
     "ci_platforms": [
       "linux"
@@ -100437,7 +100479,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/cf4395958f5bfb46fd6f535a39657d016c75114c"
+      "test/core/client_channel/uri_corpus/cf4395958f5bfb46fd6f535a39657d016c75114c"
     ], 
     "ci_platforms": [
       "linux"
@@ -100456,7 +100498,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/d46668372b7e20154a89409a7430a28e642afdca"
+      "test/core/client_channel/uri_corpus/d46668372b7e20154a89409a7430a28e642afdca"
     ], 
     "ci_platforms": [
       "linux"
@@ -100475,7 +100517,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/d6fe7412a0a1d1c733160246f3fa425f4f97682a"
+      "test/core/client_channel/uri_corpus/d6fe7412a0a1d1c733160246f3fa425f4f97682a"
     ], 
     "ci_platforms": [
       "linux"
@@ -100494,7 +100536,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/dns.txt"
+      "test/core/client_channel/uri_corpus/dns.txt"
     ], 
     "ci_platforms": [
       "linux"
@@ -100513,7 +100555,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/e241f29957b0e30ec11aaaf91b2339f7015fa5fd"
+      "test/core/client_channel/uri_corpus/e241f29957b0e30ec11aaaf91b2339f7015fa5fd"
     ], 
     "ci_platforms": [
       "linux"
@@ -100532,7 +100574,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/ea02d9fea9bad5b89cf353a0169238f584177e71"
+      "test/core/client_channel/uri_corpus/ea02d9fea9bad5b89cf353a0169238f584177e71"
     ], 
     "ci_platforms": [
       "linux"
@@ -100551,7 +100593,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/ec4731dddf94ed3ea92ae4d5a71f145ab6e3f6ee"
+      "test/core/client_channel/uri_corpus/ec4731dddf94ed3ea92ae4d5a71f145ab6e3f6ee"
     ], 
     "ci_platforms": [
       "linux"
@@ -100570,7 +100612,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/ed2f78646f19fc47dd85ff0877c232b71913ece2"
+      "test/core/client_channel/uri_corpus/ed2f78646f19fc47dd85ff0877c232b71913ece2"
     ], 
     "ci_platforms": [
       "linux"
@@ -100589,7 +100631,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/f6889f4a6350fea1596a3adea5cdac02bd5d1ff3"
+      "test/core/client_channel/uri_corpus/f6889f4a6350fea1596a3adea5cdac02bd5d1ff3"
     ], 
     "ci_platforms": [
       "linux"
@@ -100608,7 +100650,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/f6f3bd030f0d321efe7c51ca3f057de23509af67"
+      "test/core/client_channel/uri_corpus/f6f3bd030f0d321efe7c51ca3f057de23509af67"
     ], 
     "ci_platforms": [
       "linux"
@@ -100627,7 +100669,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/f97598cff03306af3c70400608fec47268b5075d"
+      "test/core/client_channel/uri_corpus/f97598cff03306af3c70400608fec47268b5075d"
     ], 
     "ci_platforms": [
       "linux"
@@ -100646,7 +100688,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/f9e1ec1fc642b575bc9955618b7065747f56b101"
+      "test/core/client_channel/uri_corpus/f9e1ec1fc642b575bc9955618b7065747f56b101"
     ], 
     "ci_platforms": [
       "linux"
@@ -100665,7 +100707,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/fe0630a3aeed2ec6f474f362e4c839478290d5c4"
+      "test/core/client_channel/uri_corpus/fe0630a3aeed2ec6f474f362e4c839478290d5c4"
     ], 
     "ci_platforms": [
       "linux"
@@ -100684,7 +100726,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/ipv4.txt"
+      "test/core/client_channel/uri_corpus/ipv4.txt"
     ], 
     "ci_platforms": [
       "linux"
@@ -100703,7 +100745,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/ipv6.txt"
+      "test/core/client_channel/uri_corpus/ipv6.txt"
     ], 
     "ci_platforms": [
       "linux"
@@ -100722,7 +100764,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/unix.txt"
+      "test/core/client_channel/uri_corpus/unix.txt"
     ], 
     "ci_platforms": [
       "linux"
diff --git a/vsprojects/vcxproj/test/grpc++_test/grpc++_test.vcxproj b/vsprojects/vcxproj/grpc++_test/grpc++_test.vcxproj
similarity index 65%
rename from vsprojects/vcxproj/test/grpc++_test/grpc++_test.vcxproj
rename to vsprojects/vcxproj/grpc++_test/grpc++_test.vcxproj
index 995d60d09eafdd08d675bba232b84684ced70001..cd3e406f9dc85653752260459b8ea74704d0a681 100644
--- a/vsprojects/vcxproj/test/grpc++_test/grpc++_test.vcxproj
+++ b/vsprojects/vcxproj/grpc++_test/grpc++_test.vcxproj
@@ -1,6 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.props" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\1.0.204.1.props')" />
   <ItemGroup Label="ProjectConfigurations">
     <ProjectConfiguration Include="Debug|Win32">
       <Configuration>Debug</Configuration>
@@ -38,12 +37,12 @@
     <PlatformToolset>v140</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Debug'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
+    <ConfigurationType>StaticLibrary</ConfigurationType>
     <UseDebugLibraries>true</UseDebugLibraries>
     <CharacterSet>Unicode</CharacterSet>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
+    <ConfigurationType>StaticLibrary</ConfigurationType>
     <UseDebugLibraries>false</UseDebugLibraries>
     <WholeProgramOptimization>true</WholeProgramOptimization>
     <CharacterSet>Unicode</CharacterSet>
@@ -53,27 +52,15 @@
   </ImportGroup>
   <ImportGroup Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(SolutionDir)\..\vsprojects\cpptest.props" />
     <Import Project="$(SolutionDir)\..\vsprojects\global.props" />
-    <Import Project="$(SolutionDir)\..\vsprojects\openssl.props" />
-    <Import Project="$(SolutionDir)\..\vsprojects\protobuf.props" />
     <Import Project="$(SolutionDir)\..\vsprojects\winsock.props" />
-    <Import Project="$(SolutionDir)\..\vsprojects\zlib.props" />
   </ImportGroup>
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup Condition="'$(Configuration)'=='Debug'">
     <TargetName>grpc++_test</TargetName>
-    <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
-    <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
-    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
-    <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>grpc++_test</TargetName>
-    <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
-    <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
-    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
-    <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <ClCompile>
@@ -171,25 +158,13 @@
       <Project>{C187A093-A0FE-489D-A40A-6E33DE0F9FEB}</Project>
     </ProjectReference>
   </ItemGroup>
-  <ItemGroup>
-    <None Include="packages.config" />
-  </ItemGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
   <ImportGroup Label="ExtensionTargets">
-  <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies.zlib.redist.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies\grpc.dependencies.zlib.targets')" />
-  <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies.zlib.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies\grpc.dependencies.zlib.targets')" />
-  <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies.openssl.redist.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies\grpc.dependencies.openssl.targets')" />
-  <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies\grpc.dependencies.openssl.targets')" />
   </ImportGroup>
   <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
     <PropertyGroup>
       <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
     </PropertyGroup>
-    <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies.zlib.redist.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies.zlib.redist.targets')" />
-    <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies.zlib.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies.zlib.targets')" />
-    <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies.openssl.redist.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies.openssl.redist.targets')" />
-    <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.props')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.props')" />
-    <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.targets')" />
   </Target>
 </Project>
 
diff --git a/vsprojects/vcxproj/test/grpc++_test/grpc++_test.vcxproj.filters b/vsprojects/vcxproj/grpc++_test/grpc++_test.vcxproj.filters
similarity index 100%
rename from vsprojects/vcxproj/test/grpc++_test/grpc++_test.vcxproj.filters
rename to vsprojects/vcxproj/grpc++_test/grpc++_test.vcxproj.filters
diff --git a/vsprojects/vcxproj/grpc/grpc.vcxproj b/vsprojects/vcxproj/grpc/grpc.vcxproj
index b8c0049db50b715ac7e5be46b0831326afda273a..e13d5f3c404932f6720227af01705a885727b22d 100644
--- a/vsprojects/vcxproj/grpc/grpc.vcxproj
+++ b/vsprojects/vcxproj/grpc/grpc.vcxproj
@@ -424,23 +424,23 @@
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\tsi\ssl_types.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\tsi\transport_security.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\tsi\transport_security_interface.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\client_channel.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\client_channel_factory.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\connector.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\http_connect_handshaker.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\initial_connect_string.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\lb_policy.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\lb_policy_factory.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\lb_policy_registry.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\method_config.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\parse_address.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\resolver.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\resolver_factory.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\resolver_registry.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\resolver_result.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\subchannel.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\subchannel_index.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\uri_parser.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\client_channel.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\client_channel_factory.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\connector.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\http_connect_handshaker.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\initial_connect_string.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy_factory.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy_registry.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\method_config.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\parse_address.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver_factory.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver_registry.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver_result.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\subchannel.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\subchannel_index.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\uri_parser.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\ext\lb_policy\grpclb\grpclb.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\ext\lb_policy\grpclb\load_balancer_api.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\ext\lb_policy\grpclb\proto\grpc\lb\v1\load_balancer.pb.h" />
@@ -755,45 +755,45 @@
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\ext\transport\chttp2\client\secure\secure_channel_create.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\channel_connectivity.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\channel_connectivity.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\client_channel.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\client_channel.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\client_channel_factory.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\client_channel_factory.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\client_config_plugin.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\client_channel_plugin.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\connector.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\connector.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\default_initial_connect_string.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\default_initial_connect_string.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\http_connect_handshaker.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\http_connect_handshaker.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\initial_connect_string.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\initial_connect_string.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\lb_policy.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\lb_policy_factory.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy_factory.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\lb_policy_registry.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy_registry.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\method_config.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\method_config.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\parse_address.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\parse_address.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\resolver.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\resolver_factory.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver_factory.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\resolver_registry.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver_registry.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\resolver_result.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver_result.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\subchannel.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\subchannel.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\subchannel_index.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\subchannel_index.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\uri_parser.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\uri_parser.c">
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\ext\transport\chttp2\server\insecure\server_chttp2.c">
     </ClCompile>
diff --git a/vsprojects/vcxproj/grpc/grpc.vcxproj.filters b/vsprojects/vcxproj/grpc/grpc.vcxproj.filters
index fb1f904811ded4e23e6672d7c3f94720c00e3655..1ffe1511818b1857d704b7d2ae2ddb1e462b8eaf 100644
--- a/vsprojects/vcxproj/grpc/grpc.vcxproj.filters
+++ b/vsprojects/vcxproj/grpc/grpc.vcxproj.filters
@@ -439,65 +439,65 @@
     <ClCompile Include="$(SolutionDir)\..\src\core\ext\transport\chttp2\client\secure\secure_channel_create.c">
       <Filter>src\core\ext\transport\chttp2\client\secure</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\channel_connectivity.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\channel_connectivity.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\client_channel.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\client_channel.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\client_channel_factory.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\client_channel_factory.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\client_config_plugin.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\client_channel_plugin.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\connector.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\connector.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\default_initial_connect_string.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\default_initial_connect_string.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\http_connect_handshaker.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\http_connect_handshaker.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\initial_connect_string.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\initial_connect_string.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\lb_policy.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\lb_policy_factory.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy_factory.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\lb_policy_registry.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy_registry.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\method_config.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\method_config.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\parse_address.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\parse_address.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\resolver.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\resolver_factory.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver_factory.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\resolver_registry.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver_registry.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\resolver_result.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver_result.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\subchannel.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\subchannel.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\subchannel_index.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\subchannel_index.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\uri_parser.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\uri_parser.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\ext\transport\chttp2\server\insecure\server_chttp2.c">
       <Filter>src\core\ext\transport\chttp2\server\insecure</Filter>
@@ -1061,56 +1061,56 @@
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\tsi\transport_security_interface.h">
       <Filter>src\core\lib\tsi</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\client_channel.h">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\client_channel.h">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\client_channel_factory.h">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\client_channel_factory.h">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\connector.h">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\connector.h">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\http_connect_handshaker.h">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\http_connect_handshaker.h">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\initial_connect_string.h">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\initial_connect_string.h">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\lb_policy.h">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy.h">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\lb_policy_factory.h">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy_factory.h">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\lb_policy_registry.h">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy_registry.h">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\method_config.h">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\method_config.h">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\parse_address.h">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\parse_address.h">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\resolver.h">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver.h">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\resolver_factory.h">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver_factory.h">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\resolver_registry.h">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver_registry.h">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\resolver_result.h">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver_result.h">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\subchannel.h">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\subchannel.h">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\subchannel_index.h">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\subchannel_index.h">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\uri_parser.h">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\uri_parser.h">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClInclude>
     <ClInclude Include="$(SolutionDir)\..\src\core\ext\lb_policy\grpclb\grpclb.h">
       <Filter>src\core\ext\lb_policy\grpclb</Filter>
@@ -1202,8 +1202,8 @@
     <Filter Include="src\core\ext\census\gen">
       <UniqueIdentifier>{4a14dd37-5868-c656-7333-fa80574cbb07}</UniqueIdentifier>
     </Filter>
-    <Filter Include="src\core\ext\client_config">
-      <UniqueIdentifier>{003725f8-37fc-80b5-deba-baae32caf915}</UniqueIdentifier>
+    <Filter Include="src\core\ext\client_channel">
+      <UniqueIdentifier>{36eee53a-cd19-738a-c387-20c44a2bfd07}</UniqueIdentifier>
     </Filter>
     <Filter Include="src\core\ext\lb_policy">
       <UniqueIdentifier>{030f00ff-6c54-76c8-12df-37e3008335d1}</UniqueIdentifier>
diff --git a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj
index 519d7317bad8faa54f1b1f8b5f04c05f700ce2ea..6fa2fc627268410a67f68720a48a13fdd0a58a1f 100644
--- a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj
+++ b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj
@@ -390,23 +390,23 @@
     <ClInclude Include="$(SolutionDir)\..\src\core\ext\transport\chttp2\transport\stream_map.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\ext\transport\chttp2\transport\varint.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\ext\transport\chttp2\alpn\alpn.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\client_channel.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\client_channel_factory.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\connector.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\http_connect_handshaker.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\initial_connect_string.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\lb_policy.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\lb_policy_factory.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\lb_policy_registry.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\method_config.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\parse_address.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\resolver.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\resolver_factory.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\resolver_registry.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\resolver_result.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\subchannel.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\subchannel_index.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\uri_parser.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\client_channel.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\client_channel_factory.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\connector.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\http_connect_handshaker.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\initial_connect_string.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy_factory.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy_registry.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\method_config.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\parse_address.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver_factory.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver_registry.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver_result.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\subchannel.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\subchannel_index.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\uri_parser.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\ext\load_reporting\load_reporting.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\ext\load_reporting\load_reporting_filter.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\ext\lb_policy\grpclb\grpclb.h" />
@@ -671,45 +671,45 @@
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\ext\transport\chttp2\client\insecure\channel_create_posix.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\channel_connectivity.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\channel_connectivity.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\client_channel.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\client_channel.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\client_channel_factory.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\client_channel_factory.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\client_config_plugin.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\client_channel_plugin.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\connector.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\connector.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\default_initial_connect_string.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\default_initial_connect_string.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\http_connect_handshaker.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\http_connect_handshaker.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\initial_connect_string.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\initial_connect_string.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\lb_policy.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\lb_policy_factory.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy_factory.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\lb_policy_registry.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy_registry.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\method_config.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\method_config.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\parse_address.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\parse_address.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\resolver.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\resolver_factory.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver_factory.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\resolver_registry.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver_registry.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\resolver_result.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver_result.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\subchannel.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\subchannel.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\subchannel_index.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\subchannel_index.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\uri_parser.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\uri_parser.c">
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\ext\resolver\dns\native\dns_resolver.c">
     </ClCompile>
diff --git a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters
index d30df5c03d5c3c86bf82096679319bff3bb9b01d..6c31f4d64327f7623d30247a7444a79cff15aed5 100644
--- a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters
+++ b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters
@@ -364,65 +364,65 @@
     <ClCompile Include="$(SolutionDir)\..\src\core\ext\transport\chttp2\client\insecure\channel_create_posix.c">
       <Filter>src\core\ext\transport\chttp2\client\insecure</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\channel_connectivity.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\channel_connectivity.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\client_channel.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\client_channel.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\client_channel_factory.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\client_channel_factory.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\client_config_plugin.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\client_channel_plugin.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\connector.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\connector.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\default_initial_connect_string.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\default_initial_connect_string.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\http_connect_handshaker.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\http_connect_handshaker.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\initial_connect_string.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\initial_connect_string.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\lb_policy.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\lb_policy_factory.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy_factory.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\lb_policy_registry.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy_registry.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\method_config.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\method_config.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\parse_address.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\parse_address.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\resolver.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\resolver_factory.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver_factory.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\resolver_registry.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver_registry.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\resolver_result.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver_result.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\subchannel.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\subchannel.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\subchannel_index.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\subchannel_index.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\uri_parser.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\uri_parser.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\ext\resolver\dns\native\dns_resolver.c">
       <Filter>src\core\ext\resolver\dns\native</Filter>
@@ -899,56 +899,56 @@
     <ClInclude Include="$(SolutionDir)\..\src\core\ext\transport\chttp2\alpn\alpn.h">
       <Filter>src\core\ext\transport\chttp2\alpn</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\client_channel.h">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\client_channel.h">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\client_channel_factory.h">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\client_channel_factory.h">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\connector.h">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\connector.h">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\http_connect_handshaker.h">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\http_connect_handshaker.h">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\initial_connect_string.h">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\initial_connect_string.h">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\lb_policy.h">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy.h">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\lb_policy_factory.h">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy_factory.h">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\lb_policy_registry.h">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy_registry.h">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\method_config.h">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\method_config.h">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\parse_address.h">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\parse_address.h">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\resolver.h">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver.h">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\resolver_factory.h">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver_factory.h">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\resolver_registry.h">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver_registry.h">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\resolver_result.h">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver_result.h">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\subchannel.h">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\subchannel.h">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\subchannel_index.h">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\subchannel_index.h">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\uri_parser.h">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\uri_parser.h">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClInclude>
     <ClInclude Include="$(SolutionDir)\..\src\core\ext\load_reporting\load_reporting.h">
       <Filter>src\core\ext\load_reporting</Filter>
@@ -1040,8 +1040,8 @@
     <Filter Include="src\core\ext\census\gen">
       <UniqueIdentifier>{dfe53168-57b0-3ac4-d8ba-07fd958cc8f5}</UniqueIdentifier>
     </Filter>
-    <Filter Include="src\core\ext\client_config">
-      <UniqueIdentifier>{25fa8af3-0a05-987c-741f-fa8ff9d65d51}</UniqueIdentifier>
+    <Filter Include="src\core\ext\client_channel">
+      <UniqueIdentifier>{2edd1aad-34cf-0c66-e03e-b1b2dd81d9a8}</UniqueIdentifier>
     </Filter>
     <Filter Include="src\core\ext\lb_policy">
       <UniqueIdentifier>{a23781d2-27e4-7cb0-12cd-59782ecb21ce}</UniqueIdentifier>
diff --git a/vsprojects/vcxproj/test/dns_resolver_connectivity_test/dns_resolver_connectivity_test.vcxproj b/vsprojects/vcxproj/test/dns_resolver_connectivity_test/dns_resolver_connectivity_test.vcxproj
index 76ac196dda6ac7e2a8880ec7789a28c86bf31c89..e8958bbe324bcd24522157a62b1a03aceee2873e 100644
--- a/vsprojects/vcxproj/test/dns_resolver_connectivity_test/dns_resolver_connectivity_test.vcxproj
+++ b/vsprojects/vcxproj/test/dns_resolver_connectivity_test/dns_resolver_connectivity_test.vcxproj
@@ -158,7 +158,7 @@
   </ItemDefinitionGroup>
 
   <ItemGroup>
-    <ClCompile Include="$(SolutionDir)\..\test\core\client_config\resolvers\dns_resolver_connectivity_test.c">
+    <ClCompile Include="$(SolutionDir)\..\test\core\client_channel\resolvers\dns_resolver_connectivity_test.c">
     </ClCompile>
   </ItemGroup>
   <ItemGroup>
diff --git a/vsprojects/vcxproj/test/dns_resolver_connectivity_test/dns_resolver_connectivity_test.vcxproj.filters b/vsprojects/vcxproj/test/dns_resolver_connectivity_test/dns_resolver_connectivity_test.vcxproj.filters
index e49318df1104eb8c123d113f33e99fd3b79988ab..eb80b8eed5fad27d788ef1d0fe28139fe6d0359a 100644
--- a/vsprojects/vcxproj/test/dns_resolver_connectivity_test/dns_resolver_connectivity_test.vcxproj.filters
+++ b/vsprojects/vcxproj/test/dns_resolver_connectivity_test/dns_resolver_connectivity_test.vcxproj.filters
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <ItemGroup>
-    <ClCompile Include="$(SolutionDir)\..\test\core\client_config\resolvers\dns_resolver_connectivity_test.c">
-      <Filter>test\core\client_config\resolvers</Filter>
+    <ClCompile Include="$(SolutionDir)\..\test\core\client_channel\resolvers\dns_resolver_connectivity_test.c">
+      <Filter>test\core\client_channel\resolvers</Filter>
     </ClCompile>
   </ItemGroup>
 
@@ -13,11 +13,11 @@
     <Filter Include="test\core">
       <UniqueIdentifier>{cc06b800-cd26-f7a8-7ecf-ec789e78881b}</UniqueIdentifier>
     </Filter>
-    <Filter Include="test\core\client_config">
-      <UniqueIdentifier>{4fbd5c0a-d1e3-6658-5788-2fc6f2cc9071}</UniqueIdentifier>
+    <Filter Include="test\core\client_channel">
+      <UniqueIdentifier>{0998596f-2aa1-8205-173b-0bd27b7617d1}</UniqueIdentifier>
     </Filter>
-    <Filter Include="test\core\client_config\resolvers">
-      <UniqueIdentifier>{eab637a2-7ac1-f6be-4fc2-c8989c66070b}</UniqueIdentifier>
+    <Filter Include="test\core\client_channel\resolvers">
+      <UniqueIdentifier>{8925594d-dbe2-fee6-1553-d3258d9361da}</UniqueIdentifier>
     </Filter>
   </ItemGroup>
 </Project>
diff --git a/vsprojects/vcxproj/test/dns_resolver_test/dns_resolver_test.vcxproj b/vsprojects/vcxproj/test/dns_resolver_test/dns_resolver_test.vcxproj
index 1f3089b9aae2795b17cccc35a503eed1be6bf8aa..83375104abff136d295950e6ecee56c98e5eac35 100644
--- a/vsprojects/vcxproj/test/dns_resolver_test/dns_resolver_test.vcxproj
+++ b/vsprojects/vcxproj/test/dns_resolver_test/dns_resolver_test.vcxproj
@@ -158,7 +158,7 @@
   </ItemDefinitionGroup>
 
   <ItemGroup>
-    <ClCompile Include="$(SolutionDir)\..\test\core\client_config\resolvers\dns_resolver_test.c">
+    <ClCompile Include="$(SolutionDir)\..\test\core\client_channel\resolvers\dns_resolver_test.c">
     </ClCompile>
   </ItemGroup>
   <ItemGroup>
diff --git a/vsprojects/vcxproj/test/dns_resolver_test/dns_resolver_test.vcxproj.filters b/vsprojects/vcxproj/test/dns_resolver_test/dns_resolver_test.vcxproj.filters
index ea6e7077f257da4cfee9912ce6d1e76272a68ebd..540da557e692c46bcc5a624b783f2834ed37a4cf 100644
--- a/vsprojects/vcxproj/test/dns_resolver_test/dns_resolver_test.vcxproj.filters
+++ b/vsprojects/vcxproj/test/dns_resolver_test/dns_resolver_test.vcxproj.filters
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <ItemGroup>
-    <ClCompile Include="$(SolutionDir)\..\test\core\client_config\resolvers\dns_resolver_test.c">
-      <Filter>test\core\client_config\resolvers</Filter>
+    <ClCompile Include="$(SolutionDir)\..\test\core\client_channel\resolvers\dns_resolver_test.c">
+      <Filter>test\core\client_channel\resolvers</Filter>
     </ClCompile>
   </ItemGroup>
 
@@ -13,11 +13,11 @@
     <Filter Include="test\core">
       <UniqueIdentifier>{edc57049-e918-50c2-5ba9-04771a506c89}</UniqueIdentifier>
     </Filter>
-    <Filter Include="test\core\client_config">
-      <UniqueIdentifier>{7922598e-4d7b-3a07-85d1-467b736756f6}</UniqueIdentifier>
+    <Filter Include="test\core\client_channel">
+      <UniqueIdentifier>{227838e2-4ac8-f960-68b6-e82cc6e0cefa}</UniqueIdentifier>
     </Filter>
-    <Filter Include="test\core\client_config\resolvers">
-      <UniqueIdentifier>{fb24db82-f42b-3f44-fb9b-b540e8f9c6ab}</UniqueIdentifier>
+    <Filter Include="test\core\client_channel\resolvers">
+      <UniqueIdentifier>{5d51c3a6-a50e-4d84-53b3-44ee7c39f36c}</UniqueIdentifier>
     </Filter>
   </ItemGroup>
 </Project>
diff --git a/vsprojects/vcxproj/test/lb_policies_test/lb_policies_test.vcxproj b/vsprojects/vcxproj/test/lb_policies_test/lb_policies_test.vcxproj
index 22b364f35cb544c0d9ebeb068f6536049ff6e90e..b4da0194db4cf537d12e1a6ec55568cd21063150 100644
--- a/vsprojects/vcxproj/test/lb_policies_test/lb_policies_test.vcxproj
+++ b/vsprojects/vcxproj/test/lb_policies_test/lb_policies_test.vcxproj
@@ -158,7 +158,7 @@
   </ItemDefinitionGroup>
 
   <ItemGroup>
-    <ClCompile Include="$(SolutionDir)\..\test\core\client_config\lb_policies_test.c">
+    <ClCompile Include="$(SolutionDir)\..\test\core\client_channel\lb_policies_test.c">
     </ClCompile>
   </ItemGroup>
   <ItemGroup>
diff --git a/vsprojects/vcxproj/test/lb_policies_test/lb_policies_test.vcxproj.filters b/vsprojects/vcxproj/test/lb_policies_test/lb_policies_test.vcxproj.filters
index d6068138121eec4415fb1660a1be4c5fd79433a9..362cfab89d97c2d8a179c31edeb03ad9df00208e 100644
--- a/vsprojects/vcxproj/test/lb_policies_test/lb_policies_test.vcxproj.filters
+++ b/vsprojects/vcxproj/test/lb_policies_test/lb_policies_test.vcxproj.filters
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <ItemGroup>
-    <ClCompile Include="$(SolutionDir)\..\test\core\client_config\lb_policies_test.c">
-      <Filter>test\core\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\test\core\client_channel\lb_policies_test.c">
+      <Filter>test\core\client_channel</Filter>
     </ClCompile>
   </ItemGroup>
 
@@ -13,8 +13,8 @@
     <Filter Include="test\core">
       <UniqueIdentifier>{6e194f4b-ceb1-0e6b-e77a-8149b0411d99}</UniqueIdentifier>
     </Filter>
-    <Filter Include="test\core\client_config">
-      <UniqueIdentifier>{f948fe8f-47f8-fcce-2740-6c390af3c30b}</UniqueIdentifier>
+    <Filter Include="test\core\client_channel">
+      <UniqueIdentifier>{c4b19e85-1a5c-066b-9503-b58971695a58}</UniqueIdentifier>
     </Filter>
   </ItemGroup>
 </Project>
diff --git a/vsprojects/vcxproj/test/server_context_test_spouse_test/server_context_test_spouse_test.vcxproj b/vsprojects/vcxproj/test/server_context_test_spouse_test/server_context_test_spouse_test.vcxproj
index 8ba7432824dbbae7f7b299ae368d6b6682089ae1..9e586c647c7f94502db32f53288df5722ca98cb1 100644
--- a/vsprojects/vcxproj/test/server_context_test_spouse_test/server_context_test_spouse_test.vcxproj
+++ b/vsprojects/vcxproj/test/server_context_test_spouse_test/server_context_test_spouse_test.vcxproj
@@ -167,7 +167,7 @@
     <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\grpc_test_util\grpc_test_util.vcxproj">
       <Project>{17BCAFC0-5FDC-4C94-AEB9-95F3E220614B}</Project>
     </ProjectReference>
-    <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\test\grpc++_test\grpc++_test.vcxproj">
+    <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\grpc++_test\grpc++_test.vcxproj">
       <Project>{3D3EAEA9-76C4-0CFE-4718-5A1F6B7F72C8}</Project>
     </ProjectReference>
     <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\grpc++\grpc++.vcxproj">
diff --git a/vsprojects/vcxproj/test/set_initial_connect_string_test/set_initial_connect_string_test.vcxproj b/vsprojects/vcxproj/test/set_initial_connect_string_test/set_initial_connect_string_test.vcxproj
index 5fda7205266aa4107c6c11de41df748690014068..a438391f252036844e2ed462cf75c5716f619789 100644
--- a/vsprojects/vcxproj/test/set_initial_connect_string_test/set_initial_connect_string_test.vcxproj
+++ b/vsprojects/vcxproj/test/set_initial_connect_string_test/set_initial_connect_string_test.vcxproj
@@ -158,7 +158,7 @@
   </ItemDefinitionGroup>
 
   <ItemGroup>
-    <ClCompile Include="$(SolutionDir)\..\test\core\client_config\set_initial_connect_string_test.c">
+    <ClCompile Include="$(SolutionDir)\..\test\core\client_channel\set_initial_connect_string_test.c">
     </ClCompile>
   </ItemGroup>
   <ItemGroup>
diff --git a/vsprojects/vcxproj/test/set_initial_connect_string_test/set_initial_connect_string_test.vcxproj.filters b/vsprojects/vcxproj/test/set_initial_connect_string_test/set_initial_connect_string_test.vcxproj.filters
index 8abfa1991aff3a67abf41d95b18d328e14295fc0..4422a3e79256dc80ec53cb633619854786a2f381 100644
--- a/vsprojects/vcxproj/test/set_initial_connect_string_test/set_initial_connect_string_test.vcxproj.filters
+++ b/vsprojects/vcxproj/test/set_initial_connect_string_test/set_initial_connect_string_test.vcxproj.filters
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <ItemGroup>
-    <ClCompile Include="$(SolutionDir)\..\test\core\client_config\set_initial_connect_string_test.c">
-      <Filter>test\core\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\test\core\client_channel\set_initial_connect_string_test.c">
+      <Filter>test\core\client_channel</Filter>
     </ClCompile>
   </ItemGroup>
 
@@ -13,8 +13,8 @@
     <Filter Include="test\core">
       <UniqueIdentifier>{a554b5ef-0c80-ac03-1848-bccd947a06a6}</UniqueIdentifier>
     </Filter>
-    <Filter Include="test\core\client_config">
-      <UniqueIdentifier>{a6c4917f-b1b0-e958-6ea8-34950c2f8f36}</UniqueIdentifier>
+    <Filter Include="test\core\client_channel">
+      <UniqueIdentifier>{4726253c-a562-0ace-2798-996807381208}</UniqueIdentifier>
     </Filter>
   </ItemGroup>
 </Project>
diff --git a/vsprojects/vcxproj/test/sockaddr_resolver_test/sockaddr_resolver_test.vcxproj b/vsprojects/vcxproj/test/sockaddr_resolver_test/sockaddr_resolver_test.vcxproj
index 1062132c604955db94705e0f0584da66c57c302f..8d5d02e7073748a9f7349fe1bfe7f49696ed4155 100644
--- a/vsprojects/vcxproj/test/sockaddr_resolver_test/sockaddr_resolver_test.vcxproj
+++ b/vsprojects/vcxproj/test/sockaddr_resolver_test/sockaddr_resolver_test.vcxproj
@@ -158,7 +158,7 @@
   </ItemDefinitionGroup>
 
   <ItemGroup>
-    <ClCompile Include="$(SolutionDir)\..\test\core\client_config\resolvers\sockaddr_resolver_test.c">
+    <ClCompile Include="$(SolutionDir)\..\test\core\client_channel\resolvers\sockaddr_resolver_test.c">
     </ClCompile>
   </ItemGroup>
   <ItemGroup>
diff --git a/vsprojects/vcxproj/test/sockaddr_resolver_test/sockaddr_resolver_test.vcxproj.filters b/vsprojects/vcxproj/test/sockaddr_resolver_test/sockaddr_resolver_test.vcxproj.filters
index 50de4b377721e294d7e948f4defb1a878a6a11e9..aa63da1502a249fcaea09ad302e98b7aa5af58c2 100644
--- a/vsprojects/vcxproj/test/sockaddr_resolver_test/sockaddr_resolver_test.vcxproj.filters
+++ b/vsprojects/vcxproj/test/sockaddr_resolver_test/sockaddr_resolver_test.vcxproj.filters
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <ItemGroup>
-    <ClCompile Include="$(SolutionDir)\..\test\core\client_config\resolvers\sockaddr_resolver_test.c">
-      <Filter>test\core\client_config\resolvers</Filter>
+    <ClCompile Include="$(SolutionDir)\..\test\core\client_channel\resolvers\sockaddr_resolver_test.c">
+      <Filter>test\core\client_channel\resolvers</Filter>
     </ClCompile>
   </ItemGroup>
 
@@ -13,11 +13,11 @@
     <Filter Include="test\core">
       <UniqueIdentifier>{efc6f7cf-eb13-376c-85bb-64fae70baf03}</UniqueIdentifier>
     </Filter>
-    <Filter Include="test\core\client_config">
-      <UniqueIdentifier>{cba53434-a270-8e21-2976-5f7950730eb8}</UniqueIdentifier>
+    <Filter Include="test\core\client_channel">
+      <UniqueIdentifier>{a3fef8b1-3b99-63c9-5f35-feff99af1381}</UniqueIdentifier>
     </Filter>
-    <Filter Include="test\core\client_config\resolvers">
-      <UniqueIdentifier>{79868613-ffd2-ead6-5b23-fc1d8d0709ba}</UniqueIdentifier>
+    <Filter Include="test\core\client_channel\resolvers">
+      <UniqueIdentifier>{d32b4315-4e08-e492-5e10-4dc0c5c8cd55}</UniqueIdentifier>
     </Filter>
   </ItemGroup>
 </Project>
diff --git a/vsprojects/vcxproj/test/uri_parser_test/uri_parser_test.vcxproj b/vsprojects/vcxproj/test/uri_parser_test/uri_parser_test.vcxproj
index 51c4a274a8ba5ad8e63fd4d53e7462b3e955844d..d5229e06cb2b7602c158d2bf78201f17a185f641 100644
--- a/vsprojects/vcxproj/test/uri_parser_test/uri_parser_test.vcxproj
+++ b/vsprojects/vcxproj/test/uri_parser_test/uri_parser_test.vcxproj
@@ -158,7 +158,7 @@
   </ItemDefinitionGroup>
 
   <ItemGroup>
-    <ClCompile Include="$(SolutionDir)\..\test\core\client_config\uri_parser_test.c">
+    <ClCompile Include="$(SolutionDir)\..\test\core\client_channel\uri_parser_test.c">
     </ClCompile>
   </ItemGroup>
   <ItemGroup>
diff --git a/vsprojects/vcxproj/test/uri_parser_test/uri_parser_test.vcxproj.filters b/vsprojects/vcxproj/test/uri_parser_test/uri_parser_test.vcxproj.filters
index e95dd1d9d2d5c7f4f7019f5404f6c76382e6d967..bafab6af635a33f1cfbd6af17f6a174c45bc810e 100644
--- a/vsprojects/vcxproj/test/uri_parser_test/uri_parser_test.vcxproj.filters
+++ b/vsprojects/vcxproj/test/uri_parser_test/uri_parser_test.vcxproj.filters
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <ItemGroup>
-    <ClCompile Include="$(SolutionDir)\..\test\core\client_config\uri_parser_test.c">
-      <Filter>test\core\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\test\core\client_channel\uri_parser_test.c">
+      <Filter>test\core\client_channel</Filter>
     </ClCompile>
   </ItemGroup>
 
@@ -13,8 +13,8 @@
     <Filter Include="test\core">
       <UniqueIdentifier>{5e9a3063-bec4-a26c-b10d-13c866d4e639}</UniqueIdentifier>
     </Filter>
-    <Filter Include="test\core\client_config">
-      <UniqueIdentifier>{65156042-def7-b09c-d76e-38ba78456f20}</UniqueIdentifier>
+    <Filter Include="test\core\client_channel">
+      <UniqueIdentifier>{1d9f3085-019b-9673-74b6-55a857b824af}</UniqueIdentifier>
     </Filter>
   </ItemGroup>
 </Project>