diff --git a/controller/api/managedNetworkElement.go b/controller/api/managedNetworkElement.go
index f9b5eb57a3e4705f36e9303b09a3ca04c813fd36..7719016733524d95994c09ae3c84566187e9cb87 100644
--- a/controller/api/managedNetworkElement.go
+++ b/controller/api/managedNetworkElement.go
@@ -6,6 +6,7 @@ import (
 	"io"
 	"time"
 
+	"code.fbi.h-da.de/danet/gosdn/api/go/gosdn/conflict"
 	mnepb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/networkelement"
 	pipb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/plugin-internal"
 	spb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/southbound"
@@ -250,3 +251,29 @@ func DeleteNetworkElement(ctx context.Context, addr, pid, mneid string) (*mnepb.
 
 	return client.Delete(ctx, req)
 }
+
+// UpdateNetworkElement changes the metadata of the network element which is stored in the controller storage.
+// Correct resource version needs to be provided to allow a change of the object in the storage.
+func UpdateNetworkElement(ctx context.Context, addr, mneid, updatedName, updatedTransportAddress, updatedPid string, resourceVersion *conflict.Metadata) (*mnepb.UpdateNetworkElementResponse, error) {
+	client, err := nbi.NetworkElementClient(addr, dialOptions...)
+	if err != nil {
+		return nil, err
+	}
+
+	// Note: Consider changing what to update. Some values are quite iffy to change.
+	req := &mnepb.UpdateNetworkElementRequest{
+		Timestamp: time.Now().UnixNano(),
+		NetworkElement: &mnepb.ManagedNetworkElement{
+			Id:               mneid,
+			Name:             updatedName,
+			TransportAddress: updatedTransportAddress,
+			TransportOption: &tpb.TransportOption{
+				Address: updatedTransportAddress,
+			},
+			Metadata:      resourceVersion,
+			AssociatedPnd: updatedPid,
+		},
+	}
+
+	return client.Update(ctx, req)
+}