diff --git a/kDB/Repository/Connection.cpp b/kDB/Repository/Connection.cpp
index fa1163c7572b12a54f6cfa215d7af73e2b29065d..dae409a76c9bfe544e06b9ce99cf21c4451eb282 100644
--- a/kDB/Repository/Connection.cpp
+++ b/kDB/Repository/Connection.cpp
@@ -400,6 +400,15 @@ knowCore::ReturnVoid Connection::Private::loadExtensions()
   knowDBC::Result r = q.execute();
   if(r)
   {
+    for(int i = 0; i < r.tuples(); ++i)
+    {
+      QString extension = r.value(i, 0).value<QString>().expectSuccess();
+      QMutexLocker l(&metainformation_lock);
+      if(not enabledExtensions.contains(extension))
+      {
+        enabledExtensions.append(extension);
+      }
+    }
     for(int i = 0; i < r.tuples(); ++i)
     {
       QString extension = r.value(i, 0).value<QString>().expectSuccess();
@@ -489,7 +498,10 @@ void Connection::disconnect()
 
 knowCore::ReturnVoid Connection::connect(bool _initialise_database)
 {
-  if(not d->connections.isEmpty()) return kCrvError("Already connected");
+  {
+    QMutexLocker l(&d->connections_lock);
+    if(not d->connections.isEmpty()) return kCrvError("Already connected");
+  }
 
   d->uuid = QUuid::createUuid();
 
@@ -590,6 +602,7 @@ knowCore::ReturnVoid Connection::connect(bool _initialise_database)
   }
   else
   {
+    QMutexLocker l(&d->connections_lock);
     d->connections.append(conn);
     d->available_connections.append(conn);
   }
@@ -629,9 +642,10 @@ knowCore::ReturnVoid Connection::connect(bool _initialise_database)
     if(not new_instance)
     {
       ConnectionHandle handle(*this);
-      KNOWCORE_RETURN_VALUE_TRY_VOID(d->load_sql_files(handle.connection(), {":/DatabaseInterface/PostgreSQL/sql/initdb_44.sql"}));
+      KNOWCORE_RETURN_VALUE_TRY_VOID(d->load_sql_files(handle.connection(), {":/DatabaseInterface/PostgreSQL/sql/version_control_44.sql"}));
     }
   }
+
   // Load units
   KNOWCORE_RETURN_VALUE_TRY_VOID_DO(
     DatabaseInterface::PostgreSQL::SQLInterface::setUnitConversionFactors(d->self_p),
@@ -769,6 +783,7 @@ knowCore::ReturnVoid Connection::connect(bool _initialise_database)
 
 bool Connection::isConnected() const
 {
+  QMutexLocker l(&d->connections_lock);
   return d->connections.size() > 0;
 }
 
@@ -836,6 +851,7 @@ knowCore::ReturnVoid Connection::enableExtension(const QString& _extension)
   if(d->loadedExtensions.contains(_extension)) return kCrvSuccess();
   l.unlock();
   KNOWCORE_RETURN_VALUE_TRY_VOID(d->loadExtension(_extension));
+  if(d->enabledExtensions.contains(_extension)) return kCrvSuccess();
   knowDBC::Query q = createSQLQuery("INSERT INTO extensions(name) VALUES (:name)");
   q.bindValue(":name", _extension);
   knowDBC::Result r = q.execute();
@@ -843,6 +859,7 @@ knowCore::ReturnVoid Connection::enableExtension(const QString& _extension)
   {
     KDB_REPOSITORY_REPORT_QUERY_ERROR_RETURN("error inserting extension", r);
   }
+  d->enabledExtensions.append(_extension);
   return kCrvSuccess();
 }
 
diff --git a/kDB/Repository/Connection_p.h b/kDB/Repository/Connection_p.h
index 585f316ee9aae8b0cde6889f965ce47ada491d22..04ede204e3901b53170f94cdb58d0ad26547c71b 100644
--- a/kDB/Repository/Connection_p.h
+++ b/kDB/Repository/Connection_p.h
@@ -75,7 +75,7 @@ namespace kDB
       
       QString uniqueTableName(const QString& _prefix, const QString& _key);
       
-      QStringList loadedExtensions;
+      QStringList loadedExtensions, enabledExtensions;
       knowCore::ReturnVoid loadExtension(const QString& _extension);
       knowCore::ReturnVoid loadExtensions();