Index: source/ariba/utility/bootstrap/modules/bluetoothsdp/BluetoothSdp.cpp
===================================================================
--- source/ariba/utility/bootstrap/modules/bluetoothsdp/BluetoothSdp.cpp	(revision 5633)
+++ source/ariba/utility/bootstrap/modules/bluetoothsdp/BluetoothSdp.cpp	(revision 5638)
@@ -41,19 +41,19 @@
 #ifdef HAVE_BLUETOOTH_BLUETOOTH_H
 
-	// Attribute descriptors for SDP
-	// base was chosen randomly
-	#define SDP_SPOVNET_BASE 			0x4000
-	#define SDP_ATTR_SPOVNET_NAME		0x0000 + SDP_SPOVNET_BASE
-	#define SDP_ATTR_SPOVNET_INFO1		0x0001 + SDP_SPOVNET_BASE
-	#define SDP_ATTR_SPOVNET_INFO2		0x0002 + SDP_SPOVNET_BASE
-	#define SDP_ATTR_SPOVNET_INFO3		0x0003 + SDP_SPOVNET_BASE
-
-	// The SpoVNet unique identifier, this should be the same for all SpoVNet implementations
-	const uint8_t svc_uuid_int[] = {0x59, 0x29, 0x24, 0x34, 0x69, 0x42, 0x11, 0xde, 0x94,
+// Attribute descriptors for SDP
+// base was chosen randomly
+#define SDP_SPOVNET_BASE 			0x4000
+#define SDP_ATTR_SPOVNET_NAME		0x0000 + SDP_SPOVNET_BASE
+#define SDP_ATTR_SPOVNET_INFO1		0x0001 + SDP_SPOVNET_BASE
+#define SDP_ATTR_SPOVNET_INFO2		0x0002 + SDP_SPOVNET_BASE
+#define SDP_ATTR_SPOVNET_INFO3		0x0003 + SDP_SPOVNET_BASE
+
+// The SpoVNet unique identifier, this should be the same for all SpoVNet implementations
+const uint8_t svc_uuid_int[] = {0x59, 0x29, 0x24, 0x34, 0x69, 0x42, 0x11, 0xde, 0x94,
 		0x3e, 0x00, 0x21, 0x5d, 0xb4, 0xd8, 0x54};
 
-	const char *service_name = "SpoVNet";
-	const char *svc_dsc = "www.ariba-underlay.org";
-	const char *service_prov = "ITM Uni Karlsruhe";
+const char *service_name = "SpoVNet";
+const char *svc_dsc = "www.ariba-underlay.org";
+const char *service_prov = "ITM Uni Karlsruhe";
 
 #endif // HAVE_BLUETOOTH_BLUETOOTH_H
@@ -67,5 +67,4 @@
 	BootstrapModule(_callback), scan_timer_(io_service_) {
 	srand( time(NULL) );
-	found = false;
 #ifdef HAVE_BLUETOOTH_BLUETOOTH_H
 
@@ -141,5 +140,5 @@
 	uuid_t root_uuid, l2cap_uuid, rfcomm_uuid, svc_uuid, svc_class_uuid;
 	sdp_list_t *l2cap_list = 0, *rfcomm_list = 0, *root_list = 0, *proto_list =
-	0, *access_proto_list = 0, *svc_class_list = 0, *profile_list = 0;
+		0, *access_proto_list = 0, *svc_class_list = 0, *profile_list = 0;
 	sdp_data_t *channel = 0;
 	sdp_profile_desc_t profile;
@@ -253,56 +252,65 @@
 
 void BluetoothSdp::bt_scan() {
-	/*
-	 * Scans for other bluetooth devices and starts a SDP search on them.
-	 */
-
-	logging_debug("scanning for peers");
-
-	inquiry_info *ii = NULL;
-	int max_rsp, num_rsp;
-	int dev_id, sock, len, flags;
-	int i;
-
-	bdaddr_t address;
-	uint8_t channel;
-
-	dev_id = hci_get_route(NULL);
-	sock = hci_open_dev(dev_id);
-	if (dev_id < 0 || sock < 0) {
-		logging_error("opening socket for device "
-				<< dev_id << " failed. can not scan for peers: " << strerror(errno));
-		return;
-	}
-
-	len = 8;
-	max_rsp = 255;
-	flags = IREQ_CACHE_FLUSH;
-	ii = (inquiry_info*) malloc(max_rsp * sizeof(inquiry_info));
-
-	num_rsp = hci_inquiry(dev_id, len, max_rsp, NULL, &ii, flags);
-	if (num_rsp < 0)
-		logging_error("hci_inquiry failed with " << num_rsp << ": " << strerror(errno));
-
-	for (i = 0; i < num_rsp; i++) {
-		address = (ii + i)->bdaddr;
-
-		string saddress = ba2string(&address);
-		string sname = ba2name(&address, sock);
-
-		logging_debug("found peer [" << saddress << "] [" << sname << "]");
-		sdp_search( address, sname );
-	}
-
-	free(ii);
-	close(sock);
-
-	if(!found){
-		int nextscan = (rand() % 30) + 5;
-		logging_debug("next sdp scan in " << nextscan << " seconds");
-
-
-		scan_timer_.expires_from_now( boost::posix_time::seconds(nextscan) );
-		scan_timer_.async_wait( boost::bind(&BluetoothSdp::bt_scan, this) );
-	}
+
+	//
+	// scan for devices if we have no active rfcomm connections running.
+	// otherwise we would break existing connections due to chipping seq
+	//
+
+	if(!haveConnections()){
+
+		/*
+		 * Scans for other bluetooth devices and starts a SDP search on them.
+		 */
+
+		logging_debug("scanning for peers");
+
+		inquiry_info *ii = NULL;
+		int max_rsp, num_rsp;
+		int dev_id, sock, len, flags;
+		int i;
+
+		bdaddr_t address;
+		uint8_t channel;
+
+		dev_id = hci_get_route(NULL);
+		sock = hci_open_dev(dev_id);
+		if (dev_id < 0 || sock < 0) {
+			logging_error("opening socket for device "
+					<< dev_id << " failed. can not scan for peers: " << strerror(errno));
+			return;
+		}
+
+		len = 8;
+		max_rsp = 255;
+		flags = IREQ_CACHE_FLUSH;
+		ii = (inquiry_info*) malloc(max_rsp * sizeof(inquiry_info));
+
+		num_rsp = hci_inquiry(dev_id, len, max_rsp, NULL, &ii, flags);
+		if (num_rsp < 0)
+			logging_error("hci_inquiry failed with " << num_rsp << ": " << strerror(errno));
+
+		for (i = 0; i < num_rsp; i++) {
+			address = (ii + i)->bdaddr;
+
+			string saddress = ba2string(&address);
+			string sname = ba2name(&address, sock);
+
+			logging_debug("found peer [" << saddress << "] [" << sname << "]");
+			sdp_search( address, sname );
+		}
+
+		free(ii);
+		close(sock);
+
+	} else {
+		logging_debug("have active rfcomm connectinos, not searching");
+	}
+
+	int nextscan = (rand() % 30) + 5;
+	logging_debug("next sdp scan try in " << nextscan << " seconds");
+
+	scan_timer_.expires_from_now( boost::posix_time::seconds(nextscan) );
+	scan_timer_.async_wait( boost::bind(&BluetoothSdp::bt_scan, this) );
 }
 
@@ -372,5 +380,4 @@
 
 				// Callback
-				found = true;
 				callback->onBootstrapServiceFound(name, info1, info2, info3);
 			}
@@ -410,4 +417,34 @@
 }
 
+bool BluetoothSdp::haveConnections(){
+
+	struct hci_conn_list_req* cl = NULL;
+	struct hci_conn_info* ci = NULL;
+
+	int btsock = socket(AF_BLUETOOTH, SOCK_RAW, BTPROTO_HCI);
+	if(btsock <  0){
+		logging_error("failed getting bluetooth raw socket");
+		return true; // return true to be safe here and not perform sdp scan
+	}
+
+	cl = (struct hci_conn_list_req*)malloc(10 * sizeof(struct hci_conn_info) + sizeof(struct hci_conn_list_req));
+
+	cl->dev_id = hci_get_route(NULL);;
+	cl->conn_num = 10;
+	ci = cl->conn_info;
+
+	if(ioctl(btsock, HCIGETCONNLIST, (void*)cl)){
+		logging_warn("could not get active rfcomm connections");
+		return true; // return true to be safe here and not perform sdp scan
+	}
+
+	bool haveconn = (cl->conn_num > 0);
+	logging_error("we have " << cl->conn_num << " active connections");
+	free(cl);
+	close(btsock);
+
+	return haveconn;
+}
+
 #endif // HAVE_BLUETOOTH_BLUETOOTH_H
 
Index: source/ariba/utility/bootstrap/modules/bluetoothsdp/BluetoothSdp.h
===================================================================
--- source/ariba/utility/bootstrap/modules/bluetoothsdp/BluetoothSdp.h	(revision 5633)
+++ source/ariba/utility/bootstrap/modules/bluetoothsdp/BluetoothSdp.h	(revision 5638)
@@ -92,4 +92,6 @@
 	sdp_session_t *sdp_session_;
 	uint8_t channel_;
+
+	bool haveConnections();
 #endif // HAVE_BLUETOOTH_BLUETOOTH_H
 
@@ -97,7 +99,4 @@
 	boost::asio::deadline_timer scan_timer_;
 	boost::thread t_;
-
-	bool found;
-
 };
 
Index: source/ariba/utility/bootstrap/modules/periodicbroadcast/PeriodicBroadcast.h
===================================================================
--- source/ariba/utility/bootstrap/modules/periodicbroadcast/PeriodicBroadcast.h	(revision 5633)
+++ source/ariba/utility/bootstrap/modules/periodicbroadcast/PeriodicBroadcast.h	(revision 5638)
@@ -352,7 +352,9 @@
 				if( it != services->end() ){
 
+					/*
 					it->second.setInfo1( msg.getInfo1() );
 					it->second.setInfo2( msg.getInfo2() );
 					it->second.setInfo3( msg.getInfo3() );
+					*/
 					it->second.setLastseen( time(NULL) );
 
