diff --git a/internal/kms/kms.go b/internal/kms/kms.go
index 2cb9be31947eea8572085597cad6b88eb6a18ba8..1d49bae167ae3864fd1a84348ade39266cfe18c8 100644
--- a/internal/kms/kms.go
+++ b/internal/kms/kms.go
@@ -220,6 +220,37 @@ func (kms *EKMS) AddPeer(kmsPeerSocket string, servingQLE *QuantumElement) (*kms
 	return peer, nil
 }
 
+func (kms *EKMS) AssignForwardingRoute(pId, pHop, nHop string) error {
+	pathId, err := uuid.Parse(pId)
+	if err != nil {
+		return fmt.Errorf("The given path id %s is no uuid; err = ", pathId, err)
+	}
+
+	var previousHop *kmsPeer
+	var nextHop *kmsPeer
+	var ok bool
+	if pHop != "" {
+		previousHop, ok = kms.KmsPeers[pHop]
+		if !ok {
+			return fmt.Errorf("No peer found for %s", pHop)
+		}
+	}
+	if nHop != "" {
+		nextHop, ok = kms.KmsPeers[nHop]
+		if !ok {
+			return fmt.Errorf("No peer found for %s", nHop)
+		}
+	}
+
+	// set the route within routing table
+	kms.routingTable[pathId] = &Route{
+		Previous: previousHop,
+		Next:     nextHop,
+	}
+
+	return nil
+}
+
 // TODO/XXX error handling
 func (kms *EKMS) RemovePeer(kmsPeerSocket string) {
 	if _, there := kms.KmsPeers[kmsPeerSocket]; there {