Index: source/ariba/overlay/modules/chord/Chord.cpp
===================================================================
--- source/ariba/overlay/modules/chord/Chord.cpp	(revision 5719)
+++ source/ariba/overlay/modules/chord/Chord.cpp	(revision 5721)
@@ -121,5 +121,5 @@
 		dmsg.setSourceEndpoint(&baseoverlay.getEndpointDescriptor());
 		dmsg.setFollowType(Discovery::successor);
-		dmsg.setTTL((uint8_t)5);
+		dmsg.setTTL((uint8_t)2);
 		cmsg.encapsulate(&dmsg);
 		send(&cmsg, lnk);
@@ -131,5 +131,5 @@
 		dmsg.setSourceEndpoint(&baseoverlay.getEndpointDescriptor());
 		dmsg.setFollowType(Discovery::predecessor);
-		dmsg.setTTL((uint8_t)5);
+		dmsg.setTTL((uint8_t)2);
 		cmsg.encapsulate(&dmsg);
 		send(&cmsg, lnk);
@@ -340,5 +340,8 @@
 		case Discovery::normal: {
 			// closest node? yes-> split to follow successor and predecessor
-			if (table->is_closest_to(m->getDestination())) {
+			if (table->is_closest_to(m->getDestination())
+				|| (table->get_successor()!=NULL && *table->get_successor() == m->getDestination())
+				|| (table->get_predesessor()!=NULL && *table->get_predesessor() == m->getDestination())
+			) {
 
 				if (table->get_successor() != NULL) {
@@ -370,12 +373,9 @@
 			else {
 				// find next hop
-				const route_item* item = table->get_next_hop(m->getDestination());
+				const route_item* item = table->get_next_hop(m->getDestination(),true);
 				if (item == NULL || item->id == nodeid) break;
 				logging_debug("routing discovery message to " <<
 						item->id.toString() );
-				ChordMessage cmsg_p(*m);
-				Discovery dmsg_p(*dmsg);
-				cmsg_p.encapsulate(&dmsg_p);
-				send(&cmsg_p, item->info);
+				send(m, item->info);
 			}
 			break;
