diff --git a/include/linkahead/configuration.h b/include/linkahead/configuration.h
index 06754cf5f2006e03774486325b15e41c2131d114..a25727db4713fca91e3468d66244bebfb8da4c8d 100644
--- a/include/linkahead/configuration.h
+++ b/include/linkahead/configuration.h
@@ -103,10 +103,8 @@ public:
  */
 class ConfigurationManager {
 public:
-  static ConfigurationManager &GetInstance() {
-    static ConfigurationManager instance;
-    return instance;
-  };
+  static ConfigurationManager &GetInstance();
+  ;
 
   /**
    * See mReset.
@@ -156,6 +154,7 @@ public:
 private:
   Arena arena;
   JsonValue json_configuration;
+  static ConfigurationManager mInstance;
 
   inline ConfigurationManager()
     : json_configuration(nullptr){
diff --git a/include/linkahead/connection.h b/include/linkahead/connection.h
index 844f46a0e5f40488bed6f2ff045a9c2c218e8fe6..aca0966bf4f98d39bd1671ca941e458f4faf9f9b 100644
--- a/include/linkahead/connection.h
+++ b/include/linkahead/connection.h
@@ -170,6 +170,9 @@ class ConnectionManager {
 private:
   mutable std::map<std::string, std::shared_ptr<Connection>> connections;
   mutable std::string default_connection_name;
+
+  static ConnectionManager instance;
+
   inline ConnectionManager(){};
 
   auto mHasConnection(const std::string &name) const -> bool;
@@ -184,10 +187,7 @@ private:
   }
 
 public:
-  static ConnectionManager &GetInstance() {
-    static ConnectionManager instance;
-    return instance;
-  };
+  static ConnectionManager &GetInstance();
 
   inline static auto HasConnection(const std::string &name) -> bool {
     return ConnectionManager::GetInstance().mHasConnection(name);
diff --git a/src/linkahead/configuration.cpp b/src/linkahead/configuration.cpp
index 8db1f791960eaab01c17052a7f989fc7123aa726..f8074ba8c5bfa8c0d45976c320c50271d0fd6397 100644
--- a/src/linkahead/configuration.cpp
+++ b/src/linkahead/configuration.cpp
@@ -70,6 +70,9 @@
   }
 
 namespace linkahead::configuration {
+
+ConfigurationManager ConfigurationManager::mInstance;
+
 using boost::json::object;
 using boost::json::value;
 using grpc::InsecureChannelCredentials;
@@ -424,6 +427,8 @@ auto ConfigurationManager::mGetDefaultConnectionName() const -> std::string {
   throw ConfigurationError("Could not determine the default connection.");
 }
 
+inline ConfigurationManager &ConfigurationManager::GetInstance() { return mInstance; }
+
 // TODO(tf) This has apparently a cognitive complexity of 34>25 (threshold).
 auto ConfigurationManager::InitializeDefaults() -> int { // NOLINT
 
diff --git a/src/linkahead/connection.cpp b/src/linkahead/connection.cpp
index 91d5a0c2208cd2c7cfd4b57743cfe1aca7ac257d..373b3674c4230df7a4077c810aaa85a8e8a7d003 100644
--- a/src/linkahead/connection.cpp
+++ b/src/linkahead/connection.cpp
@@ -66,6 +66,13 @@ using linkahead::info::VersionInfo;
 using linkahead::transaction::Transaction;
 using linkahead::transaction::TransactionStatus;
 
+
+ConnectionManager ConnectionManager::instance;
+
+ConnectionManager &ConnectionManager::GetInstance() {
+  return instance;
+}
+
 Connection::Connection(const ConnectionConfiguration &configuration) {
   const std::string target =
     configuration.GetHost() + ":" + std::to_string(configuration.GetPort());