diff --git a/northbound/client.go b/northbound/client.go
deleted file mode 100644
index d0b2c91c94937844ed08444c7e8f53ea94583ffc..0000000000000000000000000000000000000000
--- a/northbound/client.go
+++ /dev/null
@@ -1 +0,0 @@
-package nbi
diff --git a/northbound/client/client.go b/northbound/client/client.go
new file mode 100644
index 0000000000000000000000000000000000000000..da13c8ef3ca33e1788a7b9560e0ade4e46b5f6f6
--- /dev/null
+++ b/northbound/client/client.go
@@ -0,0 +1 @@
+package client
diff --git a/northbound/server.go b/northbound/server.go
deleted file mode 100644
index 2e45ee2b91476ad5d3694eb0650a42dc14da707e..0000000000000000000000000000000000000000
--- a/northbound/server.go
+++ /dev/null
@@ -1,167 +0,0 @@
-package nbi
-
-import (
-	pb "code.fbi.h-da.de/cocsn/api/proto/gosdn"
-	ppb "code.fbi.h-da.de/cocsn/api/proto/gosdn/pnd"
-	"code.fbi.h-da.de/cocsn/gosdn/nucleus"
-	"code.fbi.h-da.de/cocsn/gosdn/nucleus/errors"
-	"context"
-	"github.com/google/uuid"
-	"github.com/openconfig/ygot/ygot"
-	"sync"
-	"time"
-)
-
-var pndLock sync.RWMutex
-var sbiLock sync.RWMutex
-var pndc *nucleus.PndStore
-var sbic *nucleus.SbiStore
-
-type pndServer struct {
-	ppb.UnimplementedPndServer
-}
-
-func (p pndServer) Get(ctx context.Context, request *ppb.GetRequest) (*ppb.GetResponse, error) {
-	switch request.Type {
-	case ppb.GetRequest_PND:
-		pid, err := uuid.Parse(request.Id)
-		if err != nil {
-			return nil, err
-		}
-		return handlePndRequest(pid)
-	case ppb.GetRequest_OND:
-		return handleOndRequest()
-	case ppb.GetRequest_ONDS:
-		return handleOndsRequest()
-	case ppb.GetRequest_SBI:
-		return handleSbiRequest()
-	case ppb.GetRequest_SBIS:
-		return handleSbisRequest()
-	case ppb.GetRequest_Changes:
-		return handleChangesRequest()
-	default:
-		return nil, errors.ErrOperationNotSupported{Op: request.Type}
-	}
-}
-
-func handlePndRequest(pid uuid.UUID) (*ppb.GetResponse, error) {
-	pndLock.RLock()
-	defer pndLock.RUnlock()
-	pnd, err := pndc.Get(pid)
-	if err != nil {
-		return nil, err
-	}
-	onds, err := fillOnds(pnd)
-	if err != nil {
-		return nil, err
-	}
-	sbis, err := fillSbis(pnd)
-	return &ppb.GetResponse{
-		Timestamp: time.Now().UnixNano(),
-		Payload: &ppb.GetResponse_Pnd{
-			Pnd: &ppb.PrincipalNetworkDomain{
-				Id:          pid.String(),
-				Name:        pnd.GetName(),
-				Description: pnd.GetDescription(),
-				Onds:        onds,
-				Sbis:        sbis,
-				Changes:     nil,
-			},
-		},
-	}, nil
-}
-
-func handleSbiRequest() (*ppb.GetResponse, error) {
-	return nil, errors.ErrNotYetImplemented{}
-}
-
-func handleSbisRequest() (*ppb.GetResponse, error) {
-	return nil, errors.ErrNotYetImplemented{}
-}
-
-func handleOndRequest() (*ppb.GetResponse, error) {
-	return nil, errors.ErrNotYetImplemented{}
-}
-
-func handleOndsRequest() (*ppb.GetResponse, error) {
-	return nil, errors.ErrNotYetImplemented{}
-}
-
-func handleChangesRequest() (*ppb.GetResponse, error) {
-	return nil, errors.ErrNotYetImplemented{}
-}
-
-func fillOnds(pnd nucleus.PrincipalNetworkDomain) (*ppb.OrchestratedNetworkingDevices, error) {
-	onds := make(map[string]*ppb.OrchestratedNetworkingDevice)
-	for _, id := range pnd.Devices() {
-		d, err := pnd.GetDevice(id)
-		if err != nil {
-			return nil, err
-		}
-		cfg := ygot.GNMINotificationsConfig{}
-		dev, err := ygot.TogNMINotifications(d, time.Now().UnixNano(), cfg)
-		if err != nil {
-			return nil, err
-		}
-		ond := &ppb.OrchestratedNetworkingDevice{
-			Id:     id.String(),
-			Name:   "",
-			Device: dev,
-		}
-		onds[id.String()] = ond
-	}
-	return &ppb.OrchestratedNetworkingDevices{Onds: onds}, nil
-}
-
-func fillSbis(pnd nucleus.PrincipalNetworkDomain) (*ppb.SouthboundInterfaces, error) {
-	sbis := make(map[string]*ppb.SouthboundInterface)
-	sbic := pnd.GetSBIs().(*nucleus.SbiStore)
-	for _,id := range sbic.UUIDs() {
-		sbi, err := sbic.Get(id)
-		if err != nil {
-			return nil, err
-		}
-		sbis[id.String()] = &ppb.SouthboundInterface{
-			Id:     id.String(),
-			Schema: sbi.Schema().RootSchema().Name,
-		}
-	}
-	return &ppb.SouthboundInterfaces{Sbis: sbis}, nil
-}
-
-func fillChanges(pnd nucleus.PrincipalNetworkDomain) (*ppb.Changes, error) {
-	// TODO: Allow access to change at leaso on
-	return nil, errors.ErrNotYetImplemented{}
-}
-
-func (p pndServer) Set(ctx context.Context, request *ppb.SetRequest) (*ppb.SetResponse, error) {
-	panic("implement me")
-}
-
-type gosdnServer struct {
-	pb.UnimplementedGosdnServer
-}
-
-func (s gosdnServer) Get(ctx context.Context, request *pb.GetRequest) (*pb.GetResponse, error) {
-	panic("implement me")
-}
-
-func (s gosdnServer) Set(ctx context.Context, request *pb.SetRequest) (*pb.SetResponse, error) {
-	panic("implement me")
-}
-
-func NewNBI(pnds *nucleus.PndStore, sbis *nucleus.SbiStore) *NorthboundInterface {
-	pndc = pnds
-	sbic = sbis
-	pndLock = sync.RWMutex{}
-	sbiLock = sync.RWMutex{}
-	return &NorthboundInterface{
-		Pnd:        &pndServer{},
-		Controller: &gosdnServer{},
-	}
-}
-
-type NorthboundInterface struct {
-	Pnd        *pndServer
-	Controller *gosdnServer
-}
diff --git a/northbound/server/server.go b/northbound/server/server.go
new file mode 100644
index 0000000000000000000000000000000000000000..592504b0a42b79437f5581935386ccffeef03a73
--- /dev/null
+++ b/northbound/server/server.go
@@ -0,0 +1,41 @@
+package server
+
+import (
+	pb "code.fbi.h-da.de/cocsn/api/proto/gosdn"
+	"code.fbi.h-da.de/cocsn/gosdn/nucleus"
+	"context"
+	"sync"
+)
+
+var pndLock sync.RWMutex
+var sbiLock sync.RWMutex
+var pndc *nucleus.PndStore
+var sbic *nucleus.SbiStore
+
+type gosdnServer struct {
+	pb.UnimplementedGosdnServer
+}
+
+func (s gosdnServer) Get(ctx context.Context, request *pb.GetRequest) (*pb.GetResponse, error) {
+	panic("implement me")
+}
+
+func (s gosdnServer) Set(ctx context.Context, request *pb.SetRequest) (*pb.SetResponse, error) {
+	panic("implement me")
+}
+
+func NewNBI(pnds *nucleus.PndStore, sbis *nucleus.SbiStore) *NorthboundInterface {
+	pndc = pnds
+	sbic = sbis
+	pndLock = sync.RWMutex{}
+	sbiLock = sync.RWMutex{}
+	return &NorthboundInterface{
+		Pnd:        &pndServer{},
+		Controller: &gosdnServer{},
+	}
+}
+
+type NorthboundInterface struct {
+	Pnd        *pndServer
+	Controller *gosdnServer
+}