Index: source/ariba/overlay/modules/onehop/OneHop.cpp
===================================================================
--- source/ariba/overlay/modules/onehop/OneHop.cpp	(revision 5151)
+++ source/ariba/overlay/modules/onehop/OneHop.cpp	(revision 5316)
@@ -52,7 +52,5 @@
 		OverlayStructureEvents* _eventsReceiver, const OverlayParameterSet& param)
 	: 	OverlayInterface( _baseoverlay, _nodeid, _eventsReceiver, param ),
-		state		( OneHopStateInvalid ),
-		bootstrapLink	( LinkID::UNSPECIFIED ),
-		pendingLinks	( 0 ) {
+		state( OneHopStateInvalid ) {
 
 	//
@@ -88,4 +86,9 @@
 	logging_debug( "routing message to node " << destnode.toString() );
 
+	// msg for ourselfs
+	if(destnode == nodeid)
+		baseoverlay.incomingRouteMessage( msg, LinkID::UNSPECIFIED, nodeid );
+
+	// msg for other node
 	OverlayNodeMapping::const_iterator i = overlayNodes.find( destnode );
 	if (i == overlayNodes.end()) {
@@ -116,5 +119,4 @@
 	// the create and join process is completed now.
 	logging_info( "creating onehop overlay structure" );
-	state = OneHopStateCompleted;
 }
 
@@ -123,8 +125,7 @@
 	logging_info( "deleting onehop overlay structure" );
 	state = OneHopStateInvalid;
-	pendingLinks = 0;
-}
-
-OverlayInterface::NodeList OneHop::getKnownNodes() const {
+}
+
+OverlayInterface::NodeList OneHop::getKnownNodes(bool deep) const {
 
 	OverlayInterface::NodeList retlist;
@@ -142,11 +143,7 @@
 
 	logging_info( "joining onehop overlay structure through end-point " <<
-			(bootstrapEp == EndpointDescriptor::UNSPECIFIED ?
-					"local" : bootstrapEp.toString()) );
-
-	state = OneHopStateJoinInitiated;
-	pendingLinks = 0;
-
-	if( bootstrapEp == EndpointDescriptor::UNSPECIFIED ){
+			(bootstrapEp.isUnspecified() ? "local" : bootstrapEp.toString()) );
+
+	if( bootstrapEp.isUnspecified() ){
 
 		// we are the initiator and we are to bootstrap against
@@ -156,6 +153,8 @@
 		state = OneHopStateCompleted;
 	} else {
-		bootstrapLink = baseoverlay.establishLink( bootstrapEp,
-					OverlayInterface::OVERLAY_SERVICE_ID );
+		bootstrapLinks.push_back(
+				baseoverlay.establishLink( bootstrapEp,
+					OverlayInterface::OVERLAY_SERVICE_ID )
+					);
 	}
 }
@@ -187,6 +186,4 @@
 		}
 	}
-
-	pendingLinks = 0;
 }
 
@@ -210,17 +207,10 @@
 		}
 	}
+
+	vector<LinkID>::iterator it = std::find( bootstrapLinks.begin(), bootstrapLinks.end(), lnk );
+	if( it != bootstrapLinks.end() ) bootstrapLinks.erase( it );
 }
 
 void OneHop::onLinkUp(const LinkID& lnk, const NodeID& remote){
-
-	//
-	// as soon as a link goes up, we always request the node listing.
-	// and try to get connections to as much nodes as possible in a greedy way.
-	//
-
-	if( lnk != bootstrapLink ){
-		if( pendingLinks > 0 )  pendingLinks--;
-		if( pendingLinks == 0 ) state = OneHopStateCompleted;
-	}
 
 	logging_debug( "link is up, sending out node listing request" );
@@ -230,5 +220,4 @@
 	onemsg.encapsulate( &requestmsg );
 
-	state = OneHopStateJoinListingRequested;
 	baseoverlay.sendMessage( &onemsg, lnk );
 }
@@ -309,5 +298,4 @@
 		const NodeListingReply::NodeEndpointList& endpoints = reply->getList();
 		logging_debug( "received " << endpoints.size() << " nodes in listing" );
-		pendingLinks = 0;
 
 		NodeListingReply::NodeEndpointList::const_iterator i = endpoints.begin();
@@ -330,5 +318,4 @@
 
 			overlayNodes.insert( make_pair(node, link) );
-			pendingLinks++;
 
 		} // for( ; i != iend; i++ )
@@ -356,5 +343,5 @@
 	if( onemsg->isType( OneHopMessage::OneHopMessageTypeRoute) ){
 		logging_debug( "Route message arrived at destination node -> delegate to BaseOverlay" );
-		baseoverlay.incomingRouteMessage( onemsg );
+		baseoverlay.incomingRouteMessage( onemsg, lnk, remote);
 	} // OneHopMessageTypeRoute
 
Index: source/ariba/overlay/modules/onehop/OneHop.h
===================================================================
--- source/ariba/overlay/modules/onehop/OneHop.h	(revision 5151)
+++ source/ariba/overlay/modules/onehop/OneHop.h	(revision 5316)
@@ -90,5 +90,5 @@
 
 	/// @see OverlayInterface.h
-	virtual NodeList getKnownNodes() const;
+	virtual NodeList getKnownNodes(bool deep = true) const;
 
 	/// @see CommunicationListener.h or @see OverlayInterface.h
@@ -110,12 +110,9 @@
 	typedef enum _OneHopState {
 		OneHopStateInvalid = 0,
-		OneHopStateJoinInitiated = 1,
-		OneHopStateJoinListingRequested = 2,
-		OneHopStateCompleted = 3,
+		OneHopStateCompleted = 1,
 	} OneHopState;
 
 	OneHopState state;
-	uint16_t pendingLinks;
-	LinkID bootstrapLink;
+	vector<LinkID> bootstrapLinks;
 };
 
