Index: /m4/ax_avahi.m4
===================================================================
--- /m4/ax_avahi.m4	(revision 4835)
+++ /m4/ax_avahi.m4	(revision 4836)
@@ -16,11 +16,8 @@
     [AC_MSG_NOTICE([Avahi Client Library found])], )
     
-  AC_CHECK_HEADERS(avahi-common/timeval.h,
-    [AC_MSG_NOTICE([Avahi Common Library found])], )
+  AC_CHECK_HEADERS(avahi-common/timeval.h,, )
     
-  AC_CHECK_LIB([avahi-client],[avahi_entry_group_new],
-    [AC_MSG_NOTICE([Avahi Client Library found])], )
+  AC_CHECK_LIB([avahi-client],[avahi_entry_group_new],, )
     
-  AC_CHECK_LIB([avahi-common],[avahi_free],
-    [AC_MSG_NOTICE([Avahi Client Library found])], )
+  AC_CHECK_LIB([avahi-common],[avahi_free],, )
 ])
Index: /sample/pingpong/main.cpp
===================================================================
--- /sample/pingpong/main.cpp	(revision 4835)
+++ /sample/pingpong/main.cpp	(revision 4836)
@@ -11,15 +11,4 @@
 
 int main( int argc, char** argv ) {
-
-/*
-	StartupWrapper::startSystem();
-	BootstrapManager::instance().registerModule(
-			BootstrapManager::BootstrapTypeMulticastDns);
-	BootstrapManager::instance().publish("testname", "testinfo");
-	getchar();
-	StartupWrapper::stopSystem();
-	return 0;
-*/
-
 
 	// get config file
Index: /source/ariba/Makefile.am
===================================================================
--- /source/ariba/Makefile.am	(revision 4835)
+++ /source/ariba/Makefile.am	(revision 4836)
@@ -258,8 +258,10 @@
 
 libariba_la_SOURCES += \
-  overlay/BaseOverlay.cpp
-
-nobase_libariba_la_HEADERS += \
-  overlay/BaseOverlay.h
+  overlay/BaseOverlay.cpp \
+  overlay/OverlayBootstrap.cpp
+
+nobase_libariba_la_HEADERS += \
+  overlay/BaseOverlay.h \
+  overlay/OverlayBootstrap.h
 
 #------------> overlay :: messages
Index: /source/ariba/communication/EndpointDescriptor.cpp
===================================================================
--- /source/ariba/communication/EndpointDescriptor.cpp	(revision 4835)
+++ /source/ariba/communication/EndpointDescriptor.cpp	(revision 4836)
@@ -63,4 +63,34 @@
 }
 
+EndpointDescriptor::EndpointDescriptor(const string str) {
+	using namespace boost::xpressive;
+	using namespace ariba::utility::string_format;
+	using namespace ariba::utility::Helper;
+	using namespace std;
+
+	locator = NULL;
+	isUnspec = true;
+
+	smatch match;
+	if (regex_search(str, match, robjects)) {
+		regex_nav nav = match;
+		for (int i=0; i<nav.size(); i++) {
+			string type = nav[i][robject_id].str();
+			if (type=="ip") {
+				string ip = nav[i][robject_data].str();
+				ip = ip.substr(1,ip.size()-2);
+				this->locator = new IPv4Locator();
+				this->locator->setIP(ip);
+				this->isUnspec = false;
+			} else
+			if (type=="tcp") {
+				string port = nav[i][robject_data][rfields][1].str();
+				port = port.substr(1,port.size()-2);
+				this->locator->setPort(stoi(port));
+			}
+		}
+	}
+}
+
 EndpointDescriptor::~EndpointDescriptor() {
 }
@@ -80,31 +110,5 @@
 
 EndpointDescriptor* EndpointDescriptor::fromString( string str ) {
-	using namespace boost::xpressive;
-	using namespace ariba::utility::string_format;
-	using namespace ariba::utility::Helper;
-	using namespace std;
-
-	EndpointDescriptor* ep = NULL;
-	smatch match;
-	if (regex_search(str, match, robjects)) {
-		regex_nav nav = match;
-		for (int i=0; i<nav.size(); i++) {
-			string type = nav[i][robject_id].str();
-			if (type=="ip") {
-				string ip = nav[i][robject_data].str();
-				ip = ip.substr(1,ip.size()-2);
-				ep = new EndpointDescriptor();
-				ep->locator = new IPv4Locator();
-				ep->locator->setIP(ip);
-				ep->isUnspec = false;
-			} else
-			if (type=="tcp") {
-				string port = nav[i][robject_data][rfields][1].str();
-				port = port.substr(1,port.size()-2);
-				ep->locator->setPort(stoi(port));
-			}
-		}
-	}
-	return ep;
+	return new EndpointDescriptor( str );
 }
 
Index: /source/ariba/communication/EndpointDescriptor.h
===================================================================
--- /source/ariba/communication/EndpointDescriptor.h	(revision 4835)
+++ /source/ariba/communication/EndpointDescriptor.h	(revision 4836)
@@ -69,4 +69,5 @@
 	EndpointDescriptor(const EndpointDescriptor& rh);
 	EndpointDescriptor(const Locator* _locator);
+	EndpointDescriptor(const string str);
 
 	/**
Index: /source/ariba/overlay/BaseOverlay.cpp
===================================================================
--- /source/ariba/overlay/BaseOverlay.cpp	(revision 4835)
+++ /source/ariba/overlay/BaseOverlay.cpp	(revision 4836)
@@ -112,4 +112,15 @@
 			" with nodeid " << nodeId.toString());
 
+	spovnetId = id;
+	state = BaseOverlayStateJoinInitiated;
+
+
+	//
+	// start bootstrapping for spovnetid
+	//
+
+	overlayBootstrap.start( this, spovnetId, nodeId );
+	overlayBootstrap.publish( bc->getEndpointDescriptor() );
+
 	//
 	// contact the spovnet initiator and request
@@ -120,7 +131,4 @@
 	// but first, we have to establish a link to the initiator...
 	//
-
-	spovnetId = id;
-	state = BaseOverlayStateJoinInitiated;
 
 	initiatorLink = bc->establishLink( bootstrapEp );
Index: /source/ariba/overlay/BaseOverlay.h
===================================================================
--- /source/ariba/overlay/BaseOverlay.h	(revision 4835)
+++ /source/ariba/overlay/BaseOverlay.h	(revision 4836)
@@ -63,13 +63,14 @@
 #include "ariba/overlay/modules/OverlayFactory.h"
 #include "ariba/overlay/modules/OverlayStructureEvents.h"
+#include "ariba/overlay/OverlayBootstrap.h"
 
 // forward declarations
 namespace ariba {
-class NodeListener;
-class CommunicationListener;
-class SideportListener;
-namespace utility {
-class OvlVis;
-}
+  class NodeListener;
+  class CommunicationListener;
+  class SideportListener;
+  namespace utility {
+    class OvlVis;
+  }
 }
 
@@ -83,6 +84,10 @@
 using std::deque;
 
+// ariba interface
 using ariba::NodeListener;
 using ariba::CommunicationListener;
+
+// overlay
+using ariba::overlay::OverlayBootstrap;
 
 // communication
@@ -497,4 +502,8 @@
 	JoiningNodes joiningNodes;
 
+	/**
+	 * Bootstrapper for our spovnet
+	 */
+	OverlayBootstrap overlayBootstrap;
 };
 
Index: /source/ariba/overlay/OverlayBootstrap.cpp
===================================================================
--- /source/ariba/overlay/OverlayBootstrap.cpp	(revision 4836)
+++ /source/ariba/overlay/OverlayBootstrap.cpp	(revision 4836)
@@ -0,0 +1,99 @@
+// [License]
+// The Ariba-Underlay Copyright
+//
+// Copyright (c) 2008-2009, Institute of Telematics, UniversitÃ€t Karlsruhe (TH)
+//
+// Institute of Telematics
+// UniversitÃ€t Karlsruhe (TH)
+// Zirkel 2, 76128 Karlsruhe
+// Germany
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY THE INSTITUTE OF TELEMATICS ``AS IS'' AND
+// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARIBA PROJECT OR
+// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+// The views and conclusions contained in the software and documentation
+// are those of the authors and should not be interpreted as representing
+// official policies, either expressed or implied, of the Institute of
+// Telematics.
+// [License]
+
+#include "OverlayBootstrap.h"
+#include "BaseOverlay.h"
+
+namespace ariba {
+namespace overlay {
+
+use_logging_cpp(OverlayBootstrap);
+
+OverlayBootstrap::OverlayBootstrap()
+	: 	manager( BootstrapManager::instance() ),
+		spovnetid( SpoVNetID::UNSPECIFIED ),
+		nodeid( NodeID::UNSPECIFIED ),
+		overlay( NULL ){
+
+	manager.registerAllModules();
+}
+
+OverlayBootstrap::~OverlayBootstrap(){
+	manager.unregisterAllModules();
+}
+
+void OverlayBootstrap::start(BaseOverlay* _overlay, const SpoVNetID& _spovnetid, const NodeID& _nodeid){
+	overlay = _overlay;
+	spovnetid = _spovnetid;
+	nodeid = _nodeid;
+
+	manager.registerCallback( this );
+}
+void OverlayBootstrap::stop(){
+	overlay = NULL;
+	spovnetid = SpoVNetID::UNSPECIFIED;
+	nodeid = NodeID::UNSPECIFIED;
+
+	manager.unregisterCallback( this );
+}
+
+void OverlayBootstrap::onBootstrapServiceFound(string name, string info1, string info2, string info3){
+	if( overlay == NULL ) return;
+	if(name.length() <= 0 || info1.length() <= 0 || info2.length() <= 0 || info3.length() <= 0) return;
+
+	SpoVNetID sid( info1 );
+	NodeID nid( info2 );
+	EndpointDescriptor ep( info3 );
+
+	logging_debug("XXXXXXXXXXXXXXXXXXX found bootstrap info: " << name << ", " << info1 << ", " << info2 << ", " << info3);
+}
+
+void OverlayBootstrap::publish(const EndpointDescriptor& _ep){
+
+	ostringstream r;
+	r << std::hex << rand();
+
+	randname = r.str();
+	manager.publish( randname, spovnetid.toString(), nodeid.toString(), _ep.toString() );
+}
+
+void OverlayBootstrap::revoke(){
+	manager.revoke( randname );
+}
+
+}} // namespace ariba, overlay
Index: /source/ariba/overlay/OverlayBootstrap.h
===================================================================
--- /source/ariba/overlay/OverlayBootstrap.h	(revision 4836)
+++ /source/ariba/overlay/OverlayBootstrap.h	(revision 4836)
@@ -0,0 +1,89 @@
+// [License]
+// The Ariba-Underlay Copyright
+//
+// Copyright (c) 2008-2009, Institute of Telematics, UniversitÃ€t Karlsruhe (TH)
+//
+// Institute of Telematics
+// UniversitÃ€t Karlsruhe (TH)
+// Zirkel 2, 76128 Karlsruhe
+// Germany
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY THE INSTITUTE OF TELEMATICS ``AS IS'' AND
+// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARIBA PROJECT OR
+// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+// The views and conclusions contained in the software and documentation
+// are those of the authors and should not be interpreted as representing
+// official policies, either expressed or implied, of the Institute of
+// Telematics.
+// [License]
+
+#ifndef __OVERLAY_BOOTSTRAP_H
+#define __OVERLAY_BOOTSTRAP_H
+
+#include <string>
+#include <sstream>
+#include "ariba/utility/logging/Logging.h"
+#include "ariba/utility/types.h"
+#include "ariba/utility/bootstrap/BootstrapManager.h"
+#include "ariba/utility/bootstrap/BootstrapInformationCallback.h"
+#include "ariba/communication/EndpointDescriptor.h"
+
+using std::string;
+using std::ostringstream;
+using ariba::utility::SpoVNetID;
+using ariba::utility::NodeID;
+using ariba::utility::BootstrapManager;
+using ariba::utility::BootstrapInformationCallback;
+using ariba::communication::EndpointDescriptor;
+
+namespace ariba {
+namespace overlay {
+
+class BaseOverlay;
+
+class OverlayBootstrap : public BootstrapInformationCallback {
+	use_logging_h(OverlayBootstrap);
+public:
+	OverlayBootstrap();
+	virtual ~OverlayBootstrap();
+
+	void start(BaseOverlay* _overlay, const SpoVNetID& _spovnetid, const NodeID& _nodeid);
+	void stop();
+
+	void publish( const EndpointDescriptor& _ep );
+	void revoke();
+
+protected:
+	virtual void onBootstrapServiceFound(string name, string info1, string info2, string info);
+
+private:
+	BootstrapManager& manager;
+	SpoVNetID spovnetid;
+	NodeID nodeid;
+	BaseOverlay* overlay;
+	string randname;
+
+};
+
+}} // namespace ariba, overlay
+
+#endif // __OVERLAY_BOOTSTRAP_H
Index: /source/ariba/utility/bootstrap/BootstrapInformationCallback.h
===================================================================
--- /source/ariba/utility/bootstrap/BootstrapInformationCallback.h	(revision 4835)
+++ /source/ariba/utility/bootstrap/BootstrapInformationCallback.h	(revision 4836)
@@ -49,5 +49,5 @@
 class BootstrapInformationCallback {
 public:
-	virtual void onBootstrapServiceFound(string name, string info) = 0;
+	virtual void onBootstrapServiceFound(string name, string info1, string info2, string info3) = 0;
 };
 
Index: /source/ariba/utility/bootstrap/BootstrapManager.cpp
===================================================================
--- /source/ariba/utility/bootstrap/BootstrapManager.cpp	(revision 4835)
+++ /source/ariba/utility/bootstrap/BootstrapManager.cpp	(revision 4836)
@@ -50,11 +50,4 @@
 
 BootstrapManager::~BootstrapManager(){
-
-	boost::mutex::scoped_lock lock( modulesMutex );
-
-	while( modules.size() > 0 ){
-		ModuleMap::iterator i = modules.begin();
-		unregisterModule( i->first );
-	}
 }
 
@@ -96,5 +89,6 @@
 }
 
-BootstrapManager::RegistrationResult BootstrapManager::unregisterModule(BootstrapManager::BootstrapType type){
+BootstrapManager::RegistrationResult BootstrapManager::unregisterModule(
+		BootstrapManager::BootstrapType type){
 
 	boost::mutex::scoped_lock lock( modulesMutex );
@@ -113,8 +107,32 @@
 }
 
-void BootstrapManager::onBootstrapServiceFound(string name, string info){
+BootstrapManager::RegistrationResult BootstrapManager::registerAllModules(){
+	RegistrationResult result = RegistrationSucceeded;
+
+	{ // multicast dns
+		RegistrationResult resone = RegistrationSucceeded;
+		resone = registerModule(BootstrapTypeMulticastDns);
+		if(resone != RegistrationSucceeded)
+			result = resone;
+	}
+
+	{ // todo
+		/*  ...   */
+	}
+
+	return result;
+}
+
+BootstrapManager::RegistrationResult BootstrapManager::unregisterAllModules(){
+	unregisterModule(BootstrapTypeMulticastDns);
+	/*  todo  ...  */
+
+	return RegistrationSucceeded;
+}
+
+void BootstrapManager::onBootstrapServiceFound(string name, string info1, string info2, string info3){
 
 	BOOST_FOREACH( BootstrapInformationCallback* callback, callbacks ){
-		callback->onBootstrapServiceFound(name, info);
+		callback->onBootstrapServiceFound(name, info1, info2, info3);
 	}
 }
@@ -132,5 +150,5 @@
 }
 
-void BootstrapManager::publish(string name, string info){
+void BootstrapManager::publish(string name, string info1, string info2, string info3){
 	boost::mutex::scoped_lock lock( modulesMutex );
 
@@ -141,9 +159,11 @@
 		logging_info("bootstrap manager publishing service "
 				<< name << " on module " << i->second->getName());
-		i->second->publishService(name, info);
+		i->second->publishService(name, info1, info2, info3);
 	}
 }
 
 void BootstrapManager::revoke(string name){
+	boost::mutex::scoped_lock lock( modulesMutex );
+
 	ModuleMap::iterator i = modules.begin();
 	ModuleMap::iterator iend = modules.end();
Index: /source/ariba/utility/bootstrap/BootstrapManager.h
===================================================================
--- /source/ariba/utility/bootstrap/BootstrapManager.h	(revision 4835)
+++ /source/ariba/utility/bootstrap/BootstrapManager.h	(revision 4836)
@@ -73,5 +73,5 @@
 
 	enum BootstrapType {
-		BootstrapTypeMulticastDns,
+		BootstrapTypeMulticastDns,	// use mDNS bootstrapping
 	};
 
@@ -82,5 +82,7 @@
 	};
 
+	RegistrationResult registerAllModules();
 	RegistrationResult registerModule(BootstrapType type);
+	RegistrationResult unregisterAllModules();
 	RegistrationResult unregisterModule(BootstrapType type);
 
@@ -88,9 +90,9 @@
 	void unregisterCallback(BootstrapInformationCallback* _callback);
 
-	void publish(string name, string info);
+	void publish(string name, string info1, string info2, string info3);
 	void revoke(string name);
 
 protected:
-	virtual void onBootstrapServiceFound(string name, string info);
+	virtual void onBootstrapServiceFound(string name, string info1, string info2, string info3);
 
 private:
Index: /source/ariba/utility/bootstrap/modules/BootstrapModule.h
===================================================================
--- /source/ariba/utility/bootstrap/modules/BootstrapModule.h	(revision 4835)
+++ /source/ariba/utility/bootstrap/modules/BootstrapModule.h	(revision 4836)
@@ -53,4 +53,5 @@
 	virtual ~BootstrapModule();
 
+	// the module must run asynchronously in its own thread.
 	virtual void start() = 0;
 	virtual void stop() = 0;
@@ -60,5 +61,5 @@
 	virtual bool isFunctional() = 0;
 
-	virtual void publishService(string name, string info) = 0;
+	virtual void publishService(string name, string info1, string info2, string info3) = 0;
 	virtual void revokeService(string name) = 0;
 
Index: /source/ariba/utility/bootstrap/modules/multicastdns/MulticastDns.cpp
===================================================================
--- /source/ariba/utility/bootstrap/modules/multicastdns/MulticastDns.cpp	(revision 4835)
+++ /source/ariba/utility/bootstrap/modules/multicastdns/MulticastDns.cpp	(revision 4836)
@@ -46,9 +46,9 @@
 
 MulticastDns::MulticastDns(BootstrapInformationCallback* _callback) : BootstrapModule(_callback) {
-  #ifdef HAVE_LIBAVAHI_CLIENT
+  #ifdef HAVE_AVAHI_CLIENT_CLIENT_H
 	avahiclient = NULL;
 	avahipoll = NULL;
 	avahibrowser = NULL;
-  #endif // HAVE_LIBAVAHI_CLIENT
+  #endif // HAVE_AVAHI_CLIENT_CLIENT_H
 }
 
@@ -65,5 +65,5 @@
 
 bool MulticastDns::isFunctional(){
-  #ifdef HAVE_LIBAVAHI_CLIENT
+  #ifdef HAVE_AVAHI_CLIENT_CLIENT_H
 	return true;
   #else
@@ -73,5 +73,5 @@
 
 void MulticastDns::start(){
-  #ifdef HAVE_LIBAVAHI_CLIENT
+  #ifdef HAVE_AVAHI_CLIENT_CLIENT_H
 
 	int error = 0;
@@ -110,9 +110,9 @@
 	avahi_threaded_poll_start( avahipoll );
 
-  #endif // HAVE_LIBAVAHI_CLIENT
+  #endif // HAVE_AVAHI_CLIENT_CLIENT_H
 }
 
 void MulticastDns::stop(){
-  #ifdef HAVE_LIBAVAHI_CLIENT
+  #ifdef HAVE_AVAHI_CLIENT_CLIENT_H
 
 	//
@@ -144,9 +144,9 @@
 	avahipoll = NULL;
 
-  #endif // HAVE_LIBAVAHI_CLIENT
-}
-
-void MulticastDns::publishService(string name, string info){
-  #ifdef HAVE_LIBAVAHI_CLIENT
+  #endif // HAVE_AVAHI_CLIENT_CLIENT_H
+}
+
+void MulticastDns::publishService(string name, string info1, string info2, string info3){
+  #ifdef HAVE_AVAHI_CLIENT_CLIENT_H
 
 	if(name.length() > 63){
@@ -198,5 +198,7 @@
 			NULL,					// host name of our machine, let avahi find out
 			3333,					// port number the service is on, just dummy, everything is encoded in TXT
-			info.c_str(),			// arbitrary info
+			info1.c_str(),			// arbitrary info
+			info2.c_str(),			// arbitrary info
+			info3.c_str(),			// arbitrary info
 			NULL);					// make that this is the last info field
 
@@ -219,9 +221,9 @@
 	avahi_threaded_poll_unlock(avahipoll);
 
-  #endif // HAVE_LIBAVAHI_CLIENT
+  #endif // HAVE_AVAHI_CLIENT_CLIENT_H
 }
 
 void MulticastDns::revokeService(string name){
-  #ifdef HAVE_LIBAVAHI_CLIENT
+  #ifdef HAVE_AVAHI_CLIENT_CLIENT_H
 
 	avahi_threaded_poll_lock(avahipoll);
@@ -239,8 +241,8 @@
 	avahi_threaded_poll_unlock(avahipoll);
 
-  #endif // HAVE_LIBAVAHI_CLIENT
-}
-
-#ifdef HAVE_LIBAVAHI_CLIENT
+  #endif // HAVE_AVAHI_CLIENT_CLIENT_H
+}
+
+#ifdef HAVE_AVAHI_CLIENT_CLIENT_H
 
 void MulticastDns::client_callback(AvahiClient* client, AvahiClientState state, void* userdata){
@@ -395,13 +397,32 @@
 
 			char addr[AVAHI_ADDRESS_STR_MAX];
-			char* text = NULL;
 
 			avahi_address_snprint(addr, sizeof(addr), address);
-			text = avahi_string_list_to_string(txt);
+
+			string info1 = "";
+			string info2 = "";
+			string info3 = "";
+
+			if(txt != NULL){
+				char* cinfo = avahi_string_list_to_string(txt);
+				info1 = cinfo;
+				avahi_free(cinfo);
+			}
+
+			if(txt != NULL && avahi_string_list_get_next(txt) != NULL){
+				char* cinfo = avahi_string_list_to_string( avahi_string_list_get_next(txt) );
+				info2 = cinfo;
+				avahi_free(cinfo);
+			}
+
+			if(txt != NULL && avahi_string_list_get_next(txt) != NULL){
+				char* cinfo = avahi_string_list_to_string( avahi_string_list_get_next(txt) );
+				info3 = cinfo;
+				avahi_free(cinfo);
+			}
 
 			if(obj != NULL && obj->callback != NULL)
-				obj->callback->onBootstrapServiceFound(name, text);
-
-			avahi_free( text );
+				obj->callback->onBootstrapServiceFound(name, info1, info2, info3);
+
 			break;
 	}
@@ -410,5 +431,5 @@
 }
 
-#endif // HAVE_LIBAVAHI_CLIENT
+#endif // HAVE_AVAHI_CLIENT_CLIENT_H
 
 }} //namespace ariba, utility
Index: /source/ariba/utility/bootstrap/modules/multicastdns/MulticastDns.h
===================================================================
--- /source/ariba/utility/bootstrap/modules/multicastdns/MulticastDns.h	(revision 4835)
+++ /source/ariba/utility/bootstrap/modules/multicastdns/MulticastDns.h	(revision 4836)
@@ -42,5 +42,5 @@
 #include "ariba/config.h"
 
-#ifdef HAVE_LIBAVAHI_CLIENT
+#ifdef HAVE_AVAHI_CLIENT_CLIENT_H
   #include <avahi-client/client.h>
   #include <avahi-client/lookup.h>
@@ -51,5 +51,5 @@
   #include <avahi-common/error.h>
   #include <avahi-common/timeval.h>
-#endif
+#endif // HAVE_AVAHI_CLIENT_CLIENT_H
 
 #include <iostream>
@@ -80,5 +80,5 @@
 	virtual string getInformation();
 	virtual bool isFunctional();
-	virtual void publishService(string name, string info);
+	virtual void publishService(string name, string info1, string info2, string info3);
 	virtual void revokeService(string name);
 
@@ -86,5 +86,5 @@
 	static const string serviceType;
 
-#ifdef HAVE_LIBAVAHI_CLIENT
+#ifdef HAVE_AVAHI_CLIENT_CLIENT_H
 
 	AvahiClient*         avahiclient;
@@ -133,5 +133,5 @@
 			);
 
-#endif // HAVE_LIBAVAHI_CLIENT
+#endif // HAVE_AVAHI_CLIENT_CLIENT_H
 
 };
