Index: source/ariba/AribaModule.h
===================================================================
--- source/ariba/AribaModule.h	(revision 3037)
+++ source/ariba/AribaModule.h	(revision 3041)
@@ -161,10 +161,8 @@
 		BootstrapInfo() :
 			spovnetName(), nodes() {
-
 		}
 
 		BootstrapInfo(const BootstrapInfo& copy) :
 			spovnetName(copy.spovnetName), nodes(copy.nodes) {
-
 		}
 
Index: source/ariba/Makefile.am
===================================================================
--- source/ariba/Makefile.am	(revision 3037)
+++ source/ariba/Makefile.am	(revision 3041)
@@ -259,6 +259,4 @@
 
 nobase_libariba_la_HEADERS += \
-  interface/UnderlayAbstraction.h \
-  interface/AribaContext.h \
   interface/ServiceInterface.h
 
Index: source/ariba/Node.cpp
===================================================================
--- source/ariba/Node.cpp	(revision 3037)
+++ source/ariba/Node.cpp	(revision 3041)
@@ -129,8 +129,11 @@
 
 Node::Node(AribaModule& ariba_mod, const Name& node_name) :
-	ariba_mod(ariba_mod), name(node_name), base_overlay(NULL) {
+	ariba_mod(ariba_mod), name(node_name) {
+	base_overlay = new BaseOverlay();
 }
 
 Node::~Node() {
+	delete base_overlay;
+	base_overlay = NULL;
 }
 
@@ -140,13 +143,6 @@
 	nodeId = generateNodeId(name);
 
-	//logging("joining spovnet on"
-	//		<< " [spovnetid=]" << spovnetId.toString()
-	//		<< " [nodeid=]" << nodeId.toString() );
-
-	//logging_info("starting base communication...");
 	ariba_mod.base_comm->start(ariba_mod.ip_addr, ariba_mod.tcp_port);
-
-	//logging_info("starting base overlay...");
-	base_overlay = new BaseOverlay( *ariba_mod.base_comm, nodeId );
+	base_overlay->start( *ariba_mod.base_comm, nodeId );
 
 	const communication::EndpointDescriptor* ep =
@@ -165,13 +161,7 @@
 	nodeId = generateNodeId(name);
 
-	//logging("joining spovnet on"
-	//			<< " [spovnetid=]" << spovnetId.toString()
-	//			<< " [nodeid=]" << nodeId.toString() );
-
-	//logging_info("starting base communication...");
 	ariba_mod.base_comm->start(ariba_mod.ip_addr, ariba_mod.tcp_port);
 
-	//logging_info("starting base overlay...");
-	base_overlay = new BaseOverlay( *ariba_mod.base_comm, nodeId );
+	base_overlay->start( *ariba_mod.base_comm, nodeId );
 	base_overlay->createSpoVNet( spovnetId );
 
@@ -184,6 +174,5 @@
 	ariba_mod.base_comm->stop();
 
-	delete base_overlay;
-	base_overlay = NULL;
+	base_overlay->stop();
 }
 
Index: source/ariba/overlay/BaseOverlay.cpp
===================================================================
--- source/ariba/overlay/BaseOverlay.cpp	(revision 3037)
+++ source/ariba/overlay/BaseOverlay.cpp	(revision 3041)
@@ -47,12 +47,22 @@
 use_logging_cpp(BaseOverlay);
 
-BaseOverlay::BaseOverlay( BaseCommunication& _basecomm, const NodeID& _nodeid )
-	: 	bc( _basecomm ), nodeId( _nodeid ), spovnetId( SpoVNetID::UNSPECIFIED), overlayInterface( NULL ),
-		initiatorLink( LinkID::UNSPECIFIED ), state( BaseOverlayStateInvalid ) {
+BaseOverlay::BaseOverlay()
+	: bc(NULL), overlayInterface(NULL),
+		nodeId(NodeID::UNSPECIFIED), spovnetId(SpoVNetID::UNSPECIFIED),
+		initiatorLink(LinkID::UNSPECIFIED), state(BaseOverlayStateInvalid){
+}
+
+BaseOverlay::~BaseOverlay(){
+}
+
+void BaseOverlay::start( BaseCommunication& _basecomm, const NodeID& _nodeid ){
+
+	bc = &_basecomm;
+	nodeId = _nodeid;
 
 	logging_info("creating base overlay");
 
-	bc.registerMessageReceiver( this );
-	bc.registerEventListener( this );
+	bc->registerMessageReceiver( this );
+	bc->registerEventListener( this );
 
 	ovl.visCreate( ovlId, nodeId, string(""), string("") );
@@ -75,11 +85,11 @@
 }
 
-BaseOverlay::~BaseOverlay() {
+void BaseOverlay::stop() {
 
 	logging_info("deleting base overlay");
 
 	Timer::stop();
-	bc.unregisterMessageReceiver( this );
-	bc.unregisterEventListener( this );
+	bc->unregisterMessageReceiver( this );
+	bc->unregisterEventListener( this );
 }
 
@@ -101,5 +111,6 @@
 	state = BaseOverlayStateJoinInitiated;
 
-	initiatorLink = bc.establishLink( bootstrapEp );
+	initiatorLink = bc->establishLink( bootstrapEp );
+	logging_info("join process initiated for " << id.toString() << "...");
 }
 
@@ -124,8 +135,8 @@
 		// then, leave the spovnet baseoverlay
 		OverlayMsg overMsg( OverlayMsg::OverlayMessageTypeBye, nodeId );
-		bc.sendMessage( initiatorLink, &overMsg );
+		bc->sendMessage( initiatorLink, &overMsg );
 
 		// drop the link and set to correct state
-		bc.dropLink( initiatorLink );
+		bc->dropLink( initiatorLink );
 		initiatorLink = LinkID::UNSPECIFIED;
 	}
@@ -175,5 +186,5 @@
 const EndpointDescriptor& BaseOverlay::getEndpointDescriptor(const LinkID& link) const {
 
-	return bc.getEndpointDescriptor( link );
+	return bc->getEndpointDescriptor( link );
 }
 
@@ -181,5 +192,5 @@
 
 	if( node == nodeId || node == NodeID::UNSPECIFIED )
-		return bc.getEndpointDescriptor();
+		return bc->getEndpointDescriptor();
 
 	if( overlayInterface == NULL ){
@@ -216,5 +227,5 @@
 
 	ServiceInterface* receiver = listenerMux.get( service );
-	const LinkID link = bc.establishLink( ep );
+	const LinkID link = bc->establishLink( ep );
 
 	LinkItem item (link, NodeID::UNSPECIFIED, service, receiver);
@@ -237,5 +248,5 @@
 
 	LinkItem item = i->second;
-	bc.dropLink( link );
+	bc->dropLink( link );
 
 	if( item.interface != NULL )
@@ -257,5 +268,5 @@
 
 	i->second.markused();
-	return bc.sendMessage( link, &overmsg );
+	return bc->sendMessage( link, &overmsg );
 }
 
@@ -349,5 +360,5 @@
 
 		state = BaseOverlayStateJoinInitiated; // state remains in JoinInitiated
-		bc.sendMessage( id, &overMsg );
+		bc->sendMessage( id, &overMsg );
 
 		return;
@@ -384,5 +395,5 @@
 			);
 
-		bc.sendMessage( id, &overMsg );
+		bc->sendMessage( id, &overMsg );
 		i->second.markused();
 
@@ -555,5 +566,5 @@
 
 		retmsg.encapsulate(&replyMsg);
-		bc.sendMessage( link, &retmsg );
+		bc->sendMessage( link, &retmsg );
 
 		return true;
@@ -597,7 +608,7 @@
 		if( ! replyMsg->getJoinAllowed() ){
 
-			logging_warn( "our join request has been denied" );
-
-			bc.dropLink( initiatorLink );
+			logging_error( "our join request has been denied" );
+
+			bc->dropLink( initiatorLink );
 			initiatorLink = LinkID::UNSPECIFIED;
 			state = BaseOverlayStateInvalid;
@@ -624,5 +635,5 @@
 			logging_error( "overlay structure not supported" );
 
-			bc.dropLink( initiatorLink );
+			bc->dropLink( initiatorLink );
 			initiatorLink = LinkID::UNSPECIFIED;
 			state = BaseOverlayStateInvalid;
@@ -698,5 +709,5 @@
 		if( changed ){
 			OverlayMsg overMsg( OverlayMsg::OverlayMessageTypeUpdate, i->second.service, nodeId );
-			bc.sendMessage( link, &overMsg );
+			bc->sendMessage( link, &overMsg );
 		}
 
@@ -744,5 +755,5 @@
 		if( overlayMsg->getSourceNode() == spovnetInitiator ){
 
-			bc.dropLink( initiatorLink );
+			bc->dropLink( initiatorLink );
 			initiatorLink = LinkID::UNSPECIFIED;
 			state = BaseOverlayStateInvalid;
@@ -800,5 +811,5 @@
 	for( ; i != iend; i++ ){
 		if( *i == nodeId) continue; // don't send to ourselfs
-		sendMessage( message, *i, service ); // TODO: sollte auto links aufbauen fÃŒr sowas
+		sendMessage( message, *i, service );
 	}
 }
@@ -857,5 +868,4 @@
 void BaseOverlay::incomingRouteMessage(Message* msg){
 	// gets handled as normal data message
-	// TODO: passt das so?
 	receiveMessage( msg, LinkID::UNSPECIFIED, NodeID::UNSPECIFIED );
 }
Index: source/ariba/overlay/BaseOverlay.h
===================================================================
--- source/ariba/overlay/BaseOverlay.h	(revision 3037)
+++ source/ariba/overlay/BaseOverlay.h	(revision 3041)
@@ -126,12 +126,22 @@
 
 	/**
-	 * Constructs a Base Overlay instance
-	 */
-	BaseOverlay( BaseCommunication& _basecomm, const NodeID& _nodeid );
-
-	/**
-	 * TODO
+	 * Constructs an empty non-functional base overlay instance
+	 */
+	BaseOverlay();
+
+	/**
+	 * Destructs a base overlay instance
 	 */
 	virtual ~BaseOverlay();
+
+	/**
+	 * Starts the Base Overlay instance
+	 */
+	void start( BaseCommunication& _basecomm, const NodeID& _nodeid );
+
+	/**
+	 * Stops the Base Overlay instance
+	 */
+	void stop();
 
 	/**
@@ -271,5 +281,5 @@
 	 * communicates over
 	 */
-	BaseCommunication& bc;
+	BaseCommunication* bc;
 
 	/**
Index: source/ariba/utility/system/StartupWrapper.cpp
===================================================================
--- source/ariba/utility/system/StartupWrapper.cpp	(revision 3037)
+++ source/ariba/utility/system/StartupWrapper.cpp	(revision 3041)
@@ -124,12 +124,14 @@
 void StartupWrapper::startup(StartupInterface* service, bool block){
 
-	StartupWrapper* spovnet = new StartupWrapper(service, block);
+	StartupWrapper* startup = new StartupWrapper(service, block);
 
 #ifdef UNDERLAY_OMNET
 	SystemQueue::instance().scheduleEvent(
-		SystemEvent( spovnet, StartupWrapperEventType, NULL), 0 );
+		SystemEvent( startup, StartupWrapperEventType, NULL), 0 );
 #else
-	spovnet->handleSystemEvent(
-		SystemEvent( spovnet, StartupWrapperEventType, NULL));
+	SystemQueue::instance().scheduleEvent(
+		SystemEvent( startup, StartupWrapperEventType, NULL), 0 );
+
+	if( block ) getchar();
 #endif
 }
@@ -149,23 +151,12 @@
 
 	service->startup();
-	waitForExit();
-
-#ifndef UNDERLAY_OMNET
-	service->shutdown();
-	delete event.getListener();
-#endif
 }
 
-void StartupWrapper::waitForExit(){
-#ifndef UNDERLAY_OMNET
-	if( blocking ) getchar();
-#endif
-}
-
-void StartupWrapper::shutdown(){
+void StartupWrapper::shutdown(StartupInterface* service){
 #ifdef UNDERLAY_OMNET
 	//TODO: service->shutdown();
 #endif
 
+	service->shutdown();
 	SystemQueue::instance().cancel();
 }
Index: source/ariba/utility/system/StartupWrapper.h
===================================================================
--- source/ariba/utility/system/StartupWrapper.h	(revision 3037)
+++ source/ariba/utility/system/StartupWrapper.h	(revision 3041)
@@ -72,5 +72,5 @@
 	static void initConfig(string filename);
 	static void startup(StartupInterface* service, bool block = true);
-	static void shutdown();
+	static void shutdown(StartupInterface* service);
 
 #ifdef UNDERLAY_OMNET
