diff --git a/applications/rtdt-manager/main.go b/applications/rtdt-manager/main.go
new file mode 100644
index 0000000000000000000000000000000000000000..39f2b01537f4defc7ed4801acee9f4f0621b787a
--- /dev/null
+++ b/applications/rtdt-manager/main.go
@@ -0,0 +1,42 @@
+package main
+
+import (
+	"flag"
+	"fmt"
+
+	reg "code.fbi.h-da.de/danet/gosdn/applications/rtdt-manager/registration"
+	RtdtMan "code.fbi.h-da.de/danet/gosdn/applications/rtdt-manager/rtdt-manager"
+	"google.golang.org/grpc"
+	"google.golang.org/grpc/credentials/insecure"
+)
+
+func main() {
+
+	var url string
+	var pass string
+	var user string
+	flag.StringVar(&url, "url", "172.100.0.5:55055", "Address of the gosdn controller")
+	flag.StringVar(&pass, "p", "TestPassword", "Password for admin user")
+	flag.StringVar(&user, "u", "admin", "Username")
+	flag.Parse()
+	fmt.Println("Trying to connect to gosdn controller at ", url)
+
+	dialOption := grpc.WithTransportCredentials(insecure.NewCredentials())
+	conn, err := grpc.NewClient(url, dialOption, grpc.WithDefaultCallOptions(grpc.MaxCallRecvMsgSize(100*1024*1024)))
+	if err != nil {
+		fmt.Println("Failed to create connection")
+		return
+	}
+	defer conn.Close()
+
+	sessionToken, err := reg.Login(conn, url, "admin", pass)
+	if err != nil {
+		_ = fmt.Errorf("Failed to log in: %w", err)
+		return
+	} else {
+		fmt.Println("Successfully logged in to gosdn controller at ", url, " as user ", user)
+	}
+
+	rtdtMan := RtdtMan.NewRtdtManager(conn, sessionToken)
+	_ = rtdtMan
+}
diff --git a/applications/rtdt-manager/registration/registration.go b/applications/rtdt-manager/registration/registration.go
new file mode 100644
index 0000000000000000000000000000000000000000..62de845843c4687266b09080427758fd24f877d8
--- /dev/null
+++ b/applications/rtdt-manager/registration/registration.go
@@ -0,0 +1,26 @@
+package registration
+
+import (
+	"context"
+
+	"code.fbi.h-da.de/danet/gosdn/controller/api"
+	"google.golang.org/grpc"
+	"google.golang.org/grpc/metadata"
+)
+
+// Source: documentation on https://code.fbi.h-da.de/danet/gosdn
+
+// Login logs in to the controller.
+func Login(conn *grpc.ClientConn, address, user, pw string) (string, error) {
+	loginResp, err := api.Login(context.Background(), address, user, pw)
+	if err != nil {
+		return "", err
+	}
+	return loginResp.GetToken(), nil
+}
+
+// createContextWithAuthorization creates a context with the token received after login.
+func CreateContextWithAuthorization(sessionToken string) context.Context {
+	md := metadata.Pairs("authorize", sessionToken)
+	return metadata.NewOutgoingContext(context.Background(), md)
+}
diff --git a/applications/rtdt-manager/rtdt-manager/rtdt-manager.go b/applications/rtdt-manager/rtdt-manager/rtdt-manager.go
new file mode 100644
index 0000000000000000000000000000000000000000..2e73c32ff36add12252c1422bfcdec4566fd180c
--- /dev/null
+++ b/applications/rtdt-manager/rtdt-manager/rtdt-manager.go
@@ -0,0 +1,113 @@
+package rtdtmanager
+
+import (
+	"fmt"
+	"os/exec"
+	"time"
+
+	confManPb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/configurationmanagement"
+	pnd "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/pnd"
+	subMgmt "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/subscriptionmanagement"
+	topoPb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/topology"
+	reg "code.fbi.h-da.de/danet/gosdn/applications/rtdt-manager/registration"
+	"google.golang.org/grpc"
+)
+
+type RtdtManager struct {
+	conn         *grpc.ClientConn
+	sessionToken string
+	Pnd          *pnd.PrincipalNetworkDomain
+	topo         *topoPb.Topology
+	sdnConfig    string
+}
+
+func NewRtdtManager(conn *grpc.ClientConn, sessionToken string) *RtdtManager {
+	rMan := RtdtManager{
+		conn:         conn,
+		sessionToken: sessionToken,
+	}
+	if err := rMan.fetchPndUUID(); err != nil {
+		fmt.Println("RtdtManager could not be created, didn't receive pnd's UUID")
+	}
+	if err := rMan.fetchTopology(); err != nil {
+		_ = fmt.Errorf("RtdtManager could not fetch topology: %w", err)
+	}
+	if err := rMan.manageConfig("import"); err != nil {
+		fmt.Println("Successfully retrieved goSDN configuration file: ", rMan.sdnConfig)
+	}
+	return &rMan
+}
+
+func (rMan *RtdtManager) fetchPndUUID() error {
+	pndService := pnd.NewPndServiceClient(rMan.conn)
+	ctx := reg.CreateContextWithAuthorization(rMan.sessionToken)
+	pndResponse, err := pndService.GetPndList(ctx, &pnd.GetPndListRequest{Timestamp: int64(time.Now().Nanosecond())})
+	if err != nil {
+		return fmt.Errorf("Failed to retrieve PND information: %w", err)
+	}
+	if pndList := pndResponse.GetPnd(); pndList != nil {
+		fmt.Println("pndUUID is now: ", pndList[0].Id) // TODO If more than 1, let user choose
+		rMan.Pnd = pndList[0]
+		return nil
+	} else {
+		return fmt.Errorf("Failed to retrieve PND from Pnd List: %w", err)
+	}
+}
+
+func (rMan *RtdtManager) fetchTopology() error {
+	topoService := topoPb.NewTopologyServiceClient(rMan.conn)
+	ctx := reg.CreateContextWithAuthorization(rMan.sessionToken)
+	topoResponse, err := topoService.GetTopology(ctx, &topoPb.GetTopologyRequest{Timestamp: int64(time.Now().Nanosecond())})
+	if err != nil {
+		return fmt.Errorf("Failed to retrieve Topology: %w", err)
+	}
+	fmt.Println("Successfully read topology: ", topoResponse.Toplogy)
+	rMan.topo = topoResponse.Toplogy
+	return nil
+}
+
+func (rMan *RtdtManager) clabExec(configFile string) error {
+	cmd := exec.Command("sudo", "containerlab", "deploy", configFile)
+	output, err := cmd.Output()
+	if err != nil {
+		return fmt.Errorf("Failed to execute containerlab: %w", err)
+	}
+	fmt.Print(output)
+	return nil
+
+}
+
+func (rMan *RtdtManager) manageConfig(op string) error {
+
+	switch op {
+	// Import the configuration into rtdt-manager (by exporting from gosdn)
+	case "import":
+		fmt.Println("Now importing sdnConfig into rtdt-manager")
+		confManService := confManPb.NewConfigurationManagementServiceClient(rMan.conn)
+		ctx := reg.CreateContextWithAuthorization(rMan.sessionToken)
+		exportSdnConfigResponse, err := confManService.ExportSDNConfig(ctx, &confManPb.ExportSDNConfigRequest{Timestamp: int64(time.Now().Nanosecond())})
+		if err != nil {
+			return fmt.Errorf("Failed to retrieve goSDN config file: %w", err)
+		}
+		rMan.sdnConfig = exportSdnConfigResponse.SdnConfigData
+		return nil
+	// Export from rtdt-manager into gosdn controller
+	case "export":
+		fmt.Println("Now exporting sdnConfig into gosdn controller")
+		// Implement me some day
+		return nil
+	default:
+		return fmt.Errorf("Unknown config operation")
+	}
+}
+
+func (rMan *RtdtManager) initEventSystem() error {
+	subMgmtService := subMgmt.NewSubscriptionManagementServiceClient(rMan.conn)
+	ctx := reg.CreateContextWithAuthorization(rMan.sessionToken)
+	subservice, err := subMgmtService.GetAll(ctx, &subMgmt.GetAllRequest{})
+	if err != nil {
+		return fmt.Errorf("Failed to create subscription service: %w", err)
+	}
+
+	return nil
+}
diff --git a/applications/venv-manager/venv-manager/venv-manager.go b/applications/venv-manager/venv-manager/venv-manager.go
index c1d6f65107b4358c557f9c3cfbd14c11c57b87a7..3ce88696eef73243d0cf56bd4cdbc34f41545d3f 100644
--- a/applications/venv-manager/venv-manager/venv-manager.go
+++ b/applications/venv-manager/venv-manager/venv-manager.go
@@ -54,7 +54,6 @@ func (v *VenvManager) createConnection() (*grpc.ClientConn, error) {
 	if err != nil {
 		return nil, err
 	}
-
 	return conn, nil
 }
 
@@ -118,7 +117,6 @@ func (v *VenvManager) sendSDNConfigData(sdnConfigData *string) error {
 	if err != nil {
 		return err
 	}
-
 	return nil
 }
 
diff --git a/makefiles/build/Makefile b/makefiles/build/Makefile
index 69a388bcd34694f25fc7c031071c55a05bbf80fd..155fef4e56ebc9f6b7c18df8bc2937b239543d90 100644
--- a/makefiles/build/Makefile
+++ b/makefiles/build/Makefile
@@ -38,3 +38,6 @@ build-ws-events-app: pre
 
 build-inventory-manager: pre
 	$(GOBUILD) -trimpath -o $(BUILD_ARTIFACTS_PATH)/inventory-manager ./applications/inventory-manager
+
+build-rtdt-manager: pre
+	$(GOBUILD) -trimpath -o $(BUILD_ARTIFACTS_PATH)/rtdt-manager ./applications/rtdt-manager
diff --git a/makefiles/clab/Makefile b/makefiles/clab/Makefile
index 3280e90d4f52c8285027c74d2c4824b35e1aa70b..c2a1d1c7ec71d39cf26eb0c17938fee3048a329d 100644
--- a/makefiles/clab/Makefile
+++ b/makefiles/clab/Makefile
@@ -13,7 +13,7 @@ containerlab-stop: create-clab-dir
 
 containerlab-slim-start: create-clab-dir containerize-all generate-all-certs
 	cd $(CLAB_DIR) &&\
-	sudo containerlab deploy --topo $(MAKEFILE_DIR)dev_env_data/clab/gosdn_slim.clab.yaml
+	sudo containerlab deploy --topo $(MAKEFILE_DIR)dev_env_data/clab/gosdn_slim.clab.yaml --reconfigure
 
 containerlab-slim-start-reconfigure: create-clab-dir containerize-all generate-all-certs
 	cd $(CLAB_DIR) &&\