diff --git a/src/Connection.jl b/src/Connection.jl
index d9e53f9dd425c70cc7dd3b109ba97479d456ffc5..339df952cfc0872750dbe901fef53057bff32a3e 100644
--- a/src/Connection.jl
+++ b/src/Connection.jl
@@ -25,7 +25,7 @@ module Connection
 
 using ..CaosDB
 
-export connect
+export connect, connect_manually
 
 """
 Struct containing the actual connection to a CaosDB server. Meant for
@@ -35,11 +35,13 @@ to create an connection object from a configuration.
 mutable struct _Connection
     wrapped_connection::Ptr{Cvoid}
 
-    function _Connection()
+    function _Connection(managed_by_julia::Bool=false)
         conn = new()
-        conn.wrapped_connection = C_NULL
-        function f(t)
-            if t.wrapped_connection != C_NULL
+        if managed_by_julia
+            # Only append a finalizer for this if the object is
+            # actually managed by Julia and not created and destroyed
+            # internally by libcaosdb.
+            function f(t)
                 ccall(
                     (:caosdb_connection_delete_connection, "libccaosdb"),
                     Cint,
@@ -47,8 +49,9 @@ mutable struct _Connection
                     Ref{_Connection}(t),
                 )
             end
+            finalizer(f, conn)
         end
-        finalizer(f, conn)
+        return conn
     end
 end
 
@@ -61,11 +64,13 @@ an certificate-provider object from a configuration.
 mutable struct _CertificateProvider
     wrapped_certificate_provider::Ptr{Cvoid}
 
-    function _CertificateProvider()
+    function _CertificateProvider(managed_by_julia::Bool=false)
         prov = new()
-        prov.wrapped_certificate_provider = C_NULL
-        function f(t)
-            if t.wrapped_certificate_provider != C_NULL
+        if managed_by_julia
+            # Only append a finalizer for this if the object is
+            # actually managed by Julia and not created and destroyed
+            # internally by libcaosdb.
+            function f(t)
                 ccall(
                     (:caosdb_connection_delete_certificate_provider, "libccaosdb"),
                     Cint,
@@ -73,8 +78,9 @@ mutable struct _CertificateProvider
                     Ref{_CertificateProvider}(t),
                 )
             end
+            finalizer(f, prov)
         end
-        finalizer(f, prov)
+        return prov
     end
 end
 
@@ -87,11 +93,10 @@ an connection-configuration object from a configuration.
 mutable struct _Configuration
     wrapped_connection_configuration::Ptr{Cvoid}
 
-    function _Configuration()
+    function _Configuration(managed_by_julia::Bool=false)
         config = new()
-        config.wrapped_connection_configuration = C_NULL
-        function f(t)
-            if t.wrapped_connection_configuration != C_NULL
+        if managed_by_julia
+            function f(t)
                 ccall(
                     (:caosdb_connection_delete_connection_configuration, "libccaosdb"),
                     Cint,
@@ -99,8 +104,9 @@ mutable struct _Configuration
                     Ref{_Configuration}(t),
                 )
             end
+            finalizer(f, config)
         end
-        finalizer(f, config)
+        return config
     end
 end
 
@@ -112,7 +118,7 @@ Return a `_CertificateProvider` for the pem certificate located at
 """
 function create_pem_file_certificate_provider(path::AbstractString)
 
-    cert_provider = Ref{_CertificateProvider}(_CertificateProvider())
+    cert_provider = Ref{_CertificateProvider}(_CertificateProvider(true))
 
     err_code = ccall(
         (:caosdb_connection_create_pem_file_certificate_provider, "libccaosdb"),
@@ -149,7 +155,7 @@ function create_tls_connection_configuration(
     provider::Ref{_CertificateProvider},
 )
 
-    config = Ref{_Configuration}(_Configuration())
+    config = Ref{_Configuration}(_Configuration(true))
 
     err_code = ccall(
         (:caosdb_connection_create_tls_connection_configuration, "libccaosdb"),
@@ -180,7 +186,7 @@ end
 
 function create_insecure_connection_configuration(host::AbstractString, port::Cint)
 
-    config = Ref{_Configuration}(_Configuration())
+    config = Ref{_Configuration}(_Configuration(true))
 
     err_code = ccall(
         (:caosdb_connection_create_insecure_connection_configuration, "libccaosdb"),
@@ -207,7 +213,7 @@ Return a connection based on the given `config`.
 """
 function create_connection(config::Ref{_Configuration})
 
-    connection = Ref{_Connection}(_Connection())
+    connection = Ref{_Connection}(_Connection(true))
 
     err_code = ccall(
         (:caosdb_connection_create_connection, "libccaosdb"),
@@ -227,6 +233,39 @@ function create_connection(config::Ref{_Configuration})
 
 end
 
+
+function get_connection(name::AbstractString="default")
+
+    connection = Ref{_Connection}(_Connection())
+
+    if name == "default"
+        err_code = ccall(
+            (:caosdb_connection_connection_manager_get_default_connection, "libccaosdb"),
+            Cint,
+            (Ref{_Connection},),
+            connection
+        )
+    else
+        err_code = ccall(
+            (:caosdb_connection_connection_manager_get_connection, "libccaosdb"),
+            Cint,
+            (Ref{_Connection}, Cstring),
+            connection,
+            name
+        )
+    end
+
+    if err_code != 0
+
+        @error "Creating connection '$name' failed with code $err_code"
+
+    end
+
+    return connection
+    
+end
+
+
 """
     get_version_info(con::Ref{_Connection})
 
@@ -235,7 +274,7 @@ to.
 """
 function get_version_info(con::Ref{_Connection})
 
-    info = Ref{CaosDB.Info._VersionInfo}(CaosDB.Info._VersionInfo())
+    info = Ref{CaosDB.Info._VersionInfo}(CaosDB.Info._VersionInfo(true))
 
     err_code = ccall(
         (:caosdb_connection_get_version_info, "libccaosdb"),
@@ -280,7 +319,7 @@ function print_version_info(con::Ref{_Connection})
 end
 
 """
-    function connect([;
+    function connect_manually([;
         host::AbstractString="",
         port_str::AbstractString="undefined",
         cacert::AbstractString="",
@@ -325,7 +364,7 @@ SSL certificate located at `cacert` with the given credentials.
   not defined, "caosdb" is used. The default value is "undefined"
   rather than an empty string to allow an empty password.
 """
-function connect(;
+function connect_manually(;
     host::AbstractString = "",
     port_str::AbstractString = "undefined",
     cacert::AbstractString = "",
@@ -376,4 +415,24 @@ function connect(;
 
 end
 
+"""
+    connect(name::AbstractString="default")
+
+Create a connection with name `name` from your configuration file,
+print the version of the server the connection is established to, and
+return the connection object.
+
+# Arguments
+
+- name::AbstractString="default": The name of the configuration
+  defined in your config json that will be used to connect to the
+  CaosDB server defined therein. Default value is "default".
+"""
+function connect(name::AbstractString="default") conn = get_connection(name)
+
+    print_version_info(conn)
+
+    return conn
+end
+
 end # Connection