diff --git a/applications/rtdt-manager/main.go b/applications/rtdt-manager/main.go
index c1171118910f76e5ab44e46255e4e1760f3ae090..1983201e222d4628713fb62321b375e773e74a07 100644
--- a/applications/rtdt-manager/main.go
+++ b/applications/rtdt-manager/main.go
@@ -1,11 +1,11 @@
 package main
 
 import (
-	"flag"
-	"fmt"
 	clabconfig "code.fbi.h-da.de/danet/gosdn/applications/rtdt-manager/clab-config"
 	RtdtMan "code.fbi.h-da.de/danet/gosdn/applications/rtdt-manager/rtdt-manager"
 	"code.fbi.h-da.de/danet/gosdn/applications/rtdt-manager/sdnconfig"
+	"flag"
+	"fmt"
 	//"code.fbi.h-da.de/danet/gosdn/applications/rtdt-manager/sdnconfig"
 )
 
@@ -78,15 +78,7 @@ func main() {
 		fmt.Printf("In main(): %v\n", err)
 		return
 	}
-	// Do performance tests of realnet before starting twin
-	if benchmark {
-		fmt.Println("Now doing performance measurements of gosdn's propagation delay")
-		rtdtMan.RunBenchmark0()
-	}
 
-	if withTwin {
-		rtdtMan.LaunchTwin("172.101.0.0/16", "2001:db9::/64", "test-twin")
-	}
 	// Runs the main loop
 	if err := rtdtMan.Run(); err != nil {
 		fmt.Println("Program exited with errors: %w", err)
diff --git a/applications/rtdt-manager/rtdt-manager/rtdt-manager.go b/applications/rtdt-manager/rtdt-manager/rtdt-manager.go
index 723c96db2f86a9050b87d21c855b27d9c8f3a1d2..075b7fbee2f0f923af85ee5363a45c07ba782d01 100644
--- a/applications/rtdt-manager/rtdt-manager/rtdt-manager.go
+++ b/applications/rtdt-manager/rtdt-manager/rtdt-manager.go
@@ -1,6 +1,7 @@
 package rtdtmanager
 
 import (
+	"bufio"
 	"fmt"
 	"os"
 	"os/signal"
@@ -14,7 +15,7 @@ import (
 	// "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/networkelement"
 	// submanagement "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/subscriptionmanagement"
 	"code.fbi.h-da.de/danet/gosdn/application-framework/event"
-	"code.fbi.h-da.de/danet/gosdn/application-framework/registration"
+	//"code.fbi.h-da.de/danet/gosdn/application-framework/registration"
 	clabconfig "code.fbi.h-da.de/danet/gosdn/applications/rtdt-manager/clab-config"
 	"code.fbi.h-da.de/danet/gosdn/applications/rtdt-manager/sdnconfig"
 
@@ -261,13 +262,13 @@ func (r *RtdtManager) Run() error {
 			select {
 			// idea: make channels for different events?
 			case stop := <-r.stopChan:
-				fmt.Print("Received SIGINT/SIGSTOP, quitting..\n")
+				fmt.Print("Stop routine triggered!\n")
 				// this takes full path now
 				for _, twin := range r.rtdt_twins {
 					twin_path := twin.GetClabFilePath()
 					err := clabconfig.ClabDestroy(twin_path)
 					if err != nil {
-						fmt.Printf("Error occured while cleaning up twin with name %s: %v\n", twin.GetName(), err)
+						fmt.Printf("Error occured while cleaning up twin with name %s (this can probably be ignored): %v\n", twin.GetName(), err)
 					}
 					twin.GetWaitgroup().Done()
 				}
@@ -281,6 +282,54 @@ func (r *RtdtManager) Run() error {
 			}
 		}
 	}()
+	go func() {
+		scanner := bufio.NewScanner(os.Stdin)
+
+		for {
+			fmt.Print("$: ")
+			if !scanner.Scan() {
+				fmt.Println("Failed to read from stdin. Exiting!")
+				close(r.stopChan)
+				return
+			}
+			inputLine := scanner.Text()
+			tokens := strings.Fields(inputLine)
+
+			switch tokens[0] {
+			case "launch-twin":
+				if len(tokens) == 1 {
+					ipv4 := "172.101.0.0/16"
+					ipv6 := "2001:db9::/64"
+					twinName := "test-twin"
+					fmt.Printf("Launching default twin '%s' with IPv4 %s and IPv6 %s...\n", twinName, ipv4, ipv6)
+					r.LaunchTwin(ipv4, ipv6, twinName)
+				} else if len(tokens) == 4 {
+					ipv4 := tokens[1]
+					ipv6 := tokens[2]
+					twinName := tokens[3]
+					fmt.Printf("Launching twin with name '%s' with IPv4 %s and IPv6 %s...\n", twinName, ipv4, ipv6)
+					r.LaunchTwin(ipv4, ipv6, twinName)
+				} else {
+					fmt.Printf("Wrong number of arguments for launch-twin!\nUsage: launch-twin <IPv4 range> <IPv6 range> <twin name>\n")
+					break
+				}
+			case "benchmark":
+				fmt.Printf("Launching benchmark!\n")
+				r.RunBenchmark0()
+			case "exit", "quit":
+				fmt.Printf("Exiting rtdt-manager!\n")
+				close(r.stopChan)
+				return
+			case "help":
+				fmt.Println("Available commands:")
+				fmt.Println("  launch-twin                        Launch a twin with default options")
+				fmt.Println("  launch-twin <IPv4> <IPv6> <name>   Launch a twin with specified network ranges and name")
+				fmt.Println("  benchmark                          Measure propagation delay of twin")
+				fmt.Println("  exit / quit                        Exit the program")
+			}
+		}
+	}()
+
 	// This waits for as long as not all venvs have called waitGroup.Done()
 	r.waitGroup.Wait()
 	return nil
@@ -288,60 +337,27 @@ func (r *RtdtManager) Run() error {
 
 // Receive events from realnet VEnv
 func (r *RtdtManager) InitEventSystem() error {
-	// THIS DOESN'T WORK YET
-	//Make sure that all network elements are subscribed to
-	//Get all networkelements present in realnet
-	// getAllReq := &networkelement.GetAllRequest{
-	// 	Timestamp: util.Now(),
-	// 	Pid:       r.realnet.GetPnd().Id,
-	// }
-	// mneServiceClient := networkelement.NewNetworkElementServiceClient(r.realnet.GetAuth().GetConn())
-	// response, err := mneServiceClient.GetAll(r.realnet.GetAuth().CreateContextWithAuthorization(), getAllReq)
-	// if err != nil {
-	// 	fmt.Printf("Bad thing happened. Bad thing: %v\n", err)
-	// 	return err
-	// }
-	// rootpath := &submanagement.Path{
-	// 	Elem: []string{"/"},
-	// }
-	// subManager := submanagement.NewSubscriptionManagementServiceClient(r.realnet.GetAuth().GetConn())
-	// for _, mne := range response.GetMne() {
-	// 	sub := submanagement.Subscription{
-	// 		Pid:     mne.GetAssociatedPnd(),
-	// 		Mneid:   mne.Id,
-	// 		MneName: mne.Name,
-	// 		Paths:   []*submanagement.Path{rootpath}, // Assign rootpath to Paths
-	// 	}
-	// 	subAddRequest := &submanagement.AddRequest{
-	// 		Timestamp:    util.Now(),
-	// 		Mneid:        mne.Id,
-	// 		Subscription: &sub,
-	// 	}
-	// 	addResponse, err := subManager.Add(r.realnet.GetAuth().CreateContextWithAuthorization(), subAddRequest)
-	// 	if err != nil {
-	// 		fmt.Printf("Error while subscribing mnes to events: %v\n", err)
-	// 		return err
-	// 	}
-	// 	fmt.Println("Added subscription:", addResponse)
-	// }
-	//
 	fmt.Println("Starting Event System for realnet!")
-	realnet_auth := r.realnet.GetAuth()
-	ctx := realnet_auth.CreateContextWithAuthorization()
-	queueCredentials, err := registration.Register(ctx, realnet_auth.GetAddress(), "basic-interface-monitoring", "SecurePresharedToken")
-	fmt.Println("Acquired queueCredentials: ", queueCredentials)
-	// TODO: Find out how I can receive the ip address here (it returns rabbitmq)
-	queueCredentials = "amqp://guest:guest@172.100.0.15:5672/" // TODO: retrieve this from clab struct
-	if err != nil {
-		return fmt.Errorf("Encountered error while trying to register event system: %w", err)
+	// realnet_auth := r.realnet.GetAuth()
+	// ctx := realnet_auth.CreateContextWithAuthorization()
+	// queueCredentials, err := registration.Register(ctx, realnet_auth.GetAddress(), "basic-interface-monitoring", "SecurePresharedToken")
+	var queueAddress string
+
+	for nodename, node := range r.realnet.GetClabData().Topology.Nodes {
+		if nodename == "rabbitmq" {
+			queueAddress = "amqp://guest:guest@" + node.MgmtIPv4 + ":5672/"
+		}
 	}
-	fmt.Println("Trying to register with amqp with following queueCredentials: ", queueCredentials)
+	// TODO: Find out how I can receive the ip address here (it returns rabbitmq)
+	// if err != nil {
+	// 	return fmt.Errorf("Encountered error while trying to register event system: %w", err)
+	// }
 	// You have to have one event service for a topic
-	eventServiceMNE, err := event.NewEventService(queueCredentials, []event.Topic{event.ManagedNetworkElement})
+	eventServiceMNE, err := event.NewEventService(queueAddress, []event.Topic{event.ManagedNetworkElement})
 	if err != nil {
 		return fmt.Errorf("Failed to attach to event system: %w", err)
 	}
-	eventServiceUser, err := event.NewEventService(queueCredentials, []event.Topic{event.User})
+	eventServiceUser, err := event.NewEventService(queueAddress, []event.Topic{event.User})
 	if err != nil {
 		return fmt.Errorf("Failed to attach to event system: %w", err)
 	}