diff --git a/controller/controller.go b/controller/controller.go
index 7eca04715b4fe5685a4173881171e3b3cc1e0fb6..5dc392461584f6b9e7b04f36d6b3407c896a46ae 100644
--- a/controller/controller.go
+++ b/controller/controller.go
@@ -99,7 +99,10 @@ func initialize() error {
 		return err
 	}
 
-	db := database.GetDatabaseConnection()
+	db, err := database.GetDatabaseConnection()
+	if err != nil {
+		return err
+	}
 
 	nodeService := nodes.NewNodeService(nodes.NewNodeStore(db), eventService)
 	portService := ports.NewPortService(ports.NewPortStore(db), eventService)
diff --git a/controller/nucleus/database/mongo-connection.go b/controller/nucleus/database/mongo-connection.go
index 43b3a5132779fa2717b11f9c7e4f2301df3de257..0482d30031b0cb93d42d704577bfa5beb25872be 100644
--- a/controller/nucleus/database/mongo-connection.go
+++ b/controller/nucleus/database/mongo-connection.go
@@ -3,7 +3,6 @@ package database
 import (
 	"context"
 	"fmt"
-	"log"
 	"time"
 
 	"code.fbi.h-da.de/danet/gosdn/controller/config"
@@ -18,6 +17,9 @@ const (
 	timeout = 5 * time.Second
 	// DatabaseName is the name of the mongoDB database used.
 	DatabaseName = "gosdn"
+
+	connectionRetries = 60
+	connectionTimeout = time.Second * 2
 )
 
 // Connect Retrieves a client to the MongoDB.
@@ -28,15 +30,13 @@ func Connect() (*mongo.Database, error) {
 
 	client, err := mongo.Connect(ctx, options.Client().ApplyURI(mongoConnection))
 	if err != nil {
-		log.Printf("Failed to create client: %v", err)
-		return nil, err
+		return nil, fmt.Errorf("failed to create client: %w", err)
 	}
 
 	// Force a connection to verify our connection string
 	err = client.Ping(ctx, nil)
 	if err != nil {
-		log.Printf("Failed to connect to database: %v\n", err)
-		return nil, err
+		return nil, fmt.Errorf("failed to connect to database: %w", err)
 	}
 
 	db := client.Database(DatabaseName)
@@ -47,18 +47,25 @@ func Connect() (*mongo.Database, error) {
 	return db, nil
 }
 
-func GetDatabaseConnection() *mongo.Database {
+func GetDatabaseConnection() (*mongo.Database, error) {
 	var db *mongo.Database
 
 	storeMode := store.GetStoreMode()
-	if storeMode == store.Database {
-		db, err := Connect()
-		if err != nil {
-			logrus.Infof("Could not connect to database")
+
+	switch storeMode {
+	case store.Database:
+		for i := 0; i < connectionRetries; i++ {
+			db, err := Connect()
+			if err == nil {
+				return db, nil
+			}
+			logrus.Errorf("could not connect to mongo with error: %s. Retrying in 2 seconds.", err.Error())
+			time.Sleep(connectionTimeout)
 		}
 
-		return db
-	}
+		return nil, fmt.Errorf("could not connect to mongo after %d retries", connectionRetries)
 
-	return db
+	default:
+		return db, nil
+	}
 }
diff --git a/controller/nucleus/databaseNetworkElementStore.go b/controller/nucleus/databaseNetworkElementStore.go
index 70dd9a7a1f83189d324cf033989a69f4a044949e..a5bc5cb0746246b4b53ea472f20ea635a2577110 100644
--- a/controller/nucleus/databaseNetworkElementStore.go
+++ b/controller/nucleus/databaseNetworkElementStore.go
@@ -122,7 +122,7 @@ func (s *DatabaseNetworkElementStore) Add(ctx context.Context, networkElementToA
 func (s *DatabaseNetworkElementStore) Update(ctx context.Context, networkElementToUpdate networkelement.NetworkElement) (err error) {
 	var updatedLoadedNetworkElement networkelement.LoadedNetworkElement
 
-	db, err := database.Connect()
+	db, err := database.GetDatabaseConnection()
 	if err != nil {
 		return err
 	}
diff --git a/controller/rbac/databaseUserStore.go b/controller/rbac/databaseUserStore.go
index 8f4b7c93b3d796cbf096a49490c8eec989d64379..cfa592de9761195c56f1c7e8185160d286213acc 100644
--- a/controller/rbac/databaseUserStore.go
+++ b/controller/rbac/databaseUserStore.go
@@ -134,7 +134,7 @@ func (s *DatabaseUserStore) GetAll(ctx context.Context) (loadedUsers []rbac.Load
 func (s *DatabaseUserStore) Update(ctx context.Context, userToUpdate rbac.User) (err error) {
 	var updatedLoadedUser rbac.LoadedUser
 
-	db, err := database.Connect()
+	db, err := database.GetDatabaseConnection()
 	if err != nil {
 		return err
 	}
diff --git a/controller/topology/nodes/databaseNodeStore.go b/controller/topology/nodes/databaseNodeStore.go
index 41271c9e0023ddffa6d033b0f483344479f8f6d3..b0389082c7dcd44055f3c160c834ddea9bb49a4c 100644
--- a/controller/topology/nodes/databaseNodeStore.go
+++ b/controller/topology/nodes/databaseNodeStore.go
@@ -133,7 +133,7 @@ func (s *DatabaseNodeStore) Add(ctx context.Context, node Node) (err error) {
 func (s *DatabaseNodeStore) Update(ctx context.Context, node Node) (err error) {
 	var updatedLoadedNodes Node
 
-	db, err := database.Connect()
+	db, err := database.GetDatabaseConnection()
 	if err != nil {
 		return err
 	}