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 024f4bc3635a4fc11fcc0930772db95199ae89c4..6083e0d22e288de473d12424891e2bb2b8872970 100644
--- a/src/core/ext/transport/chttp2/client/insecure/channel_create.c
+++ b/src/core/ext/transport/chttp2/client/insecure/channel_create.c
@@ -181,7 +181,8 @@ static grpc_subchannel *client_channel_factory_create_subchannel(
 
 static grpc_channel *client_channel_factory_create_channel(
     grpc_exec_ctx *exec_ctx, grpc_client_channel_factory *cc_factory,
-    const char *target, grpc_channel_args *args) {
+    const char *target, grpc_client_channel_type type,
+    grpc_channel_args *args) {
   client_channel_factory *f = (client_channel_factory *)cc_factory;
   grpc_channel_args *final_args = grpc_channel_args_merge(args, f->merge_args);
   grpc_channel *channel = grpc_channel_create(exec_ctx, target, final_args,
@@ -225,8 +226,8 @@ grpc_channel *grpc_insecure_channel_create(const char *target,
   gpr_ref_init(&f->refs, 1);
   f->merge_args = grpc_channel_args_copy(args);
 
-  grpc_channel *channel =
-      client_channel_factory_create_channel(&exec_ctx, &f->base, target, NULL);
+  grpc_channel *channel = client_channel_factory_create_channel(
+      &exec_ctx, &f->base, target, GRPC_CLIENT_CHANNEL_TYPE_REGULAR, NULL);
   if (channel != NULL) {
     f->master = channel;
     GRPC_CHANNEL_INTERNAL_REF(f->master, "grpc_insecure_channel_create");
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 210d9e4414ea47cb8a8d232377b55ac8e6824bcc..5d308056391bb6a52a308f9ba13e9d47b59a9a56 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
@@ -242,7 +242,8 @@ static grpc_subchannel *client_channel_factory_create_subchannel(
 
 static grpc_channel *client_channel_factory_create_channel(
     grpc_exec_ctx *exec_ctx, grpc_client_channel_factory *cc_factory,
-    const char *target, grpc_channel_args *args) {
+    const char *target, grpc_client_channel_type type,
+    grpc_channel_args *args) {
   client_channel_factory *f = (client_channel_factory *)cc_factory;
 
   grpc_channel_args *final_args = grpc_channel_args_merge(args, f->merge_args);
@@ -328,8 +329,8 @@ grpc_channel *grpc_secure_channel_create(grpc_channel_credentials *creds,
                               "grpc_secure_channel_create");
   f->security_connector = security_connector;
 
-  grpc_channel *channel =
-      client_channel_factory_create_channel(&exec_ctx, &f->base, target, NULL);
+  grpc_channel *channel = client_channel_factory_create_channel(
+      &exec_ctx, &f->base, target, GRPC_CLIENT_CHANNEL_TYPE_REGULAR, NULL);
   if (channel != NULL) {
     f->master = channel;
     GRPC_CHANNEL_INTERNAL_REF(f->master, "grpc_secure_channel_create");
diff --git a/src/core/lib/client_config/client_channel_factory.c b/src/core/lib/client_config/client_channel_factory.c
index 795776dcdd10d46e39e5cddf528d4005c6aed95b..d27b38d9f2760d391372ca22b68892bda7b948c8 100644
--- a/src/core/lib/client_config/client_channel_factory.c
+++ b/src/core/lib/client_config/client_channel_factory.c
@@ -50,6 +50,8 @@ grpc_subchannel* grpc_client_channel_factory_create_subchannel(
 
 grpc_channel* grpc_client_channel_factory_create_channel(
     grpc_exec_ctx* exec_ctx, grpc_client_channel_factory* factory,
-    const char* target, grpc_channel_args* args) {
-  return factory->vtable->create_channel(exec_ctx, factory, target, args);
+    const char* target, grpc_client_channel_type type,
+    grpc_channel_args* args) {
+  return factory->vtable->create_client_channel(exec_ctx, factory, target, type,
+                                                args);
 }
diff --git a/src/core/lib/client_config/client_channel_factory.h b/src/core/lib/client_config/client_channel_factory.h
index 4975eecb1afb7719718d4eef8e8bcdaeb35fe7ed..83d743ddc38a66b4fa5e4669942cb8176223af07 100644
--- a/src/core/lib/client_config/client_channel_factory.h
+++ b/src/core/lib/client_config/client_channel_factory.h
@@ -44,6 +44,12 @@ typedef struct grpc_client_channel_factory grpc_client_channel_factory;
 typedef struct grpc_client_channel_factory_vtable
     grpc_client_channel_factory_vtable;
 
+typedef enum {
+  GRPC_CLIENT_CHANNEL_TYPE_REGULAR, /** for the user-level regular calls */
+  GRPC_CLIENT_CHANNEL_TYPE_LOAD_BALANCING, /** for communication with a load
+                                              balancing service */
+} grpc_client_channel_type;
+
 /** Constructor for new configured channels.
     Creating decorators around this type is encouraged to adapt behavior. */
 struct grpc_client_channel_factory {
@@ -56,9 +62,11 @@ struct grpc_client_channel_factory_vtable {
   grpc_subchannel *(*create_subchannel)(grpc_exec_ctx *exec_ctx,
                                         grpc_client_channel_factory *factory,
                                         grpc_subchannel_args *args);
-  grpc_channel *(*create_channel)(grpc_exec_ctx *exec_ctx,
-                                  grpc_client_channel_factory *factory,
-                                  const char *target, grpc_channel_args *args);
+  grpc_channel *(*create_client_channel)(grpc_exec_ctx *exec_ctx,
+                                         grpc_client_channel_factory *factory,
+                                         const char *target,
+                                         grpc_client_channel_type type,
+                                         grpc_channel_args *args);
 };
 
 void grpc_client_channel_factory_ref(grpc_client_channel_factory *factory);
@@ -73,6 +81,6 @@ grpc_subchannel *grpc_client_channel_factory_create_subchannel(
 /** Create a new grpc_channel */
 grpc_channel *grpc_client_channel_factory_create_channel(
     grpc_exec_ctx *exec_ctx, grpc_client_channel_factory *factory,
-    const char *target, grpc_channel_args *args);
+    const char *target, grpc_client_channel_type type, grpc_channel_args *args);
 
 #endif /* GRPC_CORE_LIB_CLIENT_CONFIG_CLIENT_CHANNEL_FACTORY_H */
diff --git a/test/core/client_config/resolvers/dns_resolver_connectivity_test.c b/test/core/client_config/resolvers/dns_resolver_connectivity_test.c
index 1fd2d3d5efef518d2947aadaa7d62232ca269a1a..26c4e1d4ff29b35bd368bdf6d0bc9951d29c2026 100644
--- a/test/core/client_config/resolvers/dns_resolver_connectivity_test.c
+++ b/test/core/client_config/resolvers/dns_resolver_connectivity_test.c
@@ -53,7 +53,8 @@ static grpc_subchannel *client_channel_factory_create_subchannel(
 
 static grpc_channel *client_channel_factory_create_channel(
     grpc_exec_ctx *exec_ctx, grpc_client_channel_factory *cc_factory,
-    const char *target, grpc_channel_args *args) {
+    const char *target, grpc_client_channel_type type,
+    grpc_channel_args *args) {
   GPR_UNREACHABLE_CODE(return NULL);
 }
 
diff --git a/test/core/client_config/resolvers/dns_resolver_test.c b/test/core/client_config/resolvers/dns_resolver_test.c
index ce2da800bd133872a7186b36ea476d7df33dabc0..409d980ec15c6545eea88ca9f1fb33499aadf0a7 100644
--- a/test/core/client_config/resolvers/dns_resolver_test.c
+++ b/test/core/client_config/resolvers/dns_resolver_test.c
@@ -51,7 +51,8 @@ static grpc_subchannel *client_channel_factory_create_subchannel(
 
 static grpc_channel *client_channel_factory_create_channel(
     grpc_exec_ctx *exec_ctx, grpc_client_channel_factory *cc_factory,
-    const char *target, grpc_channel_args *args) {
+    const char *target, grpc_client_channel_type type,
+    grpc_channel_args *args) {
   GPR_UNREACHABLE_CODE(return NULL);
 }
 
diff --git a/test/core/client_config/resolvers/sockaddr_resolver_test.c b/test/core/client_config/resolvers/sockaddr_resolver_test.c
index 1e57d747f7e131e1d91939680d859b51c9287b64..4eaf8ea2a4669267cd5d044b5501749365502549 100644
--- a/test/core/client_config/resolvers/sockaddr_resolver_test.c
+++ b/test/core/client_config/resolvers/sockaddr_resolver_test.c
@@ -51,7 +51,8 @@ static grpc_subchannel *client_channel_factory_create_subchannel(
 
 static grpc_channel *client_channel_factory_create_channel(
     grpc_exec_ctx *exec_ctx, grpc_client_channel_factory *cc_factory,
-    const char *target, grpc_channel_args *args) {
+    const char *target, grpc_client_channel_type type,
+    grpc_channel_args *args) {
   GPR_UNREACHABLE_CODE(return NULL);
 }