diff --git a/include/grpc++/impl/grpc_library.h b/include/grpc++/impl/grpc_library.h
index d26f4a4cab366b1164eaa4cfdd8f8ed5db828ebc..ecb5a4d64d2458d7b0dce404ff23a8160d4c6a80 100644
--- a/include/grpc++/impl/grpc_library.h
+++ b/include/grpc++/impl/grpc_library.h
@@ -58,8 +58,12 @@ static CoreCodegen g_core_codegen;
 class GrpcLibraryInitializer GRPC_FINAL {
  public:
   GrpcLibraryInitializer() {
-    grpc::g_glip = &g_gli;
-    grpc::g_core_codegen_interface = &g_core_codegen;
+    if (grpc::g_glip == nullptr) {
+      grpc::g_glip = &g_gli;
+    }
+    if (grpc::g_core_codegen_interface == nullptr) {
+      grpc::g_core_codegen_interface = &g_core_codegen;
+    }
   }
 
   /// A no-op method to force the linker to reference this class, which will
diff --git a/src/cpp/client/secure_credentials.cc b/src/cpp/client/secure_credentials.cc
index 308455527c390792a19c3eb44b73327226b25d88..c34b840f90888317ee3c32010f599190c6611071 100644
--- a/src/cpp/client/secure_credentials.cc
+++ b/src/cpp/client/secure_credentials.cc
@@ -60,8 +60,7 @@ std::shared_ptr<grpc::Channel> SecureChannelCredentials::CreateChannel(
 
 SecureCallCredentials::SecureCallCredentials(grpc_call_credentials* c_creds)
     : c_creds_(c_creds) {
-  internal::GrpcLibraryInitializer gli_initializer;
-  gli_initializer.summon();
+  g_gli_initializer.summon();
 }
 
 bool SecureCallCredentials::ApplyToCall(grpc_call* call) {