diff --git a/northbound/server/core.go b/northbound/server/core.go
index bdbada695a995f979348c0deebfc2a794c5bc1ef..425b8e2abac852a75d22c24e56e2c6640773c96f 100644
--- a/northbound/server/core.go
+++ b/northbound/server/core.go
@@ -17,20 +17,14 @@ type core struct {
 	pb.UnimplementedCoreServiceServer
 }
 
-func (s core) Get(ctx context.Context, request *pb.GetRequest) (*pb.GetResponse, error) {
+func (s core) GetPnd(ctx context.Context, request *pb.GetPndRequest) (*pb.GetPndResponse, error) {
 	labels := prometheus.Labels{"service": "core", "rpc": "get"}
 	start := metrics.StartHook(labels, grpcRequestsTotal)
 	defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds)
-	var pndList []uuid.UUID
-	switch request.All {
-	case true:
-		pndList = pndc.UUIDs()
-	default:
-		var err error
-		pndList, err = stringToUUID(request.Pid)
-		if err != nil {
-			return nil, handleRPCError(labels, err)
-		}
+
+	pndList, err := stringToUUID(request.Pid)
+	if err != nil {
+		return nil, handleRPCError(labels, err)
 	}
 
 	pnds := make([]*ppb.PrincipalNetworkDomain, len(pndList))
@@ -40,31 +34,45 @@ func (s core) Get(ctx context.Context, request *pb.GetRequest) (*pb.GetResponse,
 			return nil, err
 		}
 
-		ond, err := fillOnds(pnd, true)
-		if err != nil {
-			return nil, handleRPCError(labels, err)
+		pnds[i] = &ppb.PrincipalNetworkDomain{
+			Id:          pnd.ID().String(),
+			Name:        pnd.GetName(),
+			Description: pnd.GetDescription(),
 		}
+	}
+	return &pb.GetPndResponse{
+		Timestamp: time.Now().UnixNano(),
+		Pnd:       pnds,
+	}, nil
+}
 
-		sbi, err := fillSbis(pnd, true)
+func (s core) GetPndList(ctx context.Context, request *pb.GetPndListRequest) (*pb.GetPndListResponse, error) {
+	labels := prometheus.Labels{"service": "core", "rpc": "get"}
+	start := metrics.StartHook(labels, grpcRequestsTotal)
+	defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds)
+
+	pndList := pndc.UUIDs()
+
+	pnds := make([]*ppb.PrincipalNetworkDomain, len(pndList))
+	for i, id := range pndList {
+		pnd, err := pndc.GetPND(id)
 		if err != nil {
-			return nil, handleRPCError(labels, err)
+			return nil, err
 		}
 
 		pnds[i] = &ppb.PrincipalNetworkDomain{
 			Id:          pnd.ID().String(),
 			Name:        pnd.GetName(),
 			Description: pnd.GetDescription(),
-			Ond:         ond,
-			Sbi:         sbi,
 		}
 	}
-	return &pb.GetResponse{
+	return &pb.GetPndListResponse{
 		Timestamp: time.Now().UnixNano(),
 		Pnd:       pnds,
 	}, nil
 }
 
-func (s core) Set(ctx context.Context, request *pb.SetRequest) (*pb.SetResponse, error) {
+func (s core) CreatePndList(ctx context.Context, request *pb.CreatePndListRequest) (*pb.CreatePndListResponse, error) {
 	labels := prometheus.Labels{"service": "core", "rpc": "set"}
 	start := metrics.StartHook(labels, grpcRequestsTotal)
 	defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds)
@@ -79,8 +87,25 @@ func (s core) Set(ctx context.Context, request *pb.SetRequest) (*pb.SetResponse,
 			return nil, handleRPCError(labels, err)
 		}
 	}
-	return &pb.SetResponse{
+	return &pb.CreatePndListResponse{
+		Timestamp: time.Now().UnixNano(),
+		Status:    pb.Status_STATUS_OK,
+	}, nil
+}
+
+func (s core) DeletePnd(ctx context.Context, request *pb.DeletePndRequest) (*pb.DeletePndResponse, error) {
+	labels := prometheus.Labels{"service": "core", "rpc": "set"}
+	start := metrics.StartHook(labels, grpcRequestsTotal)
+	defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds)
+
+	pndId, err := uuid.Parse(request.Pid)
+	if err != nil {
+		return nil, handleRPCError(labels, err)
+	}
+	pndc.Delete(pndId)
+
+	return &pb.DeletePndResponse{
 		Timestamp: time.Now().UnixNano(),
-		Status:    pb.SetResponse_OK,
+		Status:    pb.Status_STATUS_OK,
 	}, nil
 }