diff --git a/ekms.Dockerfile b/ekms.Dockerfile
index d634d3078127e9d557a1a1b1628a2f0c9a5c94ce..82cb8c24f8259db2025c877d6b939dfb8232ce87 100644
--- a/ekms.Dockerfile
+++ b/ekms.Dockerfile
@@ -1,9 +1,18 @@
 ARG GOLANG_VERSION=1.20.3
 ARG BUILDARGS
+ARG ACCESS_TOKEN_USR="nothing"
+ARG ACCESS_TOKEN_PWD="nothing"
 
 FROM golang:$GOLANG_VERSION-buster as builder
 WORKDIR /ekms/
 COPY . .
+# based on https://jwenz723.medium.com/fetching-private-go-modules-during-docker-build-5b76aa690280
+RUN printf "machine code.fbi.h-da.de\n\
+    login ${ACCESS_TOKEN_USR}\n\
+    password ${ACCESS_TOKEN_PWD}\n\
+    \n"\
+    >> /root/.netrc
+RUN chmod 600 /root/.netrc
 RUN --mount=type=cache,target=/root/go/pkg/mod \
     --mount=type=cache,target=/root/.cache/go-build \
     make build
diff --git a/etsiqkdnclient/etsi-qkdn-client.go b/etsiqkdnclient/etsi-qkdn-client.go
index 42f8833d288efd45a260f3e9b9716b82ef35523b..14ec0855cdb2a362fa25b54d5a3e161dcedfcaa4 100644
--- a/etsiqkdnclient/etsi-qkdn-client.go
+++ b/etsiqkdnclient/etsi-qkdn-client.go
@@ -1,16 +1,22 @@
 package etsiqkdnclient
 
 import (
-	"net"
 	"os"
 	"time"
 
 	log "github.com/sirupsen/logrus"
 
-	"code.fbi.h-da.de/danet/proto-kms/kms"
+	"code.fbi.h-da.de/danet/ekms/internal/kms"
 	"github.com/google/uuid"
 )
 
+type QuantumModuleType int
+
+const (
+	EmulatedQuantumModule QuantumModuleType = iota
+	ETSIQuantumModule
+)
+
 // Example of a valid config.yaml
 //
 // Name: kms02
@@ -41,16 +47,21 @@ type Config struct {
 	InterComAddr string `yaml:"InterComAddr"`
 	GRPCAddr     string `yaml:"GRPCAddr"`
 	Peers        []struct {
-		PeerInterComAddr string `yaml:"PeerInterComAddr"`
-		Sync             bool   `yaml:"Sync"`
-		QuantumModule    struct {
-			UDPAddr      string `yaml:"UDPAddr"`
-			PeerUDPAddr  string `yaml:"PeerUDPAddr"`
-			GenerateKeys bool   `yaml:"GenerateKeys"`
-		} `yaml:"QuantumModule"`
+		PeerId           string        `yaml:"PeerId"`
+		PeerInterComAddr string        `yaml:"PeerInterComAddr"`
+		Sync             bool          `yaml:"Sync"`
+		QuantumModule    QuantumModule `yaml:"QuantumModule"`
 	} `yaml:"Peers"`
 }
 
+type QuantumModule struct {
+	QmType      string `yaml:"Type"`
+	Address     string `yaml:"Address"`
+	MasterSAEID string `yaml:"MasterSAEID"`
+	SlaveSAEID  string `yaml:"SlaveSAEID"`
+	MasterMode  bool   `yaml:"MasterMode"`
+}
+
 type EtsiQkdClient interface {
 	GetQkdnVersion() *string
 	GetQkdnUui() *string
@@ -91,19 +102,29 @@ func emulatedKMS(config *Config, peerChannel chan string) *kms.EKMS {
 	emuKMS := kms.NewEKMS(config.Name, uuid.New(), os.Stdout, log.TraceLevel, false, config.InterComAddr)
 	emuKMS.AddExternalNotifierKMSPeer(peerChannel)
 
+	var qm kms.QuantumModule
+	var err error
 	for _, peer := range config.Peers {
-		// Fire up Quantum LinK
-		myQL := emuKMS.AddQuantumElement(peer.QuantumModule.UDPAddr, peer.QuantumModule.GenerateKeys, os.Stdout, log.TraceLevel, false)
+		pqm := peer.QuantumModule
+		switch qmt := peer.QuantumModule.QmType; qmt {
+		case "emulated":
+			qm = kms.NewEmulatedQuantumModule(pqm.Address)
+		case "etsi":
+			qm, err = kms.NewETSI014HTTPQuantumModule(pqm.Address, pqm.SlaveSAEID, pqm.MasterSAEID, pqm.MasterMode)
+			if err != nil {
+			}
+		default:
+			log.Fatalf("Unknown type: %s for quantum module", qmt)
+			return nil
+		}
 
-		udpQL2Addr, err := net.ResolveUDPAddr("udp", peer.QuantumModule.PeerUDPAddr)
+		err := emuKMS.AddQuantumElement(qm)
 		if err != nil {
-			log.Fatalf("QuantumlayerEmuPRNG UDP failure: %s", err)
+			log.Fatalf("Failed to add quantum element", err)
 			return nil
 		}
 
-		myQL.QuantumElementLink.AddPeer(udpQL2Addr)
-
-		p, err := emuKMS.AddPeer(peer.PeerInterComAddr, myQL)
+		p, err := emuKMS.AddPeer(peer.PeerId, peer.PeerInterComAddr, qm)
 		if err != nil {
 			log.Fatalf("Failed to create a peer: %s", err)
 			return nil
@@ -122,9 +143,6 @@ func emulatedKMS(config *Config, peerChannel chan string) *kms.EKMS {
 	// Start the SDN/management and key retrieval interface
 	go kms.StartETSI(config.GRPCAddr, emuKMS)
 
-	// TODO/XXX catch errors!
-	go emuKMS.GlobalKeyHandler(7 * time.Second)
-
 	return emuKMS
 }
 
diff --git a/go.mod b/go.mod
index f7b1f63ced0b61d8a23fd1eeb90e978a4be92d30..540fee127f46327c6eb98909ff3a13182dd1ef25 100644
--- a/go.mod
+++ b/go.mod
@@ -4,7 +4,8 @@ go 1.21
 
 require (
 	code.fbi.h-da.de/danet/gnmi-target v0.0.0-20231020162329-e5679b7b675b
-	code.fbi.h-da.de/danet/proto-kms v0.0.0-20231010134253-1aaf11da29b9
+	code.fbi.h-da.de/danet/quantumlayer v0.0.0-20231114130902-f292ca2f0cfc
+	code.fbi.h-da.de/danet/quipsec/gen/go/quipsec v0.0.0-20231113131315-e0a0cd3d28e3
 	github.com/google/uuid v1.3.1
 	github.com/gorilla/mux v1.8.0
 	github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.0
@@ -19,12 +20,13 @@ require (
 	github.com/stretchr/testify v1.8.4
 	golang.org/x/sys v0.13.0
 	google.golang.org/genproto/googleapis/api v0.0.0-20230913181813-007df8e322eb
-	google.golang.org/grpc v1.58.2
+	google.golang.org/grpc v1.59.0
 	google.golang.org/protobuf v1.31.0
 	gopkg.in/yaml.v3 v3.0.1
 )
 
 require (
+	buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.31.0-20231030212536-12f9cba37c9d.2 // indirect
 	github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
 	github.com/fsnotify/fsnotify v1.6.0 // indirect
 	github.com/go-ole/go-ole v1.2.6 // indirect
diff --git a/go.sum b/go.sum
index f0bfb7506bb2418dbf3e3a30db0e46bb32092047..af5e29d29eea32d6c82412eae7834b8749ed4526 100644
--- a/go.sum
+++ b/go.sum
@@ -1,3 +1,5 @@
+buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.31.0-20231030212536-12f9cba37c9d.2 h1:m8rKyv88R8ZIR1549RMXckZ4FZJGxrq/7aRYl6U3WHc=
+buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.31.0-20231030212536-12f9cba37c9d.2/go.mod h1:xafc+XIsTxTy76GJQ1TKgvJWsSugFBqMaN27WhUblew=
 cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
 cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
 cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
@@ -37,8 +39,10 @@ cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9
 cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo=
 code.fbi.h-da.de/danet/gnmi-target v0.0.0-20231020162329-e5679b7b675b h1:VxqdCZoOjrXLAEEJOldL42x9wuC4GEs62QT750PGlOw=
 code.fbi.h-da.de/danet/gnmi-target v0.0.0-20231020162329-e5679b7b675b/go.mod h1:xPagPYNZ/m3HlcooqrnXySZnbRlhCSJipHNezWYnjes=
-code.fbi.h-da.de/danet/proto-kms v0.0.0-20231010134253-1aaf11da29b9 h1:9aqZn5Noule8DfdFwxsL2zNL5N/oP3i3eiz0QQ+TuTw=
-code.fbi.h-da.de/danet/proto-kms v0.0.0-20231010134253-1aaf11da29b9/go.mod h1:7dji2FbqT/K0ygRuq5OkiTQK+DOzs5qE+ygVw8fja0g=
+code.fbi.h-da.de/danet/quantumlayer v0.0.0-20231114130902-f292ca2f0cfc h1:AS8trTNdwnZcSTbqSHkS/6yi/p2PRBJ7WrqlRWYtrpE=
+code.fbi.h-da.de/danet/quantumlayer v0.0.0-20231114130902-f292ca2f0cfc/go.mod h1:uutiqkcUedfATuNkwqk2cyheTtxxZaXjE+iv+zLk7qw=
+code.fbi.h-da.de/danet/quipsec/gen/go/quipsec v0.0.0-20231113131315-e0a0cd3d28e3 h1:PXz62uU6MEdcafEZnVwKINPRxSL0y0Ht0Pzp/NSSTew=
+code.fbi.h-da.de/danet/quipsec/gen/go/quipsec v0.0.0-20231113131315-e0a0cd3d28e3/go.mod h1:lPCd19Jk8aL5B3xSk+h6y5sziXVPqyCXgO7dILvJFfQ=
 dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
 github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
@@ -528,8 +532,8 @@ google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM
 google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
 google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8=
 google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
-google.golang.org/grpc v1.58.2 h1:SXUpjxeVF3FKrTYQI4f4KvbGD5u2xccdYdurwowix5I=
-google.golang.org/grpc v1.58.2/go.mod h1:tgX3ZQDlNJGU96V6yHh1T/JeoBQ2TXdr43YbYSsCJk0=
+google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk=
+google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98=
 google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
 google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
 google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
diff --git a/handlers/etsi/etsi15Handler.go b/handlers/etsi/etsi15Handler.go
index 0d6fb57218e017f9d8387ba24dc3aa6ddff48430..7d536c807cb9f73805eefcaa2d74fbcc8596d96f 100644
--- a/handlers/etsi/etsi15Handler.go
+++ b/handlers/etsi/etsi15Handler.go
@@ -5,8 +5,6 @@ import (
 
 	"code.fbi.h-da.de/danet/ekms/etsiqkdnclient"
 	gnmitargetygot "code.fbi.h-da.de/danet/ekms/model"
-	"code.fbi.h-da.de/danet/proto-kms/kms"
-	"github.com/google/uuid"
 	"github.com/openconfig/gnmi/proto/gnmi"
 	"github.com/openconfig/ygot/ygot"
 	log "github.com/sirupsen/logrus"
@@ -74,52 +72,52 @@ func (yh *ETSI15Handler) Init(c ygot.ValidatedGoStruct) error {
 
 func (yh *ETSI15Handler) Update(c ygot.ValidatedGoStruct, jobs []*gnmi.Update) error {
 	fmt.Println("Update request received for ", yh.name)
-	config, ok := c.(*gnmitargetygot.Gnmitarget)
-	if !ok {
-		return fmt.Errorf("failed type assertion for newConfig %T", (*gnmitargetygot.Gnmitarget)(nil))
-	}
-
-	qkdnInfo := config.GetQkdNode()
-
-	if qkdnInfo != nil {
-		// check for changes in the QKD interfaces
-		if q := qkdnInfo.GetOrCreateQkdInterfaces(); q != nil {
-			for _, qkdnIface := range q.QkdInterface {
-				qle, exists := yh.qkdnClient.GetEKMS().QuantumElements[*qkdnIface.QkdiId]
-				if !exists {
-					log.Printf("Could not find QuantumElement with QKD-ID: %d\n", *qkdnIface.QkdiId)
-					return fmt.Errorf("Error: Could not find QuantumElement with QKD-ID: %d\n", *qkdnIface.QkdiId)
-				}
-				if qkdnIface.QkdiStatus == gnmitargetygot.EtsiQkdSdnNode_IfaceStatusTypes_DISABLED {
-					qle.QuantumElementLink.PowerOff()
-				} else if qkdnIface.QkdiStatus == gnmitargetygot.EtsiQkdSdnNode_IfaceStatusTypes_ENABLED {
-					qle.QuantumElementLink.PowerOn(true)
-				}
-			}
-		}
-		if links := qkdnInfo.GetOrCreateQkdLinks(); links != nil {
-			theEKMS := yh.qkdnClient.GetEKMS()
-			for _, qkdnLink := range links.QkdLink {
-				peerUuid, uuidErr := uuid.Parse(*qkdnLink.QkdlId)
-				if uuidErr != nil {
-					return fmt.Errorf("Couldn't parse uuid %s of request", *qkdnLink.QkdlId)
-				}
-				// Lookup peer and skip if there
-				// TODO needs handling for existing peers
-				if thePeer := theEKMS.FindPeerUuid(peerUuid); thePeer == nil {
-					// should be changed!!!!
-					if qkdnLink.QkdlLocal.QkdiId != nil && qkdnLink.QkdlRemote.QkdiRemoteSocket != nil && qkdnLink.QkdlStatus == gnmitargetygot.EtsiQkdSdnNode_LinkStatusTypes_ACTIVE {
-						if elementID, _ := theEKMS.QuantumElements[*qkdnLink.QkdlLocal.QkdiId]; elementID != nil {
-							theEKMS.AddPeer(*qkdnLink.QkdlRemote.QkdiRemoteSocket, elementID)
-						}
-					}
-				}
-				if qkdnLink.QkdlLocal.QkdiId != nil && qkdnLink.QkdlRemote.QkdiRemoteSocket != nil && qkdnLink.QkdlStatus == gnmitargetygot.EtsiQkdSdnNode_LinkStatusTypes_PASSIVE {
-					theEKMS.RemovePeer(*qkdnLink.QkdlRemote.QkdiRemoteSocket)
-				}
-			}
-		}
-	}
+	//config, ok := c.(*gnmitargetygot.Gnmitarget)
+	//if !ok {
+	//	return fmt.Errorf("failed type assertion for newConfig %T", (*gnmitargetygot.Gnmitarget)(nil))
+	//}
+
+	//qkdnInfo := config.GetQkdNode()
+
+	//if qkdnInfo != nil {
+	//	// check for changes in the QKD interfaces
+	//	if q := qkdnInfo.GetOrCreateQkdInterfaces(); q != nil {
+	//		for _, qkdnIface := range q.QkdInterface {
+	//			qle, exists := yh.qkdnClient.GetEKMS().QuantumElements[*qkdnIface.QkdiId]
+	//			if !exists {
+	//				log.Printf("Could not find QuantumElement with QKD-ID: %d\n", *qkdnIface.QkdiId)
+	//				return fmt.Errorf("Error: Could not find QuantumElement with QKD-ID: %d\n", *qkdnIface.QkdiId)
+	//			}
+	//			if qkdnIface.QkdiStatus == gnmitargetygot.EtsiQkdSdnNode_IfaceStatusTypes_DISABLED {
+	//				qle.QuantumElementLink.PowerOff()
+	//			} else if qkdnIface.QkdiStatus == gnmitargetygot.EtsiQkdSdnNode_IfaceStatusTypes_ENABLED {
+	//				qle.QuantumElementLink.PowerOn(true)
+	//			}
+	//		}
+	//	}
+	//	if links := qkdnInfo.GetOrCreateQkdLinks(); links != nil {
+	//		theEKMS := yh.qkdnClient.GetEKMS()
+	//		for _, qkdnLink := range links.QkdLink {
+	//			peerUuid, uuidErr := uuid.Parse(*qkdnLink.QkdlId)
+	//			if uuidErr != nil {
+	//				return fmt.Errorf("Couldn't parse uuid %s of request", *qkdnLink.QkdlId)
+	//			}
+	//			// Lookup peer and skip if there
+	//			// TODO needs handling for existing peers
+	//			if thePeer := theEKMS.FindPeerUuid(peerUuid); thePeer == nil {
+	//				// should be changed!!!!
+	//				if qkdnLink.QkdlLocal.QkdiId != nil && qkdnLink.QkdlRemote.QkdiRemoteSocket != nil && qkdnLink.QkdlStatus == gnmitargetygot.EtsiQkdSdnNode_LinkStatusTypes_ACTIVE {
+	//					if elementID, _ := theEKMS.QuantumElements[*qkdnLink.QkdlLocal.QkdiId]; elementID != nil {
+	//						theEKMS.AddPeer(*qkdnLink.QkdlRemote.QkdiRemoteSocket, elementID)
+	//					}
+	//				}
+	//			}
+	//			if qkdnLink.QkdlLocal.QkdiId != nil && qkdnLink.QkdlRemote.QkdiRemoteSocket != nil && qkdnLink.QkdlStatus == gnmitargetygot.EtsiQkdSdnNode_LinkStatusTypes_PASSIVE {
+	//				theEKMS.RemovePeer(*qkdnLink.QkdlRemote.QkdiRemoteSocket)
+	//			}
+	//		}
+	//	}
+	//}
 	return nil
 }
 
@@ -137,55 +135,54 @@ func updateOrCreateQkdNode(confQkdNode *gnmitargetygot.EtsiQkdSdnNode_QkdNode, q
 	// Fill QKD Interfaces with the relevant information
 	// Interfaces structure
 	confQkdNode.QkdInterfaces = confQkdNode.GetOrCreateQkdInterfaces()
-	QkdiModel := "danet-emulated-qle-prng"
-
-	// range through existing QKD interfaces out of proto-kms
-	myKMS := qkdInfo.GetEKMS()
-	for _, element := range myKMS.QuantumElements {
-		log.Printf("Element with ID %d\n", element.QlID)
-
-		//Check if element exists in ygot struct
-		qkdIface, nodeErr := confQkdNode.QkdInterfaces.NewQkdInterface(element.QlID)
-		if nodeErr != nil {
-			qkdIface = confQkdNode.QkdInterfaces.GetQkdInterface(element.QlID)
-		} else {
-			confQkdNode.QkdInterfaces.AppendQkdInterface(qkdIface)
-		}
-
-		qkdIface.QkdiId = &element.QlID
-		if poweredOn, _ := element.QuantumElementLink.GetStatus(); poweredOn == true {
-			qkdIface.QkdiStatus = gnmitargetygot.EtsiQkdSdnNode_IfaceStatusTypes_ENABLED
-		} else {
-			qkdIface.QkdiStatus = gnmitargetygot.EtsiQkdSdnNode_IfaceStatusTypes_DISABLED
-		}
-		qkdIface.QkdiModel = &QkdiModel
-		//qkdIface.QkdiAttPoint.Device =
-		element.QuantumElementLink.GetLocalQLPort()
-	}
-	confQkdNode.QkdLinks = confQkdNode.GetOrCreateQkdLinks()
-
-	// Check for changes in the QKD key association links
-	if q := confQkdNode.GetOrCreateQkdLinks(); q != nil {
-		for _, kmsLink := range qkdInfo.GetEKMS().KmsPeers {
-			// Just write the current status of this kms peer
-			qkdnLink := confQkdNode.QkdLinks.GetOrCreateQkdLink(kmsLink.GetKmsPeerId().String())
-			switch kmsLink.GetKmsPeerStatus() {
-			case kms.KmsPeerDown:
-				qkdnLink.QkdlStatus = gnmitargetygot.E_EtsiQkdSdnNode_LinkStatusTypes(gnmitargetygot.EtsiQkdSdnNode_LinkStatusTypes_OFF)
-			case kms.KmsPeerUp:
-				qkdnLink.QkdlStatus = gnmitargetygot.E_EtsiQkdSdnNode_LinkStatusTypes(gnmitargetygot.EtsiQkdSdnNode_LinkStatusTypes_ACTIVE)
-			case kms.KmsPeerPending:
-				qkdnLink.QkdlStatus = gnmitargetygot.E_EtsiQkdSdnNode_LinkStatusTypes(gnmitargetygot.EtsiQkdSdnNode_LinkStatusTypes_PENDING)
-			default:
-				qkdnLink.QkdlStatus = gnmitargetygot.E_EtsiQkdSdnNode_LinkStatusTypes(gnmitargetygot.EtsiQkdSdnNode_LinkStatusTypes_UNSET)
-			}
-			peerQkdiId := kmsLink.GetKmsPeerQkdiId()
-			qkdLocal := qkdnLink.GetOrCreateQkdlLocal()
-			qkdLocal.QkdiId = &peerQkdiId
-
-			qkdnLink.QkdlLocal = qkdLocal
-		}
-	}
+	//QkdiModel := "danet-emulated-qle-prng"
+
+	//// range through existing QKD interfaces out of proto-kms
+	//myKMS := qkdInfo.GetEKMS()
+	//for _, element := range myKMS.QuantumElements {
+	//	log.Printf("Element with ID %d\n", element.QlID)
+
+	//	//Check if element exists in ygot struct
+	//	qkdIface, nodeErr := confQkdNode.QkdInterfaces.NewQkdInterface(element.QlID)
+	//	if nodeErr != nil {
+	//		qkdIface = confQkdNode.QkdInterfaces.GetQkdInterface(element.QlID)
+	//	} else {
+	//		confQkdNode.QkdInterfaces.AppendQkdInterface(qkdIface)
+	//	}
+
+	//	qkdIface.QkdiId = &element.QlID
+	//	if poweredOn, _ := element.QuantumElementLink.GetStatus(); poweredOn == true {
+	//		qkdIface.QkdiStatus = gnmitargetygot.EtsiQkdSdnNode_IfaceStatusTypes_ENABLED
+	//	} else {
+	//		qkdIface.QkdiStatus = gnmitargetygot.EtsiQkdSdnNode_IfaceStatusTypes_DISABLED
+	//	}
+	//	qkdIface.QkdiModel = &QkdiModel
+	//	//qkdIface.QkdiAttPoint.Device =
+	//	element.QuantumElementLink.GetLocalQLPort()
+	//}
+	//confQkdNode.QkdLinks = confQkdNode.GetOrCreateQkdLinks()
+
+	//// Check for changes in the QKD key association links
+	//if q := confQkdNode.GetOrCreateQkdLinks(); q != nil {
+	//	for _, kmsLink := range qkdInfo.GetEKMS().KmsPeers {
+	//		// Just write the current status of this kms peer
+	//		qkdnLink := confQkdNode.QkdLinks.GetOrCreateQkdLink(kmsLink.GetKmsPeerId().String())
+	//		switch kmsLink.GetKmsPeerStatus() {
+	//		case kms.KmsPeerDown:
+	//			qkdnLink.QkdlStatus = gnmitargetygot.E_EtsiQkdSdnNode_LinkStatusTypes(gnmitargetygot.EtsiQkdSdnNode_LinkStatusTypes_OFF)
+	//		case kms.KmsPeerUp:
+	//			qkdnLink.QkdlStatus = gnmitargetygot.E_EtsiQkdSdnNode_LinkStatusTypes(gnmitargetygot.EtsiQkdSdnNode_LinkStatusTypes_ACTIVE)
+	//		case kms.KmsPeerPending:
+	//			qkdnLink.QkdlStatus = gnmitargetygot.E_EtsiQkdSdnNode_LinkStatusTypes(gnmitargetygot.EtsiQkdSdnNode_LinkStatusTypes_PENDING)
+	//		default:
+	//			qkdnLink.QkdlStatus = gnmitargetygot.E_EtsiQkdSdnNode_LinkStatusTypes(gnmitargetygot.EtsiQkdSdnNode_LinkStatusTypes_UNSET)
+	//		}
+	//		peerQkdiId := kmsLink.GetKmsPeerQkdiId()
+	//		qkdLocal := qkdnLink.GetOrCreateQkdlLocal()
+	//		qkdLocal.QkdiId = &peerQkdiId
+	//		qkdnLink.QkdlLocal = qkdLocal
+	//	}
+	//}
 
 	confQkdNode.QkdApplications = confQkdNode.GetOrCreateQkdApplications()
 
diff --git a/internal/Dockerfile b/internal/Dockerfile
deleted file mode 100644
index 4e7b6ac65832fc233b1b06dbf7bbb5d81df62b2c..0000000000000000000000000000000000000000
--- a/internal/Dockerfile
+++ /dev/null
@@ -1,14 +0,0 @@
-ARG GOLANG_VERSION=1.20.5
-
-FROM golang:$GOLANG_VERSION-alpine as builder
-WORKDIR /proto-kms/
-RUN apk add build-base
-COPY . .
-RUN --mount=type=cache,target=/root/go/pkg/mod \
-    --mount=type=cache,target=/root/.cache/go-build \
-    make build-proto-kms
-
-FROM ${GITLAB_PROXY}golang:$GOLANG_VERSION-buster
-WORKDIR /app/
-COPY --from=builder /proto-kms/artifacts/proto-kms ./proto-kms
-ENTRYPOINT ["./proto-kms"]
diff --git a/internal/Makefile b/internal/Makefile
deleted file mode 100644
index 14dcc56834286077dea369be87ea99e25e6cfd9e..0000000000000000000000000000000000000000
--- a/internal/Makefile
+++ /dev/null
@@ -1,17 +0,0 @@
-GOCMD=go
-GOBUILD=$(GOCMD) build
-GOCLEAN=$(GOCMD) clean
-BUILD_ARTIFACTS_PATH=artifacts
-
-pre:
-	mkdir -p $(BUILD_ARTIFACTS_PATH)
-
-build-proto-kms: pre
-	CGO_ENABLED=0 $(GOBUILD) -o $(BUILD_ARTIFACTS_PATH)/proto-kms .
-
-containerize-proto-kms:
-	docker buildx build --rm -t proto-kms --load -f Dockerfile .
-
-clean:
-	$(GOCLEAN)
-	rm -rf $(BUILD_ARTIFACTS_PATH)
diff --git a/internal/api/buf.gen.yaml b/internal/api/buf.gen.yaml
index 72950582b034612d2feccdb2fc95cea8f49694de..1bb1e1bb0706c938c6201a14ca467d8903eb391a 100644
--- a/internal/api/buf.gen.yaml
+++ b/internal/api/buf.gen.yaml
@@ -2,7 +2,7 @@ version: v1
 managed:
   enabled: true
   go_package_prefix:
-    default: code.fbi.h-da.de/demoquandt/proto-kms/gen/proto/go
+    default: code.fbi.h-da.de/demoquandt/ekms/internal/kms/gen/proto/go
 plugins:
   - plugin: buf.build/grpc/go
     out: gen/proto/go
diff --git a/internal/api/gen/proto/go/kmsetsi/kmsetsiproto.pb.go b/internal/api/gen/proto/go/kmsetsi/kmsetsiproto.pb.go
index af7a507c7f40823c4620e0881f2e02cf744ee169..6586db4574081586f6477e5104cec5e027336153 100644
--- a/internal/api/gen/proto/go/kmsetsi/kmsetsiproto.pb.go
+++ b/internal/api/gen/proto/go/kmsetsi/kmsetsiproto.pb.go
@@ -1043,17 +1043,18 @@ var file_kmsetsi_kmsetsiproto_proto_rawDesc = []byte{
 	0x69, 0x2e, 0x45, 0x54, 0x53, 0x49, 0x53, 0x65, 0x6e, 0x64, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61,
 	0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x6b, 0x6d, 0x73, 0x65, 0x74,
 	0x73, 0x69, 0x2e, 0x45, 0x54, 0x53, 0x49, 0x53, 0x65, 0x6e, 0x64, 0x50, 0x61, 0x79, 0x6c, 0x6f,
-	0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x98, 0x01, 0x0a,
+	0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0xa0, 0x01, 0x0a,
 	0x0b, 0x63, 0x6f, 0x6d, 0x2e, 0x6b, 0x6d, 0x73, 0x65, 0x74, 0x73, 0x69, 0x42, 0x11, 0x4b, 0x6d,
 	0x73, 0x65, 0x74, 0x73, 0x69, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50,
-	0x01, 0x5a, 0x3a, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x66, 0x62, 0x69, 0x2e, 0x68, 0x2d, 0x64, 0x61,
-	0x2e, 0x64, 0x65, 0x2f, 0x64, 0x65, 0x6d, 0x6f, 0x71, 0x75, 0x61, 0x6e, 0x64, 0x74, 0x2f, 0x70,
-	0x72, 0x6f, 0x74, 0x6f, 0x2d, 0x6b, 0x6d, 0x73, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x72, 0x6f,
-	0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x6b, 0x6d, 0x73, 0x65, 0x74, 0x73, 0x69, 0xa2, 0x02, 0x03,
-	0x4b, 0x58, 0x58, 0xaa, 0x02, 0x07, 0x4b, 0x6d, 0x73, 0x65, 0x74, 0x73, 0x69, 0xca, 0x02, 0x07,
-	0x4b, 0x6d, 0x73, 0x65, 0x74, 0x73, 0x69, 0xe2, 0x02, 0x13, 0x4b, 0x6d, 0x73, 0x65, 0x74, 0x73,
-	0x69, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x07,
-	0x4b, 0x6d, 0x73, 0x65, 0x74, 0x73, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+	0x01, 0x5a, 0x42, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x66, 0x62, 0x69, 0x2e, 0x68, 0x2d, 0x64, 0x61,
+	0x2e, 0x64, 0x65, 0x2f, 0x64, 0x65, 0x6d, 0x6f, 0x71, 0x75, 0x61, 0x6e, 0x64, 0x74, 0x2f, 0x65,
+	0x6b, 0x6d, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x6b, 0x6d, 0x73,
+	0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x6b, 0x6d,
+	0x73, 0x65, 0x74, 0x73, 0x69, 0xa2, 0x02, 0x03, 0x4b, 0x58, 0x58, 0xaa, 0x02, 0x07, 0x4b, 0x6d,
+	0x73, 0x65, 0x74, 0x73, 0x69, 0xca, 0x02, 0x07, 0x4b, 0x6d, 0x73, 0x65, 0x74, 0x73, 0x69, 0xe2,
+	0x02, 0x13, 0x4b, 0x6d, 0x73, 0x65, 0x74, 0x73, 0x69, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74,
+	0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x07, 0x4b, 0x6d, 0x73, 0x65, 0x74, 0x73, 0x69, 0x62,
+	0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
diff --git a/internal/api/gen/proto/go/kmsintercom/kmsintercom.pb.go b/internal/api/gen/proto/go/kmsintercom/kmsintercom.pb.go
index d990f2d156f73a47bcc5b969c900de9e89d96a9f..859f69e96857d236e2728b6eaca40b3139a12e16 100644
--- a/internal/api/gen/proto/go/kmsintercom/kmsintercom.pb.go
+++ b/internal/api/gen/proto/go/kmsintercom/kmsintercom.pb.go
@@ -815,18 +815,19 @@ var file_kmsintercom_kmsintercom_proto_rawDesc = []byte{
 	0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x6b, 0x6d, 0x73, 0x69,
 	0x6e, 0x74, 0x65, 0x72, 0x63, 0x6f, 0x6d, 0x2e, 0x4b, 0x65, 0x79, 0x49, 0x64, 0x4e, 0x6f, 0x74,
 	0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
-	0x65, 0x22, 0x00, 0x42, 0xaf, 0x01, 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x2e, 0x6b, 0x6d, 0x73, 0x69,
+	0x65, 0x22, 0x00, 0x42, 0xb7, 0x01, 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x2e, 0x6b, 0x6d, 0x73, 0x69,
 	0x6e, 0x74, 0x65, 0x72, 0x63, 0x6f, 0x6d, 0x42, 0x10, 0x4b, 0x6d, 0x73, 0x69, 0x6e, 0x74, 0x65,
-	0x72, 0x63, 0x6f, 0x6d, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3e, 0x63, 0x6f, 0x64,
+	0x72, 0x63, 0x6f, 0x6d, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x46, 0x63, 0x6f, 0x64,
 	0x65, 0x2e, 0x66, 0x62, 0x69, 0x2e, 0x68, 0x2d, 0x64, 0x61, 0x2e, 0x64, 0x65, 0x2f, 0x64, 0x65,
-	0x6d, 0x6f, 0x71, 0x75, 0x61, 0x6e, 0x64, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2d, 0x6b,
-	0x6d, 0x73, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f,
-	0x6b, 0x6d, 0x73, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x63, 0x6f, 0x6d, 0xa2, 0x02, 0x03, 0x4b, 0x58,
-	0x58, 0xaa, 0x02, 0x0b, 0x4b, 0x6d, 0x73, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x63, 0x6f, 0x6d, 0xca,
-	0x02, 0x0b, 0x4b, 0x6d, 0x73, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x63, 0x6f, 0x6d, 0xe2, 0x02, 0x17,
-	0x4b, 0x6d, 0x73, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x63, 0x6f, 0x6d, 0x5c, 0x47, 0x50, 0x42, 0x4d,
-	0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0b, 0x4b, 0x6d, 0x73, 0x69, 0x6e, 0x74,
-	0x65, 0x72, 0x63, 0x6f, 0x6d, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+	0x6d, 0x6f, 0x71, 0x75, 0x61, 0x6e, 0x64, 0x74, 0x2f, 0x65, 0x6b, 0x6d, 0x73, 0x2f, 0x69, 0x6e,
+	0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x6b, 0x6d, 0x73, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x6b, 0x6d, 0x73, 0x69, 0x6e, 0x74, 0x65, 0x72,
+	0x63, 0x6f, 0x6d, 0xa2, 0x02, 0x03, 0x4b, 0x58, 0x58, 0xaa, 0x02, 0x0b, 0x4b, 0x6d, 0x73, 0x69,
+	0x6e, 0x74, 0x65, 0x72, 0x63, 0x6f, 0x6d, 0xca, 0x02, 0x0b, 0x4b, 0x6d, 0x73, 0x69, 0x6e, 0x74,
+	0x65, 0x72, 0x63, 0x6f, 0x6d, 0xe2, 0x02, 0x17, 0x4b, 0x6d, 0x73, 0x69, 0x6e, 0x74, 0x65, 0x72,
+	0x63, 0x6f, 0x6d, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea,
+	0x02, 0x0b, 0x4b, 0x6d, 0x73, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x63, 0x6f, 0x6d, 0x62, 0x06, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
diff --git a/internal/docker-compose.yml b/internal/docker-compose.yml
deleted file mode 100644
index 3d19d0ff3ea1de99a333d53593335e419de95bbb..0000000000000000000000000000000000000000
--- a/internal/docker-compose.yml
+++ /dev/null
@@ -1,27 +0,0 @@
-version: '3'
-
-services:
-  proto-kms1:
-    build:
-        dockerfile: Dockerfile
-    command: ["-my-address", "172.100.20.10:55059", "-my-name", "proto-kms1", "-remote-address", "172.100.20.11:55059"]
-    networks:
-        proto-kms-net:
-            ipv4_address: 172.100.20.10
-
-  proto-kms2:
-    build:
-        dockerfile: Dockerfile
-    command: ["-my-address", "172.100.20.11:55059","-my-name", "proto-kms2", "-remote-address", "172.100.20.10:55059"]
-    networks:
-        proto-kms-net:
-            ipv4_address: 172.100.20.11
-
-networks:
-    proto-kms-net:
-        ipam:
-            driver: default
-            config:
-                - subnet: "172.100.20.0/24"
-        name: proto-kms-net
-
diff --git a/internal/go.mod b/internal/go.mod
deleted file mode 100644
index d181fee7a23bf168fa8f0f290a833850e1a1af4c..0000000000000000000000000000000000000000
--- a/internal/go.mod
+++ /dev/null
@@ -1,22 +0,0 @@
-module code.fbi.h-da.de/danet/proto-kms
-
-go 1.21
-
-require (
-	code.fbi.h-da.de/danet/ekms v0.0.0-20231101170413-671634b8e3b3
-	code.fbi.h-da.de/danet/quipsec/gen/go/quipsec v0.0.0-20231113131315-e0a0cd3d28e3
-	github.com/google/uuid v1.3.1
-	github.com/sirupsen/logrus v1.9.3
-	google.golang.org/grpc v1.59.0
-	google.golang.org/protobuf v1.31.0
-)
-
-require (
-	buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.31.0-20231030212536-12f9cba37c9d.2 // indirect
-	code.fbi.h-da.de/danet/quantumlayer v0.0.0-20231113142846-ae276faa2a9a // indirect
-	github.com/golang/protobuf v1.5.3 // indirect
-	golang.org/x/net v0.15.0 // indirect
-	golang.org/x/sys v0.13.0 // indirect
-	golang.org/x/text v0.13.0 // indirect
-	google.golang.org/genproto/googleapis/rpc v0.0.0-20230920204549-e6e6cdab5c13 // indirect
-)
diff --git a/internal/go.sum b/internal/go.sum
deleted file mode 100644
index 1161aaaa3886541d9a6c969d3e559ad23b552c98..0000000000000000000000000000000000000000
--- a/internal/go.sum
+++ /dev/null
@@ -1,49 +0,0 @@
-buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.31.0-20231030212536-12f9cba37c9d.2 h1:m8rKyv88R8ZIR1549RMXckZ4FZJGxrq/7aRYl6U3WHc=
-buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.31.0-20231030212536-12f9cba37c9d.2/go.mod h1:xafc+XIsTxTy76GJQ1TKgvJWsSugFBqMaN27WhUblew=
-code.fbi.h-da.de/danet/ekms v0.0.0-20231101170413-671634b8e3b3 h1:ABpjLMNTDQIykwpDQOxBZ9ukm+suBu8oJHqq3GZCzzc=
-code.fbi.h-da.de/danet/ekms v0.0.0-20231101170413-671634b8e3b3/go.mod h1:qVaZ1wGJ+XrE+S3eW1CEB0gAarzClnxYEog06BLnD4k=
-code.fbi.h-da.de/danet/quantumlayer v0.0.0-20231113142846-ae276faa2a9a h1:urBXx1zWxvP/0QdEkIbViPqaILJV2BMhPJ34r0d5omk=
-code.fbi.h-da.de/danet/quantumlayer v0.0.0-20231113142846-ae276faa2a9a/go.mod h1:L+el1b356QSGNH21HuA0uSqs58Ix5HyySYsTRmsBEaA=
-code.fbi.h-da.de/danet/quipsec/gen/go/quipsec v0.0.0-20231113131315-e0a0cd3d28e3 h1:PXz62uU6MEdcafEZnVwKINPRxSL0y0Ht0Pzp/NSSTew=
-code.fbi.h-da.de/danet/quipsec/gen/go/quipsec v0.0.0-20231113131315-e0a0cd3d28e3/go.mod h1:lPCd19Jk8aL5B3xSk+h6y5sziXVPqyCXgO7dILvJFfQ=
-github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
-github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
-github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
-github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
-github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
-github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
-github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4=
-github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
-github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
-github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
-github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
-github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
-golang.org/x/net v0.15.0 h1:ugBLEUaxABaB5AJqW9enI0ACdci2RUd4eP51NTBvuJ8=
-golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk=
-golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE=
-golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k=
-golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
-golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230920204549-e6e6cdab5c13 h1:N3bU/SQDCDyD6R528GJ/PwW9KjYcJA3dgyH+MovAkIM=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230920204549-e6e6cdab5c13/go.mod h1:KSqppvjFjtoCI+KGd4PELB0qLNxdJHRGqRI09mB6pQA=
-google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk=
-google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98=
-google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
-google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
-gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
diff --git a/internal/kms/kms.go b/internal/kms/kms.go
index 5360a60ebc7aead0ddab6500fd193b5417dc6bef..37dc67f9dfab87fa81238e1c09820dc4fbc7c482 100644
--- a/internal/kms/kms.go
+++ b/internal/kms/kms.go
@@ -15,8 +15,8 @@ import (
 	"google.golang.org/grpc/health"
 	healthpb "google.golang.org/grpc/health/grpc_health_v1"
 
-	pbETSI "code.fbi.h-da.de/danet/proto-kms/api/gen/proto/go/kmsetsi"
-	pbIC "code.fbi.h-da.de/danet/proto-kms/api/gen/proto/go/kmsintercom"
+	pbETSI "code.fbi.h-da.de/danet/ekms/internal/api/gen/proto/go/kmsetsi"
+	pbIC "code.fbi.h-da.de/danet/ekms/internal/api/gen/proto/go/kmsintercom"
 	pbQS "code.fbi.h-da.de/danet/quipsec/gen/go/quipsec"
 	"github.com/google/uuid"
 )
@@ -47,10 +47,11 @@ const (
 
 // The general emulated KMS
 type EKMS struct {
-	kmsName             string
-	kmsUUID             uuid.UUID
-	interComAddr        string
-	qleMapMutex         sync.Mutex
+	kmsName      string
+	kmsUUID      uuid.UUID
+	interComAddr string
+	qleMapMutex  sync.Mutex
+	// TODO create a mapping between ids and address
 	quantumModules      map[string]QuantumModule
 	quantumModulesMutex sync.RWMutex
 	externalNotifierQLE chan uint32
diff --git a/internal/kms/kmsetsi.go b/internal/kms/kmsetsi.go
index f6e2cbba0dba79667095df46f365edcda8142846..4a491da07a78d4ee25ece9cc71e9d2b5f10ec235 100644
--- a/internal/kms/kmsetsi.go
+++ b/internal/kms/kmsetsi.go
@@ -11,7 +11,7 @@ import (
 	"github.com/google/uuid"
 	log "github.com/sirupsen/logrus"
 
-	pb "code.fbi.h-da.de/danet/proto-kms/api/gen/proto/go/kmsetsi"
+	pb "code.fbi.h-da.de/danet/ekms/internal/api/gen/proto/go/kmsetsi"
 	"google.golang.org/grpc"
 	"google.golang.org/grpc/codes"
 	"google.golang.org/grpc/status"
diff --git a/internal/kms/kmsintercom.go b/internal/kms/kmsintercom.go
index 7bf01c609c04a2e1fbd906638e727dbbfbc5e884..64fac9bad92e296a2a06de57d84fbd2f9a2a59fb 100644
--- a/internal/kms/kmsintercom.go
+++ b/internal/kms/kmsintercom.go
@@ -10,7 +10,7 @@ import (
 	log "github.com/sirupsen/logrus"
 
 	etsi14 "code.fbi.h-da.de/danet/ekms/api/go/rest/etsi/client"
-	pb "code.fbi.h-da.de/danet/proto-kms/api/gen/proto/go/kmsintercom"
+	pb "code.fbi.h-da.de/danet/ekms/internal/api/gen/proto/go/kmsintercom"
 	"google.golang.org/grpc/codes"
 	"google.golang.org/grpc/status"
 )
diff --git a/internal/kms/kmspeers.go b/internal/kms/kmspeers.go
index 05bda9fb812301751c82a632ab6c082ef248181d..f7a8d9daa22588bc92d5624f371b35e43f588769 100644
--- a/internal/kms/kmspeers.go
+++ b/internal/kms/kmspeers.go
@@ -7,7 +7,7 @@ import (
 	"net"
 	"time"
 
-	pbIC "code.fbi.h-da.de/danet/proto-kms/api/gen/proto/go/kmsintercom"
+	pbIC "code.fbi.h-da.de/danet/ekms/internal/api/gen/proto/go/kmsintercom"
 	"github.com/google/uuid"
 	log "github.com/sirupsen/logrus"
 	"google.golang.org/grpc"
diff --git a/internal/kms/module.go b/internal/kms/module.go
index e19d32df16235637ca52537687ee3004291a412d..59437b0f27dcc67826a641df3cd79b9822324fd5 100644
--- a/internal/kms/module.go
+++ b/internal/kms/module.go
@@ -4,14 +4,13 @@ import (
 	"context"
 	"errors"
 	"fmt"
-	"io"
 	"net/url"
 	"sync"
 	"time"
 
 	etsi14 "code.fbi.h-da.de/danet/ekms/api/go/rest/etsi/client"
+	pbIC "code.fbi.h-da.de/danet/ekms/internal/api/gen/proto/go/kmsintercom"
 	restclient "code.fbi.h-da.de/danet/ekms/restclient"
-	pbIC "code.fbi.h-da.de/danet/proto-kms/api/gen/proto/go/kmsintercom"
 	"code.fbi.h-da.de/danet/quantumlayer"
 	"github.com/google/uuid"
 	"github.com/sirupsen/logrus"
@@ -42,12 +41,7 @@ type EmulatedQuantumModule struct {
 	peer             *kmsPeer
 }
 
-func NewEmulatedQuantumModule(kmsUDPAddr string, logOutput io.Writer, logLevel log.Level, logInJson bool) *EmulatedQuantumModule {
-	// create an emulated quantum layer
-	//	ql := quantumlayer.NewQuantumlayerEmuPRNG(logOutput, logLevel, logInJson)
-	//	ql.Configure(kmsUDPAddr)
-	//	ql.PowerOn(generateKeys)
-
+func NewEmulatedQuantumModule(kmsUDPAddr string) *EmulatedQuantumModule {
 	return &EmulatedQuantumModule{
 		QlID: uuid.New(),
 		//QuantumElementLink: ql,
diff --git a/internal/main_test.go b/internal/main_test.go
deleted file mode 100644
index 65e3b727c5ab57772cb9b2e8e05e3389f0e476d0..0000000000000000000000000000000000000000
--- a/internal/main_test.go
+++ /dev/null
@@ -1,81 +0,0 @@
-package main
-
-import (
-	"flag"
-	"os"
-	"testing"
-
-	log "github.com/sirupsen/logrus"
-
-	"code.fbi.h-da.de/danet/proto-kms/kms"
-	"github.com/google/uuid"
-)
-
-func TestMain(m *testing.M) {
-	// run a self-test if set to yes
-	var selfTesting bool
-	// my own Name
-	var udpQL1AddrString string
-	var ql1Name string
-	// a name for potential self-testing
-	var udpQL2AddrString string
-	var ql2Name string
-	// Setup flags that allows to initially provide a address to a second
-	// quantumlayer so generated keys can be fetched. This is mainly to simplify
-	// the initial setup process.
-
-	flag.BoolVar(&selfTesting, "selftesting", true,
-		"Will perform self-testing with second quantum link if set to true")
-
-	flag.StringVar(&udpQL1AddrString, "my-address", "[::1]:50900",
-		"The UDP address for my quantumlayer so keys can be fetched")
-
-	flag.StringVar(&ql1Name, "my-name", "ekms-ql1",
-		"The name of the quantumlayer")
-
-	flag.StringVar(&udpQL2AddrString, "remote-address", "[::1]:50901",
-		"The UDP address to a second quantumlayer so keys can be fetched")
-
-	flag.StringVar(&ql2Name, "remote-name", "ekms-ql2",
-		"The name of the quantumlayer")
-
-	// Parse the provided flags
-	flag.Parse()
-
-	log.Println("Welcome to the proto-kms called: ", ql1Name)
-
-	if selfTesting == true {
-		log.Infof("%s in self-testing mode", ql1Name)
-		go emulatedKMS("leftKMS", "[::1]:50900", "[::1]:50930", "[::1]:50931", true)
-		emulatedKMS("rightKMS", "[::1]:50901", "[::1]:50931", "[::1]:50930", false)
-
-	} else {
-		//	log.Infof("%s in regular mode of operation", ql1Name)
-		//	emulatedKMS(ql1Name, udpQL1AddrString, udpQL2AddrString)
-	}
-}
-
-func emulatedKMS(myName, myUDPAddr, myInterComAddr, peerInterComAddr string, master bool) {
-	// Attach to eKMS
-	emuKMS := kms.NewEKMS(myName, uuid.New(), os.Stdout, log.TraceLevel, false, myInterComAddr)
-
-	eqm := kms.NewEmulatedQuantumModule("::1", os.Stdout, log.TraceLevel, false)
-
-	// Fire up Quantum LinK
-	err := emuKMS.AddQuantumElement(eqm)
-	if err != nil {
-		log.Println("failed to add emulated quantum module")
-		return
-	}
-
-	_, err = emuKMS.AddPeer(myName, peerInterComAddr, eqm)
-	if err != nil {
-		log.Println("PEERERROR: ", err)
-	}
-
-	// Start the SDN/management and key retrieval interface
-	go kms.StartETSI(myUDPAddr, emuKMS)
-
-	for {
-	}
-}