diff --git a/applications/venv-manager/venv-manager/venv-manager.go b/applications/venv-manager/venv-manager/venv-manager.go
index 107ead5b3d5a08a85d3ebd3277da2011ba6722d2..8d9743e22052df5b0a8d7a1cfda76b154228747f 100644
--- a/applications/venv-manager/venv-manager/venv-manager.go
+++ b/applications/venv-manager/venv-manager/venv-manager.go
@@ -11,8 +11,7 @@ import (
 
 	configMgmtPb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/configurationmanagement"
 	corePb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/core"
-	networkelementPb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/networkelement"
-	pndPb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/pnd"
+	mnepb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/networkelement"
 	topologyPb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/topology"
 	"code.fbi.h-da.de/danet/gosdn/applications/venv-manager/containerlab"
 	link "code.fbi.h-da.de/danet/gosdn/applications/venv-manager/links"
@@ -296,12 +295,12 @@ func (v *VenvManager) parseTopologyDataIntoStructs(topologyData *topologyPb.GetT
 }
 
 func (v *VenvManager) loadNetworkElementModelPathsIntoGosdn(ctx context.Context, conn *grpc.ClientConn, nodes *[]node.Node) error {
-	pndService := pndPb.NewPndServiceClient(conn)
+	networkElementService := mnepb.NewNetworkElementServiceClient(conn)
 
 	paths := [2]string{"/lldp/config/system-description", "/system/state/"}
 	for _, path := range paths {
 		for _, node := range *nodes {
-			_, err := pndService.GetPath(ctx, &pndPb.GetPathRequest{Mneid: node.ID, Pid: v.pndID, Path: path})
+			_, err := networkElementService.GetPath(ctx, &mnepb.GetPathRequest{Mneid: node.ID, Pid: v.pndID, Path: path})
 			if err != nil {
 				return err
 			}
@@ -335,10 +334,10 @@ func (v *VenvManager) getAndAddMoreData(topologyData *topology.GoSdnTopology) (*
 		return nil, err
 	}
 
-	networkElementService := networkelementPb.NewNetworkElementServiceClient(conn)
+	networkElementService := mnepb.NewNetworkElementServiceClient(conn)
 
 	for iterator, node := range topologyData.Nodes {
-		getNetworkElementResponse, _ := networkElementService.Get(ctx, &networkelementPb.GetNetworkElementRequest{NetworkElementId: node.ID})
+		getNetworkElementResponse, _ := networkElementService.Get(ctx, &mnepb.GetNetworkElementRequest{NetworkElementId: node.ID})
 		if err != nil {
 			return nil, err
 		}
diff --git a/controller/controller.go b/controller/controller.go
index b8034063332d77db43fc8c6d57a430f932ca39d2..7120383243706eecc6a6e80c00c84520d517757b 100644
--- a/controller/controller.go
+++ b/controller/controller.go
@@ -299,18 +299,18 @@ func ensureDefaultRoleExists() error {
 			"/gosdn.rbac.RoleService/UpdateRoles",
 			"/gosdn.rbac.RoleService/DeletePermissionsForRole",
 			"/gosdn.rbac.RoleService/DeleteRoles",
-			"/gosdn.pnd.PndService/GetMne",
-			"/gosdn.pnd.PndService/GetFlattenedMne",
-			"/gosdn.pnd.PndService/GetFlattenedMneList",
-			"/gosdn.pnd.PndService/GetPath",
-			"/gosdn.pnd.PndService/GetChange",
-			"/gosdn.pnd.PndService/GetChangeList",
-			"/gosdn.pnd.PndService/SetMneList",
-			"/gosdn.pnd.PndService/SetChangeList",
-			"/gosdn.pnd.PndService/SetPathList",
-			"/gosdn.pnd.PndService/DeviceSchema",
-			"/gosdn.pnd.PndService/DeleteMne",
-			"/gosdn.pnd.PndService/SubscribePath",
+			"/gosdn.networkelement.NetworkElementService/GetMne",
+			"/gosdn.networkelement.NetworkElementService/GetFlattenedMne",
+			"/gosdn.networkelement.NetworkElementService/GetFlattenedMneList",
+			"/gosdn.networkelement.NetworkElementService/GetPath",
+			"/gosdn.networkelement.NetworkElementService/GetChange",
+			"/gosdn.networkelement.NetworkElementService/GetChangeList",
+			"/gosdn.networkelement.NetworkElementService/SetMneList",
+			"/gosdn.networkelement.NetworkElementService/SetChangeList",
+			"/gosdn.networkelement.NetworkElementService/SetPathList",
+			"/gosdn.networkelement.NetworkElementService/DeviceSchema",
+			"/gosdn.networkelement.NetworkElementService/DeleteMne",
+			"/gosdn.networkelement.NetworkElementService/SubscribePath",
 			"/gosdn.plugin_internal.PluginInternalService/AvailablePlugins",
 			"/gosdn.plugin_internal.PluginInternalService/GetPluginSchema",
 		}))
diff --git a/controller/interfaces/networkelement/networkElement.go b/controller/interfaces/networkelement/networkElement.go
index 2cf22d67756bf24804e6c04e01e52daabe86f5c0..54d1b6b65856e85e955442a16e57126f6fbc7e28 100644
--- a/controller/interfaces/networkelement/networkElement.go
+++ b/controller/interfaces/networkelement/networkElement.go
@@ -1,10 +1,15 @@
 package networkelement
 
 import (
+	"context"
+
 	"code.fbi.h-da.de/danet/gosdn/controller/conflict"
 	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/plugin"
 	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/transport"
 	"github.com/google/uuid"
+	gpb "github.com/openconfig/gnmi/proto/gnmi"
+	"github.com/openconfig/ygot/ygot"
+	log "github.com/sirupsen/logrus"
 	"google.golang.org/protobuf/proto"
 
 	tpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/transport"
@@ -59,3 +64,34 @@ type LoadedNetworkElement struct {
 
 	PndID string `json:"pnd_id" bson:"pnd_id"`
 }
+
+// EnsureIntendedConfigurationIsAppliedOnNetworkElement pushes the stored
+// configuration to a network element.
+// TODO: find a better place for this function
+func EnsureIntendedConfigurationIsAppliedOnNetworkElement(mne NetworkElement) error {
+	model, err := mne.GetModelAsFilteredCopy()
+	if err != nil {
+		return err
+	}
+
+	req := &gpb.SetRequest{}
+	path, err := ygot.StringToStructuredPath("/")
+	if err != nil {
+		return err
+	}
+
+	req.Update = []*gpb.Update{{
+		Path: path,
+		Val: &gpb.TypedValue{
+			Value: &gpb.TypedValue_JsonIetfVal{JsonIetfVal: []byte(model)},
+		},
+	}}
+
+	response, err := mne.Transport().CustomSet(context.Background(), req)
+	if err != nil {
+		log.Errorf("Failed to apply model of network element err=%+v, response=%+v", err, response)
+		return err
+	}
+
+	return nil
+}
diff --git a/controller/northbound/server/configurationmanagement.go b/controller/northbound/server/configurationmanagement.go
index 5ca7b5a2baa05fd9ef78b6209cf8e358677ee0e9..7ada43b6cfca8a789771eea6e9ae77135746f766 100644
--- a/controller/northbound/server/configurationmanagement.go
+++ b/controller/northbound/server/configurationmanagement.go
@@ -119,7 +119,7 @@ func (c ConfigurationManagementServer) ImportSDNConfig(ctx context.Context, requ
 		return nil, err
 	}
 
-	err = c.deleteAllElementsFromDatabase(pndUUID)
+	err = c.deleteAllElementsFromDatabase()
 	if err != nil {
 		return nil, err
 	}
@@ -134,8 +134,8 @@ func (c ConfigurationManagementServer) ImportSDNConfig(ctx context.Context, requ
 		Status:    cmpb.Status_STATUS_OK}, nil
 }
 
-func (c ConfigurationManagementServer) deleteAllElementsFromDatabase(pndUUID uuid.UUID) error {
-	if err := c.deleteNetworkElements(pndUUID); err != nil {
+func (c ConfigurationManagementServer) deleteAllElementsFromDatabase() error {
+	if err := c.deleteNetworkElements(); err != nil {
 		return err
 	}
 
@@ -187,7 +187,7 @@ func (c ConfigurationManagementServer) deleteTopology() error {
 	return nil
 }
 
-func (c ConfigurationManagementServer) deleteNetworkElements(pndUUID uuid.UUID) error {
+func (c ConfigurationManagementServer) deleteNetworkElements() error {
 	networkElements, err := c.mneService.GetAll()
 	if err != nil {
 		return err
@@ -307,7 +307,7 @@ func (c ConfigurationManagementServer) createNetworkElements(sdnConfig *loadedSD
 			return err
 		}
 
-		_, err = nucleus.NewNetworkElement(
+		createdNetworkElement, err := nucleus.NewNetworkElement(
 			inputNetworkElement.Name,
 			uuid.MustParse(inputNetworkElement.ID),
 			&transportOption,
@@ -319,15 +319,24 @@ func (c ConfigurationManagementServer) createNetworkElements(sdnConfig *loadedSD
 			return err
 		}
 
-		networkelement, err := c.mneService.Get(store.Query{ID: uuid.MustParse(inputNetworkElement.ID)})
+		if err := c.mneService.Add(createdNetworkElement); err != nil {
+			return err
+		}
+
+		err = c.mneService.UpdateModel(createdNetworkElement.ID(), inputNetworkElement.Model)
 		if err != nil {
 			return err
 		}
 
-		err = c.mneService.UpdateModel(networkelement.ID(), inputNetworkElement.Model)
+		networkElement, err := c.mneService.Get(store.Query{ID: uuid.MustParse(inputNetworkElement.ID)})
 		if err != nil {
 			return err
 		}
+
+		if err := networkelement.EnsureIntendedConfigurationIsAppliedOnNetworkElement(networkElement); err != nil {
+			return err
+		}
+
 	}
 	return nil
 }
diff --git a/controller/northbound/server/networkElement.go b/controller/northbound/server/networkElement.go
index 0bdc68832fbaee2032273057e5291bfb46d7be3f..edb6e7cbadbca7988ceff497f0c0b4fe5c5e23a7 100644
--- a/controller/northbound/server/networkElement.go
+++ b/controller/northbound/server/networkElement.go
@@ -192,7 +192,12 @@ func (n *NetworkElementServer) Update(ctx context.Context, request *mnepb.Update
 		return nil, err
 	}
 
-	err = n.ensureIntendedConfigurationIsAppliedOnNetworkElement(mneID)
+	networkElement, err := n.mneService.Get(store.Query{ID: mneID})
+	if err != nil {
+		return nil, err
+	}
+
+	err = networkelement.EnsureIntendedConfigurationIsAppliedOnNetworkElement(networkElement)
 	if err != nil {
 		return &mnepb.UpdateNetworkElementResponse{
 			Timestamp: time.Now().UnixNano(),
@@ -206,41 +211,6 @@ func (n *NetworkElementServer) Update(ctx context.Context, request *mnepb.Update
 	}, nil
 }
 
-func (n *NetworkElementServer) ensureIntendedConfigurationIsAppliedOnNetworkElement(mneID uuid.UUID) error {
-	mne, err := n.mneService.Get(store.Query{
-		ID: mneID,
-	})
-	if err != nil {
-		return err
-	}
-
-	model, err := mne.GetModelAsString()
-	if err != nil {
-		return err
-	}
-
-	req := &gpb.SetRequest{}
-	path, err := ygot.StringToStructuredPath("/")
-	if err != nil {
-		return err
-	}
-
-	req.Update = []*gpb.Update{{
-		Path: path,
-		Val: &gpb.TypedValue{
-			Value: &gpb.TypedValue_JsonIetfVal{JsonIetfVal: []byte(model)},
-		},
-	}}
-
-	response, err := mne.Transport().CustomSet(context.Background(), req)
-	if err != nil {
-		log.Errorf("Failed to apply model of network element err=%+v, response=%+v", err, response)
-		return err
-	}
-
-	return nil
-}
-
 // GetMne gets a specific mne.
 func (n *NetworkElementServer) GetMne(ctx context.Context, request *mnepb.GetMneRequest) (*mnepb.GetMneResponse, error) {
 	labels := prometheus.Labels{"service": "mne", "rpc": "get"}