Index: source/ariba/overlay/BaseOverlay.cpp
===================================================================
--- source/ariba/overlay/BaseOverlay.cpp	(revision 5774)
+++ source/ariba/overlay/BaseOverlay.cpp	(revision 5776)
@@ -1394,4 +1394,16 @@
 			RelayMessage* relayMsg = overlayMsg->decapsulate<RelayMessage>();
 
+			// mark incoming link as relay
+			if (ld!=NULL) ld->markAsRelay();
+
+			// am I the destination of this message? yes->
+			if (relayMsg->getDestNode() == nodeId ) {
+				// deliver relay message locally!
+				logging_debug("Relay message reached destination. Handling the message.");
+				handleMessage( relayMsg, relayMsg->getDestLink(), LinkID::UNSPECIFIED, remoteNode );
+				ret = true;
+				break;
+			}
+
 			// is relay message informative?
 			switch (relayMsg->getType()) {
@@ -1402,16 +1414,4 @@
 							<< " relay " << relayMsg->getRelayNode()
 							<< " destination " << relayMsg->getDestNode() );
-
-					// mark incoming link as relay
-					if (ld!=NULL) ld->markAsRelay();
-
-					// am I the destination of this message? yes->
-					if (relayMsg->getDestNode() == nodeId ) {
-						// deliver relay message locally!
-						logging_debug("Relay message reached destination. Handling the message.");
-						handleMessage( relayMsg, relayMsg->getDestLink(), LinkID::UNSPECIFIED, remoteNode );
-						ret = true;
-						break;
-					}
 
 					// create route message
@@ -1426,5 +1426,6 @@
 					} else {
 						logging_info("Routing relay message to " << relayMsg->getRelayNode().toString() );
-						sendOverlay( &_overMsg, relayMsg->getRelayNode() );
+//						sendOverlay( &_overMsg, relayMsg->getRelayNode() );
+						sendOverlay( &_overMsg, relayMsg->getDestNode() );
 					}
 					ret = true;
@@ -1437,16 +1438,4 @@
 							<< " relay " << relayMsg->getRelayNode()
 							<< " destination " << relayMsg->getDestNode() );
-
-					// mark incoming link as relay
-					if (ld!=NULL) ld->markAsRelay();
-
-					// am I the destination of this message? yes->
-					if (relayMsg->getDestNode() == nodeId ) {
-						// deliver relay message locally!
-						logging_debug("Relay message reached destination. Handling the message.");
-						handleMessage( relayMsg, relayMsg->getDestLink(), LinkID::UNSPECIFIED, remoteNode );
-						ret = true;
-						break;
-					}
 
 					// am I the relay for this message? yes->
Index: source/ariba/overlay/modules/chord/Chord.cpp
===================================================================
--- source/ariba/overlay/modules/chord/Chord.cpp	(revision 5774)
+++ 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 5774)
+++ 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;
 	}
 
