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 609c2d62d43806c6a6460fdea9fd9e1ffa0c8c0f..8dc7ed01e2834e958db6036333fdc1383acb8fd3 100644
--- a/src/core/ext/lb_policy/pick_first/pick_first.c
+++ b/src/core/ext/lb_policy/pick_first/pick_first.c
@@ -423,7 +423,7 @@ static grpc_lb_policy_factory *pick_first_lb_factory_create() {
 /* Plugin registration */
 
 void grpc_lb_policy_pick_first_init() {
-  grpc_lb_policy_registry_init(pick_first_lb_factory_create());
+  grpc_register_lb_policy(pick_first_lb_factory_create());
 }
 
 void grpc_lb_policy_pick_first_shutdown() {}
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 318980892c5b966f37b0ac675620d3305eaaadbe..b1996922bf9908b3a3241f0210ad440d19396b6d 100644
--- a/src/core/ext/lb_policy/round_robin/round_robin.c
+++ b/src/core/ext/lb_policy/round_robin/round_robin.c
@@ -546,7 +546,7 @@ static grpc_lb_policy_factory *round_robin_lb_factory_create() {
 /* Plugin registration */
 
 void grpc_lb_policy_round_robin_init() {
-  grpc_lb_policy_registry_init(round_robin_lb_factory_create());
+  grpc_register_lb_policy(round_robin_lb_factory_create());
   grpc_register_tracer("round_robin", &grpc_lb_round_robin_trace);
 }
 
diff --git a/src/core/lib/client_config/lb_policy_registry.c b/src/core/lib/client_config/lb_policy_registry.c
index 13acfe78cdac519ca9642fa39f54d8b7c833863c..82f70ed8c0becf3f9955ea018dfc93b06afcd4b0 100644
--- a/src/core/lib/client_config/lb_policy_registry.c
+++ b/src/core/lib/client_config/lb_policy_registry.c
@@ -40,12 +40,7 @@
 static grpc_lb_policy_factory *g_all_of_the_lb_policies[MAX_POLICIES];
 static int g_number_of_lb_policies = 0;
 
-static grpc_lb_policy_factory *g_default_lb_policy_factory;
-
-void grpc_lb_policy_registry_init(grpc_lb_policy_factory *default_factory) {
-  g_number_of_lb_policies = 0;
-  g_default_lb_policy_factory = default_factory;
-}
+void grpc_lb_policy_registry_init(void) { g_number_of_lb_policies = 0; }
 
 void grpc_lb_policy_registry_shutdown(void) {
   int i;
diff --git a/src/core/lib/client_config/lb_policy_registry.h b/src/core/lib/client_config/lb_policy_registry.h
index c251fd9f0802ba48c9e3cb02f129b45ff6871213..da3a5d5e797cd4577053fb8b6f21ee8f8ba906f8 100644
--- a/src/core/lib/client_config/lb_policy_registry.h
+++ b/src/core/lib/client_config/lb_policy_registry.h
@@ -38,7 +38,7 @@
 
 /** Initialize the registry and set \a default_factory as the factory to be
  * returned when no name is provided in a lookup */
-void grpc_lb_policy_registry_init(grpc_lb_policy_factory *default_factory);
+void grpc_lb_policy_registry_init(void);
 void grpc_lb_policy_registry_shutdown(void);
 
 /** Register a LB policy factory. */
diff --git a/src/core/lib/surface/init.c b/src/core/lib/surface/init.c
index 69e0e692be432517bc630a4db4f9dfe39bc87586..d59323b2bc482c1a6ab1450572207054e6bc58af 100644
--- a/src/core/lib/surface/init.c
+++ b/src/core/lib/surface/init.c
@@ -73,6 +73,9 @@
 #define GRPC_DEFAULT_NAME_PREFIX "dns:///"
 #endif
 
+/* (generated) built in registry of plugins */
+extern void grpc_register_built_in_plugins(void);
+
 #define MAX_PLUGINS 128
 
 static gpr_once g_basic_init = GPR_ONCE_INIT;
@@ -81,6 +84,7 @@ static int g_initializations;
 
 static void do_basic_init(void) {
   gpr_mu_init(&g_init_mu);
+  grpc_register_built_in_plugins();
   /* TODO(ctiller): ideally remove this strict linkage */
   grpc_register_plugin(census_grpc_plugin_init, census_grpc_plugin_destroy);
   g_initializations = 0;
@@ -163,6 +167,7 @@ void grpc_init(void) {
     gpr_time_init();
     grpc_mdctx_global_init();
     grpc_channel_init_init();
+    grpc_lb_policy_registry_init();
     grpc_resolver_registry_init(GRPC_DEFAULT_NAME_PREFIX);
     grpc_register_resolver_type(grpc_dns_resolver_factory_create());
     grpc_register_resolver_type(grpc_ipv4_resolver_factory_create());