diff --git a/linphone/mediastreamer2/src/winsnd2.c b/linphone/mediastreamer2/src/winsnd2.c
index 3377369ef5bf67822baca183dcb56d51e074aeb6..5f77c9444fdab970e1bb345295499717154e079d 100755
--- a/linphone/mediastreamer2/src/winsnd2.c
+++ b/linphone/mediastreamer2/src/winsnd2.c
@@ -801,9 +801,9 @@ static bool_t poller_running=TRUE;
 
 static void * new_device_polling_thread(void *ignore){
 	MSSndCardManager *m;
-	/*check for new devices every 2 seconds*/
+	/*check for new devices every 5 seconds*/
 	while(poller_running){
-		ms_sleep(2);
+		ms_sleep(5);
 		if (poller_running){
 			m=ms_snd_card_manager_get();
 			if(!m) break;
@@ -818,12 +818,18 @@ static void * new_device_polling_thread(void *ignore){
 static void stop_poller(){
 	poller_running=FALSE;
 	ms_thread_join(poller_thread,NULL);
+	poller_thread=NULL;
 }
 
 static void winsndcard_detect(MSSndCardManager *m){
+	static int doitonce = 0;
 	_winsndcard_detect(m);
-	ms_thread_create(&poller_thread,NULL,new_device_polling_thread,NULL);
-	atexit(&stop_poller);
+	if (doitonce==0)
+	{
+		doitonce++;
+		ms_thread_create(&poller_thread,NULL,new_device_polling_thread,NULL);
+		atexit(&stop_poller);
+	}
 }
 
 typedef struct WinSnd{