diff --git a/applications/rtdt-manager/.gitignore b/applications/rtdt-manager/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..62a0f8364060161d22ddcd805a50d2e653d5b507
--- /dev/null
+++ b/applications/rtdt-manager/.gitignore
@@ -0,0 +1,2 @@
+*.bak
+twin*
diff --git a/applications/rtdt-manager/clab-config/clab-config.go b/applications/rtdt-manager/clab-config/clab-config.go
index 47bb2c914e9edd61c201f4776c4d4fe6a2253dfe..4b58257152d1cf89647f4c9e008b6ad38cf44cb2 100644
--- a/applications/rtdt-manager/clab-config/clab-config.go
+++ b/applications/rtdt-manager/clab-config/clab-config.go
@@ -98,7 +98,7 @@ func DeriveConfig(clabconfig *ClabConfig, newIPv4Subnet, newIPv6Subnet string, p
 	derivedConfig := *clabconfig
 	derivedConfig.Topology.Nodes = make(map[string]Node)
 	derivedConfig.Topology.Links = append([]Link{}, clabconfig.Topology.Links...) // Copy links
-	portOffset := 5 // TODO set dynamically in some way
+	portOffset := 5                                                               // TODO set dynamically in some way
 
 	derivedConfig.Name = fmt.Sprintf("%s-%s", clabconfig.Name, postfix)
 	subnetParts := strings.Split(newIPv4Subnet, ".")
@@ -114,13 +114,13 @@ func DeriveConfig(clabconfig *ClabConfig, newIPv4Subnet, newIPv6Subnet string, p
 
 		if strings.HasPrefix(name, "gosdn") {
 			node.Cmd = "--config /app/configs/containerlab-gosdn-twin.toml"
-			node.Binds = []string{"../../../applications/rtdt-manager/data/ssl/gosdn:/app/ssl"}
-		}
-
-		//use separate ssl folders, testing
-		if strings.HasPrefix(name, "gnmi-target") {
-			node.Binds = []string{"../../../applications/rtdt-manager/data/ssl/gnmi-target:/etc/gnmi-target/ssl"}
+			//node.Binds = []string{"../../../applications/rtdt-manager/data/ssl/gosdn:/app/ssl"}
 		}
+		//
+		// //use separate ssl folders, testing
+		// if strings.HasPrefix(name, "gnmi-target") {
+		// 	node.Binds = []string{"../../../applications/rtdt-manager/data/ssl/gnmi-target:/etc/gnmi-target/ssl"}
+		// }
 		// Ports: host side needs to be incremented or there will be conflicts
 		// for now just use 5 as increment
 		for i, portBinding := range node.Ports {
diff --git a/applications/rtdt-manager/data/.twin-clab.yaml.bak b/applications/rtdt-manager/data/.twin-clab.yaml.bak
deleted file mode 100644
index 48eca667b19b7dc516e2e51d1e4343c417d6b787..0000000000000000000000000000000000000000
--- a/applications/rtdt-manager/data/.twin-clab.yaml.bak
+++ /dev/null
@@ -1,92 +0,0 @@
-name: gosdn_csbi_arista_base_test-twin
-mgmt:
-    network: gosdn_csbi_arista_base-test-twin
-    ipv4-subnet: 172.101.0.0/16
-    ipv6-subnet: 2001:db9::/64
-    mtu: 1500
-topology:
-    nodes:
-        centos0-test-twin:
-            kind: linux
-            image: centos:8
-            mgmt-ipv4: 172.101.0.3
-            group: server
-        centos1-test-twin:
-            kind: linux
-            image: centos:8
-            mgmt-ipv4: 172.101.0.4
-            group: server
-        gnmi-target-switch0-test-twin:
-            kind: linux
-            image: registry.code.fbi.h-da.de/danet/gnmi-target/debian:master
-            ports:
-                - 7035:7030
-            cmd: start --ca_file /etc/gnmi-target/ssl/ca.crt --cert /etc/gnmi-target/ssl/certs/gnmi-target-selfsigned.crt --key /etc/gnmi-target/ssl/private/gnmi-target-selfsigned.key
-            mgmt-ipv4: 172.101.0.11
-            binds:
-                - ../../../artifacts/ssl/gnmi-target:/etc/gnmi-target/ssl
-            startup-delay: 5
-        gnmi-target-switch1-test-twin:
-            kind: linux
-            image: registry.code.fbi.h-da.de/danet/gnmi-target/debian:master
-            ports:
-                - 7036:7030
-            cmd: start --ca_file /etc/gnmi-target/ssl/ca.crt --cert /etc/gnmi-target/ssl/certs/gnmi-target-selfsigned.crt --key /etc/gnmi-target/ssl/private/gnmi-target-selfsigned.key
-            mgmt-ipv4: 172.101.0.12
-            binds:
-                - ../../../artifacts/ssl/gnmi-target:/etc/gnmi-target/ssl
-            startup-delay: 5
-        gosdn-test-twin:
-            kind: linux
-            image: gosdn
-            ports:
-                - 55060:55055
-                - 8085:8080
-                - 40005:40000
-            cmd: --config /app/configs/containerlab-gosdn.toml
-            mgmt-ipv4: 172.101.0.5
-            env:
-                GOSDN_ADMIN_PASSWORD: TestPassword
-            binds:
-                - ../../../artifacts/ssl/gosdn:/app/ssl
-        mongodb-express-test-twin:
-            kind: linux
-            image: mongo-express:1.0.2
-            ports:
-                - 8086:8081
-            mgmt-ipv4: 172.101.0.14
-            env:
-                ME_CONFIG_BASICAUTH: "false"
-                ME_CONFIG_MONGODB_AUTH_PASSWORD: example
-                ME_CONFIG_MONGODB_AUTH_USERNAME: root
-                ME_CONFIG_MONGODB_SERVER: mongodb
-        mongodb-test-twin:
-            kind: linux
-            image: mongo:7
-            ports:
-                - 27022:27017
-            mgmt-ipv4: 172.101.0.13
-            env:
-                MONGO_INITDB_ROOT_PASSWORD: example
-                MONGO_INITDB_ROOT_USERNAME: root
-        plugin-registry-test-twin:
-            kind: linux
-            image: plugin-registry
-            mgmt-ipv4: 172.101.0.16
-        rabbitmq-test-twin:
-            kind: linux
-            image: rabbitmq:3-management
-            ports:
-                - 127.0.0.1:5677:5672
-                - 127.0.0.1:15677:15672
-            mgmt-ipv4: 172.101.0.15
-    links:
-        - endpoints:
-            - gnmi-target-switch0-test-twin:eth1
-            - gnmi-target-switch1-test-twin:eth1
-        - endpoints:
-            - gnmi-target-switch0-test-twin:eth2
-            - centos0-test-twin:eth1
-        - endpoints:
-            - gnmi-target-switch1-test-twin:eth2
-            - centos1-test-twin:eth1
diff --git a/applications/rtdt-manager/data/twin-clab.yaml b/applications/rtdt-manager/data/twin-clab.yaml
index 48eca667b19b7dc516e2e51d1e4343c417d6b787..c6e575598e016f4170c13612c46608c18dd4be17 100644
--- a/applications/rtdt-manager/data/twin-clab.yaml
+++ b/applications/rtdt-manager/data/twin-clab.yaml
@@ -1,22 +1,22 @@
-name: gosdn_csbi_arista_base_test-twin
+name: gosdn_csbi_arista_base-TEST-TWIN
 mgmt:
-    network: gosdn_csbi_arista_base-test-twin
+    network: gosdn_csbi_arista_base-TEST-TWIN
     ipv4-subnet: 172.101.0.0/16
     ipv6-subnet: 2001:db9::/64
     mtu: 1500
 topology:
     nodes:
-        centos0-test-twin:
+        centos0:
             kind: linux
             image: centos:8
             mgmt-ipv4: 172.101.0.3
             group: server
-        centos1-test-twin:
+        centos1:
             kind: linux
             image: centos:8
             mgmt-ipv4: 172.101.0.4
             group: server
-        gnmi-target-switch0-test-twin:
+        gnmi-target-switch0:
             kind: linux
             image: registry.code.fbi.h-da.de/danet/gnmi-target/debian:master
             ports:
@@ -26,7 +26,7 @@ topology:
             binds:
                 - ../../../artifacts/ssl/gnmi-target:/etc/gnmi-target/ssl
             startup-delay: 5
-        gnmi-target-switch1-test-twin:
+        gnmi-target-switch1:
             kind: linux
             image: registry.code.fbi.h-da.de/danet/gnmi-target/debian:master
             ports:
@@ -36,20 +36,29 @@ topology:
             binds:
                 - ../../../artifacts/ssl/gnmi-target:/etc/gnmi-target/ssl
             startup-delay: 5
-        gosdn-test-twin:
+        gosdn:
             kind: linux
             image: gosdn
             ports:
                 - 55060:55055
                 - 8085:8080
                 - 40005:40000
-            cmd: --config /app/configs/containerlab-gosdn.toml
+            cmd: --config /app/configs/containerlab-gosdn-twin.toml
             mgmt-ipv4: 172.101.0.5
             env:
                 GOSDN_ADMIN_PASSWORD: TestPassword
             binds:
                 - ../../../artifacts/ssl/gosdn:/app/ssl
-        mongodb-express-test-twin:
+        mongodb:
+            kind: linux
+            image: mongo:7
+            ports:
+                - 27022:27017
+            mgmt-ipv4: 172.101.0.13
+            env:
+                MONGO_INITDB_ROOT_PASSWORD: example
+                MONGO_INITDB_ROOT_USERNAME: root
+        mongodb-express:
             kind: linux
             image: mongo-express:1.0.2
             ports:
@@ -60,20 +69,11 @@ topology:
                 ME_CONFIG_MONGODB_AUTH_PASSWORD: example
                 ME_CONFIG_MONGODB_AUTH_USERNAME: root
                 ME_CONFIG_MONGODB_SERVER: mongodb
-        mongodb-test-twin:
-            kind: linux
-            image: mongo:7
-            ports:
-                - 27022:27017
-            mgmt-ipv4: 172.101.0.13
-            env:
-                MONGO_INITDB_ROOT_PASSWORD: example
-                MONGO_INITDB_ROOT_USERNAME: root
-        plugin-registry-test-twin:
+        plugin-registry:
             kind: linux
             image: plugin-registry
             mgmt-ipv4: 172.101.0.16
-        rabbitmq-test-twin:
+        rabbitmq:
             kind: linux
             image: rabbitmq:3-management
             ports:
@@ -82,11 +82,11 @@ topology:
             mgmt-ipv4: 172.101.0.15
     links:
         - endpoints:
-            - gnmi-target-switch0-test-twin:eth1
-            - gnmi-target-switch1-test-twin:eth1
+            - gnmi-target-switch0:eth1
+            - gnmi-target-switch1:eth1
         - endpoints:
-            - gnmi-target-switch0-test-twin:eth2
-            - centos0-test-twin:eth1
+            - gnmi-target-switch0:eth2
+            - centos0:eth1
         - endpoints:
-            - gnmi-target-switch1-test-twin:eth2
-            - centos1-test-twin:eth1
+            - gnmi-target-switch1:eth2
+            - centos1:eth1
diff --git a/applications/rtdt-manager/gosdnutil/gosdnutil.go b/applications/rtdt-manager/gosdnutil/gosdnutil.go
index ecc8449c51c8ba08d36d6c12412f600e5ad6d9ce..0067898d65ed69c180dca75e6a0e802fee53be59 100644
--- a/applications/rtdt-manager/gosdnutil/gosdnutil.go
+++ b/applications/rtdt-manager/gosdnutil/gosdnutil.go
@@ -1,11 +1,16 @@
 package gosdnutil
 
 import (
+	"time"
+
+	mnepb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/networkelement"
 	pnd "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/pnd"
+	spb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/southbound"
+	tpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/transport"
 	rtdt_auth "code.fbi.h-da.de/danet/gosdn/applications/rtdt-manager/rtdt-auth"
 	"code.fbi.h-da.de/danet/gosdn/applications/rtdt-manager/util"
-
 	"fmt"
+	uuid "github.com/google/uuid"
 	"google.golang.org/grpc"
 )
 
@@ -15,13 +20,43 @@ func FetchPnd(conn *grpc.ClientConn, auth *rtdt_auth.RtdtAuth) (*pnd.PrincipalNe
 	ctx := auth.CreateContextWithAuthorization()
 	pndResponse, err := pndService.GetPndList(ctx, &pnd.GetPndListRequest{Timestamp: util.Now()})
 	if err != nil {
-        return nil, fmt.Errorf("Failed to retrieve PND information:\npndresponse: %v\nerror: %w\n", pndResponse, err)
+		return nil, fmt.Errorf("Failed to retrieve PND information:\npndresponse: %v\nerror: %w\n", pndResponse, err)
 	}
 	if pndList := pndResponse.GetPnd(); pndList != nil {
 		fmt.Println("pndUUID is now: ", pndList[0].Id)
-		p = pndList[0]                                 // TODO: Only supports one pnd for now
+		p = pndList[0] // TODO: Only supports one pnd for now
 		return p, nil
 	} else {
 		return nil, fmt.Errorf("Failed to retrieve PND from Pnd List: %w", err)
 	}
 }
+
+// This function is necessary because AddNetworkElement from gosdn api uses a shared connection for all created services
+func AddNetworkElement(rtdtAuth *rtdt_auth.RtdtAuth, addr, mneName, mneUUID string, opt *tpb.TransportOption, pluginID, pid uuid.UUID, gNMISubscribePaths []string) (*mnepb.AddListResponse, error) {
+    // Here wee use the pb generated code directly instead of using nbi
+	mneClient := mnepb.NewNetworkElementServiceClient(rtdtAuth.GetConn())
+
+	req := &mnepb.AddListRequest{
+		Timestamp: time.Now().UnixNano(),
+		Mne: []*mnepb.SetMne{
+			{
+				Address:            opt.GetAddress(),
+				MneName:            mneName,
+				PluginId:           pluginID.String(),
+				Pid:                pid.String(),
+				TransportOption:    opt,
+				GnmiSubscribePaths: gNMISubscribePaths,
+				MneId:              mneUUID,
+			},
+		},
+		Pid: pid.String(),
+	}
+	switch t := opt.Type; t {
+	case spb.Type_TYPE_CONTAINERISED, spb.Type_TYPE_PLUGIN:
+		req.Mne[0].TransportOption.Type = t
+	default:
+	}
+	listResponse, err := mneClient.AddList(rtdtAuth.CreateContextWithAuthorization(), req)
+	// Return AddListResponse
+	return listResponse, err
+}
diff --git a/applications/rtdt-manager/mneadd/main.go b/applications/rtdt-manager/mneadd/main.go
index 679ecf182e2ebcbc9750b4850e6606664cc580f4..deea6f0f064155d94c92bd303a351310daa58cdc 100644
--- a/applications/rtdt-manager/mneadd/main.go
+++ b/applications/rtdt-manager/mneadd/main.go
@@ -15,10 +15,10 @@ import (
 )
 
 func main() {
-	gosdn_addr1 := "172.100.0.5:55055"
-	gosdn_addr2 := "172.101.0.5:55055"
-	mneAddr1 := "172.100.0.11:7030"
-	mneAddr2 := "172.101.0.11:7030"
+	gosdn_addr2 := "172.100.0.5:55055"
+	gosdn_addr1 := "172.101.0.5:55055"
+	mneAddr2 := "172.100.0.11:7030"
+	mneAddr1 := "172.101.0.11:7030"
 	var sessionToken1 string
 	var sessionToken2 string
 
@@ -60,7 +60,7 @@ func main() {
 	//pluginUUID, _ := uuid.Parse("823aad29-69be-42f0-b279-90f2c1b6a94d")
 	//pluginID0, _ := uuid.Parse("d1c269a2-6482-4010-b0d8-679dff73153b") // TODO Get this dynamically
 
-	pluginID, _ := uuid.Parse("e2c358b3-6482-4010-b0d8-679dff73153b") // TODO Get this dynamically
+	pluginID1, _ := uuid.Parse("e2c358b3-6482-4010-b0d8-679dff73153b") // TODO Get this dynamically
 	//fmt.Println("pluginID: ", pluginID)
 
 	opt := &tpb.TransportOption{
@@ -72,12 +72,12 @@ func main() {
 			GnmiTransportOption: &tpb.GnmiTransportOption{},
 		},
 	}
-	listResponse, err := api.AddNetworkElement(ctx1, gosdn_addr1, "elem1", "", opt, pluginID, pndID1, nil)
+	listResponse, err := api.AddNetworkElement(ctx1, gosdn_addr1, "elem1", "", opt, pluginID1, pndID1, nil)
 	if err != nil {
 		fmt.Println("Failed to add network element: ", err)
 		return
 	} else {
-		fmt.Println("Successfylly added network element!")
+		fmt.Println("Successfully added network element!")
 	}
 	_ = listResponse
 
@@ -87,7 +87,7 @@ func main() {
 	// Create Connection 2
 	dialOption2 := grpc.WithTransportCredentials(insecure.NewCredentials())
 	conn2, err := grpc.NewClient(gosdn_addr2, dialOption2, grpc.WithDefaultCallOptions(grpc.MaxCallRecvMsgSize(100*1024*1024)))
-    conn2.Connect()
+	conn2.Connect()
 	// Log in to controller
 	// Register
 	loginResponse2, err := api.Login(context.Background(), gosdn_addr2, "admin", "TestPassword")
@@ -95,7 +95,7 @@ func main() {
 		fmt.Println("Couldn't log in to gosdn controller:", err)
 		return
 	} else {
-		fmt.Println("Successully logged in to gosdn controller at", gosdn_addr2)
+		fmt.Println("Successfully logged in to gosdn controller at", gosdn_addr2)
 		time.Sleep(time.Second)
 	}
 	sessionToken2 = loginResponse2.GetToken()
@@ -142,7 +142,7 @@ func main() {
 		fmt.Println("Failed to add network element: ", err)
 		return
 	} else {
-		fmt.Println("Successfylly added network element!")
+		fmt.Println("Successfully added network element!")
 	}
 	_ = listResponse2
 	conn2.Close()
diff --git a/applications/rtdt-manager/rtdt-auth/rtdt-auth.go b/applications/rtdt-manager/rtdt-auth/rtdt-auth.go
index 0b576517b492cd50c241726ec9f3ac646229a8f5..8b3e15d3a933e9c8ec506b7daf99f58e44273684 100644
--- a/applications/rtdt-manager/rtdt-auth/rtdt-auth.go
+++ b/applications/rtdt-manager/rtdt-auth/rtdt-auth.go
@@ -4,12 +4,14 @@ import (
 	"context"
 	"fmt"
 
-	"code.fbi.h-da.de/danet/gosdn/controller/api"
-	"google.golang.org/grpc"
+	rbac_pb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/rbac"
+	"code.fbi.h-da.de/danet/gosdn/applications/rtdt-manager/util"
+	grpc "google.golang.org/grpc"
 	"google.golang.org/grpc/metadata"
 )
 
 type RtdtAuth struct {
+	cc         grpc.ClientConnInterface
 	userName   string
 	password   string
 	address    string
@@ -19,7 +21,17 @@ type RtdtAuth struct {
 // Source: documentation on https://code.fbi.h-da.de/danet/gosdn
 
 func NewRtdtAuth(userName, url, password string, conn *grpc.ClientConn) *RtdtAuth {
-	loginResponse, err := api.Login(context.Background(), url, userName, password)
+	var authServiceClient rbac_pb.AuthServiceClient
+	authServiceClient = rbac_pb.NewAuthServiceClient(conn)
+
+	loginRequest := rbac_pb.LoginRequest{
+		Timestamp: util.Now(),
+		Username:  userName,
+		Pwd:       password,
+	}
+	// TODO Add dial option?
+	loginResponse, err := authServiceClient.Login(context.Background(), &loginRequest)
+
 	if err != nil {
 		fmt.Println("Encountered error while trying to log in: ", err)
 		return nil
@@ -29,12 +41,12 @@ func NewRtdtAuth(userName, url, password string, conn *grpc.ClientConn) *RtdtAut
 		password:   password,
 		address:    url,
 		sessionTok: loginResponse.GetToken(),
+		cc:         conn,
 	}
 }
 
 // createContextWithAuthorization creates a context with the token received after login.
 func (r *RtdtAuth) CreateContextWithAuthorization() context.Context {
-    fmt.Println("Creating Context with session token: ", r.sessionTok)
 	md := metadata.Pairs("authorize", r.sessionTok)
 	return metadata.NewOutgoingContext(context.Background(), md)
 }
@@ -52,3 +64,6 @@ func (r RtdtAuth) GetUsername() string {
 func (r RtdtAuth) GetPassword() string {
 	return r.password
 }
+func (r RtdtAuth) GetConn() grpc.ClientConnInterface {
+	return r.cc
+}
diff --git a/applications/rtdt-manager/venv/venv.go b/applications/rtdt-manager/venv/venv.go
index 8fcb26b0375dbcbdd669be68e58997f92bec31d6..4dfdacabab111045e715c2148febda8db1c420d3 100644
--- a/applications/rtdt-manager/venv/venv.go
+++ b/applications/rtdt-manager/venv/venv.go
@@ -18,7 +18,6 @@ import (
 	rtdt_topology "code.fbi.h-da.de/danet/gosdn/applications/rtdt-manager/rtdt-topology"
 	"code.fbi.h-da.de/danet/gosdn/applications/rtdt-manager/util"
 	yangparser "code.fbi.h-da.de/danet/gosdn/applications/venv-manager/yang-parser"
-	"code.fbi.h-da.de/danet/gosdn/controller/api"
 	"code.fbi.h-da.de/danet/gosdn/models/generated/openconfig"
 	uuid "github.com/google/uuid"
 	gnmi "github.com/openconfig/gnmi/proto/gnmi"
@@ -67,8 +66,8 @@ func NewVEnv(name, topoYamlFile, user, pass string, wg *sync.WaitGroup) *VEnv {
 		}
 	}
 
-	fmt.Printf("[%s] - Sleep for 5 seconds to give containers time to settle..\n", name)
-	time.Sleep(time.Second * 5)
+	fmt.Printf("[%s] - Sleep for 10 seconds to give containers time to settle..\n", name)
+	time.Sleep(time.Second * 10)
 	// Now log into gosdn physical network
 	dialOption := grpc.WithTransportCredentials(insecure.NewCredentials())
 	gosdnconn, err := grpc.NewClient(gosdnAddress, dialOption, grpc.WithDefaultCallOptions())
@@ -77,9 +76,7 @@ func NewVEnv(name, topoYamlFile, user, pass string, wg *sync.WaitGroup) *VEnv {
 		return nil
 	} else {
 		fmt.Printf("[%s] - Successfully created connection to gosdn\n", name)
-		fmt.Printf("[%s] - State of conn: \n%v\n\n", name, gosdnconn)
 	}
-	time.Sleep(time.Second * 2)
 	gosdnauth := rtdt_auth.NewRtdtAuth(user, gosdnAddress, pass, gosdnconn) // logs in and stores token
 	if gosdnauth == nil {
 		fmt.Printf("[%s] - Couldn't log in to gosdn, quitting!\n", name)
@@ -139,9 +136,9 @@ func NewVEnv(name, topoYamlFile, user, pass string, wg *sync.WaitGroup) *VEnv {
 
 			fmt.Printf("[%s] - Found target: %s with addr: %s\n", name, node, addr)
 			fmt.Printf("[%s] - Gosdn controller at %s\n", name, gosdnAddress)
-			ctx := gosdnauth.CreateContextWithAuthorization()
 			//listResponse, err := api.AddNetworkElement(ctx, val.MgmtIPv4+":7030", node, "", opt, mneUUID, pid, []string{"/"})
-			listResponse, err := api.AddNetworkElement(ctx, gosdnAddress, node, "", opt, pluginID, pndID, []string{"/interfaces"})
+			listResponse, err := gosdnutil.AddNetworkElement(gosdnauth, gosdnAddress, node, "", opt, pluginID, pndID, []string{"/"})
+			//listResponse, err := api.AddNetworkElement(ctx, gosdnAddress, node, "", opt, pluginID, pndID, []string{"/interfaces"})
 			if err != nil {
 				fmt.Printf("[%s] - Failed to add network elements: %v\n", name, err)
 				return nil