Index: source/ariba/overlay/BaseOverlay.cpp
===================================================================
--- source/ariba/overlay/BaseOverlay.cpp	(revision 5528)
+++ source/ariba/overlay/BaseOverlay.cpp	(revision 5539)
@@ -205,4 +205,20 @@
 }
 
+LinkDescriptor* BaseOverlay::getSendDescriptor( const NodeID& nodeid ) {
+	for (size_t i=0; i<links.size(); i++)
+		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 links[i];
+		}
+	LinkDescriptor* ld = getDescriptor(overlayInterface->getNextLinkId(nodeid));
+	if (ld->relay)
+		return getRelayDescriptor(ld->localRelay);
+}
+
 /// routes a message over the overlay or directly sends it when a link is open
 seqnum_t BaseOverlay::sendOverlay( Message* message, const NodeID& nodeid ) {
@@ -1460,5 +1476,4 @@
 			return false;
 		}
-
 	} /* switch */
 
Index: source/ariba/overlay/BaseOverlay.h
===================================================================
--- source/ariba/overlay/BaseOverlay.h	(revision 5528)
+++ source/ariba/overlay/BaseOverlay.h	(revision 5539)
@@ -420,4 +420,6 @@
 	seqnum_t sendMessage( Message* message, const LinkDescriptor* ld );
 
+	LinkDescriptor* getSendDescriptor( const NodeID& nodeid );
+
 	/// routes a message over the overlay or directly sends it when a link is open
 	seqnum_t sendOverlay( Message* message, const NodeID& nodeid );
