diff --git a/go.mod b/go.mod
index 67eb76db4dd1ffe73e9c85c0c1b8a1e2f516fd91..9551496609103f4cdfefe36ac7452be0caf3476b 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module code.fbi.h-da.de/danet/gosdn
 go 1.17
 
 require (
-	code.fbi.h-da.de/danet/api v0.2.5-0.20220208132534-98ec7f81567f
+	code.fbi.h-da.de/danet/api v0.2.5-0.20220301081709-d68d321135a7
 	code.fbi.h-da.de/danet/forks/goarista v0.0.0-20210709163519-47ee8958ef40
 	code.fbi.h-da.de/danet/forks/google v0.0.0-20210709163519-47ee8958ef40
 	code.fbi.h-da.de/danet/yang-models v0.1.0
@@ -23,6 +23,8 @@ require (
 	google.golang.org/protobuf v1.27.1
 )
 
+require github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.2
+
 require (
 	github.com/beorn7/perks v1.0.1 // indirect
 	github.com/cespare/xxhash/v2 v2.1.1 // indirect
@@ -30,7 +32,6 @@ require (
 	github.com/fsnotify/fsnotify v1.5.1 // indirect
 	github.com/golang/glog v1.0.0 // indirect
 	github.com/golang/protobuf v1.5.2 // indirect
-	github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.2 // indirect
 	github.com/hashicorp/hcl v1.0.0 // indirect
 	github.com/inconshreveable/mousetrap v1.0.0 // indirect
 	github.com/kylelemons/godebug v1.1.0 // indirect
diff --git a/go.sum b/go.sum
index b51351f2e34627514dbe670e358bd275589a1e22..b411756bc45d99c3ba32a40f163a7cd159ddce74 100644
--- a/go.sum
+++ b/go.sum
@@ -46,8 +46,8 @@ cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0Zeo
 cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=
 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=
-code.fbi.h-da.de/danet/api v0.2.5-0.20220208132534-98ec7f81567f h1:+/JvX942Za21HLwG0E26bSct7EFpSBW0t+XYlDFUw+k=
-code.fbi.h-da.de/danet/api v0.2.5-0.20220208132534-98ec7f81567f/go.mod h1:J1wwKAHhP3HprrzoNs6f5C56znzvns69FU56oItc3kc=
+code.fbi.h-da.de/danet/api v0.2.5-0.20220301081709-d68d321135a7 h1:DxcOZDploBC0GdyURQQprwo6jOTUUQ8spXgRQXtK4xE=
+code.fbi.h-da.de/danet/api v0.2.5-0.20220301081709-d68d321135a7/go.mod h1:J1wwKAHhP3HprrzoNs6f5C56znzvns69FU56oItc3kc=
 code.fbi.h-da.de/danet/forks/goarista v0.0.0-20210709163519-47ee8958ef40 h1:x7rVYGqfJSMWuYBp+JE6JVMcFP03Gx0mnR2ftsgqjVI=
 code.fbi.h-da.de/danet/forks/goarista v0.0.0-20210709163519-47ee8958ef40/go.mod h1:uVe3gCeF2DcIho8K9CIO46uAkHW/lUF+fAaUX1vHrF0=
 code.fbi.h-da.de/danet/forks/google v0.0.0-20210709163519-47ee8958ef40 h1:B45k5tGEdjjdsKK4f+0dQoyReFmsWdwYEzHofA7DPM8=
diff --git a/northbound/server/pnd.go b/northbound/server/pnd.go
index ec1201a39c6ffa021d2a8abe0715f06e324e1dab..bb70bf51484c7f25ee1cc96ead2f7a0d0796019f 100644
--- a/northbound/server/pnd.go
+++ b/northbound/server/pnd.go
@@ -8,6 +8,7 @@ import (
 	spb "code.fbi.h-da.de/danet/api/go/gosdn/southbound"
 	"code.fbi.h-da.de/danet/gosdn/interfaces/networkdomain"
 	"code.fbi.h-da.de/danet/gosdn/metrics"
+	"code.fbi.h-da.de/danet/gosdn/nucleus"
 	"code.fbi.h-da.de/danet/gosdn/nucleus/errors"
 	"github.com/google/uuid"
 	"github.com/openconfig/ygot/ygot"
@@ -218,6 +219,7 @@ func fillSbis(pnd networkdomain.NetworkDomain, all bool, sid ...string) ([]*spb.
 			log.Error(err)
 			return nil, status.Errorf(codes.Aborted, "%v", err)
 		}
+
 		sbis[i] = &spb.SouthboundInterface{
 			Id: id.String(),
 		}
@@ -238,7 +240,6 @@ func stringToUUID(sid []string) ([]uuid.UUID, error) {
 	return UUIDs, nil
 }
 
-//TODO: add body to request tod eal with / problem
 func (p pndServer) GetPath(ctx context.Context, request *ppb.GetPathRequest) (*ppb.GetPathResponse, error) {
 	labels := prometheus.Labels{"service": "pnd", "rpc": "get"}
 	start := metrics.StartHook(labels, grpcRequestsTotal)
@@ -502,26 +503,60 @@ func (p pndServer) SetPathList(ctx context.Context, request *ppb.SetPathListRequ
 
 }
 
-//TODO: update proto for setSBI and add sbiList after!
-// func (p pndServer) SetSbiList(ctx context.Context, request *ppb.SetSbiListRequest) (*ppb.SetSbiListResponse, error) {
-// 	labels := prometheus.Labels{"service": "pnd", "rpc": "set"}
-// 	start := metrics.StartHook(labels, grpcRequestsTotal)
-// 	defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds)
-// 	pid, err := uuid.Parse(request.Pid)
-// 	if err != nil {
-// 		return nil, handleRPCError(labels, err)
-// 	}
-
-// 	pnd, err := pndc.GetPND(pid)
-// 	if err != nil {
-// 		return nil, handleRPCError(labels, err)
-// 	}
-
-// 	for _, r := range request.Sbi {
-// 		err := pnd.AddSbi()
-// 	}
-
-// }
+func (p pndServer) SetSbiList(ctx context.Context, request *ppb.SetSbiListRequest) (*ppb.SetSbiListResponse, error) {
+	labels := prometheus.Labels{"service": "pnd", "rpc": "set"}
+	start := metrics.StartHook(labels, grpcRequestsTotal)
+	defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds)
+	pid, err := uuid.Parse(request.Pid)
+	if err != nil {
+		return nil, handleRPCError(labels, err)
+	}
+
+	pnd, err := pndc.GetPND(pid)
+	if err != nil {
+		return nil, handleRPCError(labels, err)
+	}
+
+	for _, r := range request.Sbi {
+		sbiType := filterSbiType(r.SbiType)
+		sbi, err := nucleus.NewSBI(sbiType)
+		if err != nil {
+			return nil, handleRPCError(labels, err)
+		}
+
+		err = pnd.AddSbi(sbi)
+		if err != nil {
+			return nil, handleRPCError(labels, err)
+		}
+	}
+
+	return &ppb.SetSbiListResponse{
+		Timestamp: time.Now().UnixNano(),
+		Status:    ppb.Status_STATUS_OK,
+		Responses: []*ppb.SetResponse{
+			{
+				Status: ppb.Status_STATUS_OK,
+			},
+		},
+	}, nil
+}
+
+func filterSbiType(sbiType ppb.SbiType) spb.Type {
+	var spbType spb.Type
+
+	switch sbiType {
+	case ppb.SbiType_SBI_TYPE_OPENCONFIG:
+		spbType = spb.Type_TYPE_OPENCONFIG
+	case ppb.SbiType_SBI_TYPE_CONTAINERISED:
+		spbType = spb.Type_TYPE_CONTAINERISED
+	case ppb.SbiType_SBI_TYPE_PLUGIN:
+		spbType = spb.Type_TYPE_PLUGIN
+	default:
+		spbType = spb.Type_TYPE_UNSPECIFIED
+	}
+
+	return spbType
+}
 
 func (p pndServer) DeleteOnd(ctx context.Context, request *ppb.DeleteOndRequest) (*ppb.DeleteOndResponse, error) {
 	pid, err := uuid.Parse(request.Pid)