Index: /source/ariba/overlay/BaseOverlay.cpp
===================================================================
--- /source/ariba/overlay/BaseOverlay.cpp	(revision 5486)
+++ /source/ariba/overlay/BaseOverlay.cpp	(revision 5487)
@@ -205,10 +205,11 @@
 seqnum_t BaseOverlay::sendOverlay( Message* message, const NodeID& nodeid ) {
 	for (size_t i=0; i<links.size(); i++)
-		if ( links[i]->up &&
-		links[i]->communicationUp &&
-		!links[i]->relay &&
-		links[i]->keepAliveMissed <= 1 &&
-		links[i]->remoteNode == nodeid &&
-		links[i]->service == OverlayInterface::OVERLAY_SERVICE_ID) {
+		if ( !links[i]->relay &&
+			links[i]->up &&
+			links[i]->communicationUp &&
+			links[i]->keepAliveMissed <= 1 &&
+			links[i]->remoteNode == nodeid &&
+			links[i]->service == OverlayInterface::OVERLAY_SERVICE_ID) {
+			links[i]->markAsRelay();
 			return sendMessage( message, links[i] );
 			break;
@@ -1574,4 +1575,6 @@
 	BOOST_FOREACH( const LinkDescriptor* ld, oldlinks ) {
 
+		if (ld->up!=1) continue;
+
 		vector<LinkID>::iterator it = std::find(
 				bootstrapLinks.begin(), bootstrapLinks.end(), ld->communicationId);
