diff --git a/cmd/start.go b/cmd/start.go
index c569339e37dea923afc30a1d8a63681d12c4a9df..910ec8b84362110ba483b494a698c697bf4246f9 100644
--- a/cmd/start.go
+++ b/cmd/start.go
@@ -36,7 +36,6 @@ import (
 
 	"code.fbi.h-da.de/danet/ekms/etsiqkdnclient"
 	"code.fbi.h-da.de/danet/ekms/handlers/danet"
-	"code.fbi.h-da.de/danet/ekms/handlers/etsi"
 	"code.fbi.h-da.de/danet/ekms/handlers/system"
 	gnmitargetygot "code.fbi.h-da.de/danet/ekms/model"
 	"code.fbi.h-da.de/danet/ekms/restserver"
@@ -98,7 +97,7 @@ var startCmd = &cobra.Command{
 			logrus.Fatal(err)
 		}
 
-		qkdnClient := etsiqkdnclient.NewQkdnClient(kmsConfig)
+		ekmsClient := etsiqkdnclient.NewEkmsClient(kmsConfig)
 
 		schema, err := gnmitargetygot.Schema()
 		if err != nil {
@@ -114,8 +113,9 @@ var startCmd = &cobra.Command{
 			system.NewMotdHandler(),
 			system.NewStateHandler(),
 			system.NewSystemHandler(),
-			etsi.NewETSI15Handler(qkdnClient),
-			danet.NewAssignForwardingHandler(qkdnClient),
+			danet.NewKmsHandler(ekmsClient),
+			danet.NewPeerHandler(ekmsClient),
+			danet.NewAssignForwardingHandler(ekmsClient),
 		}
 
 		gnmitTarget := gnmitarget.NewGnmiTarget(schema, &gnmitargetygot.Gnmitarget{}, gnmitargetygot.ΓModelData, gnmitargetygot.Unmarshal, gnmitargetygot.ΛEnum, handlers...)
diff --git a/config/ekms/example01.yaml b/config/ekms/example01.yaml
index 8d73259fb558c7790d27c876889a43c5c42e29cb..fc89a1bd72862cfd2c8d0306aab9019d0093f64c 100644
--- a/config/ekms/example01.yaml
+++ b/config/ekms/example01.yaml
@@ -1,11 +1,13 @@
+Id: '0ff33c82-7fe1-482b-a0ca-67565806ee4b'
 Name: ekms01
 InterComAddr: 172.100.20.10:50910
 GRPCAddr: 172.100.20.10:50900
 Peers:
-      # peer to ekms02
-    - PeerInterComAddr: 172.100.20.11:50910
+    # peer to ekms02
+    - PeerId: '968fd594-b0e7-41f0-ba4b-de259047a933'
+      PeerInterComAddr: 172.100.20.11:50910
       Sync: true
       # quantum module of type emulated at the given address
       QuantumModule:
-        Type: emulated
-        Address: 172.100.20.12
+          Type: emulated
+          Address: 172.100.20.12
diff --git a/config/ekms/example02.yaml b/config/ekms/example02.yaml
index f442f1e448fb70cb0161813c055116577772ad96..36aec3ddaf4953ecc800457794397db66321e3b0 100644
--- a/config/ekms/example02.yaml
+++ b/config/ekms/example02.yaml
@@ -1,11 +1,13 @@
+Id: '968fd594-b0e7-41f0-ba4b-de259047a933'
 Name: ekms02
 InterComAddr: 172.100.20.11:50910
 GRPCAddr: 172.100.20.11:50900
 Peers:
-      # peer to ekms01
-    - PeerInterComAddr: 172.100.20.10:50910
+    # peer to ekms01
+    - PeerId: '0ff33c82-7fe1-482b-a0ca-67565806ee4b'
+      PeerInterComAddr: 172.100.20.10:50910
       Sync: false
       # quantum module of type emulated at the given address
       QuantumModule:
-        Type: emulated
-        Address: 172.100.20.13
+          Type: emulated
+          Address: 172.100.20.13
diff --git a/docker-compose.yml b/docker-compose.yml
index 0a601e32546322892eb23ef0296eef408e76812b..c85be767332b786a76cb509121299ce07c4d6caa 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -9,6 +9,7 @@ services:
         - ./config/ekms/example01.yaml:/tmp/kms/config/ekms01.yaml
     ports:
         - "127.0.0.1:50900:50900"
+        - "127.0.0.1:7030:7030"
     networks:
         ekms-net:
             ipv4_address: 172.100.20.10
@@ -21,6 +22,7 @@ services:
         - ./config/ekms/example02.yaml:/tmp/kms/config/ekms02.yaml
     ports:
         - "127.0.0.1:50901:50900"
+        - "127.0.0.1:7031:7030"
     networks:
         ekms-net:
             ipv4_address: 172.100.20.11
diff --git a/etsiqkdnclient/etsi-qkdn-client.go b/etsiqkdnclient/etsi-qkdn-client.go
index 14ec0855cdb2a362fa25b54d5a3e161dcedfcaa4..43cd5238af67f51540336d28a5893748ca399413 100644
--- a/etsiqkdnclient/etsi-qkdn-client.go
+++ b/etsiqkdnclient/etsi-qkdn-client.go
@@ -43,6 +43,7 @@ const (
 //         GenerateKeys: true
 
 type Config struct {
+	Id           string `yaml:"Id"`
 	Name         string `yaml:"Name"`
 	InterComAddr string `yaml:"InterComAddr"`
 	GRPCAddr     string `yaml:"GRPCAddr"`
@@ -62,44 +63,70 @@ type QuantumModule struct {
 	MasterMode  bool   `yaml:"MasterMode"`
 }
 
-type EtsiQkdClient interface {
-	GetQkdnVersion() *string
-	GetQkdnUui() *string
-	GetQkdnLocationId() *string
-	GetEKMS() *kms.EKMS
-	SubscribeToEtsiQkdClient() chan string
+type EkmsClient interface {
+	Version() *ekmsVersionInformation
+	ID() uuid.UUID
+	Ekms() *kms.EKMS
+	Subscribe() chan string
 }
 
+// TODO: change this in the future
 // This provides some static information
-type etsiQkdnInfo struct {
+type ekmsInfo struct {
 	// Information used to fill the ETSI GS QKD 15 yang model
-	qkdnVersion          string // qkdn_version
-	qkdnUuid             string
-	qkdnLocationId       string
+	id                   uuid.UUID
+	version              *ekmsVersionInformation
 	kms                  *kms.EKMS
 	KmsPeerUpdateChannel chan string // used to get updates from KmsPeer part
 }
 
+type ekmsVersionInformation struct {
+	firmware  string
+	swVersion string
+	hwVersion string
+}
+
+func (evi *ekmsVersionInformation) Firmware() string {
+	return evi.firmware
+}
+
+func (evi *ekmsVersionInformation) SoftwareVersion() string {
+	return evi.swVersion
+}
+
+func (evi *ekmsVersionInformation) HardwareVersion() string {
+	return evi.hwVersion
+}
+
 // A QkdnClient for the emulated KMS
-// Creates two mockup QKD Interfaces for testing
-func NewQkdnClient(bootInfo *Config) (myInfo *etsiQkdnInfo) {
+func NewEkmsClient(bootInfo *Config) (myInfo *ekmsInfo) {
+	var ekmsId uuid.UUID
+	if bootInfo.Id != "" {
+		ekmsId = uuid.MustParse(bootInfo.Id)
+	} else {
+		ekmsId = uuid.New()
+	}
+
+	myInfo = new(ekmsInfo)
+	myInfo.version = &ekmsVersionInformation{
+		firmware:  "danet-emulated-kms",
+		swVersion: "0.1.0",
+		hwVersion: "0.1.0",
+	}
 
-	myInfo = new(etsiQkdnInfo)
-	myInfo.qkdnVersion = "danet-emulated-kms;0.1.0"
-	myInfo.qkdnUuid = uuid.NewString()
-	myInfo.qkdnLocationId = "toujours et partout"
+	myInfo.id = ekmsId
 	myInfo.KmsPeerUpdateChannel = make(chan string)
 
 	log.Printf("%s in regular operations mode", bootInfo.Name)
-	myInfo.kms = emulatedKMS(bootInfo, myInfo.KmsPeerUpdateChannel)
+	myInfo.kms = emulatedKMS(bootInfo, ekmsId, myInfo.KmsPeerUpdateChannel)
 
 	return myInfo
 }
 
 // TODO: return an error
-func emulatedKMS(config *Config, peerChannel chan string) *kms.EKMS {
+func emulatedKMS(config *Config, id uuid.UUID, peerChannel chan string) *kms.EKMS {
 	// Attach to eKMS
-	emuKMS := kms.NewEKMS(config.Name, uuid.New(), os.Stdout, log.TraceLevel, false, config.InterComAddr)
+	emuKMS := kms.NewEKMS(config.Name, id, os.Stdout, log.TraceLevel, false, config.InterComAddr)
 	emuKMS.AddExternalNotifierKMSPeer(peerChannel)
 
 	var qm kms.QuantumModule
@@ -146,22 +173,18 @@ func emulatedKMS(config *Config, peerChannel chan string) *kms.EKMS {
 	return emuKMS
 }
 
-func (qkdnInfo *etsiQkdnInfo) GetQkdnVersion() *string {
-	return &qkdnInfo.qkdnVersion
-}
-
-func (qkdnInfo *etsiQkdnInfo) GetQkdnUui() *string {
-	return &qkdnInfo.qkdnUuid
+func (qkdnInfo *ekmsInfo) Version() *ekmsVersionInformation {
+	return qkdnInfo.version
 }
 
-func (qkdnInfo *etsiQkdnInfo) GetQkdnLocationId() *string {
-	return &qkdnInfo.qkdnLocationId
+func (qkdnInfo *ekmsInfo) ID() uuid.UUID {
+	return qkdnInfo.id
 }
 
-func (qkdnInfo *etsiQkdnInfo) GetEKMS() *kms.EKMS {
+func (qkdnInfo *ekmsInfo) Ekms() *kms.EKMS {
 	return qkdnInfo.kms
 }
 
-func (qkdnInfo *etsiQkdnInfo) SubscribeToEtsiQkdClient() chan string {
+func (qkdnInfo *ekmsInfo) Subscribe() chan string {
 	return qkdnInfo.KmsPeerUpdateChannel
 }
diff --git a/handlers/danet/assignForwardingHandler.go b/handlers/danet/assignForwardingHandler.go
index 95baf83c3af89e526854b25d9ed35f412c9692ec..db2cba859c877425e741aa7e5aef55f5a76cece4 100644
--- a/handlers/danet/assignForwardingHandler.go
+++ b/handlers/danet/assignForwardingHandler.go
@@ -13,16 +13,16 @@ import (
 type AssignForwardingHandler struct {
 	name       string
 	paths      map[string]struct{}
-	qkdnClient etsiqkdnclient.EtsiQkdClient
+	ekmsClient etsiqkdnclient.EkmsClient
 }
 
-func NewAssignForwardingHandler(client etsiqkdnclient.EtsiQkdClient) *AssignForwardingHandler {
+func NewAssignForwardingHandler(client etsiqkdnclient.EkmsClient) *AssignForwardingHandler {
 	return &AssignForwardingHandler{
 		name: "assign-forwarding-handler",
 		paths: map[string]struct{}{
 			"/assign-forwarding": struct{}{},
 		},
-		qkdnClient: client,
+		ekmsClient: client,
 	}
 }
 
@@ -61,7 +61,7 @@ func (yh *AssignForwardingHandler) Update(c ygot.ValidatedGoStruct, jobs []*gnmi
 		prevHopString = fmt.Sprintf("%s:%d", prevHop.GetIpAddress(), prevHop.GetPort())
 	}
 
-	if err := yh.qkdnClient.GetEKMS().AssignForwardingRoute(forwarding.GetPathId(), prevHopString, nextHopString); err != nil {
+	if err := yh.ekmsClient.Ekms().AssignForwardingRoute(forwarding.GetPathId(), prevHopString, nextHopString); err != nil {
 		return err
 	}
 
diff --git a/handlers/danet/kmsHandler.go b/handlers/danet/kmsHandler.go
new file mode 100644
index 0000000000000000000000000000000000000000..fb2c62df181465c8e93c04e35f9b43762f9f9aad
--- /dev/null
+++ b/handlers/danet/kmsHandler.go
@@ -0,0 +1,71 @@
+package danet
+
+import (
+	"fmt"
+
+	"code.fbi.h-da.de/danet/ekms/etsiqkdnclient"
+	gnmitargetygot "code.fbi.h-da.de/danet/ekms/model"
+	"github.com/openconfig/gnmi/proto/gnmi"
+	"github.com/openconfig/ygot/ygot"
+)
+
+type KmsHandler struct {
+	name       string
+	paths      map[string]struct{}
+	ekmsClient etsiqkdnclient.EkmsClient
+}
+
+func NewKmsHandler(client etsiqkdnclient.EkmsClient) *KmsHandler {
+	return &KmsHandler{
+		name: "kms-handler",
+		paths: map[string]struct{}{
+			"/kms": struct{}{},
+		},
+		ekmsClient: client,
+	}
+}
+
+func (yh *KmsHandler) Name() string {
+	return yh.name
+}
+
+func (yh *KmsHandler) Paths() map[string]struct{} {
+	return yh.paths
+}
+
+func (yh *KmsHandler) Init(c ygot.ValidatedGoStruct) error {
+	config, ok := c.(*gnmitargetygot.Gnmitarget)
+	if !ok {
+		return fmt.Errorf("failed type assertion for newConfig %T", (*gnmitargetygot.Gnmitarget)(nil))
+	}
+
+	//Prepare the eKMS to send KMSPeer notifications
+	yh.ekmsClient.Ekms().AddExternalNotifierKMSPeer(yh.ekmsClient.Subscribe())
+
+	// Create ygot structs for the kms
+	confEkms := config.GetOrCreateKms()
+
+	// Fill out the known fields in the ygot structs
+	err := updateOrCreateKMS(confEkms, yh.ekmsClient)
+	if err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (yh *KmsHandler) Update(c ygot.ValidatedGoStruct, jobs []*gnmi.Update) error {
+	// static information, therefore a update should not do anything
+	return nil
+}
+
+func updateOrCreateKMS(confKMS *gnmitargetygot.Temp_Kms, ekmsClient etsiqkdnclient.EkmsClient) error {
+	confKMS.KmsId = ygot.String(ekmsClient.ID().String())
+
+	confVersionInfo := confKMS.GetOrCreateVersionInformation()
+	confVersionInfo.Firmware = ygot.String(ekmsClient.Version().Firmware())
+	confVersionInfo.HwVersion = ygot.String(ekmsClient.Version().HardwareVersion())
+	confVersionInfo.SwVersion = ygot.String(ekmsClient.Version().SoftwareVersion())
+
+	return nil
+}
diff --git a/handlers/danet/peerHandler.go b/handlers/danet/peerHandler.go
new file mode 100644
index 0000000000000000000000000000000000000000..13d396c0a82c22cab7577b50beeeb8031964e02e
--- /dev/null
+++ b/handlers/danet/peerHandler.go
@@ -0,0 +1,110 @@
+package danet
+
+import (
+	"fmt"
+
+	"code.fbi.h-da.de/danet/ekms/etsiqkdnclient"
+	"code.fbi.h-da.de/danet/ekms/internal/kms"
+	gnmitargetygot "code.fbi.h-da.de/danet/ekms/model"
+	"github.com/openconfig/gnmi/proto/gnmi"
+	"github.com/openconfig/ygot/ygot"
+	log "github.com/sirupsen/logrus"
+)
+
+type PeerHandler struct {
+	name       string
+	paths      map[string]struct{}
+	ekmsClient etsiqkdnclient.EkmsClient
+}
+
+func NewPeerHandler(client etsiqkdnclient.EkmsClient) *PeerHandler {
+	return &PeerHandler{
+		name: "kms-handler",
+		paths: map[string]struct{}{
+			// TODO:change to right path
+			"kms-peers": struct{}{},
+		},
+		ekmsClient: client,
+	}
+}
+
+func (yh *PeerHandler) Name() string {
+	return yh.name
+}
+
+func (yh *PeerHandler) Paths() map[string]struct{} {
+	return yh.paths
+}
+
+func (yh *PeerHandler) Init(c ygot.ValidatedGoStruct) error {
+	config, ok := c.(*gnmitargetygot.Gnmitarget)
+	if !ok {
+		return fmt.Errorf("failed type assertion for newConfig %T", (*gnmitargetygot.Gnmitarget)(nil))
+	}
+
+	//Prepare the eKMS to send KMSPeer notifications
+	yh.ekmsClient.Ekms().AddExternalNotifierKMSPeer(yh.ekmsClient.Subscribe())
+
+	// Create ygot structs for the kms
+	confPeerTable := config.GetOrCreateKmsPeerTable()
+
+	// Fill out the known fields in the ygot structs
+	err := updateOrCreatePeerTable(confPeerTable, yh.ekmsClient)
+	if err != nil {
+		return err
+	}
+
+	// Start the go routine that takes care of any update from the kms
+	go func() {
+		kmsChan := yh.ekmsClient.Subscribe()
+		for {
+			select {
+			case <-kmsChan:
+				log.Println("Update for KMSPeer.")
+				if err := updateOrCreatePeerTable(confPeerTable, yh.ekmsClient); err != nil {
+					log.Println("Error within kmspeer update goroutine.")
+				}
+			}
+		}
+	}()
+
+	return nil
+}
+
+func (yh *PeerHandler) Update(c ygot.ValidatedGoStruct, jobs []*gnmi.Update) error {
+	// TODO: implement
+	return nil
+}
+
+func updateOrCreatePeerTable(confKMS *gnmitargetygot.Temp_KmsPeerTable, ekmsClient etsiqkdnclient.EkmsClient) error {
+	kmsPeers := ekmsClient.Ekms().PeersDeepCopy()
+
+	for _, peer := range kmsPeers {
+		confTempKmsPeer := confKMS.GetOrCreateKmsPeers(peer.GetKmsPeerId().String())
+		confTempPeerInformation := confTempKmsPeer.GetOrCreatePeerInformation()
+
+		confTempPeerInformation.IpAddress = ygot.String(peer.Address().IP.String())
+		confTempPeerInformation.Port = ygot.Uint16(uint16(peer.Address().Port))
+
+		// TODO: implement for kms, curently hardcoded
+		confInterKmsProtocol := confTempPeerInformation.GetOrCreateInterKmsProtocol()
+		confInterKmsProtocol.ProtocolName = gnmitargetygot.Temp_KmsInterfaceTable_KmsInterfaces_InterKmsProtocol_ProtocolName_DANET_INTER_KMS_PROTO
+		confInterKmsProtocol.OpStatus = gnmitargetygot.Temp_KmsInterfaceTable_KmsInterfaces_InterKmsProtocol_OpStatus_ALLOWED
+
+		confTempPeerInformation.QkdModuleId = ygot.String(peer.QuantumModule().String())
+
+		switch status := peer.GetKmsPeerStatus(); status {
+		case kms.KmsPeerUp:
+			confTempPeerInformation.OpStatus = gnmitargetygot.Temp_KmsPeerTable_KmsPeers_PeerInformation_OpStatus_ACTIVE
+		case kms.KmsPeerPending:
+			confTempPeerInformation.OpStatus = gnmitargetygot.Temp_KmsPeerTable_KmsPeers_PeerInformation_OpStatus_PENDING
+		default:
+			confTempPeerInformation.OpStatus = gnmitargetygot.Temp_KmsPeerTable_KmsPeers_PeerInformation_OpStatus_ERROR
+		}
+
+		// TODO: implement for kms, curently hardcoded
+		confTempPeerInformation.NegotiatedKeyLength = ygot.Uint64(256)
+	}
+
+	return nil
+}
diff --git a/handlers/etsi/etsi15Handler.go b/handlers/etsi/etsi15Handler.go
deleted file mode 100644
index 7d536c807cb9f73805eefcaa2d74fbcc8596d96f..0000000000000000000000000000000000000000
--- a/handlers/etsi/etsi15Handler.go
+++ /dev/null
@@ -1,190 +0,0 @@
-package etsi
-
-import (
-	"fmt"
-
-	"code.fbi.h-da.de/danet/ekms/etsiqkdnclient"
-	gnmitargetygot "code.fbi.h-da.de/danet/ekms/model"
-	"github.com/openconfig/gnmi/proto/gnmi"
-	"github.com/openconfig/ygot/ygot"
-	log "github.com/sirupsen/logrus"
-)
-
-// ETSI15Handler is the implementation of a gnmitarget.PathHandler.
-type ETSI15Handler struct {
-	name       string
-	paths      map[string]struct{}
-	qkdnClient etsiqkdnclient.EtsiQkdClient
-}
-
-func NewETSI15Handler(client etsiqkdnclient.EtsiQkdClient) *ETSI15Handler {
-	return &ETSI15Handler{
-		name: "etsi15-handler",
-		paths: map[string]struct{}{
-			"/qkdn": struct{}{},
-		},
-		qkdnClient: client,
-	}
-}
-
-func (yh *ETSI15Handler) Name() string {
-	return yh.name
-}
-
-func (yh *ETSI15Handler) Paths() map[string]struct{} {
-	return yh.paths
-}
-
-func (yh *ETSI15Handler) Init(c ygot.ValidatedGoStruct) error {
-	config, ok := c.(*gnmitargetygot.Gnmitarget)
-	if !ok {
-		return fmt.Errorf("failed type assertion for newConfig %T", (*gnmitargetygot.Gnmitarget)(nil))
-	}
-
-	//Prepare the KMS to send KMSPeer notifications
-	yh.qkdnClient.GetEKMS().AddExternalNotifierKMSPeer(yh.qkdnClient.SubscribeToEtsiQkdClient())
-
-	// Create ygot structs for the ETSI GS QKD 15 models
-	confQkdNode := config.GetOrCreateQkdNode()
-
-	// Fill out the known fields in the ygot structs
-	err := updateOrCreateQkdNode(confQkdNode, yh.qkdnClient)
-	if err != nil {
-		return err
-	}
-
-	// Start the go routine that takes care of any update from the kms
-	go func() {
-		kmsChan := yh.qkdnClient.SubscribeToEtsiQkdClient()
-		for {
-			select {
-			case <-kmsChan:
-				log.Println("Update for KMSPeer.")
-				if err := updateOrCreateQkdNode(confQkdNode, yh.qkdnClient); err != nil {
-					fmt.Println("Error within qkdn update goroutine.")
-				}
-			}
-		}
-	}()
-
-	return nil
-}
-
-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)
-	//			}
-	//		}
-	//	}
-	//}
-	return nil
-}
-
-func updateOrCreateQkdNode(confQkdNode *gnmitargetygot.EtsiQkdSdnNode_QkdNode, qkdInfo etsiqkdnclient.EtsiQkdClient) error {
-	// set current version of the QDKN module
-	confQkdNode.QkdnVersion = qkdInfo.GetQkdnVersion()
-	confQkdNode.QkdnId = qkdInfo.GetQkdnUui()
-	confQkdNode.QkdnLocationId = qkdInfo.GetQkdnLocationId()
-	/*
-		confQkdNode.QkdnCapabilities.ApplicationStatsSupport
-		confQkdNode.QkdnCapabilities.LinkStatsSupport
-		confQkdNode.QkdnCapabilities.KeyRelayModeEnable
-	*/
-
-	// 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
-	//	}
-	//}
-
-	confQkdNode.QkdApplications = confQkdNode.GetOrCreateQkdApplications()
-
-	return nil
-}
diff --git a/internal/kms/kms.go b/internal/kms/kms.go
index 37dc67f9dfab87fa81238e1c09820dc4fbc7c482..b63f2d47e77106471680e8575b112844f2157b18 100644
--- a/internal/kms/kms.go
+++ b/internal/kms/kms.go
@@ -236,3 +236,15 @@ func (kms *EKMS) FindPeerUuid(lookup uuid.UUID) (peer *kmsPeer) {
 
 	return nil
 }
+
+func (kms *EKMS) PeersDeepCopy() map[string]*kmsPeer {
+	copy := make(map[string]*kmsPeer, len(kms.KmsPeers))
+
+	kms.kmsPeersMutex.Lock()
+	for k, v := range kms.KmsPeers {
+		copy[k] = v
+	}
+	kms.kmsPeersMutex.Unlock()
+
+	return copy
+}
diff --git a/internal/kms/kmspeers.go b/internal/kms/kmspeers.go
index f7a8d9daa22588bc92d5624f371b35e43f588769..ab2cec0c303d0d0bc460aa9bdd0e8cf07b6224b7 100644
--- a/internal/kms/kmspeers.go
+++ b/internal/kms/kmspeers.go
@@ -34,11 +34,11 @@ type kmsPeer struct {
 	externalNotifierKMSPeer chan string
 	peerClient              pbIC.KmsTalkerClient
 	peerStatus              KmsPeerStatus
-	peerKmsId               string // NOTE: might be changed in the future
+	peerKmsId               uuid.UUID // NOTE: might be changed in the future
 	interComAddr            string
 	servingQuantumModul     QuantumModule
-	tcpSocket               net.TCPAddr // the IP address and TCP port (aka socket) of the kms peer
-	tcpSocketStr            string      // string rep. of tcpSocket
+	tcpSocket               *net.TCPAddr // the IP address and TCP port (aka socket) of the kms peer
+	tcpSocketStr            string       // string rep. of tcpSocket
 	et                      CryptoAlgorithm
 	name                    string    // the name of the kms peer
 	id                      uuid.UUID // uuid of the peer
@@ -49,22 +49,34 @@ func NewKmsPeer(peerKmsId string, servQM QuantumModule, tcpSocketStr string, int
 	if servQM.Peer() != nil {
 		return nil, fmt.Errorf("QuantumModule with ID: , already has a peer", servQM.ID())
 	}
+
+	peerKmsIdUUID, err := uuid.Parse(peerKmsId)
+	if err != nil {
+		return nil, err
+	}
 	newPeerConn, err := grpc.Dial(tcpSocketStr, grpc.WithTransportCredentials(insecure.NewCredentials()))
 	if err != nil {
 		return nil, err
 	}
+
 	peerClient := pbIC.NewKmsTalkerClient(newPeerConn)
 
+	tcpSocket, err := net.ResolveTCPAddr("tcp", tcpSocketStr)
+	if err != nil {
+		return nil, err
+	}
+
 	peer := &kmsPeer{
 		externalNotifierKMSPeer: in,
 		// TODO: rename to client
 		peerClient: peerClient,
 		// TODO: change this, only for demo purposes
 		peerStatus: KmsPeerUp,
-		peerKmsId:  peerKmsId,
+		peerKmsId:  peerKmsIdUUID,
 		// TODO: move this into a config
 		interComAddr:        interComAddr,
 		servingQuantumModul: servQM,
+		tcpSocket:           tcpSocket,
 		tcpSocketStr:        tcpSocketStr,
 		et:                  NewAES(),
 		id:                  uuid.New(),
@@ -80,6 +92,14 @@ func NewKmsPeer(peerKmsId string, servQM QuantumModule, tcpSocketStr string, int
 	return peer, nil
 }
 
+func (ph *kmsPeer) Address() *net.TCPAddr {
+	return ph.tcpSocket
+}
+
+func (ph *kmsPeer) QuantumModule() uuid.UUID {
+	return ph.servingQuantumModul.ID()
+}
+
 func (ph *kmsPeer) SyncBulkKeys() error {
 	return ph.servingQuantumModul.Sync()
 }
@@ -157,5 +177,5 @@ func (ph *kmsPeer) GetKmsPeerStatus() KmsPeerStatus {
 }
 
 func (ph *kmsPeer) GetKmsPeerId() uuid.UUID {
-	return ph.id
+	return ph.peerKmsId
 }