diff --git a/.golangci.yml b/.golangci.yml
index 9b743a6ea6330ad14659f5117ba01bb2a9987a20..2141fe8030ba212bcf2a72c1dd7b5096475b6a01 100644
--- a/.golangci.yml
+++ b/.golangci.yml
@@ -33,7 +33,7 @@ issues:
 linters:
     # enable the specific needed linters
     # see here for full list: https://golangci-lint.run/usage/linters/
-    # linters to consider: gosimple, containedctx, contextcheck, depguard, errchkjson, errname, exhaustive, exhaustruct, forbidigo,
+    # linters to consider: gosimple, containedctx, contextcheck, depguard, errchkjson, exhaustive, exhaustruct, forbidigo,
     # gochecknoinits, gocognit, goconst, gocritic, gofumpt, gomnd, gosec, importas, lll, nestif, nilerr, nlreturn, noctx, nolintlint,
     # nosnakecase, paralleltest, prealloc, structcheck, testpackage, tparallel, unparam, wastedassign, wrapcheck, wsl
     disable-all: true
@@ -61,6 +61,7 @@ linters:
         - nilnil
         - predeclared
         - godot
+        - errname
 
 # custom settings for linters
 linters-settings:
diff --git a/cli/adapter/PndAdapter.go b/cli/adapter/PndAdapter.go
index 0cf7996831ddf2db56a67f5865247d362592e63f..89947898b994059b0027254a918de78b737b4511 100644
--- a/cli/adapter/PndAdapter.go
+++ b/cli/adapter/PndAdapter.go
@@ -7,8 +7,8 @@ import (
 	ppb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/pnd"
 	tpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/transport"
 	"code.fbi.h-da.de/danet/gosdn/controller/api"
+	"code.fbi.h-da.de/danet/gosdn/controller/customerrs"
 	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/southbound"
-	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/errors"
 	"github.com/google/uuid"
 	"github.com/openconfig/goyang/pkg/yang"
 	"golang.org/x/sync/errgroup"
@@ -37,12 +37,12 @@ func NewPndAdapter(id, endpoint string) (*PndAdapter, error) {
 
 // AddSbi adds an SBI to the PND Adapter. Currently not implemented.
 func (p *PndAdapter) AddSbi(s southbound.SouthboundInterface) error {
-	return &errors.ErrNotYetImplemented{}
+	return &customerrs.NotYetImplementedError{}
 }
 
 // RemoveSbi removes an SBI from the PND Adapter. Currently not implemented.
 func (p *PndAdapter) RemoveSbi(uuid.UUID) error {
-	return &errors.ErrNotYetImplemented{}
+	return &customerrs.NotYetImplementedError{}
 }
 
 // AddDevice adds a new device to the controller. The device name is optional.
diff --git a/controller/nucleus/errors/errors.go b/controller/customerrs/errors.go
similarity index 50%
rename from controller/nucleus/errors/errors.go
rename to controller/customerrs/errors.go
index 483f4af8f3ac56f4956628b4457288a7799c17d1..d5197bd0ce948fd7a735ba8b4181c49f213a4ab6 100644
--- a/controller/nucleus/errors/errors.go
+++ b/controller/customerrs/errors.go
@@ -1,4 +1,4 @@
-package errors
+package customerrs
 
 import (
 	"fmt"
@@ -7,140 +7,140 @@ import (
 	"github.com/openconfig/ygot/ygot"
 )
 
-// ErrNilClient implements the Error interface and is called if a GNMI Client is nil.
-type ErrNilClient struct {
+// NilClientError implements the Error interface and is called if a GNMI Client is nil.
+type NilClientError struct {
 }
 
-func (e *ErrNilClient) Error() string {
+func (e *NilClientError) Error() string {
 	return fmt.Sprint("client cannot be nil")
 }
 
-// ErrNil implements the Error interface and is called if a struct is nil.
-type ErrNil struct {
+// NilError implements the Error interface and is called if a struct is nil.
+type NilError struct {
 }
 
-func (e *ErrNil) Error() string {
+func (e *NilError) Error() string {
 	return fmt.Sprint("struct cannot be nil")
 }
 
-// ErrAlreadyExists implements the Error interface and is called if a specific ID
+// AlreadyExistsError implements the Error interface and is called if a specific ID
 // of a storable item already exists.
-type ErrAlreadyExists struct {
+type AlreadyExistsError struct {
 	Item interface{}
 }
 
-func (e *ErrAlreadyExists) Error() string {
+func (e *AlreadyExistsError) Error() string {
 	return fmt.Sprintf("%T %v already exists", e.Item, e.Item)
 }
 
-// ErrInvalidUUID implements the Error interface and is called if a UUID is not valid.
-type ErrInvalidUUID struct {
+// InvalidUUIDError implements the Error interface and is called if a UUID is not valid.
+type InvalidUUIDError struct {
 	DeviceName string
 }
 
-func (e *ErrInvalidUUID) Error() string {
+func (e *InvalidUUIDError) Error() string {
 	return fmt.Sprint("UUID not valid")
 }
 
-// ErrInvalidTypeAssertion implements the Error interface and is called if the
+// InvalidTypeAssertionError implements the Error interface and is called if the
 // type of a storable item does not correspond to the expected type.
-type ErrInvalidTypeAssertion struct {
+type InvalidTypeAssertionError struct {
 	Value interface{}
 	Type  interface{}
 }
 
-func (e ErrInvalidTypeAssertion) Error() string {
+func (e InvalidTypeAssertionError) Error() string {
 	return fmt.Sprintf("%v does not implement %v", reflect.TypeOf(e.Value).Elem(), reflect.TypeOf(e.Type).Elem())
 }
 
-// ErrUnsupportedPath implements the Error interface and is called if the
+// UnsupportedPathError implements the Error interface and is called if the
 // given path is not supported.
-type ErrUnsupportedPath struct {
+type UnsupportedPathError struct {
 	Path interface{}
 }
 
-func (e ErrUnsupportedPath) Error() string {
+func (e UnsupportedPathError) Error() string {
 	return fmt.Sprintf("path %v is not supported", e.Path)
 }
 
-// ErrPathNotFound implements the Error interface and is called if the
+// PathNotFoundError implements the Error interface and is called if the
 // given path is not supported.
-type ErrPathNotFound struct {
+type PathNotFoundError struct {
 	Path interface{}
 	Err  error
 }
 
-func (e ErrPathNotFound) Error() string {
+func (e PathNotFoundError) Error() string {
 	return fmt.Sprintf("path %v not found: %v", e.Path, e.Err)
 }
 
-// ErrNotYetImplemented implements the Error interface and is called if a function
+// NotYetImplementedError implements the Error interface and is called if a function
 // is not implemented yet.
-type ErrNotYetImplemented struct{}
+type NotYetImplementedError struct{}
 
-func (e ErrNotYetImplemented) Error() string {
+func (e NotYetImplementedError) Error() string {
 	return fmt.Sprint("function not yet implemented")
 }
 
-// ErrInvalidParameters implements the Error interface and is called if the wrong
+// InvalidParametersError implements the Error interface and is called if the wrong
 // or no parameters have been provided.
-type ErrInvalidParameters struct {
+type InvalidParametersError struct {
 	Func  interface{}
 	Param interface{}
 }
 
-func (e ErrInvalidParameters) Error() string {
+func (e InvalidParametersError) Error() string {
 	return fmt.Sprintf("invalid parameters for %v: %v", e.Func, e.Param)
 }
 
-// ErrInvalidTransportOptions implements the Error interface and is called if the
+// InvalidTransportOptionsError implements the Error interface and is called if the
 // wrong TransportOptions have been provided.
-type ErrInvalidTransportOptions struct {
+type InvalidTransportOptionsError struct {
 	Opt interface{}
 }
 
-func (e ErrInvalidTransportOptions) Error() string {
+func (e InvalidTransportOptionsError) Error() string {
 	return fmt.Sprintf("invalid transport options: %v", reflect.TypeOf(e.Opt))
 }
 
-// ErrOperationNotSupported implements the Error interface and is called if the
+// OperationNotSupportedError implements the Error interface and is called if the
 // wrong Operation has been provided.
-type ErrOperationNotSupported struct {
+type OperationNotSupportedError struct {
 	Op interface{}
 }
 
-func (e ErrOperationNotSupported) Error() string {
+func (e OperationNotSupportedError) Error() string {
 	return fmt.Sprintf("transport operation not supported: %v", reflect.TypeOf(e.Op))
 }
 
-// ErrUnsupportedSbiType implements the Error interface and is called if the
+// UnsupportedSbiTypeError implements the Error interface and is called if the
 // wrong Type for a SBI has been provided.
-type ErrUnsupportedSbiType struct {
+type UnsupportedSbiTypeError struct {
 	Type interface{}
 }
 
-func (e ErrUnsupportedSbiType) Error() string {
+func (e UnsupportedSbiTypeError) Error() string {
 	return fmt.Sprintf("SBI type not supported: %v", e.Type)
 }
 
-// ErrPluginVersion implements the Error interface and is called if the Version
+// PluginVersionError implements the Error interface and is called if the Version
 // of a Plugin is older than a Plugin in use.
-type ErrPluginVersion struct {
+type PluginVersionError struct {
 	PlugID, ProvidedVer, UsedVer string
 }
 
-func (e ErrPluginVersion) Error() string {
+func (e PluginVersionError) Error() string {
 	return fmt.Sprintf("Version of Plugin: %s is older than the one in use. Provided: %s, in use: %s", e.PlugID, e.ProvidedVer, e.UsedVer)
 }
 
-// ErrorList implements the Error interface and is called if a slice of errors
+// CombinedErrListError implements the Error interface and is called if a slice of errors
 // should be returned. The slice of errors is combined into a single error
 // message and returned.
-type ErrorList struct {
+type CombinedErrListError struct {
 	Errors []error
 }
 
-func (e ErrorList) Error() string {
+func (e CombinedErrListError) Error() string {
 	combinedErrString := "Errors found:"
 	for i, err := range e.Errors {
 		errString := fmt.Sprintf("\n %v. %v", i+1, err)
@@ -149,130 +149,130 @@ func (e ErrorList) Error() string {
 	return combinedErrString
 }
 
-// ErrTypeNotSupported implements the Error interface and is called if the
+// TypeNotSupportedError implements the Error interface and is called if the
 // wrong Type has been provided.
-type ErrTypeNotSupported struct {
+type TypeNotSupportedError struct {
 	Type interface{}
 }
 
-func (e ErrTypeNotSupported) Error() string {
+func (e TypeNotSupportedError) Error() string {
 	return fmt.Sprintf("type not supported: %v", reflect.TypeOf(e.Type))
 }
 
-// ErrCouldNotMarshall implements Error interface and is called if a
+// CouldNotMarshallError implements Error interface and is called if a
 // database response can not be parsed.
-type ErrCouldNotMarshall struct {
+type CouldNotMarshallError struct {
 	Identifier any
 	Type       any
 	Err        error
 }
 
-func (e ErrCouldNotMarshall) Error() string {
+func (e CouldNotMarshallError) Error() string {
 	return fmt.Sprintf("could not marshall Identifier: %v of Type: %T, Internal error: %v", e.Identifier, e.Type, e.Err)
 }
 
-// ErrCouldNotUpdate implements the Error interface and is called if a
+// CouldNotUpdateError implements the Error interface and is called if a
 // stored item can not be updated.
-type ErrCouldNotUpdate struct {
+type CouldNotUpdateError struct {
 	Identifier any
 	Type       any
 	Err        error
 }
 
-func (e ErrCouldNotUpdate) Error() string {
+func (e CouldNotUpdateError) Error() string {
 	return fmt.Sprintf("could not update Identifier: %v of Type: %T, Internal error: %v", e.Identifier, e.Type, e.Err)
 }
 
-// ErrCouldNotFind implements the Error interface and is called if a
+// CouldNotFindError implements the Error interface and is called if a
 // stored item can not be found.
-type ErrCouldNotFind struct {
+type CouldNotFindError struct {
 	ID   any
 	Name string
 }
 
-func (e ErrCouldNotFind) Error() string {
+func (e CouldNotFindError) Error() string {
 	return fmt.Sprintf("ID: %v or Name: %v not found", e.ID, e.Name)
 }
 
-// ErrCouldNotCreate implements the Error interface and is called if a
+// CouldNotCreateError implements the Error interface and is called if a
 // stored item can not be found.
-type ErrCouldNotCreate struct {
+type CouldNotCreateError struct {
 	Identifier any
 	Type       any
 	Err        error
 }
 
-func (e ErrCouldNotCreate) Error() string {
+func (e CouldNotCreateError) Error() string {
 	return fmt.Sprintf("could not create Identifier: %v of Type: %T, Internal error: %v", e.Identifier, e.Type, e.Err)
 }
 
-// ErrCouldNotDelete implements the Error interface and is called if a
+// CouldNotDeleteError implements the Error interface and is called if a
 // stored item can not be deleted.
-type ErrCouldNotDelete struct {
+type CouldNotDeleteError struct {
 	Identifier any
 	Type       any
 	Err        error
 }
 
-func (e ErrCouldNotDelete) Error() string {
+func (e CouldNotDeleteError) Error() string {
 	return fmt.Sprintf("could not delete Identifier: %v of Type: %T, Internal error: %v", e.Identifier, e.Type, e.Err)
 }
 
-// ErrNoNewChanges implements the Error interface and is called if a the
+// NoNewChangesError implements the Error interface and is called if a the
 // gNMI-Notification created from ygot.Diff does not contain any `updates` or
 // `deletes`.
-type ErrNoNewChanges struct {
+type NoNewChangesError struct {
 	Original ygot.GoStruct
 	Modified ygot.GoStruct
 }
 
-func (e ErrNoNewChanges) Error() string {
+func (e NoNewChangesError) Error() string {
 	return fmt.Sprintf("There are no changes between %v and %v", e.Original, e.Modified)
 }
 
-// ErrAMQPInitFail implements the Error interface and is called if there is any issue related to
+// AMQPInitFailError implements the Error interface and is called if there is any issue related to
 // the setup of the event management.
-type ErrAMQPInitFail struct {
+type AMQPInitFailError struct {
 	Action string
 	Err    error
 }
 
-func (e ErrAMQPInitFail) Error() string {
+func (e AMQPInitFailError) Error() string {
 	return fmt.Sprintf("Action: %s, Internal error: %v", e.Action, e.Err)
 }
 
-// ErrAMQPMessageFail implements the Error interface and is called if there is any issue with sending
+// AMQPMessageFailError implements the Error interface and is called if there is any issue with sending
 // or receiving messages.
-type ErrAMQPMessageFail struct {
+type AMQPMessageFailError struct {
 	Action string
 	Err    error
 }
 
-func (e ErrAMQPMessageFail) Error() string {
+func (e AMQPMessageFailError) Error() string {
 	return fmt.Sprintf("Action: %s, Internal error: %v", e.Action, e.Err)
 }
 
-// ErrSubscribeResponse implements the Error interface and is called if there is an issue during a ongoing
+// SubscribeResponseError implements the Error interface and is called if there is an issue during a ongoing
 // gNMI Subscription.
-type ErrSubscribeResponse struct {
+type SubscribeResponseError struct {
 	PndID      string
 	DeviceID   string
 	DeviceName string
 	Err        string
 }
 
-func (e ErrSubscribeResponse) Error() string {
+func (e SubscribeResponseError) Error() string {
 	return fmt.Sprintf("Subscribe failed, PndID: %s, DeviceID: %s, DeviceName: %s, Internal error: %s", e.PndID, e.DeviceID, e.DeviceName, e.Err)
 }
 
-// ErrSubscribeSyncResponse implements the Error interface and is called if there is an issue syncing a
+// SubscribeSyncResponseError implements the Error interface and is called if there is an issue syncing a
 // gNMI Subscription.
-type ErrSubscribeSyncResponse struct {
+type SubscribeSyncResponseError struct {
 	PndID      string
 	DeviceID   string
 	DeviceName string
 }
 
-func (e ErrSubscribeSyncResponse) Error() string {
+func (e SubscribeSyncResponseError) Error() string {
 	return fmt.Sprintf("Sync failed, PndID: %s, DeviceID: %s, DeviceName: %s", e.PndID, e.DeviceID, e.DeviceName)
 }
diff --git a/controller/eventService/Service.go b/controller/eventService/Service.go
index cdf4aaad7ee16d97c06d2f9f6ddcca3c512247be..8710655152b4db340ebfbebc2dd51d5d032370e3 100644
--- a/controller/eventService/Service.go
+++ b/controller/eventService/Service.go
@@ -5,8 +5,8 @@ import (
 	"encoding/json"
 
 	"code.fbi.h-da.de/danet/gosdn/controller/config"
+	"code.fbi.h-da.de/danet/gosdn/controller/customerrs"
 	"code.fbi.h-da.de/danet/gosdn/controller/event"
-	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/errors"
 
 	interfaces "code.fbi.h-da.de/danet/gosdn/controller/interfaces/event"
 
@@ -29,12 +29,12 @@ func NewEventService() (interfaces.Service, error) {
 
 	conn, err := amqp.Dial(amqpURIBuilder(config.AMQPPrefix, config.AMQPUser, config.AMQPPassword, config.AMQPHost, config.AMQPPort))
 	if err != nil {
-		return nil, &errors.ErrAMQPInitFail{Action: "failed to connect to RabbitMQ", Err: err}
+		return nil, &customerrs.AMQPInitFailError{Action: "failed to connect to RabbitMQ", Err: err}
 	}
 
 	ch, err := conn.Channel()
 	if err != nil {
-		return nil, &errors.ErrAMQPInitFail{Action: "failed to open a channel", Err: err}
+		return nil, &customerrs.AMQPInitFailError{Action: "failed to open a channel", Err: err}
 	}
 
 	return &EventService{
@@ -54,12 +54,12 @@ func (e *EventService) PublishEvent(topic string, event event.Event) error {
 		nil,   // arguments
 	)
 	if err != nil {
-		return &errors.ErrAMQPInitFail{Action: "failed declaring queue", Err: err}
+		return &customerrs.AMQPInitFailError{Action: "failed declaring queue", Err: err}
 	}
 
 	eventBody, err := json.Marshal(event)
 	if err != nil {
-		return &errors.ErrCouldNotMarshall{Identifier: topic + " " + event.EntityID.String(), Type: event.Type, Err: err}
+		return &customerrs.CouldNotMarshallError{Identifier: topic + " " + event.EntityID.String(), Type: event.Type, Err: err}
 	}
 
 	err = e.channel.PublishWithContext(
@@ -73,7 +73,7 @@ func (e *EventService) PublishEvent(topic string, event event.Event) error {
 			Body:        eventBody,
 		})
 	if err != nil {
-		return &errors.ErrAMQPMessageFail{Action: "failed to publish message", Err: err}
+		return &customerrs.AMQPMessageFailError{Action: "failed to publish message", Err: err}
 	}
 
 	return nil
diff --git a/controller/interfaces/plugin/plugin.go b/controller/interfaces/plugin/plugin.go
index 9dcae112198986d0e04f51ece22678a5fb669957..019c0d9399ce9a973481204f6311f56f1cf8dcb4 100644
--- a/controller/interfaces/plugin/plugin.go
+++ b/controller/interfaces/plugin/plugin.go
@@ -5,7 +5,7 @@ import (
 	"io/ioutil"
 	"regexp"
 
-	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/errors"
+	"code.fbi.h-da.de/danet/gosdn/controller/customerrs"
 	"github.com/google/uuid"
 	"gopkg.in/yaml.v3"
 )
@@ -78,7 +78,7 @@ func (m *Manifest) Validate() error {
 		errs = append(errs, fmt.Errorf("Version has to be of form: vX.X.X"))
 	}
 	if len(errs) != 0 {
-		return errors.ErrorList{Errors: errs}
+		return customerrs.CombinedErrListError{Errors: errs}
 	}
 	return nil
 }
diff --git a/controller/northbound/server/pnd.go b/controller/northbound/server/pnd.go
index 3805364c171aecda96454fa7e62bfb300c8506a1..dc8bd2f872ad666448229c5740e7cf31a7b86c54 100644
--- a/controller/northbound/server/pnd.go
+++ b/controller/northbound/server/pnd.go
@@ -7,11 +7,11 @@ import (
 
 	ppb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/pnd"
 	spb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/southbound"
+	"code.fbi.h-da.de/danet/gosdn/controller/customerrs"
 	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/device"
 	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkdomain"
 	"code.fbi.h-da.de/danet/gosdn/controller/metrics"
 	"code.fbi.h-da.de/danet/gosdn/controller/nucleus"
-	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/errors"
 	"code.fbi.h-da.de/danet/gosdn/controller/store"
 	"github.com/google/uuid"
 	"github.com/openconfig/gnmi/proto/gnmi"
@@ -443,7 +443,7 @@ func fillChanges(pnd networkdomain.NetworkDomain, all bool, cuid ...string) ([]*
 	default:
 		var err error
 		if len(cuid) == 0 {
-			return nil, &errors.ErrInvalidParameters{
+			return nil, &customerrs.InvalidParametersError{
 				Func:  fillChanges,
 				Param: "length of 'did' cannot be '0' when 'all' is set to 'false'",
 			}
@@ -556,7 +556,7 @@ func (p PndServer) SetChangeList(ctx context.Context, request *ppb.SetChangeList
 				return nil, status.Errorf(codes.Aborted, "%v", err)
 			}
 		default:
-			return nil, &errors.ErrInvalidParameters{
+			return nil, &customerrs.InvalidParametersError{
 				Param: r.Op,
 			}
 		}
diff --git a/controller/nucleus/databaseDeviceStore.go b/controller/nucleus/databaseDeviceStore.go
index a7664706c391a2de8e0e4593cc71b360dea40a8b..b2d8feef18e71820dc24f038597c88b07830fe8a 100644
--- a/controller/nucleus/databaseDeviceStore.go
+++ b/controller/nucleus/databaseDeviceStore.go
@@ -3,9 +3,9 @@ package nucleus
 import (
 	"fmt"
 
+	"code.fbi.h-da.de/danet/gosdn/controller/customerrs"
 	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/device"
 	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/database"
-	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/errors"
 	"code.fbi.h-da.de/danet/gosdn/controller/store"
 	"go.mongodb.org/mongo-driver/bson"
 	"go.mongodb.org/mongo-driver/bson/primitive"
@@ -61,13 +61,13 @@ func (s *DatabaseDeviceStore) getByID(idOfDevice uuid.UUID) (loadedDevice device
 	collection := db.Collection(s.storeName)
 	result := collection.FindOne(ctx, bson.D{primitive.E{Key: "_id", Value: idOfDevice.String()}})
 	if result == nil {
-		return loadedDevice, errors.ErrCouldNotFind{ID: idOfDevice}
+		return loadedDevice, customerrs.CouldNotFindError{ID: idOfDevice}
 	}
 
 	err = result.Decode(&loadedDevice)
 	if err != nil {
 		log.Printf("Failed marshalling %v", err)
-		return loadedDevice, errors.ErrCouldNotMarshall{Identifier: idOfDevice, Type: loadedDevice, Err: err}
+		return loadedDevice, customerrs.CouldNotMarshallError{Identifier: idOfDevice, Type: loadedDevice, Err: err}
 	}
 
 	return loadedDevice, nil
@@ -86,13 +86,13 @@ func (s *DatabaseDeviceStore) getByName(nameOfDevice string) (loadedDevice devic
 	collection := db.Collection(s.storeName)
 	result := collection.FindOne(ctx, bson.D{primitive.E{Key: "name", Value: nameOfDevice}})
 	if result == nil {
-		return loadedDevice, errors.ErrCouldNotFind{Name: nameOfDevice}
+		return loadedDevice, customerrs.CouldNotFindError{Name: nameOfDevice}
 	}
 
 	err = result.Decode(&loadedDevice)
 	if err != nil {
 		log.Printf("Failed marshalling %v", err)
-		return loadedDevice, errors.ErrCouldNotMarshall{Identifier: nameOfDevice, Type: loadedDevice, Err: err}
+		return loadedDevice, customerrs.CouldNotMarshallError{Identifier: nameOfDevice, Type: loadedDevice, Err: err}
 	}
 
 	return loadedDevice, nil
@@ -127,7 +127,7 @@ func (s *DatabaseDeviceStore) GetAll() (loadedDevices []device.LoadedDevice, err
 	if err != nil {
 		log.Printf("Failed marshalling %v", err)
 
-		return nil, errors.ErrCouldNotMarshall{Type: loadedDevices, Err: err}
+		return nil, customerrs.CouldNotMarshallError{Type: loadedDevices, Err: err}
 	}
 
 	return loadedDevices, nil
@@ -149,7 +149,7 @@ func (s *DatabaseDeviceStore) Add(deviceToAdd device.Device) (err error) {
 		InsertOne(ctx, deviceToAdd)
 	if err != nil {
 		log.Printf("Could not create Device: %v", err)
-		return errors.ErrCouldNotCreate{Identifier: deviceToAdd.ID(), Type: deviceToAdd, Err: err}
+		return customerrs.CouldNotCreateError{Identifier: deviceToAdd.ID(), Type: deviceToAdd, Err: err}
 	}
 
 	return nil
@@ -185,7 +185,7 @@ func (s *DatabaseDeviceStore) Update(deviceToUpdate device.Device) (err error) {
 	if err != nil {
 		log.Printf("Could not update Device: %v", err)
 
-		return errors.ErrCouldNotUpdate{Identifier: deviceToUpdate.ID(), Type: deviceToUpdate, Err: err}
+		return customerrs.CouldNotUpdateError{Identifier: deviceToUpdate.ID(), Type: deviceToUpdate, Err: err}
 	}
 
 	return nil
@@ -206,7 +206,7 @@ func (s *DatabaseDeviceStore) Delete(deviceToDelete device.Device) (err error) {
 	collection := db.Collection(s.storeName)
 	_, err = collection.DeleteOne(ctx, bson.D{primitive.E{Key: deviceToDelete.ID().String()}})
 	if err != nil {
-		return errors.ErrCouldNotDelete{Identifier: deviceToDelete.ID(), Type: deviceToDelete, Err: err}
+		return customerrs.CouldNotDeleteError{Identifier: deviceToDelete.ID(), Type: deviceToDelete, Err: err}
 	}
 
 	return nil
diff --git a/controller/nucleus/databasePndStore.go b/controller/nucleus/databasePndStore.go
index 6a8ca96036f1b4884c2001840620f8c528f90db2..d04262e963035e260666a74c57b81884cab26302 100644
--- a/controller/nucleus/databasePndStore.go
+++ b/controller/nucleus/databasePndStore.go
@@ -7,8 +7,8 @@ import (
 	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkdomain"
 
 	cpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/csbi"
+	"code.fbi.h-da.de/danet/gosdn/controller/customerrs"
 	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/database"
-	errors "code.fbi.h-da.de/danet/gosdn/controller/nucleus/errors"
 	"code.fbi.h-da.de/danet/gosdn/controller/store"
 	"github.com/google/uuid"
 	log "github.com/sirupsen/logrus"
@@ -43,14 +43,14 @@ func (s *DatabasePndStore) Get(query store.Query) (newPnd networkdomain.NetworkD
 	collection := db.Collection(s.pndStoreName)
 	result := collection.FindOne(ctx, bson.D{primitive.E{Key: "_id", Value: query.ID.String()}})
 	if result == nil {
-		return nil, errors.ErrCouldNotFind{ID: query.ID}
+		return nil, customerrs.CouldNotFindError{ID: query.ID}
 	}
 
 	err = result.Decode(&loadedPND)
 	if err != nil {
 		log.Printf("Failed marshalling %v", err)
 
-		return nil, errors.ErrCouldNotMarshall{Identifier: query.ID, Type: loadedPND, Err: err}
+		return nil, customerrs.CouldNotMarshallError{Identifier: query.ID, Type: loadedPND, Err: err}
 	}
 
 	csbiClient, err := s.getCsbiClient()
@@ -103,7 +103,7 @@ func (s *DatabasePndStore) GetAll() (pnds []networkdomain.NetworkDomain, err err
 	if err != nil {
 		log.Printf("Failed marshalling %v", err)
 
-		return nil, errors.ErrCouldNotMarshall{Type: loadedPnds, Err: err}
+		return nil, customerrs.CouldNotMarshallError{Type: loadedPnds, Err: err}
 	}
 
 	csbiClient, err := s.getCsbiClient()
@@ -144,7 +144,7 @@ func (s *DatabasePndStore) Add(pndToAdd networkdomain.NetworkDomain) (err error)
 		Collection(s.pndStoreName).
 		InsertOne(ctx, pndToAdd)
 	if err != nil {
-		return errors.ErrCouldNotCreate{Identifier: pndToAdd.ID(), Type: pndToAdd, Err: err}
+		return customerrs.CouldNotCreateError{Identifier: pndToAdd.ID(), Type: pndToAdd, Err: err}
 	}
 
 	return nil
@@ -165,7 +165,7 @@ func (s *DatabasePndStore) Delete(pndToDelete networkdomain.NetworkDomain) (err
 	collection := db.Collection(s.pndStoreName)
 	_, err = collection.DeleteOne(ctx, bson.D{primitive.E{Key: pndToDelete.ID().String()}})
 	if err != nil {
-		return errors.ErrCouldNotDelete{Identifier: pndToDelete.ID(), Type: pndToDelete, Err: err}
+		return customerrs.CouldNotDeleteError{Identifier: pndToDelete.ID(), Type: pndToDelete, Err: err}
 	}
 
 	// TODO: Delete all assosicated devices + SBIs
@@ -178,7 +178,7 @@ func (s *DatabasePndStore) Delete(pndToDelete networkdomain.NetworkDomain) (err
 func (s *DatabasePndStore) PendingChannels(id uuid.UUID, parseErrors ...error) (chan device.Details, error) {
 	ch, ok := s.pendingChannels[id]
 	if !ok {
-		return nil, &errors.ErrCouldNotFind{ID: id}
+		return nil, &customerrs.CouldNotFindError{ID: id}
 	}
 	return ch, nil
 }
diff --git a/controller/nucleus/databaseSbiStore.go b/controller/nucleus/databaseSbiStore.go
index 77e4d4d332b37ffc00d3e048829360ac440838e7..03495cd3f1b439228924a6f31c375a9eb425baba 100644
--- a/controller/nucleus/databaseSbiStore.go
+++ b/controller/nucleus/databaseSbiStore.go
@@ -3,9 +3,9 @@ package nucleus
 import (
 	"fmt"
 
+	"code.fbi.h-da.de/danet/gosdn/controller/customerrs"
 	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/southbound"
 	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/database"
-	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/errors"
 	"code.fbi.h-da.de/danet/gosdn/controller/store"
 	"go.mongodb.org/mongo-driver/bson"
 	"go.mongodb.org/mongo-driver/bson/primitive"
@@ -38,7 +38,7 @@ func (s *DatabaseSbiStore) Add(sbiToAdd southbound.SouthboundInterface) (err err
 			return nil
 		}
 
-		return errors.ErrCouldNotCreate{Identifier: sbiToAdd.ID(), Type: sbiToAdd, Err: err}
+		return customerrs.CouldNotCreateError{Identifier: sbiToAdd.ID(), Type: sbiToAdd, Err: err}
 	}
 
 	return nil
@@ -59,7 +59,7 @@ func (s *DatabaseSbiStore) Delete(sbiToDelete southbound.SouthboundInterface) (e
 		Collection(s.sbiStoreName).
 		DeleteOne(ctx, bson.D{primitive.E{Key: "_id", Value: sbiToDelete.ID().String()}})
 	if err != nil {
-		return errors.ErrCouldNotDelete{Identifier: sbiToDelete.ID(), Type: sbiToDelete, Err: err}
+		return customerrs.CouldNotDeleteError{Identifier: sbiToDelete.ID(), Type: sbiToDelete, Err: err}
 	}
 
 	return nil
@@ -83,14 +83,14 @@ func (s *DatabaseSbiStore) Get(query store.Query) (loadedSbi southbound.LoadedSb
 	collection := db.Collection(s.sbiStoreName)
 	result := collection.FindOne(ctx, bson.D{primitive.E{Key: "_id", Value: query.ID.String()}})
 	if result == nil {
-		return loadedSbi, errors.ErrCouldNotFind{ID: query.ID}
+		return loadedSbi, customerrs.CouldNotFindError{ID: query.ID}
 	}
 
 	err = result.Decode(&loadedSbi)
 	if err != nil {
 		log.Printf("Failed marshalling %v", err)
 
-		return loadedSbi, errors.ErrCouldNotMarshall{Identifier: query.ID, Type: loadedSbi, Err: err}
+		return loadedSbi, customerrs.CouldNotMarshallError{Identifier: query.ID, Type: loadedSbi, Err: err}
 	}
 
 	return loadedSbi, nil
@@ -124,7 +124,7 @@ func (s *DatabaseSbiStore) GetAll() (loadedSbis []southbound.LoadedSbi, err erro
 	if err != nil {
 		log.Printf("Failed marshalling %v", err)
 
-		return nil, errors.ErrCouldNotMarshall{Type: loadedSbis, Err: err}
+		return nil, customerrs.CouldNotMarshallError{Type: loadedSbis, Err: err}
 	}
 
 	return loadedSbis, nil
diff --git a/controller/nucleus/device.go b/controller/nucleus/device.go
index ae4057eccd389a94aeeadb4559150444e7234b3e..f14052ef1ddbc30bf82eeaab68027e4806f13746 100644
--- a/controller/nucleus/device.go
+++ b/controller/nucleus/device.go
@@ -5,10 +5,10 @@ import (
 
 	spb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/southbound"
 	tpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/transport"
+	"code.fbi.h-da.de/danet/gosdn/controller/customerrs"
 	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/device"
 	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/southbound"
 	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/transport"
-	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/errors"
 	"github.com/docker/docker/pkg/namesgenerator"
 	"github.com/google/uuid"
 	"github.com/openconfig/ygot/ygot"
@@ -42,7 +42,7 @@ func NewDevice(name string, uuidInput uuid.UUID, opt *tpb.TransportOption, sbi s
 	}
 	ygotDeepCopy, ok := root.(ygot.GoStruct)
 	if !ok {
-		return nil, &errors.ErrInvalidTypeAssertion{
+		return nil, &customerrs.InvalidTypeAssertionError{
 			Value: root,
 			Type:  (*ygot.ValidatedGoStruct)(nil),
 		}
@@ -200,7 +200,7 @@ func createValidatedCopy(d device.Device) (ygot.ValidatedGoStruct, error) {
 
 	validatedCpy, ok := cpy.(ygot.ValidatedGoStruct)
 	if !ok {
-		return nil, errors.ErrInvalidTypeAssertion{
+		return nil, customerrs.InvalidTypeAssertionError{
 			Value: validatedCpy,
 			Type:  (*ygot.ValidatedGoStruct)(nil),
 		}
diff --git a/controller/nucleus/deviceFilesystemStore.go b/controller/nucleus/deviceFilesystemStore.go
index ec10e84682ab6684ff39e6bdc8c1d95dde6eb747..eef874f5b4f11ae0367827525f03d8b75eca4d7e 100644
--- a/controller/nucleus/deviceFilesystemStore.go
+++ b/controller/nucleus/deviceFilesystemStore.go
@@ -5,8 +5,8 @@ import (
 	"io/ioutil"
 	"sync"
 
+	"code.fbi.h-da.de/danet/gosdn/controller/customerrs"
 	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/device"
-	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/errors"
 	"code.fbi.h-da.de/danet/gosdn/controller/store"
 	"github.com/google/uuid"
 	log "github.com/sirupsen/logrus"
@@ -81,7 +81,7 @@ func (s *FilesystemDeviceStore) Get(query store.Query) (device.LoadedDevice, err
 		}
 	}
 
-	return device, &errors.ErrCouldNotFind{ID: query.ID, Name: query.Name}
+	return device, &customerrs.CouldNotFindError{ID: query.ID, Name: query.Name}
 }
 
 // GetAll returns all stored devices.
@@ -146,7 +146,7 @@ func (s *FilesystemDeviceStore) Update(deviceToUpdate device.Device) error {
 		}
 	}
 
-	return &errors.ErrCouldNotUpdate{Identifier: deviceToUpdate.ID(), Type: deviceToUpdate, Err: err}
+	return &customerrs.CouldNotUpdateError{Identifier: deviceToUpdate.ID(), Type: deviceToUpdate, Err: err}
 }
 
 // Delete deletes a device from the device store.
@@ -174,5 +174,5 @@ func (s *FilesystemDeviceStore) Delete(deviceToDelete device.Device) error {
 		}
 	}
 
-	return &errors.ErrCouldNotDelete{Identifier: deviceToDelete.ID(), Type: deviceToDelete, Err: err}
+	return &customerrs.CouldNotDeleteError{Identifier: deviceToDelete.ID(), Type: deviceToDelete, Err: err}
 }
diff --git a/controller/nucleus/deviceWatcher.go b/controller/nucleus/deviceWatcher.go
index d6326e43a54e48ef378c05985380358d37023cec..b1738331b1f2a8d5df291c35cb4b17642719612f 100644
--- a/controller/nucleus/deviceWatcher.go
+++ b/controller/nucleus/deviceWatcher.go
@@ -4,10 +4,10 @@ import (
 	"context"
 	"fmt"
 
+	"code.fbi.h-da.de/danet/gosdn/controller/customerrs"
 	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/device"
 	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkdomain"
 	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/transport"
-	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/errors"
 	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/types"
 	"code.fbi.h-da.de/danet/gosdn/controller/store"
 	"code.fbi.h-da.de/danet/gosdn/forks/goarista/gnmi"
@@ -121,7 +121,7 @@ func (d *DeviceWatcher) StopAndRemoveDeviceSubscription(subID uuid.UUID) {
 func (d *DeviceWatcher) handleSubscribeResponse(resp *gpb.SubscribeResponse, subscriptionInfo *transport.SubscriptionInformation) {
 	switch resp := resp.Response.(type) {
 	case *gpb.SubscribeResponse_Error:
-		log.Error(&errors.ErrSubscribeResponse{
+		log.Error(&customerrs.SubscribeResponseError{
 			PndID:      subscriptionInfo.PndID,
 			DeviceID:   subscriptionInfo.DeviceID,
 			DeviceName: subscriptionInfo.DeviceName,
@@ -129,7 +129,7 @@ func (d *DeviceWatcher) handleSubscribeResponse(resp *gpb.SubscribeResponse, sub
 		})
 	case *gpb.SubscribeResponse_SyncResponse:
 		if !resp.SyncResponse {
-			log.Error(&errors.ErrSubscribeSyncResponse{
+			log.Error(&customerrs.SubscribeSyncResponseError{
 				PndID:      subscriptionInfo.PndID,
 				DeviceID:   subscriptionInfo.DeviceID,
 				DeviceName: subscriptionInfo.DeviceName,
diff --git a/controller/nucleus/gnmi_transport.go b/controller/nucleus/gnmi_transport.go
index f5a4482c7fe0a4bbfdb4dafa1d0d7efe776d7d6b..6ade294cecb5b14f6c65b16a2d81863aa68fdcf1 100644
--- a/controller/nucleus/gnmi_transport.go
+++ b/controller/nucleus/gnmi_transport.go
@@ -11,7 +11,7 @@ import (
 
 	ppb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/pnd"
 
-	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/errors"
+	"code.fbi.h-da.de/danet/gosdn/controller/customerrs"
 	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/types"
 	"code.fbi.h-da.de/danet/gosdn/forks/goarista/gnmi"
 	gpb "github.com/openconfig/gnmi/proto/gnmi"
@@ -40,12 +40,12 @@ type Gnmi struct {
 // Do not call directly. Use NewTransport() instead.
 func newGnmiTransport(opts *tpb.TransportOption, sbi southbound.SouthboundInterface) (*Gnmi, error) {
 	if opts == nil || sbi == nil {
-		return nil, &errors.ErrInvalidParameters{
+		return nil, &customerrs.InvalidParametersError{
 			Func:  newGnmiTransport,
 			Param: "'opts' and 'sbi' can not be nil",
 		}
 	} else if opts.TransportOption == nil {
-		return nil, &errors.ErrInvalidParameters{
+		return nil, &customerrs.InvalidParametersError{
 			Func:  newGnmiTransport,
 			Param: "'opts.TransportOption' can not be nil",
 		}
@@ -82,7 +82,7 @@ func newGnmiTransport(opts *tpb.TransportOption, sbi southbound.SouthboundInterf
 // Get takes a slice of gnmi paths, splits them and calls get for each one of them.
 func (g *Gnmi) Get(ctx context.Context, params ...string) (interface{}, error) {
 	if g.client == nil {
-		return nil, &errors.ErrNilClient{}
+		return nil, &customerrs.NilClientError{}
 	}
 	ctx = gnmi.NewContext(ctx, g.config)
 	paths := gnmi.SplitPaths(params)
@@ -96,7 +96,7 @@ func (g *Gnmi) Set(ctx context.Context, payload change.Payload, path string, sch
 		return err
 	}
 	if g.client == nil {
-		return &errors.ErrNilClient{}
+		return &customerrs.NilClientError{}
 	}
 	ctx = gnmi.NewContext(ctx, g.config)
 	return g.applyDiff(ctx, payload, p, schema)
@@ -120,7 +120,7 @@ func (g *Gnmi) applyDiff(ctx context.Context, payload change.Payload, path *gpb.
 	}
 
 	if isGNMINotificationEmpty(diff) {
-		return errors.ErrNoNewChanges{Original: payload.Original, Modified: payload.Modified}
+		return customerrs.NoNewChangesError{Original: payload.Original, Modified: payload.Modified}
 	}
 
 	var json []byte
@@ -148,7 +148,7 @@ func (g *Gnmi) applyDiff(ctx context.Context, payload change.Payload, path *gpb.
 		}
 
 		if len(nodes) == 0 || err != nil || util.IsValueNil(nodes[0].Data) {
-			return errors.ErrPathNotFound{Path: path, Err: err}
+			return customerrs.PathNotFoundError{Path: path, Err: err}
 		}
 
 		json, err = ygot.Marshal7951(nodes[0].Data, &ygot.RFC7951JSONConfig{AppendModuleName: true})
@@ -187,7 +187,7 @@ func createSetRequest(ctx context.Context, diff *gpb.Notification, json []byte,
 				},
 			}}
 		default:
-			return nil, &errors.ErrOperationNotSupported{Op: op}
+			return nil, &customerrs.OperationNotSupportedError{Op: op}
 		}
 	} else if diff.Delete != nil {
 		req.Delete = diff.Delete
@@ -198,7 +198,7 @@ func createSetRequest(ctx context.Context, diff *gpb.Notification, json []byte,
 //Subscribe subscribes to a gNMI target.
 func (g *Gnmi) Subscribe(ctx context.Context, params ...string) error {
 	if g.client == nil {
-		return &errors.ErrNilClient{}
+		return &customerrs.NilClientError{}
 	}
 	return g.subscribe(ctx)
 }
@@ -207,7 +207,7 @@ func (g *Gnmi) Subscribe(ctx context.Context, params ...string) error {
 // the callback function handles the responses received from the subscription.
 func (g *Gnmi) ControlPlaneSubscribe(ctx context.Context, subscribeCallbackFunc tpInterface.HandleSubscribeResponse, subscriptionInfo *tpInterface.SubscriptionInformation) error {
 	if g.client == nil {
-		return &errors.ErrNilClient{}
+		return &customerrs.NilClientError{}
 	}
 
 	return g.controlPlaneSubscribe(ctx, subscribeCallbackFunc, subscriptionInfo)
@@ -224,14 +224,14 @@ func (g *Gnmi) Type() string {
 func (g *Gnmi) ProcessResponse(resp interface{}, root interface{}, s *ytypes.Schema) error {
 	d, ok := root.(ygot.ValidatedGoStruct)
 	if !ok {
-		return &errors.ErrInvalidTypeAssertion{
+		return &customerrs.InvalidTypeAssertionError{
 			Value: root,
 			Type:  (*ygot.ValidatedGoStruct)(nil),
 		}
 	}
 	r, ok := resp.(*gpb.GetResponse)
 	if !ok {
-		return &errors.ErrInvalidTypeAssertion{
+		return &customerrs.InvalidTypeAssertionError{
 			Value: resp,
 			Type:  &gpb.GetResponse{},
 		}
@@ -250,7 +250,7 @@ func (g *Gnmi) ProcessResponse(resp interface{}, root interface{}, s *ytypes.Sch
 func (g *Gnmi) ProcessControlPlaneSubscribeResponse(resp *gpb.SubscribeResponse_Update, root any, schema *ytypes.Schema) error {
 	dModel, ok := root.(ygot.ValidatedGoStruct)
 	if !ok {
-		return &errors.ErrInvalidTypeAssertion{
+		return &customerrs.InvalidTypeAssertionError{
 			Value: root,
 			Type:  (*ygot.ValidatedGoStruct)(nil),
 		}
@@ -365,7 +365,7 @@ func (g *Gnmi) get(ctx context.Context, paths [][]string, origin string) (interf
 // and returns any response.
 func (g *Gnmi) getWithRequest(ctx context.Context, req *gpb.GetRequest) (interface{}, error) {
 	if req == nil {
-		return nil, &errors.ErrNil{}
+		return nil, &customerrs.NilError{}
 	}
 	log.WithFields(log.Fields{
 		"target": g.Options.Address,
@@ -384,7 +384,7 @@ func (g *Gnmi) subscribe(ctx context.Context) error {
 	ctx = gnmi.NewContext(ctx, g.config)
 	opts, ok := ctx.Value(types.CtxKeyOpts).(*gnmi.SubscribeOptions)
 	if !ok {
-		return &errors.ErrInvalidTypeAssertion{
+		return &customerrs.InvalidTypeAssertionError{
 			Value: ctx.Value(types.CtxKeyOpts),
 			Type:  &gnmi.SubscribeOptions{},
 		}
@@ -415,7 +415,7 @@ func (g *Gnmi) controlPlaneSubscribe(ctx context.Context, subcribeCallbackFunc f
 	ctx = gnmi.NewContext(ctx, g.config)
 	opts, ok := ctx.Value(types.CtxKeyOpts).(*gnmi.SubscribeOptions)
 	if !ok {
-		return &errors.ErrInvalidTypeAssertion{
+		return &customerrs.InvalidTypeAssertionError{
 			Value: ctx.Value(types.CtxKeyOpts),
 			Type:  &gnmi.SubscribeOptions{},
 		}
diff --git a/controller/nucleus/memoryDeviceStore.go b/controller/nucleus/memoryDeviceStore.go
index 2bc4290582283ec2151c72f3437e0f6f90d9025e..6fc400b425fb50a9ad721cd161f323f1c640dacf 100644
--- a/controller/nucleus/memoryDeviceStore.go
+++ b/controller/nucleus/memoryDeviceStore.go
@@ -3,8 +3,8 @@ package nucleus
 import (
 	"encoding/json"
 
+	"code.fbi.h-da.de/danet/gosdn/controller/customerrs"
 	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/device"
-	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/errors"
 	"code.fbi.h-da.de/danet/gosdn/controller/store"
 )
 
@@ -50,7 +50,7 @@ func (t *MemoryDeviceStore) Add(item device.Device) error {
 func (t *MemoryDeviceStore) Update(item device.Device) error {
 	_, ok := t.Store[item.ID().String()]
 	if !ok {
-		return errors.ErrCouldNotFind{ID: item.ID(), Name: item.Name()}
+		return customerrs.CouldNotFindError{ID: item.ID(), Name: item.Name()}
 	}
 
 	var device device.LoadedDevice
@@ -85,12 +85,12 @@ func (t *MemoryDeviceStore) Get(query store.Query) (device.LoadedDevice, error)
 		// Second search for name
 		id, ok := t.nameLookupTable[query.Name]
 		if !ok {
-			return item, errors.ErrCouldNotFind{ID: query.ID, Name: query.Name}
+			return item, customerrs.CouldNotFindError{ID: query.ID, Name: query.Name}
 		}
 
 		item, ok := t.Store[id]
 		if !ok {
-			return item, errors.ErrCouldNotFind{ID: query.ID, Name: query.Name}
+			return item, customerrs.CouldNotFindError{ID: query.ID, Name: query.Name}
 		}
 
 		return item, nil
diff --git a/controller/nucleus/memoryPndStore.go b/controller/nucleus/memoryPndStore.go
index 15cc6909e3b87a1de909ff3f71b378c0bb589c32..7cb549236657fa6076e763733d403df2332f8fca 100644
--- a/controller/nucleus/memoryPndStore.go
+++ b/controller/nucleus/memoryPndStore.go
@@ -1,9 +1,9 @@
 package nucleus
 
 import (
+	"code.fbi.h-da.de/danet/gosdn/controller/customerrs"
 	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/device"
 	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkdomain"
-	nerrors "code.fbi.h-da.de/danet/gosdn/controller/nucleus/errors"
 	"code.fbi.h-da.de/danet/gosdn/controller/store"
 	"github.com/google/uuid"
 )
@@ -45,7 +45,7 @@ func (t *MemoryPndStore) Delete(item networkdomain.NetworkDomain) error {
 func (t *MemoryPndStore) Get(query store.Query) (networkdomain.NetworkDomain, error) {
 	item, ok := t.Store[query.ID]
 	if !ok {
-		return nil, &nerrors.ErrCouldNotFind{ID: query.ID, Name: query.Name}
+		return nil, &customerrs.CouldNotFindError{ID: query.ID, Name: query.Name}
 	}
 
 	return item, nil
@@ -67,7 +67,7 @@ func (t *MemoryPndStore) GetAll() ([]networkdomain.NetworkDomain, error) {
 func (t *MemoryPndStore) PendingChannels(id uuid.UUID, parseErrors ...error) (chan device.Details, error) {
 	ch, ok := t.pendingChannels[id]
 	if !ok {
-		return nil, &nerrors.ErrCouldNotFind{ID: id}
+		return nil, &customerrs.CouldNotFindError{ID: id}
 	}
 	return ch, nil
 }
diff --git a/controller/nucleus/memorySbiStore.go b/controller/nucleus/memorySbiStore.go
index 82a27673032322b2e2c86c13bfed2171164a2ed7..3b668d0caaddea5682580bff7efe4102a874fec7 100644
--- a/controller/nucleus/memorySbiStore.go
+++ b/controller/nucleus/memorySbiStore.go
@@ -3,8 +3,8 @@ package nucleus
 import (
 	"encoding/json"
 
+	"code.fbi.h-da.de/danet/gosdn/controller/customerrs"
 	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/southbound"
-	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/errors"
 	"code.fbi.h-da.de/danet/gosdn/controller/store"
 )
 
@@ -85,12 +85,12 @@ func (t *MemorySbiStore) Get(query store.Query) (southbound.LoadedSbi, error) {
 		// Second search for name
 		id, ok := t.nameLookupTable[query.Name]
 		if !ok {
-			return item, errors.ErrCouldNotFind{ID: query.ID, Name: query.Name}
+			return item, customerrs.CouldNotFindError{ID: query.ID, Name: query.Name}
 		}
 
 		item, ok := t.Store[id]
 		if !ok {
-			return item, errors.ErrCouldNotFind{ID: query.ID, Name: query.Name}
+			return item, customerrs.CouldNotFindError{ID: query.ID, Name: query.Name}
 		}
 
 		return item, nil
diff --git a/controller/nucleus/plugin.go b/controller/nucleus/plugin.go
index 82e65626f4c59f2e8ccde923317243d4068ef930..2fd9b55ed5e563b25c9130b10a538d91cb8ca861 100644
--- a/controller/nucleus/plugin.go
+++ b/controller/nucleus/plugin.go
@@ -6,8 +6,8 @@ import (
 	"path/filepath"
 	goPlugin "plugin"
 
+	"code.fbi.h-da.de/danet/gosdn/controller/customerrs"
 	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/plugin"
-	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/errors"
 	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/util"
 	log "github.com/sirupsen/logrus"
 )
@@ -89,7 +89,7 @@ func UpdatePlugin(p plugin.Plugin) (updated bool, err error) {
 		log.Info("Plugin update executed.")
 		return true, nil
 	}
-	return false, errors.ErrPluginVersion{
+	return false, customerrs.PluginVersionError{
 		PlugID:      p.ID().String(),
 		ProvidedVer: tmpManifest.Version,
 		UsedVer:     p.Manifest().Version,
diff --git a/controller/nucleus/pndFilesystemStore.go b/controller/nucleus/pndFilesystemStore.go
index c179d5330637b0ecb7e24f123da6ba0121d9bf27..6625a93fff5b3bdaf5b7376e09c0fec1bd628e1e 100644
--- a/controller/nucleus/pndFilesystemStore.go
+++ b/controller/nucleus/pndFilesystemStore.go
@@ -6,9 +6,9 @@ import (
 	"sync"
 
 	cpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/csbi"
+	"code.fbi.h-da.de/danet/gosdn/controller/customerrs"
 	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/device"
 	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkdomain"
-	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/errors"
 	"code.fbi.h-da.de/danet/gosdn/controller/store"
 	"github.com/google/uuid"
 	log "github.com/sirupsen/logrus"
@@ -134,7 +134,7 @@ func (t *FilesystemPndStore) Delete(pndToDelete networkdomain.NetworkDomain) err
 		}
 	}
 
-	return &errors.ErrCouldNotDelete{Identifier: pndToDelete.ID(), Type: pndToDelete, Err: err}
+	return &customerrs.CouldNotDeleteError{Identifier: pndToDelete.ID(), Type: pndToDelete, Err: err}
 }
 
 // Get provides a the query interface to find a stored pnd.
@@ -153,7 +153,7 @@ func (t *FilesystemPndStore) Get(query store.Query) (networkdomain.NetworkDomain
 		}
 	}
 
-	return nil, &errors.ErrCouldNotFind{ID: query.ID, Name: query.Name}
+	return nil, &customerrs.CouldNotFindError{ID: query.ID, Name: query.Name}
 }
 
 // GetAll returns all pnds currently on the store.
@@ -171,7 +171,7 @@ func (t *FilesystemPndStore) GetAll() ([]networkdomain.NetworkDomain, error) {
 func (t *FilesystemPndStore) PendingChannels(id uuid.UUID, parseErrors ...error) (chan device.Details, error) {
 	ch, ok := t.pendingChannels[id]
 	if !ok {
-		return nil, &errors.ErrCouldNotFind{ID: id}
+		return nil, &customerrs.CouldNotFindError{ID: id}
 	}
 	return ch, nil
 }
diff --git a/controller/nucleus/principalNetworkDomain.go b/controller/nucleus/principalNetworkDomain.go
index ea13d0988d345d8a4d0b5dcc82d17bb6fda6f470..05216b02ba98a36a71e593ddab73b800904f8e14 100644
--- a/controller/nucleus/principalNetworkDomain.go
+++ b/controller/nucleus/principalNetworkDomain.go
@@ -3,7 +3,7 @@ package nucleus
 import (
 	"context"
 	"encoding/json"
-	goErrors "errors"
+	"errors"
 	"fmt"
 	"io"
 	"os"
@@ -25,12 +25,12 @@ import (
 	"google.golang.org/grpc"
 	"google.golang.org/protobuf/proto"
 
+	"code.fbi.h-da.de/danet/gosdn/controller/customerrs"
 	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/change"
 	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/device"
 	eventInterfaces "code.fbi.h-da.de/danet/gosdn/controller/interfaces/event"
 	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkdomain"
 	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/southbound"
-	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/errors"
 	gGnmi "code.fbi.h-da.de/danet/gosdn/controller/nucleus/util/gnmi"
 
 	"code.fbi.h-da.de/danet/gosdn/controller/store"
@@ -416,7 +416,7 @@ func (pnd *pndImplementation) Request(uuid uuid.UUID, path string) (proto.Messag
 	}
 	resp, ok := res.(proto.Message)
 	if !ok {
-		return nil, &errors.ErrInvalidTypeAssertion{
+		return nil, &customerrs.InvalidTypeAssertionError{
 			Value: res,
 			Type:  (*proto.Message)(nil),
 		}
@@ -518,7 +518,7 @@ func (pnd *pndImplementation) ChangeOND(duid uuid.UUID, operation ppb.ApiOperati
 	}
 
 	if operation != ppb.ApiOperation_API_OPERATION_DELETE && len(value) != 1 {
-		return uuid.Nil, &errors.ErrInvalidParameters{
+		return uuid.Nil, &customerrs.InvalidParametersError{
 			Func:  pnd.ChangeOND,
 			Param: value,
 		}
@@ -550,7 +550,7 @@ func (pnd *pndImplementation) ChangeOND(duid uuid.UUID, operation ppb.ApiOperati
 			return uuid.Nil, err
 		}
 	default:
-		return uuid.Nil, &errors.ErrOperationNotSupported{Op: operation}
+		return uuid.Nil, &customerrs.OperationNotSupportedError{Op: operation}
 	}
 
 	ygot.PruneEmptyBranches(validatedCpy)
@@ -874,7 +874,7 @@ func saveStreamToFile[T StreamClient](sc T, filename string, id uuid.UUID) (err
 	// clean path to prevent attackers to get access to to directories elsewhere on the system
 	path = filepath.Clean(path)
 	if !strings.HasPrefix(path, folderName) {
-		return &errors.ErrInvalidParameters{
+		return &customerrs.InvalidParametersError{
 			Func:  saveStreamToFile[T],
 			Param: path,
 		}
@@ -901,7 +901,7 @@ func saveStreamToFile[T StreamClient](sc T, filename string, id uuid.UUID) (err
 	for {
 		payload, err := sc.Recv()
 		if err != nil {
-			if goErrors.Is(err, io.EOF) {
+			if errors.Is(err, io.EOF) {
 				break
 			}
 			closeErr := sc.CloseSend()
diff --git a/controller/nucleus/restconf_transport.go b/controller/nucleus/restconf_transport.go
index c00c852d68ba44c6bfe0735b2ac70bfd70c9cabf..42a6b44f8bff98a6be023ce49540623ad3b7d0cb 100644
--- a/controller/nucleus/restconf_transport.go
+++ b/controller/nucleus/restconf_transport.go
@@ -3,7 +3,7 @@ package nucleus
 import (
 	"context"
 
-	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/errors"
+	"code.fbi.h-da.de/danet/gosdn/controller/customerrs"
 
 	"github.com/openconfig/ygot/ytypes"
 )
@@ -14,17 +14,17 @@ type Restconf struct{}
 
 // Get not yet implemented.
 func (r Restconf) Get(ctx context.Context, params ...string) (interface{}, error) {
-	return nil, &errors.ErrNotYetImplemented{}
+	return nil, &customerrs.NotYetImplementedError{}
 }
 
 // Set not yet implemented.
 func (r Restconf) Set(ctx context.Context, params ...interface{}) error {
-	return &errors.ErrNotYetImplemented{}
+	return &customerrs.NotYetImplementedError{}
 }
 
 // Subscribe not yet implemented.
 func (r Restconf) Subscribe(ctx context.Context, params ...string) error {
-	return &errors.ErrNotYetImplemented{}
+	return &customerrs.NotYetImplementedError{}
 }
 
 // Type not yet implemented.
@@ -34,10 +34,10 @@ func (r Restconf) Type() string {
 
 // GetOptions not yet implemented.
 func (r Restconf) GetOptions() interface{} {
-	return &errors.ErrNotYetImplemented{}
+	return &customerrs.NotYetImplementedError{}
 }
 
 // ProcessResponse not yet implemented.
 func (r Restconf) ProcessResponse(resp interface{}, root interface{}, models *ytypes.Schema) error {
-	return &errors.ErrNotYetImplemented{}
+	return &customerrs.NotYetImplementedError{}
 }
diff --git a/controller/nucleus/sbiFilesystemStore.go b/controller/nucleus/sbiFilesystemStore.go
index 7ead5bf270594cd5105ac6bebf5ecaea8e2d8d0c..d75a2f3e1d0bbba6232459c42334ffdd9fee3b0a 100644
--- a/controller/nucleus/sbiFilesystemStore.go
+++ b/controller/nucleus/sbiFilesystemStore.go
@@ -5,8 +5,8 @@ import (
 	"io/ioutil"
 	"sync"
 
+	"code.fbi.h-da.de/danet/gosdn/controller/customerrs"
 	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/southbound"
-	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/errors"
 	"code.fbi.h-da.de/danet/gosdn/controller/store"
 
 	"github.com/google/uuid"
@@ -113,7 +113,7 @@ func (s *FilesystemSbiStore) Delete(sbiToDelete southbound.SouthboundInterface)
 			return nil
 		}
 	}
-	return &errors.ErrCouldNotDelete{Identifier: sbiToDelete.ID(), Type: sbiToDelete, Err: err}
+	return &customerrs.CouldNotDeleteError{Identifier: sbiToDelete.ID(), Type: sbiToDelete, Err: err}
 }
 
 // Get takes a SouthboundInterface's UUID or name and returns the SouthboundInterface. If the requested
@@ -135,7 +135,7 @@ func (s *FilesystemSbiStore) Get(query store.Query) (southbound.LoadedSbi, error
 		}
 	}
 
-	return sbi, &errors.ErrCouldNotFind{ID: query.ID, Name: query.Name}
+	return sbi, &customerrs.CouldNotFindError{ID: query.ID, Name: query.Name}
 }
 
 // GetAll returns all SBIs.
diff --git a/controller/nucleus/southbound.go b/controller/nucleus/southbound.go
index 4e3f4c1bdd211d84efe5ab6d616ca4535d644e70..9ab599b3e81a82d31a0b2f97eae4cf8dd276b1a3 100644
--- a/controller/nucleus/southbound.go
+++ b/controller/nucleus/southbound.go
@@ -4,7 +4,7 @@ import (
 	"encoding/json"
 	"path/filepath"
 
-	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/errors"
+	"code.fbi.h-da.de/danet/gosdn/controller/customerrs"
 	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/util"
 	"code.fbi.h-da.de/danet/gosdn/models/generated/openconfig"
 	"go.mongodb.org/mongo-driver/bson"
@@ -43,7 +43,7 @@ func NewSBI(southbound spb.Type, sbUUID ...uuid.UUID) (southbound.SouthboundInte
 		}
 		return sbip, nil
 	default:
-		return nil, errors.ErrUnsupportedSbiType{Type: southbound}
+		return nil, customerrs.UnsupportedSbiTypeError{Type: southbound}
 	}
 }
 
@@ -137,7 +137,7 @@ func unmarshal(schema *ytypes.Schema, bytes []byte, path *gpb.Path, goStruct ygo
 	}
 	validatedDeepCopy, ok := root.(ygot.ValidatedGoStruct)
 	if !ok {
-		return &errors.ErrInvalidTypeAssertion{
+		return &customerrs.InvalidTypeAssertionError{
 			Value: root,
 			Type:  (*ygot.ValidatedGoStruct)(nil),
 		}
@@ -151,7 +151,7 @@ func unmarshal(schema *ytypes.Schema, bytes []byte, path *gpb.Path, goStruct ygo
 	}
 	validatedCreatedNode, ok := createdNode.(ygot.ValidatedGoStruct)
 	if !ok {
-		return &errors.ErrInvalidTypeAssertion{
+		return &customerrs.InvalidTypeAssertionError{
 			Value: createdNode,
 			Type:  (*ygot.ValidatedGoStruct)(nil),
 		}
@@ -261,7 +261,7 @@ func (p *SouthboundPlugin) load(id uuid.UUID) error {
 	sbi, ok := symbol.(southbound.SouthboundInterface)
 	if !ok {
 		p.state = plugin.FAULTY
-		return &errors.ErrInvalidTypeAssertion{
+		return &customerrs.InvalidTypeAssertionError{
 			Value: symbol,
 			Type:  (*southbound.SouthboundInterface)(nil),
 		}
diff --git a/controller/nucleus/transport.go b/controller/nucleus/transport.go
index a2db1ff28b60a17e3ee64f4c311f10bbfe071364..4836c694f470110176362aabcd73831bccefc7a6 100644
--- a/controller/nucleus/transport.go
+++ b/controller/nucleus/transport.go
@@ -2,33 +2,33 @@ package nucleus
 
 import (
 	tpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/transport"
+	"code.fbi.h-da.de/danet/gosdn/controller/customerrs"
 	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/southbound"
 	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/transport"
-	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/errors"
 )
 
 // NewTransport receives TransportOptions and returns an appropriate Transport
 // implementation.
 func NewTransport(opts *tpb.TransportOption, sbi southbound.SouthboundInterface) (transport.Transport, error) {
 	if opts == nil {
-		return nil, &errors.ErrInvalidParameters{
+		return nil, &customerrs.InvalidParametersError{
 			Func:  NewTransport,
 			Param: "'opt' cannot be 'nil'",
 		}
 	}
 	if sbi == nil {
-		return nil, errors.ErrInvalidParameters{
+		return nil, customerrs.InvalidParametersError{
 			Param: "'sbi' cannot be 'nil'",
 		}
 	}
 	if !validTransportOptions(opts) {
-		return nil, &errors.ErrInvalidTransportOptions{Opt: opts}
+		return nil, &customerrs.InvalidTransportOptionsError{Opt: opts}
 	}
 	switch o := opts.TransportOption.(type) {
 	case *tpb.TransportOption_GnmiTransportOption:
 		return newGnmiTransport(opts, sbi)
 	default:
-		return nil, &errors.ErrInvalidTransportOptions{Opt: o}
+		return nil, &customerrs.InvalidTransportOptionsError{Opt: o}
 	}
 }
 
diff --git a/controller/rbac/databaseRoleStore.go b/controller/rbac/databaseRoleStore.go
index 871edf47e2401487e8c636fef35af586f085e155..a28fd8251968a2f9aeff6c90d943b15ccc13a5a5 100644
--- a/controller/rbac/databaseRoleStore.go
+++ b/controller/rbac/databaseRoleStore.go
@@ -3,9 +3,9 @@ package rbac
 import (
 	"fmt"
 
+	"code.fbi.h-da.de/danet/gosdn/controller/customerrs"
 	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/rbac"
 	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/database"
-	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/errors"
 	"code.fbi.h-da.de/danet/gosdn/controller/store"
 	"github.com/google/uuid"
 	log "github.com/sirupsen/logrus"
@@ -39,7 +39,7 @@ func (s *DatabaseRoleStore) Add(roleToAdd rbac.Role) (err error) {
 			return nil
 		}
 
-		return errors.ErrCouldNotCreate{Identifier: roleToAdd.ID(), Type: roleToAdd, Err: err}
+		return customerrs.CouldNotCreateError{Identifier: roleToAdd.ID(), Type: roleToAdd, Err: err}
 	}
 
 	return nil
@@ -60,7 +60,7 @@ func (s *DatabaseRoleStore) Delete(roleToDelete rbac.Role) (err error) {
 		Collection(s.roleStoreName).
 		DeleteOne(ctx, bson.D{primitive.E{Key: "_id", Value: roleToDelete.ID().String()}})
 	if err != nil {
-		return errors.ErrCouldNotDelete{Identifier: roleToDelete.ID(), Type: roleToDelete, Err: err}
+		return customerrs.CouldNotDeleteError{Identifier: roleToDelete.ID(), Type: roleToDelete, Err: err}
 	}
 
 	return nil
@@ -102,13 +102,13 @@ func (s *DatabaseRoleStore) getByID(idOfRole uuid.UUID) (loadedRole rbac.LoadedR
 	collection := db.Collection(s.roleStoreName)
 	result := collection.FindOne(ctx, bson.D{primitive.E{Key: "_id", Value: idOfRole.String()}})
 	if result == nil {
-		return loadedRole, errors.ErrCouldNotFind{ID: idOfRole}
+		return loadedRole, customerrs.CouldNotFindError{ID: idOfRole}
 	}
 
 	err = result.Decode(&loadedRole)
 	if err != nil {
 		log.Printf("Failed marshalling %v", err)
-		return loadedRole, errors.ErrCouldNotMarshall{Identifier: idOfRole, Type: loadedRole, Err: err}
+		return loadedRole, customerrs.CouldNotMarshallError{Identifier: idOfRole, Type: loadedRole, Err: err}
 	}
 
 	return loadedRole, nil
@@ -128,13 +128,13 @@ func (s *DatabaseRoleStore) getByName(nameOfRole string) (loadedRole rbac.Loaded
 	collection := db.Collection(s.roleStoreName)
 	result := collection.FindOne(ctx, bson.D{primitive.E{Key: "rolename", Value: nameOfRole}})
 	if result == nil {
-		return loadedRole, errors.ErrCouldNotFind{Name: nameOfRole}
+		return loadedRole, customerrs.CouldNotFindError{Name: nameOfRole}
 	}
 
 	err = result.Decode(&loadedRole)
 	if err != nil {
 		log.Printf("Failed marshalling %v", err)
-		return loadedRole, errors.ErrCouldNotMarshall{Identifier: nameOfRole, Type: loadedRole, Err: err}
+		return loadedRole, customerrs.CouldNotMarshallError{Identifier: nameOfRole, Type: loadedRole, Err: err}
 	}
 
 	return loadedRole, nil
@@ -169,7 +169,7 @@ func (s *DatabaseRoleStore) GetAll() (loadedRoles []rbac.LoadedRole, err error)
 	if err != nil {
 		log.Printf("Failed marshalling %v", err)
 
-		return nil, errors.ErrCouldNotMarshall{Type: loadedRoles, Err: err}
+		return nil, customerrs.CouldNotMarshallError{Type: loadedRoles, Err: err}
 	}
 	return loadedRoles, nil
 }
@@ -203,7 +203,7 @@ func (s *DatabaseRoleStore) Update(roleToUpdate rbac.Role) (err error) {
 	if err != nil {
 		log.Printf("Could not update Role: %v", err)
 
-		return errors.ErrCouldNotUpdate{Identifier: roleToUpdate.ID(), Type: roleToUpdate, Err: err}
+		return customerrs.CouldNotUpdateError{Identifier: roleToUpdate.ID(), Type: roleToUpdate, Err: err}
 	}
 
 	return nil
diff --git a/controller/rbac/databaseUserStore.go b/controller/rbac/databaseUserStore.go
index b1f6eeee754ddf193e67a0939c9fe818a57678d8..c478610e680913bc979a77fd03b93efbfd8d6625 100644
--- a/controller/rbac/databaseUserStore.go
+++ b/controller/rbac/databaseUserStore.go
@@ -3,9 +3,9 @@ package rbac
 import (
 	"fmt"
 
+	"code.fbi.h-da.de/danet/gosdn/controller/customerrs"
 	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/rbac"
 	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/database"
-	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/errors"
 	"code.fbi.h-da.de/danet/gosdn/controller/store"
 	"github.com/google/uuid"
 	log "github.com/sirupsen/logrus"
@@ -39,7 +39,7 @@ func (s *DatabaseUserStore) Add(userToAdd rbac.User) (err error) {
 			return nil
 		}
 
-		return errors.ErrCouldNotCreate{Identifier: userToAdd.ID(), Type: userToAdd, Err: err}
+		return customerrs.CouldNotCreateError{Identifier: userToAdd.ID(), Type: userToAdd, Err: err}
 	}
 
 	return nil
@@ -60,7 +60,7 @@ func (s *DatabaseUserStore) Delete(userToDelete rbac.User) (err error) {
 		Collection(s.userStoreName).
 		DeleteOne(ctx, bson.D{primitive.E{Key: "_id", Value: userToDelete.ID().String()}})
 	if err != nil {
-		return errors.ErrCouldNotDelete{Identifier: userToDelete.ID(), Type: userToDelete, Err: err}
+		return customerrs.CouldNotDeleteError{Identifier: userToDelete.ID(), Type: userToDelete, Err: err}
 	}
 
 	return nil
@@ -102,13 +102,13 @@ func (s *DatabaseUserStore) getByID(idOfUser uuid.UUID) (loadedUser rbac.LoadedU
 	collection := db.Collection(s.userStoreName)
 	result := collection.FindOne(ctx, bson.D{primitive.E{Key: "_id", Value: idOfUser.String()}})
 	if result == nil {
-		return loadedUser, errors.ErrCouldNotFind{ID: idOfUser}
+		return loadedUser, customerrs.CouldNotFindError{ID: idOfUser}
 	}
 
 	err = result.Decode(&loadedUser)
 	if err != nil {
 		log.Printf("Failed marshalling %v", err)
-		return loadedUser, errors.ErrCouldNotMarshall{Identifier: idOfUser, Type: loadedUser, Err: err}
+		return loadedUser, customerrs.CouldNotMarshallError{Identifier: idOfUser, Type: loadedUser, Err: err}
 	}
 
 	return loadedUser, nil
@@ -128,13 +128,13 @@ func (s *DatabaseUserStore) getByName(nameOfUser string) (loadedUser rbac.Loaded
 	collection := db.Collection(s.userStoreName)
 	result := collection.FindOne(ctx, bson.D{primitive.E{Key: "username", Value: nameOfUser}})
 	if result == nil {
-		return loadedUser, errors.ErrCouldNotFind{Name: nameOfUser}
+		return loadedUser, customerrs.CouldNotFindError{Name: nameOfUser}
 	}
 
 	err = result.Decode(&loadedUser)
 	if err != nil {
 		log.Printf("Failed marshalling %v", err)
-		return loadedUser, errors.ErrCouldNotMarshall{Identifier: nameOfUser, Type: loadedUser, Err: err}
+		return loadedUser, customerrs.CouldNotMarshallError{Identifier: nameOfUser, Type: loadedUser, Err: err}
 	}
 
 	return loadedUser, nil
@@ -169,7 +169,7 @@ func (s *DatabaseUserStore) GetAll() (loadedUsers []rbac.LoadedUser, err error)
 	if err != nil {
 		log.Printf("Failed marshalling %v", err)
 
-		return nil, errors.ErrCouldNotMarshall{Type: loadedUsers, Err: err}
+		return nil, customerrs.CouldNotMarshallError{Type: loadedUsers, Err: err}
 	}
 	return loadedUsers, nil
 }
@@ -204,7 +204,7 @@ func (s *DatabaseUserStore) Update(userToUpdate rbac.User) (err error) {
 	if err != nil {
 		log.Printf("Could not update User: %v", err)
 
-		return errors.ErrCouldNotUpdate{Identifier: userToUpdate.ID(), Type: userToUpdate, Err: err}
+		return customerrs.CouldNotUpdateError{Identifier: userToUpdate.ID(), Type: userToUpdate, Err: err}
 	}
 
 	return nil
diff --git a/controller/rbac/memoryRoleStore.go b/controller/rbac/memoryRoleStore.go
index 103f1c1a229992225027c2264b07761f06fadb66..0c1ef261d29611c50f57a66a7bba49a043614a64 100644
--- a/controller/rbac/memoryRoleStore.go
+++ b/controller/rbac/memoryRoleStore.go
@@ -3,8 +3,8 @@ package rbac
 import (
 	"encoding/json"
 
+	"code.fbi.h-da.de/danet/gosdn/controller/customerrs"
 	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/rbac"
-	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/errors"
 	"code.fbi.h-da.de/danet/gosdn/controller/store"
 )
 
@@ -56,7 +56,7 @@ func (s *MemoryRoleStore) Delete(item rbac.Role) error {
 func (s *MemoryRoleStore) Update(item rbac.Role) error {
 	_, ok := s.Store[item.ID().String()]
 	if !ok {
-		return errors.ErrCouldNotFind{ID: item.ID(), Name: item.Name()}
+		return customerrs.CouldNotFindError{ID: item.ID(), Name: item.Name()}
 	}
 
 	var role rbac.LoadedRole
@@ -84,12 +84,12 @@ func (s *MemoryRoleStore) Get(query store.Query) (rbac.LoadedRole, error) {
 		// Second search for name
 		id, ok := s.nameLookupTable[query.Name]
 		if !ok {
-			return item, errors.ErrCouldNotFind{ID: query.ID, Name: query.Name}
+			return item, customerrs.CouldNotFindError{ID: query.ID, Name: query.Name}
 		}
 
 		item, ok := s.Store[id]
 		if !ok {
-			return item, errors.ErrCouldNotFind{ID: query.ID, Name: query.Name}
+			return item, customerrs.CouldNotFindError{ID: query.ID, Name: query.Name}
 		}
 
 		return item, nil
diff --git a/controller/rbac/memoryUserStore.go b/controller/rbac/memoryUserStore.go
index 0387d2994eedacc4452140dd0cc1718d91c27dd1..e8d08ad4322d75c1f4b2f48f68c382448fa00f14 100644
--- a/controller/rbac/memoryUserStore.go
+++ b/controller/rbac/memoryUserStore.go
@@ -3,8 +3,8 @@ package rbac
 import (
 	"encoding/json"
 
+	"code.fbi.h-da.de/danet/gosdn/controller/customerrs"
 	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/rbac"
-	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/errors"
 	"code.fbi.h-da.de/danet/gosdn/controller/store"
 )
 
@@ -56,7 +56,7 @@ func (s *MemoryUserStore) Delete(item rbac.User) error {
 func (s *MemoryUserStore) Update(item rbac.User) error {
 	_, ok := s.Store[item.ID().String()]
 	if !ok {
-		return errors.ErrCouldNotFind{ID: item.ID(), Name: item.Name()}
+		return customerrs.CouldNotFindError{ID: item.ID(), Name: item.Name()}
 	}
 
 	var user rbac.LoadedUser
@@ -84,12 +84,12 @@ func (s *MemoryUserStore) Get(query store.Query) (rbac.LoadedUser, error) {
 		// Second search for name
 		id, ok := s.nameLookupTable[query.Name]
 		if !ok {
-			return item, errors.ErrCouldNotFind{ID: query.ID, Name: query.Name}
+			return item, customerrs.CouldNotFindError{ID: query.ID, Name: query.Name}
 		}
 
 		item, ok := s.Store[id]
 		if !ok {
-			return item, errors.ErrCouldNotFind{ID: query.ID, Name: query.Name}
+			return item, customerrs.CouldNotFindError{ID: query.ID, Name: query.Name}
 		}
 
 		return item, nil
diff --git a/controller/rbac/roleFileSystemStore.go b/controller/rbac/roleFileSystemStore.go
index b6785cd66b8a5e499ca2b792bbc8a2db9079916d..bd4102357a3ed4d571222c77f3ee89f585abae11 100644
--- a/controller/rbac/roleFileSystemStore.go
+++ b/controller/rbac/roleFileSystemStore.go
@@ -5,8 +5,8 @@ import (
 	"io/ioutil"
 	"sync"
 
+	"code.fbi.h-da.de/danet/gosdn/controller/customerrs"
 	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/rbac"
-	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/errors"
 	"code.fbi.h-da.de/danet/gosdn/controller/store"
 	log "github.com/sirupsen/logrus"
 )
@@ -109,7 +109,7 @@ func (s *FileSystemRoleStore) Delete(roleToDelete rbac.Role) error {
 		}
 	}
 
-	return &errors.ErrCouldNotDelete{Identifier: roleToDelete.ID(), Type: roleToDelete, Err: err}
+	return &customerrs.CouldNotDeleteError{Identifier: roleToDelete.ID(), Type: roleToDelete, Err: err}
 }
 
 //Get takes a Roles ID and return the Role if found.
@@ -129,7 +129,7 @@ func (s *FileSystemRoleStore) Get(query store.Query) (rbac.LoadedRole, error) {
 		}
 	}
 
-	return role, &errors.ErrCouldNotFind{ID: query.ID, Name: query.Name}
+	return role, &customerrs.CouldNotFindError{ID: query.ID, Name: query.Name}
 }
 
 // GetAll returns all the Roles.
@@ -166,5 +166,5 @@ func (s *FileSystemRoleStore) Update(roleToUpdate rbac.Role) error {
 		}
 	}
 
-	return &errors.ErrCouldNotUpdate{Identifier: roleToUpdate.ID(), Type: roleToUpdate, Err: err}
+	return &customerrs.CouldNotUpdateError{Identifier: roleToUpdate.ID(), Type: roleToUpdate, Err: err}
 }
diff --git a/controller/rbac/userFileSystemStore.go b/controller/rbac/userFileSystemStore.go
index 4c181842f6821e4e9e3ea843365a47815e1e8006..1842d54dd3fb7a89e0b1e0615ddd36137ed615d0 100644
--- a/controller/rbac/userFileSystemStore.go
+++ b/controller/rbac/userFileSystemStore.go
@@ -5,8 +5,8 @@ import (
 	"io/ioutil"
 	"sync"
 
+	"code.fbi.h-da.de/danet/gosdn/controller/customerrs"
 	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/rbac"
-	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/errors"
 	"code.fbi.h-da.de/danet/gosdn/controller/store"
 	log "github.com/sirupsen/logrus"
 )
@@ -109,7 +109,7 @@ func (s *FileSystemUserStore) Delete(userToDelete rbac.User) error {
 		}
 	}
 
-	return &errors.ErrCouldNotDelete{Identifier: userToDelete.ID(), Type: userToDelete, Err: err}
+	return &customerrs.CouldNotDeleteError{Identifier: userToDelete.ID(), Type: userToDelete, Err: err}
 }
 
 //Get takes a Users ID and return the User if found.
@@ -129,7 +129,7 @@ func (s *FileSystemUserStore) Get(query store.Query) (rbac.LoadedUser, error) {
 			return user, nil
 		}
 	}
-	return user, &errors.ErrCouldNotFind{ID: query.ID, Name: query.Name}
+	return user, &customerrs.CouldNotFindError{ID: query.ID, Name: query.Name}
 }
 
 // GetAll returns all the Users.
@@ -166,5 +166,5 @@ func (s *FileSystemUserStore) Update(userToUpdate rbac.User) error {
 		}
 	}
 
-	return &errors.ErrCouldNotUpdate{Identifier: userToUpdate.ID(), Type: userToUpdate, Err: err}
+	return &customerrs.CouldNotUpdateError{Identifier: userToUpdate.ID(), Type: userToUpdate, Err: err}
 }
diff --git a/controller/store/changeStores.go b/controller/store/changeStores.go
index 3b38a6e001771fd50a193191c20c590a32a1c812..b312753591aa67d924934c7c8af2a41c8ff52853 100644
--- a/controller/store/changeStores.go
+++ b/controller/store/changeStores.go
@@ -1,8 +1,8 @@
 package store
 
 import (
+	"code.fbi.h-da.de/danet/gosdn/controller/customerrs"
 	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/change"
-	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/errors"
 	"github.com/google/uuid"
 	log "github.com/sirupsen/logrus"
 
@@ -28,7 +28,7 @@ func (s *ChangeStore) GetChange(id uuid.UUID) (change.Change, error) {
 	}
 	c, ok := item.(change.Change)
 	if !ok {
-		return nil, &errors.ErrInvalidTypeAssertion{
+		return nil, &customerrs.InvalidTypeAssertionError{
 			Value: c,
 			Type:  (*change.Change)(nil),
 		}
diff --git a/controller/store/oldGenericStore.go b/controller/store/oldGenericStore.go
index a08d8c628efd5b5406847e29cb2cd60efff7870d..e5ac25eea7f124db31e13eb21f8d3ed12a7d18f2 100644
--- a/controller/store/oldGenericStore.go
+++ b/controller/store/oldGenericStore.go
@@ -4,8 +4,8 @@ import (
 	"reflect"
 	"sync"
 
+	"code.fbi.h-da.de/danet/gosdn/controller/customerrs"
 	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/store"
-	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/errors"
 
 	"github.com/google/uuid"
 	log "github.com/sirupsen/logrus"
@@ -32,7 +32,7 @@ func (s *genericStore) Exists(id uuid.UUID) bool {
 // Add adds a Storable to the Store.
 func (s *genericStore) Add(item store.Storable) error {
 	if s.Exists(item.ID()) {
-		return &errors.ErrAlreadyExists{Item: item}
+		return &customerrs.AlreadyExistsError{Item: item}
 	}
 	s.storeLock.Lock()
 	s.Store[item.ID()] = item
@@ -50,7 +50,7 @@ func (s *genericStore) Add(item store.Storable) error {
 // use GetDevice, GetPND, GetSBI, or GetChange respectively.
 func (s *genericStore) Get(id uuid.UUID) (store.Storable, error) {
 	if !s.Exists(id) {
-		return nil, &errors.ErrCouldNotFind{ID: id}
+		return nil, &customerrs.CouldNotFindError{ID: id}
 	}
 	log.WithFields(log.Fields{
 		"uuid": id,
@@ -64,7 +64,7 @@ func (s *genericStore) Get(id uuid.UUID) (store.Storable, error) {
 // exist in the Store an error is returned.
 func (s *genericStore) Delete(id uuid.UUID) error {
 	if !s.Exists(id) {
-		return &errors.ErrCouldNotFind{ID: id}
+		return &customerrs.CouldNotFindError{ID: id}
 	}
 	s.storeLock.Lock()
 	delete(s.Store, id)
diff --git a/controller/store/utils.go b/controller/store/utils.go
index b6866b6cb994ce377aa9f6da3f3746051b812628..985bb928f40150817983516bf70c6aac119a31e2 100644
--- a/controller/store/utils.go
+++ b/controller/store/utils.go
@@ -6,7 +6,7 @@ import (
 	"path/filepath"
 
 	"code.fbi.h-da.de/danet/gosdn/controller/config"
-	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/errors"
+	"code.fbi.h-da.de/danet/gosdn/controller/customerrs"
 	"github.com/google/uuid"
 	log "github.com/sirupsen/logrus"
 )
@@ -21,7 +21,7 @@ func FromString(id string) (uuid.UUID, error) {
 		log.WithFields(log.Fields{
 			"identifier": id,
 		}).Debug(err)
-		return uuid.Nil, &errors.ErrInvalidUUID{DeviceName: id}
+		return uuid.Nil, &customerrs.InvalidUUIDError{DeviceName: id}
 	}
 
 	return idAsUUID, nil
diff --git a/controller/test/integration/nucleusIntegration_test.go b/controller/test/integration/nucleusIntegration_test.go
index 36b977a62b8a8db6ea6875f958ee4ce7ae8b7b2f..5cf80f4c2ea16e2a7c5076e87b99e729d81cb190 100644
--- a/controller/test/integration/nucleusIntegration_test.go
+++ b/controller/test/integration/nucleusIntegration_test.go
@@ -16,8 +16,8 @@ import (
 	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/change"
 	"code.fbi.h-da.de/danet/gosdn/models/generated/openconfig"
 
+	"code.fbi.h-da.de/danet/gosdn/controller/customerrs"
 	"code.fbi.h-da.de/danet/gosdn/controller/nucleus"
-	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/errors"
 	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/types"
 	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/util/proto"
 	"code.fbi.h-da.de/danet/gosdn/forks/goarista/gnmi"
@@ -249,7 +249,7 @@ func TestGnmi_SetValidIntegration(t *testing.T) {
 				}
 				r, ok := resp.(*gpb.GetResponse)
 				if !ok {
-					t.Error(&errors.ErrInvalidTypeAssertion{
+					t.Error(&customerrs.InvalidTypeAssertionError{
 						Value: resp,
 						Type:  &gpb.GetResponse{},
 					})
@@ -524,7 +524,7 @@ func TestGnmi_CapabilitiesIntegration(t *testing.T) {
 			}
 			g, ok := tr.(*nucleus.Gnmi)
 			if !ok {
-				t.Error(&errors.ErrInvalidTypeAssertion{
+				t.Error(&customerrs.InvalidTypeAssertionError{
 					Value: tr,
 					Type:  &nucleus.Gnmi{},
 				})
diff --git a/controller/test/plugin/csbiAdditions.go b/controller/test/plugin/csbiAdditions.go
index 68d99fba78eae05283ba1901c79cb89ef4610422..d56abea584c1a18d1f8b5c41fdf4f3eb0251fb72 100644
--- a/controller/test/plugin/csbiAdditions.go
+++ b/controller/test/plugin/csbiAdditions.go
@@ -2,7 +2,7 @@ package main
 
 import (
 	spb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/southbound"
-	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/errors"
+	"code.fbi.h-da.de/danet/gosdn/controller/customerrs"
 	"github.com/google/uuid"
 	gpb "github.com/openconfig/gnmi/proto/gnmi"
 	"github.com/openconfig/goyang/pkg/yang"
@@ -45,7 +45,7 @@ func unmarshal(schema *ytypes.Schema, bytes []byte, path *gpb.Path, goStruct ygo
 	}
 	validatedDeepCopy, ok := root.(ygot.GoStruct)
 	if !ok {
-		return &errors.ErrInvalidTypeAssertion{}
+		return &customerrs.InvalidTypeAssertionError{}
 	}
 
 	// returns the node we want to fill with the data contained in 'bytes',
@@ -56,7 +56,7 @@ func unmarshal(schema *ytypes.Schema, bytes []byte, path *gpb.Path, goStruct ygo
 	}
 	validatedCreatedNode, ok := createdNode.(ygot.GoStruct)
 	if !ok {
-		return &errors.ErrInvalidTypeAssertion{}
+		return &customerrs.InvalidTypeAssertionError{}
 	}
 
 	if err := Unmarshal(bytes, validatedCreatedNode, opt...); err != nil {
diff --git a/controller/topology/nodes/nodeStore.go b/controller/topology/nodes/nodeStore.go
index 3f69c80d0671c8548a3ca1656ca57867cec9b231..cd4f28fbcbda6ec972deddee4235426e8cccee6e 100644
--- a/controller/topology/nodes/nodeStore.go
+++ b/controller/topology/nodes/nodeStore.go
@@ -3,8 +3,8 @@ package nodes
 import (
 	"fmt"
 
+	"code.fbi.h-da.de/danet/gosdn/controller/customerrs"
 	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/database"
-	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/errors"
 	query "code.fbi.h-da.de/danet/gosdn/controller/store"
 
 	"github.com/google/uuid"
@@ -41,7 +41,7 @@ func (s *DatabaseNodeStore) Get(query query.Query) (Node, error) {
 	if query.ID.String() != "" {
 		loadedNode, err := s.getByID(query.ID)
 		if err != nil {
-			return loadedNode, errors.ErrCouldNotFind{ID: query.ID, Name: query.Name}
+			return loadedNode, customerrs.CouldNotFindError{ID: query.ID, Name: query.Name}
 		}
 
 		return loadedNode, nil
@@ -49,7 +49,7 @@ func (s *DatabaseNodeStore) Get(query query.Query) (Node, error) {
 
 	loadedNode, err := s.getByName(query.Name)
 	if err != nil {
-		return loadedNode, errors.ErrCouldNotFind{ID: query.ID, Name: query.Name}
+		return loadedNode, customerrs.CouldNotFindError{ID: query.ID, Name: query.Name}
 	}
 
 	return loadedNode, nil
@@ -71,12 +71,12 @@ func (s *DatabaseNodeStore) getByID(idOfNode uuid.UUID) (loadedNode Node, err er
 	collection := db.Collection(s.storeName)
 	result := collection.FindOne(ctx, bson.D{primitive.E{Key: "_id", Value: idAsByteArray}})
 	if result == nil {
-		return loadedNode, errors.ErrCouldNotFind{ID: idOfNode}
+		return loadedNode, customerrs.CouldNotFindError{ID: idOfNode}
 	}
 
 	err = result.Decode(&loadedNode)
 	if err != nil {
-		return loadedNode, errors.ErrCouldNotMarshall{Identifier: idOfNode, Type: loadedNode, Err: err}
+		return loadedNode, customerrs.CouldNotMarshallError{Identifier: idOfNode, Type: loadedNode, Err: err}
 	}
 
 	return loadedNode, nil
@@ -96,12 +96,12 @@ func (s *DatabaseNodeStore) getByName(nameOfNode string) (loadedNode Node, err e
 	collection := db.Collection(s.storeName)
 	result := collection.FindOne(ctx, bson.D{primitive.E{Key: "name", Value: nameOfNode}})
 	if result == nil {
-		return loadedNode, errors.ErrCouldNotFind{Name: nameOfNode}
+		return loadedNode, customerrs.CouldNotFindError{Name: nameOfNode}
 	}
 
 	err = result.Decode(&loadedNode)
 	if err != nil {
-		return loadedNode, errors.ErrCouldNotMarshall{Identifier: nameOfNode, Type: loadedNode, Err: err}
+		return loadedNode, customerrs.CouldNotMarshallError{Identifier: nameOfNode, Type: loadedNode, Err: err}
 	}
 
 	return loadedNode, nil
@@ -133,7 +133,7 @@ func (s *DatabaseNodeStore) GetAll() (loadedNode []Node, err error) {
 
 	err = cursor.All(ctx, &loadedNode)
 	if err != nil {
-		return loadedNode, errors.ErrCouldNotMarshall{Type: loadedNode, Err: err}
+		return loadedNode, customerrs.CouldNotMarshallError{Type: loadedNode, Err: err}
 	}
 
 	return loadedNode, nil
@@ -154,7 +154,7 @@ func (s *DatabaseNodeStore) Add(node Node) (err error) {
 		Collection(s.storeName).
 		InsertOne(ctx, node)
 	if err != nil {
-		return errors.ErrCouldNotCreate{Identifier: node.ID, Type: node, Err: err}
+		return customerrs.CouldNotCreateError{Identifier: node.ID, Type: node, Err: err}
 	}
 
 	return nil
@@ -188,7 +188,7 @@ func (s *DatabaseNodeStore) Update(node Node) (err error) {
 			ctx, bson.M{"_id": node.ID.String()}, update, &opt).
 		Decode(&updatedLoadedNodes)
 	if err != nil {
-		return errors.ErrCouldNotUpdate{Identifier: node.ID, Type: node, Err: err}
+		return customerrs.CouldNotUpdateError{Identifier: node.ID, Type: node, Err: err}
 	}
 
 	return nil
diff --git a/controller/topology/ports/portStore.go b/controller/topology/ports/portStore.go
index 0c44a0b3bfd45b1c76725752205f3d0d1a7eda6d..70ce2dfa90f0047b5b45b278f5f049a52251d857 100644
--- a/controller/topology/ports/portStore.go
+++ b/controller/topology/ports/portStore.go
@@ -3,9 +3,9 @@ package ports
 import (
 	"fmt"
 
+	"code.fbi.h-da.de/danet/gosdn/controller/customerrs"
 	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/device"
 	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/database"
-	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/errors"
 	query "code.fbi.h-da.de/danet/gosdn/controller/store"
 
 	"github.com/google/uuid"
@@ -42,7 +42,7 @@ func (s *DatabasePortStore) Get(query query.Query) (Port, error) {
 	if query.ID.String() != "" {
 		loadedPort, err := s.getByID(query.ID)
 		if err != nil {
-			return loadedPort, errors.ErrCouldNotFind{ID: query.ID, Name: query.Name}
+			return loadedPort, customerrs.CouldNotFindError{ID: query.ID, Name: query.Name}
 		}
 
 		return loadedPort, nil
@@ -50,7 +50,7 @@ func (s *DatabasePortStore) Get(query query.Query) (Port, error) {
 
 	loadedPort, err := s.getByName(query.Name)
 	if err != nil {
-		return loadedPort, errors.ErrCouldNotFind{ID: query.ID, Name: query.Name}
+		return loadedPort, customerrs.CouldNotFindError{ID: query.ID, Name: query.Name}
 	}
 
 	return loadedPort, nil
@@ -72,12 +72,12 @@ func (s *DatabasePortStore) getByID(idOfPort uuid.UUID) (loadedPort Port, err er
 	collection := db.Collection(s.storeName)
 	result := collection.FindOne(ctx, bson.D{primitive.E{Key: "_id", Value: idAsByteArray}})
 	if result == nil {
-		return loadedPort, errors.ErrCouldNotFind{ID: idOfPort}
+		return loadedPort, customerrs.CouldNotFindError{ID: idOfPort}
 	}
 
 	err = result.Decode(&loadedPort)
 	if err != nil {
-		return loadedPort, errors.ErrCouldNotMarshall{Identifier: idOfPort, Type: loadedPort, Err: err}
+		return loadedPort, customerrs.CouldNotMarshallError{Identifier: idOfPort, Type: loadedPort, Err: err}
 	}
 
 	return loadedPort, nil
@@ -97,12 +97,12 @@ func (s *DatabasePortStore) getByName(nameOfPort string) (loadedPort Port, err e
 	collection := db.Collection(s.storeName)
 	result := collection.FindOne(ctx, bson.D{primitive.E{Key: "name", Value: nameOfPort}})
 	if result == nil {
-		return loadedPort, errors.ErrCouldNotFind{Name: nameOfPort}
+		return loadedPort, customerrs.CouldNotFindError{Name: nameOfPort}
 	}
 
 	err = result.Decode(&loadedPort)
 	if err != nil {
-		return loadedPort, errors.ErrCouldNotMarshall{Identifier: nameOfPort, Type: loadedPort, Err: err}
+		return loadedPort, customerrs.CouldNotMarshallError{Identifier: nameOfPort, Type: loadedPort, Err: err}
 	}
 
 	return loadedPort, nil
@@ -135,7 +135,7 @@ func (s *DatabasePortStore) GetAll() (loadedPorts []Port, err error) {
 
 	err = cursor.All(ctx, &loadedPorts)
 	if err != nil {
-		return loadedPorts, errors.ErrCouldNotMarshall{Type: loadedPorts, Err: err}
+		return loadedPorts, customerrs.CouldNotMarshallError{Type: loadedPorts, Err: err}
 	}
 
 	return loadedPorts, nil
@@ -156,7 +156,7 @@ func (s *DatabasePortStore) Add(port Port) (err error) {
 		Collection(s.storeName).
 		InsertOne(ctx, port)
 	if err != nil {
-		return errors.ErrCouldNotCreate{Identifier: port.ID, Type: port, Err: err}
+		return customerrs.CouldNotCreateError{Identifier: port.ID, Type: port, Err: err}
 	}
 
 	return nil
@@ -190,7 +190,7 @@ func (s *DatabasePortStore) Update(port Port) (err error) {
 			ctx, bson.M{"_id": port.ID.String()}, update, &opt).
 		Decode(&updatedLoadedDevice)
 	if err != nil {
-		return errors.ErrCouldNotUpdate{Identifier: port.ID, Type: port, Err: err}
+		return customerrs.CouldNotUpdateError{Identifier: port.ID, Type: port, Err: err}
 	}
 
 	return nil
diff --git a/controller/topology/routing-tables/routingTableStore.go b/controller/topology/routing-tables/routingTableStore.go
index 0bdd82c7772784973e5664a9a3a7cd5a7e8255d1..1c70c68a1d2965f5daa6877cf7056854fbfecc93 100644
--- a/controller/topology/routing-tables/routingTableStore.go
+++ b/controller/topology/routing-tables/routingTableStore.go
@@ -3,8 +3,8 @@ package routingtables
 import (
 	"fmt"
 
+	"code.fbi.h-da.de/danet/gosdn/controller/customerrs"
 	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/database"
-	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/errors"
 	query "code.fbi.h-da.de/danet/gosdn/controller/store"
 
 	"github.com/google/uuid"
@@ -41,7 +41,7 @@ func (s *DatabaseRoutingTableStore) Get(query query.Query) (RoutingTable, error)
 	if query.ID.String() != "" {
 		loadedRoutingTable, err := s.getByID(query.ID)
 		if err != nil {
-			return loadedRoutingTable, errors.ErrCouldNotFind{ID: query.ID, Name: query.Name}
+			return loadedRoutingTable, customerrs.CouldNotFindError{ID: query.ID, Name: query.Name}
 		}
 
 		return loadedRoutingTable, nil
@@ -49,7 +49,7 @@ func (s *DatabaseRoutingTableStore) Get(query query.Query) (RoutingTable, error)
 
 	loadedRoutingTable, err := s.getByName(query.Name)
 	if err != nil {
-		return loadedRoutingTable, errors.ErrCouldNotFind{ID: query.ID, Name: query.Name}
+		return loadedRoutingTable, customerrs.CouldNotFindError{ID: query.ID, Name: query.Name}
 	}
 
 	return loadedRoutingTable, nil
@@ -69,12 +69,12 @@ func (s *DatabaseRoutingTableStore) getByID(idOfRoutingTable uuid.UUID) (routing
 	collection := db.Collection(s.storeName)
 	result := collection.FindOne(ctx, bson.D{primitive.E{Key: "_id", Value: idOfRoutingTable.String()}})
 	if result == nil {
-		return routingTable, errors.ErrCouldNotFind{ID: idOfRoutingTable}
+		return routingTable, customerrs.CouldNotFindError{ID: idOfRoutingTable}
 	}
 
 	err = result.Decode(&routingTable)
 	if err != nil {
-		return routingTable, errors.ErrCouldNotMarshall{Identifier: idOfRoutingTable, Type: routingTable, Err: err}
+		return routingTable, customerrs.CouldNotMarshallError{Identifier: idOfRoutingTable, Type: routingTable, Err: err}
 	}
 
 	return routingTable, nil
@@ -94,12 +94,12 @@ func (s *DatabaseRoutingTableStore) getByName(nameOfRoutingTable string) (loaded
 	collection := db.Collection(s.storeName)
 	result := collection.FindOne(ctx, bson.D{primitive.E{Key: "name", Value: nameOfRoutingTable}})
 	if result == nil {
-		return loadedRoutingTable, errors.ErrCouldNotFind{Name: nameOfRoutingTable}
+		return loadedRoutingTable, customerrs.CouldNotFindError{Name: nameOfRoutingTable}
 	}
 
 	err = result.Decode(&loadedRoutingTable)
 	if err != nil {
-		return loadedRoutingTable, errors.ErrCouldNotMarshall{Type: loadedRoutingTable, Err: err}
+		return loadedRoutingTable, customerrs.CouldNotMarshallError{Type: loadedRoutingTable, Err: err}
 	}
 
 	return loadedRoutingTable, nil
@@ -132,7 +132,7 @@ func (s *DatabaseRoutingTableStore) GetAll() (loadedRoutingTable []RoutingTable,
 
 	err = cursor.All(ctx, &loadedRoutingTable)
 	if err != nil {
-		return loadedRoutingTable, errors.ErrCouldNotMarshall{Type: loadedRoutingTable, Err: err}
+		return loadedRoutingTable, customerrs.CouldNotMarshallError{Type: loadedRoutingTable, Err: err}
 	}
 
 	return loadedRoutingTable, nil
@@ -153,7 +153,7 @@ func (s *DatabaseRoutingTableStore) Add(routingTable RoutingTable) (err error) {
 		Collection(s.storeName).
 		InsertOne(ctx, routingTable)
 	if err != nil {
-		return errors.ErrCouldNotCreate{Identifier: routingTable.ID, Type: routingTable, Err: err}
+		return customerrs.CouldNotCreateError{Identifier: routingTable.ID, Type: routingTable, Err: err}
 	}
 
 	return nil
@@ -187,7 +187,7 @@ func (s *DatabaseRoutingTableStore) Update(routingTable RoutingTable) (err error
 			ctx, bson.M{"_id": routingTable.ID.String()}, update, &opt).
 		Decode(&updatedLoadedRoutingTable)
 	if err != nil {
-		return errors.ErrCouldNotUpdate{Identifier: routingTable.ID, Type: routingTable, Err: err}
+		return customerrs.CouldNotUpdateError{Identifier: routingTable.ID, Type: routingTable, Err: err}
 	}
 
 	return nil
diff --git a/controller/topology/topologyStore.go b/controller/topology/topologyStore.go
index dc12b10af93c0bc226592f0498e54078c55fb7f8..e8118388eb96b6ce504e29b3cb942c9a18d861b1 100644
--- a/controller/topology/topologyStore.go
+++ b/controller/topology/topologyStore.go
@@ -3,8 +3,8 @@ package topology
 import (
 	"fmt"
 
+	"code.fbi.h-da.de/danet/gosdn/controller/customerrs"
 	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/database"
-	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/errors"
 	query "code.fbi.h-da.de/danet/gosdn/controller/store"
 	"code.fbi.h-da.de/danet/gosdn/controller/topology/links"
 
@@ -42,7 +42,7 @@ func (s *DatabaseTopologyStore) Get(query query.Query) (links.Link, error) {
 	if query.ID.String() != "" {
 		loadedTopology, err := s.getByID(query.ID)
 		if err != nil {
-			return loadedTopology, errors.ErrCouldNotFind{ID: query.ID, Name: query.Name}
+			return loadedTopology, customerrs.CouldNotFindError{ID: query.ID, Name: query.Name}
 		}
 
 		return loadedTopology, nil
@@ -50,7 +50,7 @@ func (s *DatabaseTopologyStore) Get(query query.Query) (links.Link, error) {
 
 	loadedTopology, err := s.getByName(query.Name)
 	if err != nil {
-		return loadedTopology, errors.ErrCouldNotFind{ID: query.ID, Name: query.Name}
+		return loadedTopology, customerrs.CouldNotFindError{ID: query.ID, Name: query.Name}
 	}
 
 	return loadedTopology, nil
@@ -70,12 +70,12 @@ func (s *DatabaseTopologyStore) getByID(idOfTopology uuid.UUID) (loadedTopology
 	collection := db.Collection(s.storeName)
 	result := collection.FindOne(ctx, bson.D{primitive.E{Key: "_id", Value: idOfTopology.String()}})
 	if result == nil {
-		return loadedTopology, errors.ErrCouldNotFind{ID: idOfTopology}
+		return loadedTopology, customerrs.CouldNotFindError{ID: idOfTopology}
 	}
 
 	err = result.Decode(&loadedTopology)
 	if err != nil {
-		return loadedTopology, errors.ErrCouldNotMarshall{Identifier: idOfTopology, Type: loadedTopology, Err: err}
+		return loadedTopology, customerrs.CouldNotMarshallError{Identifier: idOfTopology, Type: loadedTopology, Err: err}
 	}
 
 	return loadedTopology, nil
@@ -95,12 +95,12 @@ func (s *DatabaseTopologyStore) getByName(nameOfTopology string) (loadedTopology
 	collection := db.Collection(s.storeName)
 	result := collection.FindOne(ctx, bson.D{primitive.E{Key: "name", Value: nameOfTopology}})
 	if result == nil {
-		return loadedTopology, errors.ErrCouldNotFind{Name: nameOfTopology}
+		return loadedTopology, customerrs.CouldNotFindError{Name: nameOfTopology}
 	}
 
 	err = result.Decode(&loadedTopology)
 	if err != nil {
-		return loadedTopology, errors.ErrCouldNotMarshall{Identifier: nameOfTopology, Type: loadedTopology, Err: err}
+		return loadedTopology, customerrs.CouldNotMarshallError{Identifier: nameOfTopology, Type: loadedTopology, Err: err}
 	}
 
 	return loadedTopology, nil
@@ -133,7 +133,7 @@ func (s *DatabaseTopologyStore) GetAll() (loadedTopology []links.Link, err error
 
 	err = cursor.All(ctx, &loadedTopology)
 	if err != nil {
-		return loadedTopology, errors.ErrCouldNotMarshall{Type: loadedTopology, Err: err}
+		return loadedTopology, customerrs.CouldNotMarshallError{Type: loadedTopology, Err: err}
 	}
 
 	return loadedTopology, nil
@@ -154,7 +154,7 @@ func (s *DatabaseTopologyStore) Add(link links.Link) (err error) {
 		Collection(s.storeName).
 		InsertOne(ctx, link)
 	if err != nil {
-		return errors.ErrCouldNotCreate{Identifier: link.ID, Type: link, Err: err}
+		return customerrs.CouldNotCreateError{Identifier: link.ID, Type: link, Err: err}
 	}
 
 	return nil
@@ -188,7 +188,7 @@ func (s *DatabaseTopologyStore) Update(linkToUpdate links.Link) (err error) {
 			ctx, bson.M{"_id": linkToUpdate.ID.String()}, update, &opt).
 		Decode(&updatedLink)
 	if err != nil {
-		return errors.ErrCouldNotUpdate{Identifier: linkToUpdate.ID, Type: linkToUpdate, Err: err}
+		return customerrs.CouldNotUpdateError{Identifier: linkToUpdate.ID, Type: linkToUpdate, Err: err}
 	}
 
 	return nil
diff --git a/csbi/deployment.go b/csbi/deployment.go
index 8cf1da9709e06aec3e2ede877cde7bfc2b09450a..7cd3769058f15e284d66f9dccb064eb0503b7cae 100644
--- a/csbi/deployment.go
+++ b/csbi/deployment.go
@@ -7,7 +7,7 @@ import (
 	"time"
 
 	pb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/csbi"
-	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/errors"
+	"code.fbi.h-da.de/danet/gosdn/controller/customerrs"
 	"github.com/google/uuid"
 	log "github.com/sirupsen/logrus"
 )
@@ -64,7 +64,7 @@ func (store DeploymentStore) Get(id uuid.UUID) (Deployment, error) {
 	log.Tracef("requested %v from store", id)
 	deployment := <-store.in
 	if deployment.ID != id {
-		return Deployment{}, &errors.ErrCouldNotFind{ID: id}
+		return Deployment{}, &customerrs.CouldNotFindError{ID: id}
 	}
 	log.Tracef("received %v from store", id)
 	log.Tracef("leaving Get func for %v", id)
@@ -80,7 +80,7 @@ func (store DeploymentStore) Delete(id uuid.UUID) error {
 	log.Tracef("requested %v from store", id)
 	deployment := <-store.in
 	if deployment.ID != id {
-		return &errors.ErrCouldNotFind{ID: id}
+		return &customerrs.CouldNotFindError{ID: id}
 	}
 	log.Tracef("received %v from store", id)
 	deployment.State = pb.State_STATE_DECOMMISSIONED
diff --git a/csbi/discover.go b/csbi/discover.go
index fb270c1119bff0f88e40b064e445c49dcdcc88e5..38f6edcefb5d277e9351f55e4ec6d89d456edd5f 100644
--- a/csbi/discover.go
+++ b/csbi/discover.go
@@ -6,8 +6,8 @@ import (
 
 	spb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/southbound"
 	tpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/transport"
+	"code.fbi.h-da.de/danet/gosdn/controller/customerrs"
 	"code.fbi.h-da.de/danet/gosdn/controller/nucleus"
-	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/errors"
 	"github.com/openconfig/gnmi/proto/gnmi"
 )
 
@@ -24,7 +24,7 @@ func Discover(ctx context.Context, opts *tpb.TransportOption) ([]*gnmi.ModelData
 	}
 	transport, ok := t.(*nucleus.Gnmi)
 	if !ok {
-		return nil, &errors.ErrInvalidTypeAssertion{}
+		return nil, &customerrs.InvalidTypeAssertionError{}
 	}
 	resp, err := transport.Capabilities(ctx)
 	if err != nil {
@@ -32,7 +32,7 @@ func Discover(ctx context.Context, opts *tpb.TransportOption) ([]*gnmi.ModelData
 	}
 	capabilities, ok := resp.(*gnmi.CapabilityResponse)
 	if !ok {
-		return nil, &errors.ErrInvalidTypeAssertion{
+		return nil, &customerrs.InvalidTypeAssertionError{
 			Value: resp,
 			Type:  reflect.TypeOf(&gnmi.CapabilityResponse{}),
 		}
diff --git a/csbi/resources/csbiAdditions.go b/csbi/resources/csbiAdditions.go
index 68d99fba78eae05283ba1901c79cb89ef4610422..d56abea584c1a18d1f8b5c41fdf4f3eb0251fb72 100644
--- a/csbi/resources/csbiAdditions.go
+++ b/csbi/resources/csbiAdditions.go
@@ -2,7 +2,7 @@ package main
 
 import (
 	spb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/southbound"
-	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/errors"
+	"code.fbi.h-da.de/danet/gosdn/controller/customerrs"
 	"github.com/google/uuid"
 	gpb "github.com/openconfig/gnmi/proto/gnmi"
 	"github.com/openconfig/goyang/pkg/yang"
@@ -45,7 +45,7 @@ func unmarshal(schema *ytypes.Schema, bytes []byte, path *gpb.Path, goStruct ygo
 	}
 	validatedDeepCopy, ok := root.(ygot.GoStruct)
 	if !ok {
-		return &errors.ErrInvalidTypeAssertion{}
+		return &customerrs.InvalidTypeAssertionError{}
 	}
 
 	// returns the node we want to fill with the data contained in 'bytes',
@@ -56,7 +56,7 @@ func unmarshal(schema *ytypes.Schema, bytes []byte, path *gpb.Path, goStruct ygo
 	}
 	validatedCreatedNode, ok := createdNode.(ygot.GoStruct)
 	if !ok {
-		return &errors.ErrInvalidTypeAssertion{}
+		return &customerrs.InvalidTypeAssertionError{}
 	}
 
 	if err := Unmarshal(bytes, validatedCreatedNode, opt...); err != nil {
diff --git a/csbi/resources/go.mod b/csbi/resources/go.mod
index 08239bf2af46e610fc73aa408217c71b176bde16..e8fe79116253740fa5750a706ad4f5f2c4bb231a 100644
--- a/csbi/resources/go.mod
+++ b/csbi/resources/go.mod
@@ -3,60 +3,60 @@ module code.fbi.h-da.de/danet/gosdn/csbi-autogen
 go 1.18
 
 require (
-	code.fbi.h-da.de/danet/gosdn v0.0.3-0.20220525102012-c7ccf6deae80
+	code.fbi.h-da.de/danet/gosdn v0.0.3-0.20220805102430-8465989fb8b3
 	github.com/google/uuid v1.3.0
-	github.com/openconfig/gnmi v0.0.0-20220503232738-6eb133c65a13
-	github.com/openconfig/goyang v1.0.0
-	github.com/openconfig/ygot v0.20.0
-	github.com/sirupsen/logrus v1.8.1
-	github.com/spf13/viper v1.11.0
-	google.golang.org/grpc v1.46.0
+	github.com/openconfig/gnmi v0.0.0-20220617175856-41246b1b3507
+	github.com/openconfig/goyang v1.1.0
+	github.com/openconfig/ygot v0.22.1
+	github.com/sirupsen/logrus v1.9.0
+	github.com/spf13/viper v1.12.0
+	google.golang.org/grpc v1.48.0
 )
 
 require (
 	github.com/beorn7/perks v1.0.1 // indirect
 	github.com/cespare/xxhash/v2 v2.1.2 // indirect
-	github.com/docker/docker v20.10.15+incompatible // indirect
+	github.com/docker/docker v20.10.17+incompatible // indirect
 	github.com/fsnotify/fsnotify v1.5.4 // indirect
-	github.com/go-stack/stack v1.8.0 // indirect
 	github.com/golang/glog v1.0.0 // indirect
 	github.com/golang/protobuf v1.5.2 // indirect
 	github.com/golang/snappy v0.0.4 // indirect
 	github.com/google/go-cmp v0.5.8 // indirect
-	github.com/grpc-ecosystem/grpc-gateway/v2 v2.10.0 // indirect
+	github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.0 // indirect
 	github.com/hashicorp/hcl v1.0.0 // indirect
-	github.com/klauspost/compress v1.13.6 // indirect
-	github.com/kr/text v0.2.0 // indirect
+	github.com/klauspost/compress v1.15.9 // indirect
 	github.com/kylelemons/godebug v1.1.0 // indirect
 	github.com/magiconair/properties v1.8.6 // indirect
 	github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect
 	github.com/mitchellh/mapstructure v1.5.0 // indirect
+	github.com/montanaflynn/stats v0.6.6 // indirect
 	github.com/pelletier/go-toml v1.9.5 // indirect
-	github.com/pelletier/go-toml/v2 v2.0.0 // indirect
+	github.com/pelletier/go-toml/v2 v2.0.2 // indirect
 	github.com/pkg/errors v0.9.1 // indirect
-	github.com/prometheus/client_golang v1.12.1 // indirect
+	github.com/prometheus/client_golang v1.12.2 // indirect
 	github.com/prometheus/client_model v0.2.0 // indirect
-	github.com/prometheus/common v0.34.0 // indirect
-	github.com/prometheus/procfs v0.7.3 // indirect
-	github.com/spf13/afero v1.8.2 // indirect
-	github.com/spf13/cast v1.4.1 // indirect
+	github.com/prometheus/common v0.37.0 // indirect
+	github.com/prometheus/procfs v0.8.0 // indirect
+	github.com/rabbitmq/amqp091-go v1.4.0 // indirect
+	github.com/spf13/afero v1.9.2 // indirect
+	github.com/spf13/cast v1.5.0 // indirect
 	github.com/spf13/jwalterweatherman v1.1.0 // indirect
 	github.com/spf13/pflag v1.0.5 // indirect
-	github.com/subosito/gotenv v1.2.0 // indirect
+	github.com/subosito/gotenv v1.4.0 // indirect
 	github.com/xdg-go/pbkdf2 v1.0.0 // indirect
-	github.com/xdg-go/scram v1.0.2 // indirect
-	github.com/xdg-go/stringprep v1.0.2 // indirect
-	github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d // indirect
-	go.mongodb.org/mongo-driver v1.8.4 // indirect
-	golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4 // indirect
-	golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4 // indirect
-	golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect
-	golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6 // indirect
+	github.com/xdg-go/scram v1.1.1 // indirect
+	github.com/xdg-go/stringprep v1.0.3 // indirect
+	github.com/youmark/pkcs8 v0.0.0-20201027041543-1326539a0a0a // indirect
+	go.mongodb.org/mongo-driver v1.10.0 // indirect
+	golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa // indirect
+	golang.org/x/net v0.0.0-20220728030405-41545e8bf201 // indirect
+	golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4 // indirect
+	golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10 // indirect
 	golang.org/x/text v0.3.7 // indirect
-	google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3 // indirect
-	google.golang.org/protobuf v1.28.0 // indirect
+	google.golang.org/genproto v0.0.0-20220725144611-272f38e5d71b // indirect
+	google.golang.org/protobuf v1.28.1 // indirect
 	gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
-	gopkg.in/ini.v1 v1.66.4 // indirect
+	gopkg.in/ini.v1 v1.66.6 // indirect
 	gopkg.in/yaml.v2 v2.4.0 // indirect
-	gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect
+	gopkg.in/yaml.v3 v3.0.1 // indirect
 )
diff --git a/csbi/resources/go.sum b/csbi/resources/go.sum
index 714b0acade1344c9b968b42df17e61114f29acda..0a1cb22c18eb2e5a18b21e11b1898997e73c5ac2 100644
--- a/csbi/resources/go.sum
+++ b/csbi/resources/go.sum
@@ -35,10 +35,8 @@ cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohl
 cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=
 cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
 cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo=
-code.fbi.h-da.de/danet/gosdn v0.0.3-0.20220510144954-5247307a8950 h1:TriIUgw7XziEqqVJdJBBwY7PgThfO5q4mul1znlzc98=
-code.fbi.h-da.de/danet/gosdn v0.0.3-0.20220510144954-5247307a8950/go.mod h1:jWerZy0rEvKzNQFF758gyTj/HXdQted+jlZZZdNdQiI=
-code.fbi.h-da.de/danet/gosdn v0.0.3-0.20220525102012-c7ccf6deae80 h1:iTbJMFIUxE4bbygnMxztzEP4GHk+jx6Di4APeBgcWD0=
-code.fbi.h-da.de/danet/gosdn v0.0.3-0.20220525102012-c7ccf6deae80/go.mod h1:mmivI0sk29KRFVc8Sc/PVq4A64RzzKMT//gBvXRCd1U=
+code.fbi.h-da.de/danet/gosdn v0.0.3-0.20220805102430-8465989fb8b3 h1:ajIh7gY4Cd5vCBkCjD/m5R3rEkDCw8j9TPg7KQjk3rA=
+code.fbi.h-da.de/danet/gosdn v0.0.3-0.20220805102430-8465989fb8b3/go.mod h1:2lpx5wgQLmxLexKRYXotXOL7lpn2BkvvmGFtPqZx45Y=
 dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
 github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
@@ -54,7 +52,6 @@ github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+Ce
 github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
 github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
 github.com/cenkalti/backoff/v4 v4.0.0/go.mod h1:eEew/i+1Q6OrCDZh3WiXYv3+nJwBASZ8Bog/87DQnVg=
-github.com/cenkalti/backoff/v4 v4.1.0/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw=
 github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
 github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
 github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE=
@@ -70,12 +67,11 @@ github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XP
 github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
 github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
 github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
-github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/docker/docker v20.10.15+incompatible h1:dk9FewY/9Xwm4ay/HViEEHSQuM/kL4F+JaG6GQdgmGo=
-github.com/docker/docker v20.10.15+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
+github.com/docker/docker v20.10.17+incompatible h1:JYCuMrWaVNophQTOrMMoSwudOVEfcegoZZrleKc1xwE=
+github.com/docker/docker v20.10.17+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
 github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
 github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
 github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
@@ -84,6 +80,7 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.m
 github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
 github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE=
 github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
+github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE=
 github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI=
 github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU=
 github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
@@ -98,7 +95,6 @@ github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9
 github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
 github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
 github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs=
-github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk=
 github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
 github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
 github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
@@ -172,8 +168,8 @@ github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+
 github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
 github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g=
 github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
-github.com/grpc-ecosystem/grpc-gateway/v2 v2.10.0 h1:ESEyqQqXXFIcImj/BE8oKEX37Zsuceb2cZI+EL/zNCY=
-github.com/grpc-ecosystem/grpc-gateway/v2 v2.10.0/go.mod h1:XnLCLFp3tjoZJszVKjfpyAK6J8sYIcQXWQxmqLWF21I=
+github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.0 h1:Ghn7copILfeIg0y8sTGRppI1bd8I4l2VN3cob0Xeqwg=
+github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.0/go.mod h1:dnjr4snxnhRSn5GWqJUva2AoMbeaxyAcepvc0Tg8lXk=
 github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
 github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
 github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
@@ -190,19 +186,19 @@ github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/X
 github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
 github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
 github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
-github.com/klauspost/compress v1.13.6 h1:P76CopJELS0TiO2mebmnzgWaajssP/EszplttgQxcgc=
 github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
+github.com/klauspost/compress v1.15.9 h1:wKRjX6JRtDdrE9qwa4b/Cip7ACOshUI4smpCQanqjSY=
+github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU=
 github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
 github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
 github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
 github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
 github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
-github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI=
 github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
+github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0=
 github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
 github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
 github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
-github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
 github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=
 github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
 github.com/magiconair/properties v1.8.6 h1:5ibWZ6iY0NctNGWo87LalDlEZ6R41TqbbDamhfG/Qzo=
@@ -218,27 +214,29 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN
 github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
 github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
 github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc=
+github.com/montanaflynn/stats v0.6.6 h1:Duep6KMIDpY4Yo11iFsvyqJDyfzLF9+sndUKT+v64GQ=
+github.com/montanaflynn/stats v0.6.6/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow=
 github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
 github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
 github.com/openconfig/gnmi v0.0.0-20200414194230-1597cc0f2600/go.mod h1:M/EcuapNQgvzxo1DDXHK4tx3QpYM/uG4l591v33jG2A=
 github.com/openconfig/gnmi v0.0.0-20200508230933-d19cebf5e7be/go.mod h1:M/EcuapNQgvzxo1DDXHK4tx3QpYM/uG4l591v33jG2A=
-github.com/openconfig/gnmi v0.0.0-20220503232738-6eb133c65a13 h1:6MHJ6YxMDr/dhS4mnM3sZxmolqgJw36ibOtwXNHTo6M=
-github.com/openconfig/gnmi v0.0.0-20220503232738-6eb133c65a13/go.mod h1:h365Ifq35G6kLZDQlRvrccTt2LKK90VpjZLMNGxJRYc=
+github.com/openconfig/gnmi v0.0.0-20220617175856-41246b1b3507 h1:tv9HygDMXnoGyWuLmNCodMV2+PK6+uT/ndAxDVzsUUQ=
+github.com/openconfig/gnmi v0.0.0-20220617175856-41246b1b3507/go.mod h1:ycJVRtLs20E2c1WD+9oacgxbrBFwQygd8/uaOuGMlfc=
 github.com/openconfig/goyang v0.0.0-20200115183954-d0a48929f0ea/go.mod h1:dhXaV0JgHJzdrHi2l+w0fZrwArtXL7jEFoiqLEdmkvU=
 github.com/openconfig/goyang v0.2.2/go.mod h1:vX61x01Q46AzbZUzG617vWqh/cB+aisc+RrNkXRd3W8=
-github.com/openconfig/goyang v1.0.0 h1:nYaFu7BOAk/eQn4CgAUjgYPfp3J6CdXrBryp32E5CjI=
 github.com/openconfig/goyang v1.0.0/go.mod h1:vX61x01Q46AzbZUzG617vWqh/cB+aisc+RrNkXRd3W8=
+github.com/openconfig/goyang v1.1.0 h1:noOfMyWq1eXo9djmJ9MtY4qg/j/5z03lgsku7jvxPws=
+github.com/openconfig/goyang v1.1.0/go.mod h1:vX61x01Q46AzbZUzG617vWqh/cB+aisc+RrNkXRd3W8=
 github.com/openconfig/gribi v0.1.1-0.20210423184541-ce37eb4ba92f/go.mod h1:OoH46A2kV42cIXGyviYmAlGmn6cHjGduyC2+I9d/iVs=
-github.com/openconfig/grpctunnel v0.0.0-20210610163803-fde4a9dc048d/go.mod h1:x9tAZ4EwqCQ0jI8D6S8Yhw9Z0ee7/BxWQX0k0Uib5Q8=
 github.com/openconfig/ygot v0.6.0/go.mod h1:o30svNf7O0xK+R35tlx95odkDmZWS9JyWWQSmIhqwAs=
 github.com/openconfig/ygot v0.10.4/go.mod h1:oCQNdXnv7dWc8scTDgoFkauv1wwplJn5HspHcjlxSAQ=
-github.com/openconfig/ygot v0.20.0 h1:j4VjbdJ2ogXrEsTA7KWMaN/85YNpd+Q8qzPr8Gqjds8=
-github.com/openconfig/ygot v0.20.0/go.mod h1:7ZiBFNc4n/1Hkv2v2dAEpxisqDznp0JVpLR13Toe4AY=
+github.com/openconfig/ygot v0.22.1 h1:jOpaEuOE1JaLDkDbDTza45YOxhn8ghroK7xxXHt4v0I=
+github.com/openconfig/ygot v0.22.1/go.mod h1:7ZiBFNc4n/1Hkv2v2dAEpxisqDznp0JVpLR13Toe4AY=
 github.com/pborman/getopt v0.0.0-20190409184431-ee0cd42419d3/go.mod h1:85jBQOZwpVEaDAr341tbn15RS4fCAsIst0qp7i8ex1o=
 github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8=
 github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c=
-github.com/pelletier/go-toml/v2 v2.0.0 h1:P7Bq0SaI8nsexyay5UAyDo+ICWy5MQPgEZ5+l8JQTKo=
-github.com/pelletier/go-toml/v2 v2.0.0/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo=
+github.com/pelletier/go-toml/v2 v2.0.2 h1:+jQXlF3scKIcSEKkdHzXhCTDLPFi5r1wnK6yPS+49Gw=
+github.com/pelletier/go-toml/v2 v2.0.2/go.mod h1:MovirKjgVRESsAvNZlAjtFwV867yGuwRkXbG66OzopI=
 github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
@@ -250,8 +248,9 @@ github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXP
 github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
 github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=
 github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0=
-github.com/prometheus/client_golang v1.12.1 h1:ZiaPsmm9uiBeaSMRznKsCDNtPCS0T3JVDGF+06gjBzk=
 github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY=
+github.com/prometheus/client_golang v1.12.2 h1:51L9cDoUHVrXx4zWYlcLQIZ+d+VXHgqnYKkIuq4g/34=
+github.com/prometheus/client_golang v1.12.2/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY=
 github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
 github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
 github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
@@ -261,31 +260,35 @@ github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y8
 github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo=
 github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc=
 github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls=
-github.com/prometheus/common v0.34.0 h1:RBmGO9d/FVjqHT0yUGQwBJhkwKV+wPCn7KGpvfab0uE=
-github.com/prometheus/common v0.34.0/go.mod h1:gB3sOl7P0TvJabZpLY5uQMpUqRCPPCyRLCZYc7JZTNE=
+github.com/prometheus/common v0.37.0 h1:ccBbHCgIiT9uSoFY0vX8H3zsNR5eLt17/RQLUvn8pXE=
+github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA=
 github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
 github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
 github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
 github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
-github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU=
 github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
+github.com/prometheus/procfs v0.8.0 h1:ODq8ZFEaYeCaZOJlZZdJA2AbQR98dSHSM1KW/You5mo=
+github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4=
+github.com/rabbitmq/amqp091-go v1.4.0 h1:T2G+J9W9OY4p64Di23J6yH7tOkMocgnESvYeBjuG9cY=
+github.com/rabbitmq/amqp091-go v1.4.0/go.mod h1:JsV0ofX5f1nwOGafb8L5rBItt9GyhfQfcJj+oyz0dGg=
 github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
 github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
+github.com/rogpeppe/go-internal v1.6.1 h1:/FiVV8dS/e+YqF2JvO3yXRFbBLTIuSDkuC7aBOAvL+k=
 github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
 github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
 github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
-github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE=
-github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
-github.com/spf13/afero v1.8.2 h1:xehSyVa0YnHWsJ49JFljMpg1HX19V6NDZ1fkm1Xznbo=
-github.com/spf13/afero v1.8.2/go.mod h1:CtAatgMJh6bJEIs48Ay/FOnkljP3WeGUG0MC1RfAqwo=
-github.com/spf13/cast v1.4.1 h1:s0hze+J0196ZfEMTs80N7UlFt0BDuQ7Q+JDnHiMWKdA=
-github.com/spf13/cast v1.4.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
+github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0=
+github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
+github.com/spf13/afero v1.9.2 h1:j49Hj62F0n+DaZ1dDCvhABaPNSGNkt32oRFxI33IEMw=
+github.com/spf13/afero v1.9.2/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y=
+github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w=
+github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU=
 github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk=
 github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo=
 github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
 github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
-github.com/spf13/viper v1.11.0 h1:7OX/1FS6n7jHD1zGrZTM7WtY13ZELRyosK4k93oPr44=
-github.com/spf13/viper v1.11.0/go.mod h1:djo0X/bA5+tYVoCn+C7cAYJGcVn/qYLFTG8gdUsX7Zk=
+github.com/spf13/viper v1.12.0 h1:CZ7eSOd3kZoaYDLbXnmzgQI5RlciuXBMA+18HwHRfZQ=
+github.com/spf13/viper v1.12.0/go.mod h1:b6COn30jlNxbm/V2IqWiNWkJ+vZNiMNksliPCiuKtSI=
 github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
 github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
 github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48=
@@ -295,26 +298,28 @@ github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81P
 github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
 github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
 github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.7.1 h1:5TQK59W5E3v0r2duFAb7P95B6hEeOyEnHRa8MjYSMTY=
-github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s=
-github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
+github.com/stretchr/testify v1.7.2 h1:4jaiDzPyXQvSd7D0EjG45355tLlV3VOECpq10pLC+8s=
+github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals=
+github.com/subosito/gotenv v1.4.0 h1:yAzM1+SmVcz5R4tXGsNMu1jUl2aOJXoiWUCEwwnGrvs=
+github.com/subosito/gotenv v1.4.0/go.mod h1:mZd6rFysKEcUhUHXJk0C/08wAgyDBFuwEYL7vWWGaGo=
 github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4=
 github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
 github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c=
 github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI=
-github.com/xdg-go/scram v1.0.2 h1:akYIkZ28e6A96dkWNJQu3nmCzH3YfwMPQExUYDaRv7w=
-github.com/xdg-go/scram v1.0.2/go.mod h1:1WAq6h33pAW+iRreB34OORO2Nf7qel3VV3fjBj+hCSs=
-github.com/xdg-go/stringprep v1.0.2 h1:6iq84/ryjjeRmMJwxutI51F2GIPlP5BfTvXHeYjyhBc=
-github.com/xdg-go/stringprep v1.0.2/go.mod h1:8F9zXuvzgwmyT5DUm4GUfZGDdT3W+LCvS6+da4O5kxM=
-github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d h1:splanxYIlg+5LfHAM6xpdFEAYOk8iySO56hMFq6uLyA=
+github.com/xdg-go/scram v1.1.1 h1:VOMT+81stJgXW3CpHyqHN3AXDYIMsx56mEFrB37Mb/E=
+github.com/xdg-go/scram v1.1.1/go.mod h1:RaEWvsqvNKKvBPvcKeFjrG2cJqOkHTiyTpzz23ni57g=
+github.com/xdg-go/stringprep v1.0.3 h1:kdwGpVNwPFtjs98xCGkHjQtGKh86rDcRZN17QEMCOIs=
+github.com/xdg-go/stringprep v1.0.3/go.mod h1:W3f5j4i+9rC0kuIEJL0ky1VpHXQU3ocBgklLGvcBnW8=
 github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA=
+github.com/youmark/pkcs8 v0.0.0-20201027041543-1326539a0a0a h1:fZHgsYlfvtyqToslyjUt3VOPF4J7aK/3MPcK7xp3PDk=
+github.com/youmark/pkcs8 v0.0.0-20201027041543-1326539a0a0a/go.mod h1:ul22v+Nro/R083muKhosV54bj5niojjWZvU8xrevuH4=
 github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
 github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
 github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
 github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-go.mongodb.org/mongo-driver v1.8.4 h1:NruvZPPL0PBcRJKmbswoWSrmHeUvzdxA3GCPfD/NEOA=
-go.mongodb.org/mongo-driver v1.8.4/go.mod h1:0sQWfOeY63QTntERDJJ/0SuKK0T1uVSgKCuAROlKEPY=
+github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
+go.mongodb.org/mongo-driver v1.10.0 h1:UtV6N5k14upNp4LTduX0QCufG124fSu25Wz9tu94GLg=
+go.mongodb.org/mongo-driver v1.10.0/go.mod h1:wsihk0Kdgv8Kqu1Anit4sfK+22vSFbUrAVEYRhCXrA8=
 go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
 go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
 go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
@@ -322,6 +327,8 @@ go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
 go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
 go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk=
 go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
+go.uber.org/goleak v1.1.12 h1:gZAh5/EyT/HQwlpkCy6wTpqfH9H8Lz8zbm3dZh+OyzA=
+go.uber.org/goleak v1.1.12/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ=
 golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
 golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
@@ -329,11 +336,11 @@ golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8U
 golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.0.0-20201216223049-8b5274cf687f/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
 golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
 golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
-golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4 h1:kUhD7nTDoI3fVd9G4ORWrbV5NY0liEs/Jg2pv5f+bBA=
-golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
+golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
+golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa h1:zuSxTR4o9y82ebqCUJYNGJbGPo6sKVl54f/TVDObg1c=
+golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
 golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
@@ -367,6 +374,7 @@ golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -403,10 +411,11 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v
 golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
 golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8=
 golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
+golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
 golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
 golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
-golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4 h1:HVyaeDAYux4pnY+D/SiwmLOR36ewZ4iGQIIrtnuCjFA=
-golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
+golang.org/x/net v0.0.0-20220728030405-41545e8bf201 h1:bvOltf3SADAfG05iRml8lAB3qjoEX5RCyN4K6G5v3N0=
+golang.org/x/net v0.0.0-20220728030405-41545e8bf201/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
 golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@@ -428,8 +437,9 @@ golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJ
 golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ=
 golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4 h1:uVc8UZUe6tr40fFVnUP5Oj+veunVezqYl9z7DYw9xzw=
+golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -443,7 +453,6 @@ golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7w
 golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -467,7 +476,6 @@ golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7w
 golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20201214210602-f9fddec55a1e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -481,9 +489,9 @@ golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBc
 golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6 h1:nonptSpoQ4vQjyraW20DXPAglgQfVnM9ZC6MmNLMR60=
-golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
+golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10 h1:WIoqL4EROvwiPdUtaip4VcDdpZ4kha7wBWZrbVKCIZg=
+golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
 golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
 golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@@ -492,7 +500,6 @@ golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3
 golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
 golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk=
 golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
@@ -508,7 +515,6 @@ golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3
 golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
 golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
 golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
-golang.org/x/tools v0.0.0-20190531172133-b3315ee88b7d/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
 golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
 golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
 golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
@@ -547,6 +553,7 @@ golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4f
 golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
 golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
 golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
+golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
 golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
@@ -615,8 +622,8 @@ google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6D
 google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
 google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
 google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
-google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3 h1:q1kiSVscqoDeqTF27eQ2NnLLDmqF0I373qQNXYMy0fo=
-google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4=
+google.golang.org/genproto v0.0.0-20220725144611-272f38e5d71b h1:SfSkJugek6xm7lWywqth4r2iTrYLpD8lOj1nMIIhMNM=
+google.golang.org/genproto v0.0.0-20220725144611-272f38e5d71b/go.mod h1:iHe1svFLAZg9VWz891+QbRMwUv9O/1Ww+/mngYeThbc=
 google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
 google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
 google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
@@ -636,9 +643,8 @@ google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA5
 google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
 google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
 google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=
-google.golang.org/grpc v1.46.0 h1:oCjezcn6g6A75TGoKYBPgKmVBLexhYLM6MebdrPApP8=
-google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk=
-google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw=
+google.golang.org/grpc v1.48.0 h1:rQOsyJ/8+ufEDJd/Gdsz7HG220Mh9HAhFHRGnIjda0w=
+google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk=
 google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
 google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
 google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
@@ -652,8 +658,8 @@ google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlba
 google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
 google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
 google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw=
-google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w=
+google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
 gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
@@ -661,8 +667,8 @@ gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8
 gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
 gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
 gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
-gopkg.in/ini.v1 v1.66.4 h1:SsAcf+mM7mRZo2nJNGt8mZCjG8ZRaNGMURJw7BsIST4=
-gopkg.in/ini.v1 v1.66.4/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
+gopkg.in/ini.v1 v1.66.6 h1:LATuAqN/shcYAOkv3wl2L4rkaKqkcgTBQjOyYDvcPKI=
+gopkg.in/ini.v1 v1.66.6/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
 gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
@@ -672,8 +678,8 @@ gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
 gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
 gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo=
-gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
+gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
 honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
 honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
diff --git a/csbi/templates.go b/csbi/templates.go
index 9289fc248ba2495ba2766690b7ebf906186f4131..e23bd1a3fc527ccbef7cbd33678028051cbac413 100644
--- a/csbi/templates.go
+++ b/csbi/templates.go
@@ -37,7 +37,7 @@ var southboundStruct = ygen.GoStructCodeSnippet{
 	}
 	validatedDeepCopy, ok := root.(ygot.GoStruct)
 	if !ok {
-		return &errors.ErrInvalidTypeAssertion{}
+		return &customerrs.InvalidTypeAssertionError{}
 	}
 
 	// returns the node we want to fill with the data contained in 'bytes',
@@ -48,7 +48,7 @@ var southboundStruct = ygen.GoStructCodeSnippet{
 	}
 	validatedCreatedNode, ok := createdNode.(ygot.GoStruct)
 	if !ok {
-		return &errors.ErrInvalidTypeAssertion{}
+		return &customerrs.InvalidTypeAssertionError{}
 	}
 
 	if err := Unmarshal(bytes, validatedCreatedNode, opt...); err != nil {
@@ -120,7 +120,7 @@ func (csbi *Csbi) Name() string {
 // deprecated.
 const southboundImportAmendmend = `
 
-    "code.fbi.h-da.de/danet/gosdn/controller/nucleus/errors"
+    "code.fbi.h-da.de/danet/gosdn/controller/customerrs"
 	spb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/southbound"
 	"github.com/google/uuid"