Index: /source/ariba/overlay/modules/chord/Chord.cpp
===================================================================
--- /source/ariba/overlay/modules/chord/Chord.cpp	(revision 5667)
+++ /source/ariba/overlay/modules/chord/Chord.cpp	(revision 5668)
@@ -116,4 +116,28 @@
 }
 
+void Chord::discover_neighbors( const LinkID& lnk ) {
+	{
+		// send successor discovery
+		ChordMessage cmsg(ChordMessage::discovery, nodeid, nodeid);
+		Discovery dmsg;
+		dmsg.setSourceEndpoint(&baseoverlay.getEndpointDescriptor());
+		dmsg.setFollowType(Discovery::successor);
+		dmsg.setTTL((uint8_t)2);
+		cmsg.encapsulate(&dmsg);
+		send(&dmsg, lnk);
+	}
+	{
+		// send predecessor discovery
+		ChordMessage cmsg(ChordMessage::discovery, nodeid, nodeid);
+		Discovery dmsg;
+		dmsg.setSourceEndpoint(&baseoverlay.getEndpointDescriptor());
+		dmsg.setFollowType(Discovery::predecessor);
+		dmsg.setTTL((uint8_t)2);
+		cmsg.encapsulate(&dmsg);
+		send(&dmsg, lnk);
+	}
+}
+
+
 void Chord::createOverlay() {
 }
@@ -241,14 +265,5 @@
 	vector<LinkID>::iterator it = std::find(bootstrapLinks.begin(), bootstrapLinks.end(), lnk);
 	if( it != bootstrapLinks.end() ) {
-		// send discovery over bootstrap
-		Message msg;
-		ChordMessage cmsg(ChordMessage::discovery, nodeid, nodeid);
-		Discovery dmsg;
-		dmsg.setSourceEndpoint(&baseoverlay.getEndpointDescriptor());
-		dmsg.setFollowType(Discovery::normal);
-		dmsg.setTTL((uint8_t) 4);
-		cmsg.encapsulate(&dmsg);
-		msg.encapsulate(&cmsg);
-		send(&msg, lnk);
+		discover_neighbors( lnk );
 		bootstrapLinks.erase( it );
 	}
@@ -366,5 +381,5 @@
 		}
 
-			// successor mode: follow the successor until TTL is zero
+		// successor mode: follow the successor until TTL is zero
 		case Discovery::successor:
 		case Discovery::predecessor: {
@@ -435,4 +450,16 @@
 		const NodeID disc2 = table->get_finger_table(stabilize_finger).get_compare().get_center();
 		send_discovery_to(disc1);
+
+		if (table->get_successor() != NULL) {
+			route_item* succ_item = table->get(*table->get_successor());
+			discover_neighbors(succ_item->info);
+		}
+
+		// send predecessor message
+		if (table->get_predesessor() != NULL) {
+			route_item* pred_item = table->get(*table->get_predesessor());
+			discover_neighbors(pred_item->info);
+		}
+
 		if (disc1 != disc2)
 			send_discovery_to(disc2);
Index: /source/ariba/overlay/modules/chord/Chord.h
===================================================================
--- /source/ariba/overlay/modules/chord/Chord.h	(revision 5667)
+++ /source/ariba/overlay/modules/chord/Chord.h	(revision 5668)
@@ -89,4 +89,6 @@
 	void send_discovery_to( const NodeID& destination, int ttl = 3 );
 
+	void discover_neighbors( const LinkID& lnk );
+
 public:
 	Chord(BaseOverlay& _baseoverlay, const NodeID& _nodeid,
@@ -133,4 +135,6 @@
 			const LinkID& lnk = LinkID::UNSPECIFIED);
 
+
+
 	/// @see Timer.h
 	virtual void eventFunction();
