Index: /source/ariba/communication/networkinfo/NetworkInformation.cpp
===================================================================
--- /source/ariba/communication/networkinfo/NetworkInformation.cpp	(revision 5838)
+++ /source/ariba/communication/networkinfo/NetworkInformation.cpp	(revision 5860)
@@ -91,4 +91,12 @@
 			logging_error( "getting interface list failed with: " <<
 						strerror(errno));
+
+			// if the socket is bogus, try to get
+			// a new one for the next call
+			if(errno == EBADF){
+				close( infoSocket );
+				infoSocket = socket( AF_INET, SOCK_DGRAM, 0 );
+			}
+
 			return retlist;
 		}
Index: /source/ariba/overlay/BaseOverlay.cpp
===================================================================
--- /source/ariba/overlay/BaseOverlay.cpp	(revision 5838)
+++ /source/ariba/overlay/BaseOverlay.cpp	(revision 5860)
@@ -377,5 +377,5 @@
 
 		// bootstrap against ourselfs
-		logging_debug("joining spovnet locally");
+		logging_info("joining spovnet locally");
 
 		overlayInterface->joinOverlay();
@@ -394,5 +394,5 @@
 
 		// bootstrap against another node
-		logging_debug("joining spovnet remotely against " << bootstrapEp.toString());
+		logging_info("joining spovnet remotely against " << bootstrapEp.toString());
 
 		const LinkID& lnk = bc->establishLink( bootstrapEp );
@@ -1098,5 +1098,5 @@
 					// inform all registered services of the event
 					BOOST_FOREACH( NodeListener* i, nodeListeners )
-					i->onJoinFailed( spovnetId );
+						i->onJoinFailed( spovnetId );
 
 					delete replyMsg;
@@ -1110,7 +1110,4 @@
 				overlayInterface->joinOverlay( replyMsg->getBootstrapEndpoint() );
 
-				//record bootstrap ep as good endpoint to join
-				overlayBootstrap.recordJoin( replyMsg->getBootstrapEndpoint() );
-
 				// update ovlvis
 				//ovl.visChangeNodeColor( ovlId, nodeId, OvlVis::NODE_COLORS_GREEN);
@@ -1120,6 +1117,4 @@
 					i->onJoinCompleted( spovnetId );
 
-				delete replyMsg;
-
 			} else {
 
@@ -1128,8 +1123,10 @@
 				overlayInterface->joinOverlay( replyMsg->getBootstrapEndpoint() );
 
-				delete replyMsg;
-
 			} // if( overlayInterface == NULL )
 
+			//record bootstrap ep as good endpoint to join
+			overlayBootstrap.recordJoin( replyMsg->getBootstrapEndpoint() );
+
+			delete replyMsg;
 			ret = true;
 			break;
Index: /source/ariba/overlay/OverlayBootstrap.cpp
===================================================================
--- /source/ariba/overlay/OverlayBootstrap.cpp	(revision 5838)
+++ /source/ariba/overlay/OverlayBootstrap.cpp	(revision 5860)
@@ -88,5 +88,5 @@
 
 void OverlayBootstrap::handleSystemEvent(const SystemEvent& event){
-	EventData* data = event.getData<EventData>();
+	JoinData* data = event.getData<JoinData>();
 
 	// announcement for our spovnet
@@ -129,5 +129,5 @@
 	//
 
-	EventData* data = new EventData();
+	JoinData* data = new JoinData();
 	data->spovnetid = sid;
 	data->nodeid = nid;
@@ -154,10 +154,12 @@
 	boost::mutex::scoped_lock lock(lastJoinesMutex);
 
-	EventData data;
+	JoinData data;
 	data.spovnetid = spovnetid;
 	data.nodeid = nodeid;
 	data.endpoint = _ep;
 
-	lastJoines.push_front(JoinData(data));
+	logging_info("recording bootstrap information " << data.endpoint.toString());
+
+	lastJoines.push_front(data);
 }
 
@@ -175,4 +177,7 @@
 	// we have overlay neighbors -> ok
 	if(overlay->getOverlayNeighbors().size() > 0) return;
+
+	logging_info("overlay not joined, checking for earlier used bootstrap information");
+	EndpointDescriptor joinep = EndpointDescriptor::UNSPECIFIED();
 
 	// no overlay neighbors -> try out already
@@ -185,15 +190,17 @@
 
 		// use last used element and then put it into back
-		JoinData data = *i;
-		lastJoines.pop_front();
-		lastJoines.push_back(data);
+		joinep = (*i).endpoint;
+
+		if(lastJoines.size() >= 2)
+			swap( *lastJoines.begin(), *(--(lastJoines.end())) );
 	}
 
-	logging_info("no overlay connections detected, " <<
-					"trying to join using old bootstrap information");
+	logging_info("no overlay conenctivity detected, " <<
+					"trying to join using old bootstrap information: " <<
+					joinep.toString());
 
 	// try to join using this node, if the join is successfull
 	// the endpoint will again be inserted using recordJoin
-	overlay->joinSpoVNet( spovnetid, data.data.endpoint );
+	overlay->joinSpoVNet( spovnetid, joinep );
 }
 
@@ -202,5 +209,5 @@
 
 void OverlayBootstrap::WatchdogTimer::startWatchdog(){
-	Timer::setInterval(2000);
+	Timer::setInterval(5000);
 	Timer::start();
 }
Index: /source/ariba/overlay/OverlayBootstrap.h
===================================================================
--- /source/ariba/overlay/OverlayBootstrap.h	(revision 5838)
+++ /source/ariba/overlay/OverlayBootstrap.h	(revision 5860)
@@ -44,4 +44,5 @@
 #include <ctime>
 #include <deque>
+#include <algorithm>
 #include <boost/thread/mutex.hpp>
 #include "ariba/utility/logging/Logging.h"
@@ -56,4 +57,5 @@
 #include "ariba/utility/system/SystemEventType.h"
 
+using std::swap;
 using std::deque;
 using std::string;
@@ -94,6 +96,15 @@
 
 private:
-	class EventData {
+	class JoinData {
 	public:
+		JoinData() : spovnetid(), nodeid(), endpoint() {
+		}
+
+		JoinData& operator=( const JoinData& rhs) {
+			spovnetid = rhs.spovnetid;
+			nodeid = rhs.nodeid;
+			endpoint = rhs.endpoint;
+		}
+
 		SpoVNetID spovnetid;
 		NodeID nodeid;
@@ -106,19 +117,4 @@
 	BaseOverlay* overlay;
 	string randname;
-
-	class JoinData {
-	public:
-		time_t timestamp;
-		EventData data;
-
-		JoinData(const EventData& _data){
-			timestamp = time(NULL);
-			data = _data;
-		}
-
-		JoinData(){
-			timestamp = time(NULL);
-		}
-	};
 
 	class WatchdogTimer : public Timer {
