Index: source/ariba/utility/bootstrap/modules/BootstrapModule.h
===================================================================
--- source/ariba/utility/bootstrap/modules/BootstrapModule.h	(revision 4758)
+++ 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 4758)
+++ 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 4758)
+++ 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
 
 };
