diff --git a/database/database.go b/database/database.go
index bd8dfd6dfed5ecfb1f1b5baff169380769711f1f..8874bdc542416e1807793fad8799646de31a39b9 100644
--- a/database/database.go
+++ b/database/database.go
@@ -25,7 +25,6 @@ func NewDatabaseClient(uri, username, password string, encrypted bool) Database
 	return Database{
 		driver: driver,
 	}
-
 }
 
 //createDriver creates a neo4j.Driver instance
@@ -86,7 +85,6 @@ func storePndTxFunc(name, description string, interfaces []string) neo4j.Transac
 		}
 
 		if result.Next() {
-			log.Info(result.Consume())
 			return result.Record().GetByIndex(0), nil
 		}
 
@@ -104,6 +102,7 @@ func (d Database) StorePND(pnd *PND) neo4j.Node {
 		log.Info(err)
 	}
 
+	log.Info("created/updated PND with id: ", result.(neo4j.Node).Id())
 	return result.(neo4j.Node)
 }
 
@@ -164,7 +163,6 @@ func (d Database) StoreNodes(json string) []neo4j.Node {
 	//TODO: remove this after testing and add own gRPC call for it
 	testPND := PND{name: "test_PND", description: "very interesting", interfaces: []string{"TAPI", "RESTCONF"}}
 	pnd := d.StorePND(&testPND).Id()
-	log.Info(pnd)
 
 	session := createSession(d.driver, true)
 	defer session.Close()
@@ -174,6 +172,7 @@ func (d Database) StoreNodes(json string) []neo4j.Node {
 		log.Info(err)
 	}
 
+	log.Info("added/updated devices (count): ", len(result.([]neo4j.Node)))
 	return result.([]neo4j.Node)
 }
 
@@ -229,62 +228,90 @@ func (d Database) StoreLinks(json string) []neo4j.Relationship {
 		log.Info(err)
 	}
 
+	log.Info("added/updated links (count): ", len(result.([]neo4j.Relationship)))
+
 	return result.([]neo4j.Relationship)
 }
 
-//StoreNodeEdgePoints stores the given node edge points (interfaces)
-func (d Database) StoreNodeEdgePoints(json string) {
-	session := createSession(d.driver, true)
-	defer session.Close()
+func storeNodeEdgePointsTxFunc(json string) neo4j.TransactionWork {
+	return func(tx neo4j.Transaction) (interface{}, error) {
+		query :=
+			`
+			WITH apoc.convert.fromJsonMap($stringToAdd)
+			AS value
+			UNWIND value.data as i
+			MERGE (interface:Interface {id: i.object_id})
+			ON CREATE SET interface.object_type =i.object_type,
+			interface.localId = i.object_data.` + "`tapi-object-data`.name[0].value," + `
+			interface.location = i.object_data.` + "`tapi-object-data`.name[1].value," + `
+			interface.` + "`containing-node` = i.object_data.`tapi-object-data`.`containing-node`" + `
+			RETURN count(interface)
+			`
 
-	query :=
-		`
-		WITH apoc.convert.fromJsonMap($stringToAdd)
-		AS value
-		UNWIND value.data as i
-		MERGE (interface:Interface {id: i.object_id})
-		ON CREATE SET interface.object_type =i.object_type,
-		interface.localId = i.object_data.` + "`tapi-object-data`.name[0].value," + `
-		interface.location = i.object_data.` + "`tapi-object-data`.name[1].value," + `
-		interface.` + "`containing-node` = i.object_data.`tapi-object-data`.`containing-node`"
-
-	_, err := session.Run(
-		query, map[string]interface{}{
+		result, err := tx.Run(query, map[string]interface{}{
 			"stringToAdd": json,
 		})
 
-	if err != nil {
-		log.Info("failed storing NodeEdgePoints into database:", err)
+		if err != nil {
+			return nil, err
+		}
+
+		if result.Next() {
+			return result.Record().GetByIndex(0), nil
+		}
+
+		return nil, errors.New("expected a record")
 	}
+}
+
+//TODO: currently this goes over each and every device and interface and adds
+//		a interface_of relation. -> do it only for the newly added interfaces
+//		returns count of created relations
+func storeNodeEdgePointsRelationTxFunc() neo4j.TransactionWork {
+	return func(tx neo4j.Transaction) (interface{}, error) {
+		query :=
+			`
+			MATCH (d:Device), (i:Interface)
+			WHERE d.id = i.` + "`containing-node`" + `
+			MERGE (i)-[r:INTERFACE_OF]->(d)
+			RETURN count(r)
+			`
 
-	setNodeNodeEdgePointsRelation(session)
+		result, err := tx.Run(query, nil)
 
-	log.Info("successfully added NodeEdgePoints into database")
+		if err != nil {
+			return nil, err
+		}
 
-}
+		if result.Next() {
+			return result.Record().GetByIndex(0), nil
+		}
 
-//StoreConnections stores relations between nodes
-func (d Database) StoreConnections(json string) {}
+		return nil, errors.New("expected a record")
+	}
+}
 
-//setNodeNodeEdgePointsRelation creates the database relations between "nodes" and "node edge points"
-func setNodeNodeEdgePointsRelation(session neo4j.Session) {
-	query :=
-		`
-		MATCH (d:Device), (i:Interface)
-		WHERE d.id = i.` + "`containing-node`" + `
-		MERGE (i)-[:INTERFACE_OF]->(d)
-		`
+//StoreNodeEdgePoints stores the given node edge points (interfaces)
+func (d Database) StoreNodeEdgePoints(json string) {
+	session := createSession(d.driver, true)
+	defer session.Close()
 
-	_, err := session.Run(
-		query, map[string]interface{}{})
+	result, err := session.WriteTransaction(storeNodeEdgePointsTxFunc(json))
+	if err != nil {
+		log.Info(err)
+	}
 
+	_, err = session.WriteTransaction(storeNodeEdgePointsRelationTxFunc())
 	if err != nil {
-		log.Info("failed storing NodeNodeEdgePointsRelation into database:", err)
+		log.Info(err)
 	}
 
-	log.Info("successfully stored NodeNodeEdgePointsRelation into database")
+	log.Info("added/updated nodeEdgePoints (count): ", result)
 }
 
+//StoreConnections stores relations between nodes
+func (d Database) StoreConnections(json string) {}
+
 //StoreTopology creates a new network topology node. Can also create a relation
 //the new node and a existing one if desired
 func StoreTopology() {}