diff --git a/kms/kmsetsi.go b/kms/kmsetsi.go
index 45f849adbcfc208032e7443469706124c5a93073..51ac91f9f6ee3ec24411e96e292793923df92295 100644
--- a/kms/kmsetsi.go
+++ b/kms/kmsetsi.go
@@ -16,9 +16,10 @@ var (
 
 type etsiServer struct {
 	pb.UnimplementedKmsETSIServer
+	handlingEkms *eKMS
 }
 
-func (kms *etsiServer) ETSICapabilities(ctx context.Context, in *pb.ETSICapabilitiesRequest) (capReply *pb.ETSICapabilitiesReply, err error) {
+func (es *etsiServer) ETSICapabilities(ctx context.Context, in *pb.ETSICapabilitiesRequest) (capReply *pb.ETSICapabilitiesReply, err error) {
 	log.Printf("Received: %v", in.GetMyKmsName())
 
 	return &pb.ETSICapabilitiesReply{
@@ -26,18 +27,18 @@ func (kms *etsiServer) ETSICapabilities(ctx context.Context, in *pb.ETSICapabili
 	}, nil
 }
 
-func (kms *etsiServer) ETSIAddKMSPeer(ctx context.Context, in *pb.ETSIKMSPeerRequest) (*pb.ETSIKMSPeerReply, error) {
+func (es *etsiServer) ETSIAddKMSPeer(ctx context.Context, in *pb.ETSIKMSPeerRequest) (*pb.ETSIKMSPeerReply, error) {
 	//determine the kms structure to call
 	log.Printf("AddKMSPeer called.")
 
-	//etsiServer.AddPeer(in.GetKmsPeerSocket())
+	es.handlingEkms.AddPeer(in.GetKmsPeerSocket())
 
 	return &pb.ETSIKMSPeerReply{
-		//KmsPeerName: kms.kmsName,
+		KmsPeerName: es.handlingEkms.kmsName,
 	}, nil
 }
 
-func (kms *etsiServer) ETSIRemoveKMSPeer(ctx context.Context, in *pb.ETSIKMSPeerRequest) (*pb.ETSIKMSPeerReply, error) {
+func (es *etsiServer) ETSIRemoveKMSPeer(ctx context.Context, in *pb.ETSIKMSPeerRequest) (*pb.ETSIKMSPeerReply, error) {
 	//kms.RemovePeer(in.GetKmsPeerSocket())
 
 	return &pb.ETSIKMSPeerReply{
@@ -45,7 +46,7 @@ func (kms *etsiServer) ETSIRemoveKMSPeer(ctx context.Context, in *pb.ETSIKMSPeer
 	}, nil
 }
 
-func (kms *etsiServer) GetEncryptKeys256Bit(ctx context.Context, in *pb.ETSIGetEncryptKeys256BitRequest) (*pb.ETSIGetEncryptKeys256BitReply, error) {
+func (es *etsiServer) GetEncryptKeys256Bit(ctx context.Context, in *pb.ETSIGetEncryptKeys256BitRequest) (*pb.ETSIGetEncryptKeys256BitReply, error) {
 	log.Printf("Received request for n=%d keys", in.GetAmount())
 
 	testBytes := []byte{120, 120, 120}
@@ -57,7 +58,7 @@ func (kms *etsiServer) GetEncryptKeys256Bit(ctx context.Context, in *pb.ETSIGetE
 	}, nil
 }
 
-func StartETSI(listenAddr string) {
+func StartETSI(listenAddr string, callingKMS *eKMS) {
 	flag.Parse()
 
 	//lis, err := net.Listen("tcp", fmt.Sprintf(":%d", *etsiPort))
@@ -66,7 +67,9 @@ func StartETSI(listenAddr string) {
 		log.Fatalf("failed to listen: %v", err)
 	}
 	s := grpc.NewServer()
-	pb.RegisterKmsETSIServer(s, &etsiServer{})
+	pb.RegisterKmsETSIServer(s, &etsiServer{
+		handlingEkms: callingKMS,
+	})
 	log.Printf("server listening at %v", lis.Addr())
 	if err := s.Serve(lis); err != nil {
 		log.Fatalf("failed to serve: %v", err)
diff --git a/main.go b/main.go
index ba92036a0021d32088d04e9006196926f42e741a..75da36bf6c9a7bc80b15f38875f14776aa9841b2 100644
--- a/main.go
+++ b/main.go
@@ -74,7 +74,7 @@ func emulatedKMS(myName string, myUDPAddr string, peerUDPAddr string) {
 	myQL.QuantumElementLink.AddPeer(*udpQL2Addr)
 
 	// Start the SDN/management and key retrieval interface
-	go kms.StartETSI(peerUDPAddr)
+	go kms.StartETSI(peerUDPAddr, emuKMS)
 
 	// TODO/XXX catch errors!
 	emuKMS.GlobalKeyHandler(7 * time.Second)