Index: source/ariba/utility/bootstrap/modules/periodicbroadcast/PeriodicBroadcast.cpp
===================================================================
--- source/ariba/utility/bootstrap/modules/periodicbroadcast/PeriodicBroadcast.cpp	(revision 5514)
+++ source/ariba/utility/bootstrap/modules/periodicbroadcast/PeriodicBroadcast.cpp	(revision 5516)
@@ -102,7 +102,4 @@
 
 	Timer::stop();
-
-	boost::mutex::scoped_lock lock( localServicesMutex );
-	localServices.clear();
 }
 
@@ -153,5 +150,5 @@
 
 				if( time(NULL) > (i->second.lastseen + servicetimeout) ){
-//					remoteServices.erase( i );
+					remoteServices.erase( i );
 					deleted = true;
 					break;
@@ -159,5 +156,5 @@
 			}
 
-		}while(deleted);
+		} while(deleted);
 	}
 
Index: source/ariba/utility/bootstrap/modules/periodicbroadcast/PeriodicBroadcast.h
===================================================================
--- source/ariba/utility/bootstrap/modules/periodicbroadcast/PeriodicBroadcast.h	(revision 5514)
+++ source/ariba/utility/bootstrap/modules/periodicbroadcast/PeriodicBroadcast.h	(revision 5516)
@@ -102,15 +102,23 @@
 
 		_Service(const string& _name, const string& _info1,
-				const string& _info2, const string& _info3, const time_t& _lastseen = 0)
-			: name(_name), info1(_info1), info2(_info2), info3(_info3), lastseen(_lastseen){
-		}
-
-		_Service(const _Service& rh)
-			: name(rh.name), info1(rh.info1), info2(rh.info2),
-						info3(rh.info3), lastseen(rh.lastseen){
+				const string& _info2, const string& _info3, const time_t& _lastseen = 0){
+			name.assign (_name);
+			info1.assign(_info1);
+			info2.assign(_info2);
+			info3.assign(_info3);
+			lastseen = _lastseen;
+		}
+
+		_Service(const _Service& rh){
+			name.assign (rh.name);
+			info1.assign(rh.info1);
+			info2.assign(rh.info2);
+			info3.assign(rh.info3);
+			lastseen = rh.lastseen;
 		}
 	} Service;
 
 	typedef map<string,Service> ServiceList;
+
 	ServiceList localServices;
 	boost::mutex localServicesMutex;
@@ -141,40 +149,74 @@
 				socket_v4(io_service), socket_v6(io_service) {
 
+			if( open4() ) start_receive_4();
+			if( open6() ) start_receive_6();
+		}
+
+		bool open4(){
+			boost::system::error_code err;
+
 			boost::asio::ip::udp::endpoint listen_endpoint_v4(
 					boost::asio::ip::address_v4::any(),
 					PeriodicBroadcast::serverport_v4);
 
+			err = socket_v4.open( listen_endpoint_v4.protocol(), err );
+			if(err){
+				logging_warn("failed opening ipv4 socket");
+				return false;
+			}
+
+			err = socket_v4.set_option( boost::asio::ip::udp::socket::reuse_address(true), err );
+			if(err){
+				logging_warn("failed setting reuse address option on ipv4 socket");
+				return false;
+			}
+
+			err = socket_v4.set_option( boost::asio::socket_base::broadcast(true), err );
+			if(err){
+				logging_warn("failed setting broadcast option on ipv4 socket");
+				return false;
+			}
+
+			err = socket_v4.bind( listen_endpoint_v4, err );
+			if(err){
+				logging_warn("failed binding ipv4 socket");
+				return false;
+			}
+
+			return true;
+		}
+
+		bool open6(){
+			boost::system::error_code err;
+
 			boost::asio::ip::udp::endpoint listen_endpoint_v6(
 					boost::asio::ip::address_v6::any(),
 					PeriodicBroadcast::serverport_v6);
 
-			boost::system::error_code err;
-
-			err = socket_v4.open( listen_endpoint_v4.protocol(), err );
-			if(err) logging_warn("failed opening ipv4 socket");
-
 			err = socket_v6.open( listen_endpoint_v6.protocol(), err );
-			if(err) logging_warn("failed opening ipv6 socket");
-
-			err = socket_v4.set_option( boost::asio::ip::udp::socket::reuse_address(true), err );
-			if(err) logging_warn("failed setting reuse address option on ipv4 socket");
+			if(err){
+				logging_warn("failed opening ipv6 socket");
+				return false;
+			}
 
 			err = socket_v6.set_option( boost::asio::ip::udp::socket::reuse_address(true), err );
-			if(err) logging_warn("failed setting reuse address option on ipv6 socket");
-
-			err = socket_v4.set_option( boost::asio::socket_base::broadcast(true), err );
-			if(err) logging_warn("failed setting broadcast option on ipv4 socket");
+			if(err){
+				logging_warn("failed setting reuse address option on ipv6 socket");
+				return false;
+			}
 
 			err = socket_v6.set_option( boost::asio::socket_base::broadcast(true), err );
-			if(err) logging_warn("failed setting broadcast option on ipv6 socket");
-
-			err = socket_v4.bind( listen_endpoint_v4, err );
-			if(err) logging_warn("failed binding ipv4 socket");
+			if(err){
+				logging_warn("failed setting broadcast option on ipv6 socket");
+				return false;
+			}
 
 			err = socket_v6.bind( listen_endpoint_v6, err );
-			if(err) logging_warn("failed binding ipv6 socket");
-
-			start_receive_4();
-			start_receive_6();
+			if(err){
+				logging_warn("failed binding ipv6 socket");
+				return false;
+			}
+
+			return true;
 		}
 
@@ -259,7 +301,7 @@
 				if( it != services->end() ){
 
-					it->second.info1 = msg.getInfo1();
-					it->second.info2 = msg.getInfo2();
-					it->second.info3 = msg.getInfo3();
+					it->second.info1.assign( msg.getInfo1() );
+					it->second.info2.assign( msg.getInfo2() );
+					it->second.info3.assign( msg.getInfo3() );
 					it->second.lastseen = time(NULL);
 
