Index: source/ariba/AribaModule.cpp
===================================================================
--- source/ariba/AribaModule.cpp	(revision 7523)
+++ source/ariba/AribaModule.cpp	(revision 7532)
@@ -43,4 +43,5 @@
 #include <boost/regex.hpp>
 #include <boost/foreach.hpp>
+#include <boost/algorithm/string.hpp>
 
 // ariba includes
@@ -58,4 +59,5 @@
 
 use_logging_cpp(AribaModule);
+const string AribaModule::BootstrapMechanismNames[5] = {"invalid", "static", "broadcast", "mdns", "sdp"};
 
 AribaModule::AribaModule()
@@ -69,13 +71,22 @@
 string AribaModule::getBootstrapHints(const Name& spoVNetName) const {
 	std::ostringstream o;
+	int i=0;
 	BOOST_FOREACH( const BootstrapInfo& info, bootstrapNodes ) {
 		o << info.spovnetName.toString() << "{";
-		int i=0;
+		if (i!=0) o << ",";
+
 		BOOST_FOREACH( const BootstrapNode& node, info.nodes ) {
-			if (i!=0) o << ",";
-			if( node.desc != NULL ) o << node.desc->toString();
-			i++;
+			if( node.desc != NULL )
+				o << node.desc->toString();
+			else if(node.mechanism == BootstrapMechanismBroadcast
+					|| node.mechanism == BootstrapMechanismMulticastDNS
+					|| node.mechanism == BootstrapMechanismSDP){
+				o << BootstrapMechanismNames[node.mechanism];
+				if( !node.info.empty() ) o << "{" << node.info << "}";
+				o << ";";
+			}
 		}
 		o << "}";
+		i++;
 	}
 	return o.str();
@@ -87,4 +98,9 @@
 	using namespace ariba::utility::Helper;
 	using namespace std;
+
+	boost::erase_all(boot_info, " ");
+	boost::erase_all(boot_info, "\t");
+	boost::erase_all(boot_info, "\n");
+	boost::erase_all(boot_info, "\r");
 
 	smatch match;
@@ -96,18 +112,50 @@
 			data = data.substr(1, data.size() - 2);
 			Name name(type);
+
+			// find static bootstrap info --> BootstrapMechanismStatic
 			EndpointDescriptor* desc = EndpointDescriptor::fromString(data);
-			logging_debug("Added bootstap info for " << type << ": " << desc->toString() );
-			addBootstrapNode(name, desc);
-		}
-	}
+			addBootstrapNode(name, desc, "", BootstrapMechanismStatic);
+
+			// find automatic bootstrap info --> {BootstrapMechanismBroadcast,
+			// 					BootstrapMechanismMulticastDNS,BootstrapMechanismSDP}
+			typedef vector< string > split_vector_type;
+			split_vector_type splitvec;
+			boost::split( splitvec, data, boost::is_any_of(";") );
+			for(unsigned int i=0; i<splitvec.size(); i++){
+				string x = splitvec[i];
+				split_vector_type innervec;
+
+				boost::split( innervec, x, boost::is_any_of("{}") );
+				BootstrapNode node;
+				if(innervec.size() < 1) continue;
+
+				if(innervec[0] == BootstrapMechanismNames[BootstrapMechanismBroadcast])
+					node.mechanism = BootstrapMechanismBroadcast;
+				else if(innervec[0] == BootstrapMechanismNames[BootstrapMechanismMulticastDNS])
+					node.mechanism = BootstrapMechanismMulticastDNS;
+				else if(innervec[0] == BootstrapMechanismNames[BootstrapMechanismSDP])
+					node.mechanism = BootstrapMechanismSDP;
+				else
+					continue;
+
+				if(innervec.size() > 1)
+					node.info = innervec[1];
+
+				this->addBootstrapNode(name, node);
+			}
+		}
+	}
+
+	logging_info( "Added bootstrap hints: " << getBootstrapHints() );
 }
 
 void AribaModule::addBootstrapNode(const Name& spovnet,
-		communication::EndpointDescriptor* desc) {
-
-	// set bootstrap node
-	BootstrapNode node;
-	node.timestamp = 0;
-	node.desc = desc;
+		communication::EndpointDescriptor* desc, const string& info,
+		const BootstrapMechanism& mechanism) {
+	BootstrapNode node(0, desc, mechanism, info);
+	addBootstrapNode(spovnet, node);
+}
+
+void AribaModule::addBootstrapNode(const Name& spovnet, const BootstrapNode& node){
 	bool added = false;
 
@@ -128,18 +176,45 @@
 		bootstrapNodes.push_back(info);
 	}
-
-	logging_debug( "Added bootstrap info: " << getBootstrapHints() );
 }
 
 const communication::EndpointDescriptor* AribaModule::getBootstrapNode(
-		const Name& spovnet) const {
+		const Name& spovnet, const BootstrapMechanism mechanism) const {
 	BOOST_FOREACH( const BootstrapInfo& info, bootstrapNodes ) {
 		if( info.spovnetName == spovnet ) {
 			BOOST_FOREACH( const BootstrapNode& node, info.nodes ) {
-				if( node.desc != NULL ) return node.desc;
+				if( node.mechanism == mechanism && node.desc != NULL )
+					return node.desc;
 			}
 		}
 	}
 	return NULL;
+}
+
+string AribaModule::getBootstrapInfo(
+		const Name& spovnet, const BootstrapMechanism mechanism) const {
+	BOOST_FOREACH( const BootstrapInfo& info, bootstrapNodes ) {
+		if( info.spovnetName == spovnet ) {
+			BOOST_FOREACH( const BootstrapNode& node, info.nodes ) {
+				if( node.mechanism == mechanism && node.desc != NULL )
+					return node.info;
+			}
+		}
+	}
+
+	return string();
+}
+
+vector<AribaModule::BootstrapMechanism> AribaModule::getBootstrapMechanisms(
+		const Name& spovnet) const {
+	vector<AribaModule::BootstrapMechanism> ret;
+	BOOST_FOREACH( const BootstrapInfo& info, bootstrapNodes ) {
+		if( info.spovnetName == spovnet ) {
+			BOOST_FOREACH( const BootstrapNode& node, info.nodes ) {
+				if(std::find(ret.begin(), ret.end(), node.mechanism) == ret.end())
+					ret.push_back(node.mechanism);
+			}
+		}
+	}
+	return ret;
 }
 
Index: source/ariba/AribaModule.h
===================================================================
--- source/ariba/AribaModule.h	(revision 7523)
+++ source/ariba/AribaModule.h	(revision 7532)
@@ -44,5 +44,5 @@
 #include <ctime>
 #include <cstdlib>
-#include "ariba/utility/logging/Logging.h"
+#include <algorithm>
 
 using std::vector;
@@ -156,20 +156,35 @@
 
 private:
+
+	// bootstrap mechanisms
+	enum BootstrapMechanism {
+		BootstrapMechanismInvalid = 0,
+		BootstrapMechanismStatic = 1,
+		BootstrapMechanismBroadcast = 2,
+		BootstrapMechanismMulticastDNS = 3,
+		BootstrapMechanismSDP = 4,
+	};
+	static const string BootstrapMechanismNames[5];
+
 	// bootstrap node
 	class BootstrapNode {
 	public:
 		inline BootstrapNode() :
-			timestamp(0), desc(NULL) {
+			timestamp(0), desc(NULL), mechanism(BootstrapMechanismInvalid), info("") {
 
 		}
 		inline BootstrapNode(const BootstrapNode& copy) :
-			timestamp(copy.timestamp), desc(copy.desc) {
-		}
-		inline BootstrapNode(uint32_t timestamp,
-				communication::EndpointDescriptor* desc) :
-			timestamp(timestamp), desc(desc) {
+			timestamp(copy.timestamp), desc(copy.desc), mechanism(copy.mechanism), info(copy.info) {
+		}
+		inline BootstrapNode(
+				uint32_t timestamp,
+				communication::EndpointDescriptor* desc,
+				BootstrapMechanism mechanism, string info) :
+			timestamp(timestamp), desc(desc), mechanism(mechanism), info(info) {
 		}
 		uint32_t timestamp;
 		communication::EndpointDescriptor* desc;
+		BootstrapMechanism mechanism;
+		string info;
 	};
 
@@ -192,13 +207,32 @@
 protected:
 	// members
-	string bootstrapFile; //< file with bootstrap information
-	string endpoints;
+	string endpoints; //< local endpoints the ariba module is bound to
 	bool started; //< flag, if module has been started
 
 	// bootstrap node management
-	void addBootstrapNode(const Name& spovnet,
-			communication::EndpointDescriptor* desc);
+	void addBootstrapNode(
+			const Name& spovnet,
+			communication::EndpointDescriptor* desc,
+			const string& info,
+			const BootstrapMechanism& mechanism
+			);
+	void addBootstrapNode(
+			const Name& spovnet,
+			const BootstrapNode& node
+			);
+
+	vector<AribaModule::BootstrapMechanism> getBootstrapMechanisms(
+			const Name& spovnet
+			) const;
+
 	const communication::EndpointDescriptor* getBootstrapNode(
-			const Name& spovnet) const;
+			const Name& spovnet,
+			const BootstrapMechanism mechanism
+			) const;
+
+	string getBootstrapInfo(
+			const Name& spovnet,
+			const BootstrapMechanism mechanism
+			) const;
 
 	communication::BaseCommunication* base_comm;
Index: source/ariba/Node.cpp
===================================================================
--- source/ariba/Node.cpp	(revision 7523)
+++ source/ariba/Node.cpp	(revision 7532)
@@ -61,7 +61,4 @@
 	nodeId = generateNodeId(name);
 
-	const communication::EndpointDescriptor* ep =
-			ariba_mod.getBootstrapNode(vnetname);
-
 	// start base comm if not started
 	if( !ariba_mod.base_comm->isStarted() )
@@ -74,7 +71,45 @@
 	base_overlay->joinSpoVNet( spovnetId );
 
-	// join against further nodes
-	if( ep != NULL && ep->isUnspecified() == false )
-		base_overlay->joinSpoVNet( spovnetId, *ep);
+	// join against static bootstrap points and
+	// start automatic bootstrapping modules
+	vector<AribaModule::BootstrapMechanism> mechanisms
+		= ariba_mod.getBootstrapMechanisms(vnetname);
+
+	vector<pair<BootstrapManager::BootstrapType,string> > internalmodules;
+
+	BOOST_FOREACH(AribaModule::BootstrapMechanism m, mechanisms){
+		switch(m){
+			case AribaModule::BootstrapMechanismStatic:
+			{
+				const communication::EndpointDescriptor* ep =
+							ariba_mod.getBootstrapNode(vnetname, m);
+					if( ep != NULL && ep->isUnspecified() == false )
+						base_overlay->joinSpoVNet( spovnetId, *ep);
+				break;
+			}
+			case AribaModule::BootstrapMechanismBroadcast:
+				internalmodules.push_back(make_pair(
+						BootstrapManager::BootstrapTypePeriodicBroadcast,
+						ariba_mod.getBootstrapInfo(vnetname, m)));
+				break;
+			case AribaModule::BootstrapMechanismMulticastDNS:
+				internalmodules.push_back(make_pair(
+						BootstrapManager::BootstrapTypeMulticastDns,
+						ariba_mod.getBootstrapInfo(vnetname, m)));
+				break;
+			case AribaModule::BootstrapMechanismSDP:
+				internalmodules.push_back(make_pair(
+						BootstrapManager::BootstrapTypeBluetoothSdp,
+						ariba_mod.getBootstrapInfo(vnetname, m)));
+				break;
+			default:
+				break;
+		}
+	}
+
+	// start automatic overlay bootstrapping modules
+	base_overlay->startBootstrapModules(internalmodules);
+
+	// done
 }
 
@@ -101,4 +136,5 @@
 
 void Node::leave() {
+	base_overlay->stopBootstrapModules();
 	base_overlay->leaveSpoVNet();
 	ariba_mod.base_comm->stop();
Index: source/ariba/Node.h
===================================================================
--- source/ariba/Node.h	(revision 7523)
+++ source/ariba/Node.h	(revision 7532)
@@ -50,4 +50,5 @@
 #include <vector>
 #include <iostream>
+#include <boost/foreach.hpp>
 #include "Module.h"
 #include "Identifiers.h"
Index: source/ariba/overlay/BaseOverlay.cpp
===================================================================
--- source/ariba/overlay/BaseOverlay.cpp	(revision 7523)
+++ source/ariba/overlay/BaseOverlay.cpp	(revision 7532)
@@ -824,5 +824,4 @@
 	}
 
-
 	//ovl.visShowNodeBubble ( ovlId, nodeId, "joining..." );
 	logging_info( "Starting to join spovnet " << id.toString() <<
@@ -830,4 +829,6 @@
 
 	if(bootstrapEp.isUnspecified() && state == BaseOverlayStateInvalid){
+
+		//** FIRST STEP - MANDATORY */
 
 		// bootstrap against ourselfs
@@ -842,9 +843,7 @@
 		//ovl.visChangeNodeColor( ovlId, nodeId, OvlVis::NODE_COLORS_GREEN );
 
-		logging_debug("starting overlay bootstrap module");
-		overlayBootstrap.start(this, spovnetId, nodeId);
-		overlayBootstrap.publish(bc->getEndpointDescriptor());
-
 	} else {
+
+		//** SECOND STEP - OPTIONAL */
 
 		// bootstrap against another node
@@ -857,12 +856,21 @@
 }
 
-void BaseOverlay::leaveSpoVNet() {
-
-	logging_info( "Leaving spovnet " << spovnetId );
-	bool ret = ( state != this->BaseOverlayStateInvalid );
-
+
+void BaseOverlay::startBootstrapModules(vector<pair<BootstrapManager::BootstrapType,string> > modules){
+	logging_debug("starting overlay bootstrap module");
+	overlayBootstrap.start(this, spovnetId, nodeId, modules);
+	overlayBootstrap.publish(bc->getEndpointDescriptor());
+}
+
+void BaseOverlay::stopBootstrapModules(){
 	logging_debug("stopping overlay bootstrap module");
 	overlayBootstrap.stop();
 	overlayBootstrap.revoke();
+}
+
+void BaseOverlay::leaveSpoVNet() {
+
+	logging_info( "Leaving spovnet " << spovnetId );
+	bool ret = ( state != this->BaseOverlayStateInvalid );
 
 	logging_debug( "Dropping all auto-links" );
Index: source/ariba/overlay/BaseOverlay.h
===================================================================
--- source/ariba/overlay/BaseOverlay.h	(revision 7523)
+++ source/ariba/overlay/BaseOverlay.h	(revision 7532)
@@ -274,4 +274,14 @@
 
 	/**
+	 * Start the bootstrap modules
+	 */
+	void startBootstrapModules(vector<pair<BootstrapManager::BootstrapType,string> > modules);
+
+	/**
+	 * Stop the bootstrap modules
+	 */
+	void stopBootstrapModules();
+
+	/**
 	 * Let the node leave the SpoVNet.
 	 */
Index: source/ariba/overlay/OverlayBootstrap.cpp
===================================================================
--- source/ariba/overlay/OverlayBootstrap.cpp	(revision 7523)
+++ source/ariba/overlay/OverlayBootstrap.cpp	(revision 7532)
@@ -66,5 +66,7 @@
 }
 
-void OverlayBootstrap::start(BaseOverlay* _overlay, const SpoVNetID& _spovnetid, const NodeID& _nodeid){
+void OverlayBootstrap::start(BaseOverlay* _overlay,
+		const SpoVNetID& _spovnetid, const NodeID& _nodeid,
+		vector<pair<BootstrapManager::BootstrapType,string> > modules){
 	overlay = _overlay;
 	spovnetid = _spovnetid;
@@ -74,7 +76,9 @@
 
 	manager.registerCallback( this );
-	manager.registerModule( BootstrapManager::BootstrapTypePeriodicBroadcast );
-	//manager.registerModule( BootstrapManager::BootstrapTypeBluetoothSdp );
-	//manager.registerModule( BootstrapManager::BootstrapTypeMulticastDns );
+
+	typedef pair<BootstrapManager::BootstrapType,string> X;
+	BOOST_FOREACH( X i, modules){
+		manager.registerModule( i.first, i.second );
+	}
 
 	watchtimer.startWatchdog();
@@ -89,7 +93,5 @@
 
 	manager.unregisterCallback( this );
-	manager.unregisterModule( BootstrapManager::BootstrapTypePeriodicBroadcast );
-	//manager.unregisterModule( BootstrapManager::BootstrapTypeBluetoothSdp );
-	//manager.unregisterModule( BootstrapManager::BootstrapTypeMulticastDns );
+	manager.unregisterAllModules();
 
 	watchtimer.stopWatchdog();
Index: source/ariba/overlay/OverlayBootstrap.h
===================================================================
--- source/ariba/overlay/OverlayBootstrap.h	(revision 7523)
+++ source/ariba/overlay/OverlayBootstrap.h	(revision 7532)
@@ -44,6 +44,8 @@
 #include <ctime>
 #include <deque>
+#include <vector>
 #include <algorithm>
 #include <boost/thread/mutex.hpp>
+#include <boost/foreach.hpp>
 #include "ariba/utility/logging/Logging.h"
 #include "ariba/utility/types.h"
@@ -60,4 +62,6 @@
 using std::deque;
 using std::string;
+using std::vector;
+using std::pair;
 using std::ostringstream;
 using ariba::utility::SpoVNetID;
@@ -83,5 +87,10 @@
 	virtual ~OverlayBootstrap();
 
-	void start(BaseOverlay* _overlay, const SpoVNetID& _spovnetid, const NodeID& _nodeid);
+	void start(
+			BaseOverlay* _overlay,
+			const SpoVNetID& _spovnetid,
+			const NodeID& _nodeid,
+			vector<pair<BootstrapManager::BootstrapType,string> > modules
+			);
 	void stop();
 
Index: source/ariba/utility/bootstrap/BootstrapManager.cpp
===================================================================
--- source/ariba/utility/bootstrap/BootstrapManager.cpp	(revision 7523)
+++ source/ariba/utility/bootstrap/BootstrapManager.cpp	(revision 7532)
@@ -54,5 +54,6 @@
 }
 
-BootstrapManager::RegistrationResult BootstrapManager::registerModule(BootstrapManager::BootstrapType type){
+BootstrapManager::RegistrationResult BootstrapManager::registerModule(
+		BootstrapManager::BootstrapType type, string info){
 
 	boost::mutex::scoped_lock lock( modulesMutex );
@@ -68,11 +69,11 @@
 	switch(type){
 	case BootstrapTypeMulticastDns:
-		module = new MulticastDns(this);
+		module = new MulticastDns(this, info);
 		break;
 	case BootstrapTypePeriodicBroadcast:
-		module = new PeriodicBroadcast(this);
+		module = new PeriodicBroadcast(this, info);
 		break;
 	case BootstrapTypeBluetoothSdp:
-		module = new BluetoothSdp(this);
+		module = new BluetoothSdp(this, info);
 		break;
 	}
Index: source/ariba/utility/bootstrap/BootstrapManager.h
===================================================================
--- source/ariba/utility/bootstrap/BootstrapManager.h	(revision 7523)
+++ source/ariba/utility/bootstrap/BootstrapManager.h	(revision 7532)
@@ -85,5 +85,5 @@
 
 	RegistrationResult registerAllModules();
-	RegistrationResult registerModule(BootstrapType type);
+	RegistrationResult registerModule(BootstrapType type, string info=string(""));
 	RegistrationResult unregisterAllModules();
 	RegistrationResult unregisterModule(BootstrapType type);
Index: source/ariba/utility/bootstrap/modules/bluetoothsdp/BluetoothSdp.cpp
===================================================================
--- source/ariba/utility/bootstrap/modules/bluetoothsdp/BluetoothSdp.cpp	(revision 7523)
+++ source/ariba/utility/bootstrap/modules/bluetoothsdp/BluetoothSdp.cpp	(revision 7532)
@@ -72,6 +72,6 @@
 OverlayBootstrap* BluetoothSdp::CONNECTION_CHECKER = NULL;
 
-BluetoothSdp::BluetoothSdp(BootstrapInformationCallback* _callback) :
-	BootstrapModule(_callback), scan_timer_(io_service_) {
+BluetoothSdp::BluetoothSdp(BootstrapInformationCallback* _callback, string info)
+	: BootstrapModule(_callback), scan_timer_(io_service_) {
 	srand( time(NULL) );
 #ifdef HAVE_BLUETOOTH_BLUETOOTH_H
@@ -80,5 +80,4 @@
 	// of the info strings (as an attribute)
 	channel_ = 1;
-
 #endif // HAVE_BLUETOOTH_BLUETOOTH_H
 }
Index: source/ariba/utility/bootstrap/modules/bluetoothsdp/BluetoothSdp.h
===================================================================
--- source/ariba/utility/bootstrap/modules/bluetoothsdp/BluetoothSdp.h	(revision 7523)
+++ source/ariba/utility/bootstrap/modules/bluetoothsdp/BluetoothSdp.h	(revision 7532)
@@ -80,5 +80,5 @@
 	static OverlayBootstrap* CONNECTION_CHECKER;
 
-	BluetoothSdp(BootstrapInformationCallback* _callback);
+	BluetoothSdp(BootstrapInformationCallback* _callback, string info);
 	virtual ~BluetoothSdp();
 
Index: source/ariba/utility/bootstrap/modules/multicastdns/MulticastDns.cpp
===================================================================
--- source/ariba/utility/bootstrap/modules/multicastdns/MulticastDns.cpp	(revision 7523)
+++ source/ariba/utility/bootstrap/modules/multicastdns/MulticastDns.cpp	(revision 7532)
@@ -46,5 +46,6 @@
 use_logging_cpp(MulticastDns);
 
-MulticastDns::MulticastDns(BootstrapInformationCallback* _callback) : BootstrapModule(_callback) {
+MulticastDns::MulticastDns(BootstrapInformationCallback* _callback, string info)
+	: BootstrapModule(_callback) {
   #ifdef HAVE_AVAHI_CLIENT_CLIENT_H
 	avahiclient = NULL;
Index: source/ariba/utility/bootstrap/modules/multicastdns/MulticastDns.h
===================================================================
--- source/ariba/utility/bootstrap/modules/multicastdns/MulticastDns.h	(revision 7523)
+++ source/ariba/utility/bootstrap/modules/multicastdns/MulticastDns.h	(revision 7532)
@@ -71,5 +71,5 @@
 	use_logging_h(MulticastDns);
 public:
-	MulticastDns(BootstrapInformationCallback* _callback);
+	MulticastDns(BootstrapInformationCallback* _callback, string info);
 	virtual ~MulticastDns();
 
Index: source/ariba/utility/bootstrap/modules/periodicbroadcast/PeriodicBroadcast.cpp
===================================================================
--- source/ariba/utility/bootstrap/modules/periodicbroadcast/PeriodicBroadcast.cpp	(revision 7523)
+++ source/ariba/utility/bootstrap/modules/periodicbroadcast/PeriodicBroadcast.cpp	(revision 7532)
@@ -63,5 +63,5 @@
 const unsigned int PeriodicBroadcast::serverport_v6 = 5636;
 
-PeriodicBroadcast::PeriodicBroadcast(BootstrapInformationCallback* _callback)
+PeriodicBroadcast::PeriodicBroadcast(BootstrapInformationCallback* _callback, string info)
 	: BootstrapModule(_callback),
 	server(io_service, &newRemoteServices, &newRemoteServicesMutex) {
@@ -108,4 +108,6 @@
 
 	boost::mutex::scoped_lock lock( localServicesMutex );
+	if(name.empty()) return;
+
 	localServices.insert( std::make_pair(name, service) );
 }
@@ -113,4 +115,5 @@
 void PeriodicBroadcast::revokeService(string name){
 	boost::mutex::scoped_lock lock( localServicesMutex );
+	if(name.empty()) return;
 
 	ServiceList::iterator i = localServices.find( name );
Index: source/ariba/utility/bootstrap/modules/periodicbroadcast/PeriodicBroadcast.h
===================================================================
--- source/ariba/utility/bootstrap/modules/periodicbroadcast/PeriodicBroadcast.h	(revision 7523)
+++ source/ariba/utility/bootstrap/modules/periodicbroadcast/PeriodicBroadcast.h	(revision 7532)
@@ -66,5 +66,5 @@
 	use_logging_h(PeriodicBroadcast);
 public:
-	PeriodicBroadcast(BootstrapInformationCallback* _callback);
+	PeriodicBroadcast(BootstrapInformationCallback* _callback, string info);
 	virtual ~PeriodicBroadcast();
 
@@ -275,4 +275,5 @@
 
 			PeriodicBroadcastMessage msg;
+			if(service.getName().empty()) return;
 
 			msg.setName( service.getName() );
@@ -351,4 +352,5 @@
 				{ // insert new found service
 					boost::mutex::scoped_lock lock( *servicesmutex );
+					if(msg.getName().empty()) return;
 
 					ServiceList::iterator it = services->find( msg.getName() );
