Index: source/ariba/overlay/modules/chord/Chord.cpp
===================================================================
--- source/ariba/overlay/modules/chord/Chord.cpp	(revision 5151)
+++ source/ariba/overlay/modules/chord/Chord.cpp	(revision 5316)
@@ -61,5 +61,4 @@
 	stabilize_counter = 0;
 	stabilize_finger = 0;
-	bootstrapLink = LinkID::UNSPECIFIED;
 }
 
@@ -112,10 +111,9 @@
 void Chord::joinOverlay(const EndpointDescriptor& boot) {
 	logging_info( "joining Chord overlay structure through end-point " <<
-			(boot == EndpointDescriptor::UNSPECIFIED ?
-					"local" : boot.toString()) );
+			(boot.isUnspecified() ? "local" : boot.toString()) );
 
 	// initiator? no->setup first link
-	if (!(boot == EndpointDescriptor::UNSPECIFIED))
-		bootstrapLink = setup(boot);
+	if (!boot.isUnspecified())
+		bootstrapLinks.push_back( setup(boot) );
 
 	// timer for stabilization management
@@ -176,10 +174,23 @@
 }
 
-OverlayInterface::NodeList Chord::getKnownNodes() const {
+OverlayInterface::NodeList Chord::getKnownNodes(bool deep) const {
 	OverlayInterface::NodeList nodelist;
-	for (size_t i = 0; i < table->size(); i++)
-		if ((*table)[i]->ref_count != 0
-				&& !(*table)[i]->info.isUnspecified())
-			nodelist.push_back((*table)[i]->id);
+
+	if( deep ){
+		// all nodes that I know, fingers, succ/pred
+		for (size_t i = 0; i < table->size(); i++){
+			if ((*table)[i]->ref_count != 0
+					&& !(*table)[i]->info.isUnspecified())
+				nodelist.push_back((*table)[i]->id);
+		}
+	} else {
+		// only succ and pred
+		if( table->get_predesessor() != NULL )
+			nodelist.push_back( *(table->get_predesessor()) );
+
+		if( table->get_successor() != NULL )
+					nodelist.push_back( *(table->get_successor()) );
+	}
+
 	return nodelist;
 }
@@ -208,7 +219,8 @@
 	}
 
-	if (!bootstrapLink.isUnspecified() && lnk == bootstrapLink) {
+	vector<LinkID>::iterator it = std::find(bootstrapLinks.begin(), bootstrapLinks.end(), lnk);
+	if( it != bootstrapLinks.end() ) {
 		send_discovery_to(nodeid);
-		bootstrapLink = LinkID::UNSPECIFIED;
+		bootstrapLinks.erase( it );
 	}
 }
Index: source/ariba/overlay/modules/chord/Chord.h
===================================================================
--- source/ariba/overlay/modules/chord/Chord.h	(revision 5151)
+++ source/ariba/overlay/modules/chord/Chord.h	(revision 5316)
@@ -76,5 +76,5 @@
 	int stabilize_counter;
 	int stabilize_finger;
-	LinkID bootstrapLink;
+	vector<LinkID> bootstrapLinks;
 	vector<NodeID> pending;
 
@@ -120,5 +120,5 @@
 
 	/// @see OverlayInterface.h
-	virtual NodeList getKnownNodes() const;
+	virtual NodeList getKnownNodes(bool deep = true) const;
 
 	/// @see CommunicationListener.h or @see OverlayInterface.h
