Index: source/ariba/overlay/modules/chord/Chord.cpp
===================================================================
--- source/ariba/overlay/modules/chord/Chord.cpp	(revision 5761)
+++ source/ariba/overlay/modules/chord/Chord.cpp	(revision 5776)
@@ -92,5 +92,6 @@
 
 	// establish link via base overlay
-	return baseoverlay.establishLink(endp, node, OverlayInterface::OVERLAY_SERVICE_ID, remoteRelay );
+	return baseoverlay.establishLink(endp, node, OverlayInterface::OVERLAY_SERVICE_ID,
+			NodeID::UNSPECIFIED );
 }
 
@@ -377,4 +378,5 @@
 					logging_debug("Discovery split: routing discovery message to successor "
 							<< succ_item->id.toString() );
+					cmsg_s.setDestination(succ_item->id);
 					send(&cmsg_s, succ_item->info);
 				}
@@ -390,4 +392,5 @@
 					logging_debug("Discovery split: routing discovery message to predecessor "
 							<< pred_item->id.toString() );
+					cmsg_p.setDestination(pred_item->id);
 					send(&cmsg_p, pred_item->info);
 				}
@@ -484,5 +487,10 @@
 		orphan_removal_counter++;
 		if (orphan_removal_counter <0 || orphan_removal_counter >= 4) {
-			back_routes.clear();
+			for (vector<back_route>::iterator i = back_routes.begin();
+					i!=back_routes.end(); i++) {
+				back_route& br = *i;
+				if (difftime(br.lastseen,time(NULL))>5) i =
+						back_routes.erase(i);
+			}
 			logging_info("Running orphan removal");
 			orphan_removal_counter = 0;
Index: source/ariba/overlay/modules/chord/messages/ChordMessage.h
===================================================================
--- source/ariba/overlay/modules/chord/messages/ChordMessage.h	(revision 5761)
+++ source/ariba/overlay/modules/chord/messages/ChordMessage.h	(revision 5776)
@@ -88,6 +88,14 @@
 	}
 
+	void setSource(const NodeID& source ) {
+		this->source = source;
+	}
+
 	const NodeID& getSource() const {
 		return source;
+	}
+
+	void setDestination(const NodeID& destination ) {
+		this->destination = destination;
 	}
 
