diff --git a/controller/interfaces/networkdomain/pnd.go b/controller/interfaces/networkdomain/pnd.go
index 8a943abe143c49e54a10aeffeec2531247a34141..16692e62155e79bab31a3e2e98c13d62bbfb83c9 100644
--- a/controller/interfaces/networkdomain/pnd.go
+++ b/controller/interfaces/networkdomain/pnd.go
@@ -16,7 +16,7 @@ type NetworkDomain interface {
 	Destroy() error
 	AddSbi(s southbound.SouthboundInterface) error
 	RemoveSbi(uuid.UUID) error
-	AddNetworkElement(name string, opts *tpb.TransportOption, sid uuid.UUID, networkElement uuid.UUID) (uuid.UUID, error)
+	AddNetworkElement(name string, opts *tpb.TransportOption, sid uuid.UUID, optionalNetworkElementID ...uuid.UUID) (uuid.UUID, error)
 	GetNetworkElement(identifier string) (networkelement.NetworkElement, error)
 	RemoveNetworkElement(uuid.UUID) error
 	UpdateNetworkElement(networkelement.NetworkElement, string) error
diff --git a/controller/mocks/NetworkDomain.go b/controller/mocks/NetworkDomain.go
index 43f249c7ce8868305bdebe3149561cfd2a4ac67c..5b273b2cb032527a4e2980d3fddf5ffd928d0689 100644
--- a/controller/mocks/NetworkDomain.go
+++ b/controller/mocks/NetworkDomain.go
@@ -24,13 +24,20 @@ type NetworkDomain struct {
 	mock.Mock
 }
 
-// AddNetworkElement provides a mock function with given fields: name, opts, sid, networkElement
-func (_m *NetworkDomain) AddNetworkElement(name string, opts *transport.TransportOption, sid uuid.UUID, networkElement uuid.UUID) (uuid.UUID, error) {
-	ret := _m.Called(name, opts, sid, networkElement)
+// AddNetworkElement provides a mock function with given fields: name, opts, sid, optionalNetworkElementID
+func (_m *NetworkDomain) AddNetworkElement(name string, opts *transport.TransportOption, sid uuid.UUID, optionalNetworkElementID ...uuid.UUID) (uuid.UUID, error) {
+	_va := make([]interface{}, len(optionalNetworkElementID))
+	for _i := range optionalNetworkElementID {
+		_va[_i] = optionalNetworkElementID[_i]
+	}
+	var _ca []interface{}
+	_ca = append(_ca, name, opts, sid)
+	_ca = append(_ca, _va...)
+	ret := _m.Called(_ca...)
 
 	var r0 uuid.UUID
-	if rf, ok := ret.Get(0).(func(string, *transport.TransportOption, uuid.UUID, uuid.UUID) uuid.UUID); ok {
-		r0 = rf(name, opts, sid, networkElement)
+	if rf, ok := ret.Get(0).(func(string, *transport.TransportOption, uuid.UUID, ...uuid.UUID) uuid.UUID); ok {
+		r0 = rf(name, opts, sid, optionalNetworkElementID...)
 	} else {
 		if ret.Get(0) != nil {
 			r0 = ret.Get(0).(uuid.UUID)
@@ -38,8 +45,8 @@ func (_m *NetworkDomain) AddNetworkElement(name string, opts *transport.Transpor
 	}
 
 	var r1 error
-	if rf, ok := ret.Get(1).(func(string, *transport.TransportOption, uuid.UUID, uuid.UUID) error); ok {
-		r1 = rf(name, opts, sid, networkElement)
+	if rf, ok := ret.Get(1).(func(string, *transport.TransportOption, uuid.UUID, ...uuid.UUID) error); ok {
+		r1 = rf(name, opts, sid, optionalNetworkElementID...)
 	} else {
 		r1 = ret.Error(1)
 	}
diff --git a/controller/nucleus/principalNetworkDomain.go b/controller/nucleus/principalNetworkDomain.go
index 4e7d5d5068cc14fd1d79f829c301e6afd2357aa2..b66918bd01e086928c863fd593c0ba4cf84a3fc1 100644
--- a/controller/nucleus/principalNetworkDomain.go
+++ b/controller/nucleus/principalNetworkDomain.go
@@ -246,7 +246,12 @@ func (pnd *pndImplementation) RemoveSbi(sid uuid.UUID) error {
 }
 
 // AddNetworkElement adds a new network element to the PND. The UUID for the networkElementID is optional and should normally be empty
-func (pnd *pndImplementation) AddNetworkElement(name string, opt *tpb.TransportOption, sid uuid.UUID, networkElementID uuid.UUID) (uuid.UUID, error) {
+func (pnd *pndImplementation) AddNetworkElement(name string, opt *tpb.TransportOption, sid uuid.UUID, optionalNetworkElementID ...uuid.UUID) (uuid.UUID, error) {
+	networkElementID := uuid.Nil
+	if len(optionalNetworkElementID) > 0 {
+		networkElementID = optionalNetworkElementID[0]
+	}
+
 	labels := prometheus.Labels{"type": opt.Type.String()}
 	start := metrics.StartHook(labels, networkElementCreationsTotal)
 	defer metrics.FinishHook(labels, start, networkElementCreationDurationSecondsTotal, networkElementCreationDurationSeconds)