Index: source/ariba/overlay/messages/RelayMessage.h
===================================================================
--- source/ariba/overlay/messages/RelayMessage.h	(revision 5757)
+++ source/ariba/overlay/messages/RelayMessage.h	(revision 5758)
@@ -37,5 +37,10 @@
 	/// contructs a unspecified relay message
 	RelayMessage() :
-		type(typeInvalid), relayNode(NodeID::UNSPECIFIED), destNode(NodeID::UNSPECIFIED) {
+		type(typeInvalid), relayNode(NodeID::UNSPECIFIED), destNode(NodeID::UNSPECIFIED), destLink(LinkID::UNSPECIFIED) {
+	}
+
+	RelayMessage( const RelayMessage& rhs ) :
+		type(rhs.type), relayNode(rhs.relayNode), destNode(rhs.destNode), destLink(rhs.destLink) {
+
 	}
 
Index: source/ariba/overlay/modules/chord/Chord.cpp
===================================================================
--- source/ariba/overlay/modules/chord/Chord.cpp	(revision 5757)
+++ source/ariba/overlay/modules/chord/Chord.cpp	(revision 5758)
@@ -311,9 +311,20 @@
 
 		// add to back-routes
-		back_route br;
-		br.id = m->getSource();
-		br.link = link;
-		br.lastseen = time(NULL);
-		back_routes.push_back(br);
+		bool found = false;
+		BOOST_FOREACH( back_route br, back_routes) {
+			if (br.id == m->getSource()) {
+				br.link = link;
+				br.lastseen = time(NULL);
+				found = true;
+				break;
+			}
+		}
+		if (!found) {
+			back_route br;
+			br.id = m->getSource();
+			br.link = link;
+			br.lastseen = time(NULL);
+			back_routes.push_back(br);
+		}
 
 		// next hop == myself?
