diff --git a/controller/nucleus/databaseNetworkElementStore.go b/controller/nucleus/databaseNetworkElementStore.go
index be64919a65454fda609a157ca81895bf7d6c861d..ac23cbad7d37ffe739d73f5053831d8856c0762c 100644
--- a/controller/nucleus/databaseNetworkElementStore.go
+++ b/controller/nucleus/databaseNetworkElementStore.go
@@ -6,6 +6,7 @@ import (
 	"code.fbi.h-da.de/danet/gosdn/controller/customerrs"
 	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkelement"
 	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/database"
+	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/model"
 	"code.fbi.h-da.de/danet/gosdn/controller/store"
 	"go.mongodb.org/mongo-driver/bson"
 	"go.mongodb.org/mongo-driver/bson/primitive"
@@ -205,7 +206,7 @@ func (s *DatabaseNetworkElementStore) Update(networkElementToUpdate networkeleme
 		// Important: You must pass sessCtx as the Context parameter to the operations for them to be executed in the
 		// transaction.
 
-		u, _ := networkElementToUpdate.(*CommonNetworkElement)
+		u, _ := networkElementToUpdate.(*model.CommonNetworkElement)
 		u.Metadata.ResourceVersion = u.Metadata.ResourceVersion + 1
 
 		update := bson.D{primitive.E{Key: "$set", Value: u}}
diff --git a/controller/nucleus/initialise_test.go b/controller/nucleus/initialise_test.go
index ac99f917528780d9baa85b0f2ddab2cb36185ade..7b98e690a2c1d65a48ad349ea03d87fcc92d209e 100644
--- a/controller/nucleus/initialise_test.go
+++ b/controller/nucleus/initialise_test.go
@@ -12,6 +12,7 @@ import (
 	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/plugin"
 
 	"code.fbi.h-da.de/danet/gosdn/controller/mocks"
+	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/model"
 	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/util/proto"
 	"code.fbi.h-da.de/danet/gosdn/controller/test"
 	"code.fbi.h-da.de/danet/gosdn/forks/goarista/gnmi"
@@ -82,8 +83,8 @@ func targetRunner() {
 	}
 }
 
-func mockTransport(t testing.TB) Gnmi {
-	return Gnmi{
+func mockTransport(t testing.TB) model.Gnmi {
+	return model.Gnmi{
 		SetNode:  mockPlugin(t).SetNode,
 		RespChan: make(chan *gpb.SubscribeResponse),
 		Options:  newGnmiTransportOptions(),
diff --git a/controller/nucleus/change.go b/controller/nucleus/model/change.go
similarity index 99%
rename from controller/nucleus/change.go
rename to controller/nucleus/model/change.go
index 0cdecdcc291ccaae1447fd7a1aeb47546a76db53..41f548287ebc359a12fbf26d9a4668c5ca386664 100644
--- a/controller/nucleus/change.go
+++ b/controller/nucleus/model/change.go
@@ -1,4 +1,4 @@
-package nucleus
+package model
 
 import (
 	"context"
diff --git a/controller/nucleus/change_test.go b/controller/nucleus/model/change_test.go
similarity index 99%
rename from controller/nucleus/change_test.go
rename to controller/nucleus/model/change_test.go
index 994760ffb952d2dffcf6e123dcf8498dea18db6d..fc7e8df1ba0454b1d6817d463a9c1f50693a56ee 100644
--- a/controller/nucleus/change_test.go
+++ b/controller/nucleus/model/change_test.go
@@ -1,4 +1,4 @@
-package nucleus
+package model
 
 // import (
 // 	"context"
diff --git a/controller/nucleus/gnmi_transport.go b/controller/nucleus/model/gnmi_transport.go
similarity index 99%
rename from controller/nucleus/gnmi_transport.go
rename to controller/nucleus/model/gnmi_transport.go
index a51770d764f2abd12b28941000cacd2860c9e8fe..5676c6a501ba3629d46defb51652e503d73e7205 100644
--- a/controller/nucleus/gnmi_transport.go
+++ b/controller/nucleus/model/gnmi_transport.go
@@ -1,4 +1,4 @@
-package nucleus
+package model
 
 import (
 	"context"
diff --git a/controller/nucleus/gnmi_transport_test.go b/controller/nucleus/model/gnmi_transport_test.go
similarity index 82%
rename from controller/nucleus/gnmi_transport_test.go
rename to controller/nucleus/model/gnmi_transport_test.go
index e7230b1af6932ce4d135e5ce2ac34f98fad69374..afe276e7b4a563a511d97070093a43838dd5158a 100644
--- a/controller/nucleus/gnmi_transport_test.go
+++ b/controller/nucleus/model/gnmi_transport_test.go
@@ -1,4 +1,4 @@
-package nucleus
+package model
 
 import (
 	"context"
@@ -7,7 +7,9 @@ import (
 	"testing"
 
 	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/change"
+	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/plugin"
 	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/types"
+	"code.fbi.h-da.de/danet/gosdn/controller/test"
 
 	mnepb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/networkelement"
 	tpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/transport"
@@ -16,12 +18,79 @@ import (
 	"code.fbi.h-da.de/danet/gosdn/forks/goarista/gnmi"
 	openconfig "code.fbi.h-da.de/danet/gosdn/models/generated/openconfig"
 	pluginSDK "code.fbi.h-da.de/danet/gosdn/plugins/sdk"
+	"github.com/google/uuid"
 	gpb "github.com/openconfig/gnmi/proto/gnmi"
 	"github.com/openconfig/ygot/ygot"
+	log "github.com/sirupsen/logrus"
 	"github.com/stretchr/testify/mock"
+	pb "google.golang.org/protobuf/proto"
 )
 
-// testSetupGnmi bootstraps tests for gnmi transport.
+var gnmiConfig *gnmi.Config
+var startGnmiTarget chan string
+var stopGnmiTarget chan bool
+
+var mockContext = mock.MatchedBy(func(ctx context.Context) bool { return true })
+
+var defaultPluginID = uuid.MustParse("b70c8425-68c7-4d4b-bb5e-5586572bd64b")
+
+var gnmiMessages = map[string]pb.Message{
+	"../test/proto/cap-resp-arista-ceos":                  &gpb.CapabilityResponse{},
+	"../test/proto/req-full-node":                         &gpb.GetRequest{},
+	"../test/proto/req-full-node-arista-ceos":             &gpb.GetRequest{},
+	"../test/proto/req-interfaces-arista-ceos":            &gpb.GetRequest{},
+	"../test/proto/req-interfaces-interface-arista-ceos":  &gpb.GetRequest{},
+	"../test/proto/req-interfaces-wildcard":               &gpb.GetRequest{},
+	"../test/proto/resp-full-node":                        &gpb.GetResponse{},
+	"../test/proto/resp-full-node-arista-ceos":            &gpb.GetResponse{},
+	"../test/proto/resp-interfaces-arista-ceos":           &gpb.GetResponse{},
+	"../test/proto/resp-interfaces-interface-arista-ceos": &gpb.GetResponse{},
+	"../test/proto/resp-interfaces-wildcard":              &gpb.GetResponse{},
+	"../test/proto/resp-set-system-config-hostname":       &gpb.SetResponse{},
+}
+
+func mockTransport(t testing.TB) Gnmi {
+	return Gnmi{
+		SetNode:  mockPlugin(t).SetNode,
+		RespChan: make(chan *gpb.SubscribeResponse),
+		Options:  newGnmiTransportOptions(),
+		client:   &mocks.GNMIClient{},
+		config:   gnmiConfig,
+	}
+}
+
+func mockPlugin(t testing.TB) plugin.Plugin {
+	mockPlugin := &mocks.Plugin{}
+	mockPlugin.On("ID").Return(defaultPluginID)
+	mockPlugin.On("Unmarshal", mock.Anything, mock.Anything).Return(nil)
+	mockPlugin.On("Model", mock.Anything).Return([]byte(
+		"{\n\t\"Acl\": null,\n\t\"Bfd\": null,\n\t\"Components\": null,\n\t\"Interfaces\": null,\n\t\"Keychains\": null,\n\t\"Lldp\": null,\n\t\"Messages\": null,\n\t\"NetworkInstances\": null,\n\t\"RoutingPolicy\": null,\n\t\"System\": null\n}"),
+		nil,
+	)
+	return mockPlugin
+}
+
+func newGnmiTransportOptions() *tpb.TransportOption {
+	return &tpb.TransportOption{
+		Address:  "localhost:13371",
+		Username: "test",
+		Password: "test",
+		TransportOption: &tpb.TransportOption_GnmiTransportOption{
+			GnmiTransportOption: &tpb.GnmiTransportOption{},
+		},
+	}
+}
+
+func targetRunner() {
+	for {
+		addr := <-startGnmiTarget
+		if err := test.GnmiTarget(stopGnmiTarget, addr); err != nil {
+			log.Fatal(err)
+		}
+	}
+}
+
+// TestSetupGnmi bootstraps tests for gnmi transport.
 func testSetupGnmi() {
 	// TODO: Set sane defaults
 	gnmiConfig = &gnmi.Config{
diff --git a/controller/nucleus/networkElement.go b/controller/nucleus/model/networkElement.go
similarity index 99%
rename from controller/nucleus/networkElement.go
rename to controller/nucleus/model/networkElement.go
index 365595301dd1e3e983c8790d1b5396f4884314e0..5ad9b6054c85b0d7451c2575a487eb02591a858c 100644
--- a/controller/nucleus/networkElement.go
+++ b/controller/nucleus/model/networkElement.go
@@ -1,4 +1,4 @@
-package nucleus
+package model
 
 import (
 	"encoding/json"
diff --git a/controller/nucleus/networkElement_test.go b/controller/nucleus/model/networkElement_test.go
similarity index 99%
rename from controller/nucleus/networkElement_test.go
rename to controller/nucleus/model/networkElement_test.go
index 6294cf07da1784ed6ab591113f56e27b11098f48..5e18ab37fa5da70f218c652497a72a4a9f62d200 100644
--- a/controller/nucleus/networkElement_test.go
+++ b/controller/nucleus/model/networkElement_test.go
@@ -1,4 +1,4 @@
-package nucleus
+package model
 
 // import (
 // 	"reflect"
diff --git a/controller/nucleus/plugin.go b/controller/nucleus/model/plugin.go
similarity index 99%
rename from controller/nucleus/plugin.go
rename to controller/nucleus/model/plugin.go
index 032c30ed4136f8741ff6a13de47b19f5a4a3275c..2fe4e0eaf121c017dd25549550b2315928fa5293 100644
--- a/controller/nucleus/plugin.go
+++ b/controller/nucleus/model/plugin.go
@@ -1,4 +1,4 @@
-package nucleus
+package model
 
 import (
 	"encoding/json"
diff --git a/controller/nucleus/plugin_test.go b/controller/nucleus/model/plugin_test.go
similarity index 99%
rename from controller/nucleus/plugin_test.go
rename to controller/nucleus/model/plugin_test.go
index 5a4619ae53a7343f0492fd2db17bd40ab358fbfe..2887f91d23f206757b16980164e678c3e0ee3240 100644
--- a/controller/nucleus/plugin_test.go
+++ b/controller/nucleus/model/plugin_test.go
@@ -1,4 +1,4 @@
-package nucleus
+package model
 
 //import (
 //	"testing"
diff --git a/controller/nucleus/principalNetworkDomain.go b/controller/nucleus/model/principalNetworkDomain.go
similarity index 99%
rename from controller/nucleus/principalNetworkDomain.go
rename to controller/nucleus/model/principalNetworkDomain.go
index b9577dead6f7814154b800dbb85445df35163e72..dbb3291079e3c342b2e4dd30094d7e2a1f4501c5 100644
--- a/controller/nucleus/principalNetworkDomain.go
+++ b/controller/nucleus/model/principalNetworkDomain.go
@@ -1,4 +1,4 @@
-package nucleus
+package model
 
 import (
 	"go.mongodb.org/mongo-driver/bson"
diff --git a/controller/nucleus/principalNetworkDomain_test.go b/controller/nucleus/model/principalNetworkDomain_test.go
similarity index 99%
rename from controller/nucleus/principalNetworkDomain_test.go
rename to controller/nucleus/model/principalNetworkDomain_test.go
index 0ce34a5a00c51b035fe59c28933f39b35700734d..6b9f4f5e396ccf93954599afb68588c282f7065e 100644
--- a/controller/nucleus/principalNetworkDomain_test.go
+++ b/controller/nucleus/model/principalNetworkDomain_test.go
@@ -1,4 +1,4 @@
-package nucleus
+package model
 
 // import (
 // 	"io"
diff --git a/controller/nucleus/restconf_transport.go b/controller/nucleus/model/restconf_transport.go
similarity index 98%
rename from controller/nucleus/restconf_transport.go
rename to controller/nucleus/model/restconf_transport.go
index 42a6b44f8bff98a6be023ce49540623ad3b7d0cb..84fd34808c22b9b57653cbc797f515574c070c55 100644
--- a/controller/nucleus/restconf_transport.go
+++ b/controller/nucleus/model/restconf_transport.go
@@ -1,4 +1,4 @@
-package nucleus
+package model
 
 import (
 	"context"
diff --git a/controller/nucleus/restconf_transport_test.go b/controller/nucleus/model/restconf_transport_test.go
similarity index 99%
rename from controller/nucleus/restconf_transport_test.go
rename to controller/nucleus/model/restconf_transport_test.go
index e722632a7e062d3aaacec802611df7861e0fde43..c134ba1c50b7171297cf02ea5d3681cd026e4516 100644
--- a/controller/nucleus/restconf_transport_test.go
+++ b/controller/nucleus/model/restconf_transport_test.go
@@ -1,4 +1,4 @@
-package nucleus
+package model
 
 import (
 	"context"
diff --git a/controller/nucleus/transport.go b/controller/nucleus/model/transport.go
similarity index 98%
rename from controller/nucleus/transport.go
rename to controller/nucleus/model/transport.go
index 1f4a6c3f331f758f820c238a1e564839393907a7..699289309755f350d0438bc0c1f3a6eb28ceb2c0 100644
--- a/controller/nucleus/transport.go
+++ b/controller/nucleus/model/transport.go
@@ -1,4 +1,4 @@
-package nucleus
+package model
 
 import (
 	tpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/transport"
diff --git a/controller/nucleus/transport_test.go b/controller/nucleus/model/transport_test.go
similarity index 99%
rename from controller/nucleus/transport_test.go
rename to controller/nucleus/model/transport_test.go
index 96768ff10cadaa364d082a144c2d4b90c5209da4..3c8d6e32cfa4e0e4f68c5a3d4eb669e337640bd6 100644
--- a/controller/nucleus/transport_test.go
+++ b/controller/nucleus/model/transport_test.go
@@ -1,4 +1,4 @@
-package nucleus
+package model
 
 import (
 	"testing"
diff --git a/controller/nucleus/networkElementFilesystemStore_test.go b/controller/nucleus/networkElementFilesystemStore_test.go
index 5050219fd07be715a65b449dc63708a0585a3d16..eb83bd32d818a090504f243fac65d07c1269640c 100644
--- a/controller/nucleus/networkElementFilesystemStore_test.go
+++ b/controller/nucleus/networkElementFilesystemStore_test.go
@@ -7,6 +7,7 @@ import (
 	"code.fbi.h-da.de/danet/gosdn/controller/conflict"
 	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkelement"
 	"code.fbi.h-da.de/danet/gosdn/controller/mocks"
+	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/model"
 	"code.fbi.h-da.de/danet/gosdn/controller/store"
 	"github.com/google/uuid"
 	"github.com/stretchr/testify/mock"
@@ -40,7 +41,7 @@ func TestAddNetworkElement(t *testing.T) {
 	plugin1.On("Model", mock.Anything).Return([]byte{}, nil)
 
 	networkElementStore := NewNetworkElementStore()
-	mne, _ := NewNetworkElement("testNetworkElement", mneID, &trop, defaultPndID, plugin1, conflict.Metadata{})
+	mne, _ := model.NewNetworkElement("testNetworkElement", mneID, &trop, defaultPndID, plugin1, conflict.Metadata{})
 
 	err := networkElementStore.Add(mne)
 	if err != nil {
@@ -63,12 +64,12 @@ func TestGetAllNetworkElements(t *testing.T) {
 
 	transportOptions := returnBasicTransportOption()
 
-	mne1, err := NewNetworkElement("testname", mneID1, &transportOptions, defaultPndID, plugin, conflict.Metadata{})
+	mne1, err := model.NewNetworkElement("testname", mneID1, &transportOptions, defaultPndID, plugin, conflict.Metadata{})
 	if err != nil {
 		t.Error(err)
 	}
 
-	mne2, err := NewNetworkElement("testname2", mneID2, &transportOptions, defaultPndID, plugin, conflict.Metadata{})
+	mne2, err := model.NewNetworkElement("testname2", mneID2, &transportOptions, defaultPndID, plugin, conflict.Metadata{})
 	if err != nil {
 		t.Error(err)
 	}
@@ -117,12 +118,12 @@ func TestGetNetworkElement(t *testing.T) {
 
 	trop := returnBasicTransportOption()
 
-	mne1, err := NewNetworkElement("testname", mneID1, &trop, defaultPndID, plugin, conflict.Metadata{})
+	mne1, err := model.NewNetworkElement("testname", mneID1, &trop, defaultPndID, plugin, conflict.Metadata{})
 	if err != nil {
 		t.Error(err)
 	}
 
-	mne2, err := NewNetworkElement("testname2", mneID2, &trop, defaultPndID, plugin, conflict.Metadata{})
+	mne2, err := model.NewNetworkElement("testname2", mneID2, &trop, defaultPndID, plugin, conflict.Metadata{})
 	if err != nil {
 		t.Error(err)
 	}
@@ -164,14 +165,14 @@ func TestUpdateNetworkElement(t *testing.T) {
 	plugin1.On("Model", mock.Anything).Return([]byte{}, nil)
 
 	networkElementStore := NewNetworkElementStore()
-	mne, _ := NewNetworkElement("testNetworkElement", mneID, &trop, defaultPndID, plugin1, conflict.Metadata{})
+	mne, _ := model.NewNetworkElement("testNetworkElement", mneID, &trop, defaultPndID, plugin1, conflict.Metadata{})
 
 	err := networkElementStore.Add(mne)
 	if err != nil {
 		t.Error(err)
 	}
 
-	mne, _ = NewNetworkElement(updatedNetworkElementName, mneID, &trop, defaultPndID, plugin1, conflict.Metadata{})
+	mne, _ = model.NewNetworkElement(updatedNetworkElementName, mneID, &trop, defaultPndID, plugin1, conflict.Metadata{})
 
 	err = networkElementStore.Update(mne)
 	if err != nil {
@@ -206,12 +207,12 @@ func TestDeleteNetworkElement(t *testing.T) {
 
 	trop := returnBasicTransportOption()
 
-	mne1, err := NewNetworkElement("testname", mneID1, &trop, defaultPndID, plugin, conflict.Metadata{})
+	mne1, err := model.NewNetworkElement("testname", mneID1, &trop, defaultPndID, plugin, conflict.Metadata{})
 	if err != nil {
 		t.Error(err)
 	}
 
-	mne2, err := NewNetworkElement("testname2", mneID2, &trop, defaultPndID, plugin, conflict.Metadata{})
+	mne2, err := model.NewNetworkElement("testname2", mneID2, &trop, defaultPndID, plugin, conflict.Metadata{})
 	if err != nil {
 		t.Error(err)
 	}
diff --git a/controller/nucleus/networkElementService.go b/controller/nucleus/networkElementService.go
index 32736bdbba65d0dc210985abdf7c9f0bebc9525e..6974d70b466d62a89b8a0547431b0eafadf59efe 100644
--- a/controller/nucleus/networkElementService.go
+++ b/controller/nucleus/networkElementService.go
@@ -8,6 +8,7 @@ import (
 	eventInterfaces "code.fbi.h-da.de/danet/gosdn/controller/interfaces/event"
 	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkelement"
 	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/plugin"
+	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/model"
 	"code.fbi.h-da.de/danet/gosdn/controller/store"
 	"github.com/google/uuid"
 	"github.com/openconfig/gnmi/proto/gnmi"
@@ -216,7 +217,7 @@ func (s *NetworkElementService) createNetworkElementFromStore(loadedNetworkEleme
 		return nil, err
 	}
 
-	mne, err := NewNetworkElement(
+	mne, err := model.NewNetworkElement(
 		loadedNetworkElement.Name,
 		uuid.MustParse(loadedNetworkElement.ID),
 		&tpb.TransportOption{
diff --git a/controller/nucleus/networkElementService_test.go b/controller/nucleus/networkElementService_test.go
index 1df0d17dc2272b3df896afe4c5cbfc2bc7b4f0d1..0b084969364635f16f2044fbb819a44b145dbab1 100644
--- a/controller/nucleus/networkElementService_test.go
+++ b/controller/nucleus/networkElementService_test.go
@@ -8,6 +8,7 @@ import (
 	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkelement"
 	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/plugin"
 	"code.fbi.h-da.de/danet/gosdn/controller/mocks"
+	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/model"
 	"code.fbi.h-da.de/danet/gosdn/controller/store"
 	"github.com/google/uuid"
 	"github.com/stretchr/testify/mock"
@@ -15,7 +16,7 @@ import (
 )
 
 func getMockNetworkElement(mneID uuid.UUID, plugin plugin.Plugin) (networkelement.NetworkElement, error) {
-	return &CommonNetworkElement{
+	return &model.CommonNetworkElement{
 		UUID:      mneID,
 		Plugin:    plugin,
 		transport: &mocks.Transport{},
diff --git a/controller/nucleus/pluginService.go b/controller/nucleus/pluginService.go
index ed7a7ab689cd65e1c7f8ae408de107812a1f454b..565d32a6acd0624ac635ac0d6236ce127dcdcb02 100644
--- a/controller/nucleus/pluginService.go
+++ b/controller/nucleus/pluginService.go
@@ -16,6 +16,7 @@ import (
 	"code.fbi.h-da.de/danet/gosdn/controller/event"
 	eventInterfaces "code.fbi.h-da.de/danet/gosdn/controller/interfaces/event"
 	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/plugin"
+	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/model"
 	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/util"
 	"code.fbi.h-da.de/danet/gosdn/controller/store"
 	"github.com/google/uuid"
@@ -119,7 +120,7 @@ func (s *PluginService) createPluginFromStore(loadedPlugin plugin.LoadedPlugin)
 	plugin, err := s.createPluginFromStoreFn(loadedPlugin)
 	if err != nil {
 		if errors.Is(err, hcplugin.ErrProcessNotFound) {
-			plugin, err = NewPlugin(uuid.MustParse(loadedPlugin.ID), loadedPlugin.ExecPath)
+			plugin, err = model.NewPlugin(uuid.MustParse(loadedPlugin.ID), loadedPlugin.ExecPath)
 			if err != nil {
 				return nil, err
 			}
@@ -162,7 +163,7 @@ func (s *PluginService) RequestPlugin(requestID uuid.UUID) (plugin.Plugin, error
 		}
 	}
 
-	plugin, err := NewPlugin(uuid.New(), path)
+	plugin, err := model.NewPlugin(uuid.New(), path)
 	if err != nil {
 		return nil, err
 	}
diff --git a/controller/nucleus/pndFilesystemStore.go b/controller/nucleus/pndFilesystemStore.go
index 386fc025a7da4f45123520b8b1967966dcfbc8e7..31c49239d8123a7c500cbefee4c6a23f9d394aec 100644
--- a/controller/nucleus/pndFilesystemStore.go
+++ b/controller/nucleus/pndFilesystemStore.go
@@ -9,6 +9,7 @@ import (
 	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkdomain"
 	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkelement"
 	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/plugin"
+	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/model"
 	"code.fbi.h-da.de/danet/gosdn/controller/store"
 	"github.com/google/uuid"
 	log "github.com/sirupsen/logrus"
@@ -58,7 +59,7 @@ func (t *FilesystemPndStore) readAllPndsFromFile() ([]networkdomain.LoadedPnd, e
 	// }
 
 	for i, loadedPND := range loadedPnds {
-		newPnd := NewPND(
+		newPnd := model.NewPND(
 			uuid.MustParse(loadedPND.ID),
 			loadedPND.Name,
 			loadedPND.Description,
diff --git a/controller/nucleus/pndFilesystemStore_test.go b/controller/nucleus/pndFilesystemStore_test.go
index e4a1e69dc33353cead9fdfe8326d8c27a09a56df..0ced4bf3e4d3efb350e0a490e883a5c58dab0b13 100644
--- a/controller/nucleus/pndFilesystemStore_test.go
+++ b/controller/nucleus/pndFilesystemStore_test.go
@@ -4,6 +4,7 @@ import (
 	"testing"
 
 	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkdomain"
+	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/model"
 	"code.fbi.h-da.de/danet/gosdn/controller/store"
 	"github.com/google/uuid"
 )
@@ -15,7 +16,7 @@ func TestAddPnd(t *testing.T) {
 	pndStore := NewPndStore(pluginServiceMock)
 
 	pndID, _ := uuid.Parse("b4016412-eec5-45a1-aa29-f59915357bad")
-	pnd := NewPND(pndID, "testpnd", "test")
+	pnd := model.NewPND(pndID, "testpnd", "test")
 
 	err := pndStore.Add(pnd)
 
@@ -31,8 +32,8 @@ func TestGetAllPnds(t *testing.T) {
 	pndStore := NewPndStore(pluginServiceMock)
 	pndID1, _ := uuid.Parse("b4016412-eec5-45a1-aa29-f59915357bad")
 	pndID2, _ := uuid.Parse("b4016412-eec5-45a1-aa29-f59915357bab")
-	pnd1 := NewPND(pndID1, "testpnd", "test")
-	pnd2 := NewPND(pndID2, "testpnd2", "test")
+	pnd1 := model.NewPND(pndID1, "testpnd", "test")
+	pnd2 := model.NewPND(pndID2, "testpnd2", "test")
 
 	inputPnds := [2]networkdomain.NetworkDomain{pnd1, pnd2}
 
@@ -68,8 +69,8 @@ func TestGetPnd(t *testing.T) {
 	pndStore := NewPndStore(pluginServiceMock)
 	pndID1, _ := uuid.Parse("b4016412-eec5-45a1-aa29-f59915357bad")
 	pndID2, _ := uuid.Parse("b4016412-eec5-45a1-aa29-f59915357bab")
-	pnd1 := NewPND(pndID1, "testpnd", "test")
-	pnd2 := NewPND(pndID2, "testpnd2", "test")
+	pnd1 := model.NewPND(pndID1, "testpnd", "test")
+	pnd2 := model.NewPND(pndID2, "testpnd2", "test")
 
 	inputPnds := [2]networkdomain.NetworkDomain{pnd1, pnd2}
 
@@ -103,8 +104,8 @@ func TestDeletePnd(t *testing.T) {
 	pndStore := NewPndStore(pluginServiceMock)
 	pndID1, _ := uuid.Parse("b4016412-eec5-45a1-aa29-f59915357bad")
 	pndID2, _ := uuid.Parse("b4016412-eec5-45a1-aa29-f59915357bab")
-	pnd1 := NewPND(pndID1, "testpnd", "test")
-	pnd2 := NewPND(pndID2, "testpnd2", "test")
+	pnd1 := model.NewPND(pndID1, "testpnd", "test")
+	pnd2 := model.NewPND(pndID2, "testpnd2", "test")
 
 	inputPnds := [2]networkdomain.NetworkDomain{pnd1, pnd2}
 
diff --git a/controller/nucleus/pndService.go b/controller/nucleus/pndService.go
index fc2124a87706f6f7bd3653d731aafdd7e8ab277b..a35a6eff4f64d5fce46ce84617537f3cca58056b 100644
--- a/controller/nucleus/pndService.go
+++ b/controller/nucleus/pndService.go
@@ -2,6 +2,7 @@ package nucleus
 
 import (
 	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkdomain"
+	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/model"
 	"code.fbi.h-da.de/danet/gosdn/controller/store"
 	"github.com/google/uuid"
 )
@@ -67,5 +68,5 @@ func (p *PndService) GetAll() ([]networkdomain.NetworkDomain, error) {
 }
 
 func (p *PndService) createPndFromStore(loadedPnd networkdomain.LoadedPnd) networkdomain.NetworkDomain {
-	return NewPND(uuid.MustParse(loadedPnd.ID), loadedPnd.Name, loadedPnd.Description)
+	return model.NewPND(uuid.MustParse(loadedPnd.ID), loadedPnd.Name, loadedPnd.Description)
 }