Index: phapi/phapi.h
===================================================================
--- phapi/phapi.h	(revision 131)
+++ phapi/phapi.h	(revision 138)
@@ -1179,5 +1179,4 @@
   char *id;
   char *name;
-  unsigned int idx;
   unsigned int capabilities;
 };
@@ -1189,5 +1188,4 @@
 	char *id;
 	char *name;
-	unsigned int idx;
 };
 	
Index: phapi/phms_audiostream.c
===================================================================
--- phapi/phms_audiostream.c	(revision 131)
+++ phapi/phms_audiostream.c	(revision 138)
@@ -1169,5 +1169,4 @@
 	int device_num;
 	const MSList *card_list = ms_snd_card_manager_get_list(ms_snd_card_manager_get());
-	int pos = 0;
 	int i = 0;
 
@@ -1176,12 +1175,12 @@
 		return 0;
 	*device_tab = osip_malloc(device_num * (sizeof(**device_tab) + 1));
-	for(;(card_list = ms_list_next(card_list)) != NULL; pos++)
-	{
-		if (((MSSndCard *)(card_list->data))->capabilities & MS_SND_CARD_CAP_PLAYBACK)
-		{
-			((*device_tab)[i]).idx = pos;
-			((*device_tab)[i]).id = osip_strdup(((MSSndCard *)(card_list->data))->id);
-			((*device_tab)[i]).name = osip_strdup(((MSSndCard *)(card_list->data))->name);
-			((*device_tab)[i]).capabilities = ((MSSndCard *)(card_list->data))->capabilities;
+	for(;card_list != NULL; card_list = card_list->next)
+	{
+		MSSndCard * card = (MSSndCard *)(card_list->data);
+		if (card->capabilities & MS_SND_CARD_CAP_PLAYBACK)
+		{
+			((*device_tab)[i]).id = osip_strdup(card->id);
+			((*device_tab)[i]).name = osip_strdup(card->name);
+			((*device_tab)[i]).capabilities = card->capabilities;
 			i++;
 		}
@@ -1195,5 +1194,4 @@
 	int device_num;
 	const MSList *card_list = ms_snd_card_manager_get_list(ms_snd_card_manager_get());
-	int pos = 0;
 	int i = 0;
 
@@ -1202,12 +1200,12 @@
 		return 0;
 	*device_tab = osip_malloc(device_num * (sizeof(**device_tab) + 1));
-	for(;(card_list = ms_list_next(card_list)) != NULL; pos++)
-	{
-		if (((MSSndCard *)(card_list->data))->capabilities & MS_SND_CARD_CAP_CAPTURE)
-		{
-			((*device_tab)[i]).idx = pos;
-			((*device_tab)[i]).id = osip_strdup(((MSSndCard *)(card_list->data))->id);
-			((*device_tab)[i]).name = osip_strdup(((MSSndCard *)(card_list->data))->name);
-			((*device_tab)[i]).capabilities = ((MSSndCard *)(card_list->data))->capabilities;
+	for(;card_list != NULL; card_list = card_list->next)
+	{
+		MSSndCard * card = (MSSndCard *)(card_list->data);
+		if (card->capabilities & MS_SND_CARD_CAP_CAPTURE)
+		{
+			((*device_tab)[i]).id = osip_strdup(card->id);
+			((*device_tab)[i]).name = osip_strdup(card->name);
+			((*device_tab)[i]).capabilities = card->capabilities;
 			i++;
 		}
Index: phapi/phms_videostream.c
===================================================================
--- phapi/phms_videostream.c	(revision 131)
+++ phapi/phms_videostream.c	(revision 138)
@@ -457,5 +457,5 @@
 {
 	int device_num = 0;
-	int pos = 0;
+	int i = 0;
 	const MSList *web_cam_list = ms_web_cam_manager_get_list(ms_web_cam_manager_get());
 	
@@ -469,13 +469,10 @@
 	{
 		MSWebCam * webcam = (MSWebCam*)web_cam_list->data;
-		
-		((*device_tab)[pos]).idx = pos;
-		((*device_tab)[pos]).id = osip_strdup(webcam->id);
-		((*device_tab)[pos]).name = osip_strdup(webcam->name);
-		
-		pos++;
-	}
-	
-	return device_num;
+		((*device_tab)[i]).id = osip_strdup(webcam->id);
+		((*device_tab)[i]).name = osip_strdup(webcam->name);
+		i++;
+	}
+	
+	return i;
 }
 
Index: phcpp/phapipp.cpp
===================================================================
--- phcpp/phapipp.cpp	(revision 131)
+++ phcpp/phapipp.cpp	(revision 138)
@@ -264,10 +264,10 @@
 }
 
-std::map<unsigned int, char*> &phapi::getAudioCaptureDevices()
-{
-	ph_audio_card_desc_t* device_tab;
-	int pos;
-	int i;
-	std::map<unsigned int, char*> *device_map = new std::map<unsigned int, char*>;
+std::map<char*, char*> phapi::getAudioCaptureDevices()
+{
+	ph_audio_card_desc_t* device_tab = NULL;
+	int pos = 0;
+	int i = 0;
+	std::map<char*, char*> device_map;
 
 	pos = phAudioCaptureCardList(&device_tab);
@@ -275,16 +275,20 @@
 	for (i = 0; i < pos; i++)
 	{
-		device_map->insert(std::pair<unsigned int, char*>(device_tab[i].idx, device_tab[i].id));
-		printf("MSSndCard idx:%d id:%s name:%s !!!!\n", device_tab[i].idx, device_tab[i].id, device_tab[i].name);
+		device_map.insert(std::pair<char*, char*>(device_tab[i].id, device_tab[i].id));
+		printf("MSSndCard id:%s name:%s !!!!\n", device_tab[i].id, device_tab[i].name);
 	}
-	return *device_map;
-}
-
-std::map<unsigned int, char*> &phapi::getVideoWebcamDevices()
-{
-	ph_video_web_cam_desc_t* device_tab;
-	int pos;
-	int i;
-	std::map<unsigned int, char*> *device_map = new std::map<unsigned int, char*>;
+	
+	if(device_tab)
+		delete device_tab;
+	
+	return device_map;
+}
+
+std::map<char*, char*> phapi::getVideoWebcamDevices()
+{
+	ph_video_web_cam_desc_t* device_tab = NULL;
+	int pos =0;
+	int i = 0;
+	std::map<char *, char*> device_map;
 		
 	pos = phVideoWebcamList(&device_tab);
@@ -292,16 +296,20 @@
 	for (i = 0; i < pos; i++)
 	{
-		device_map->insert(std::pair<unsigned int, char*>(device_tab[i].idx, device_tab[i].name));
-		printf("webcam idx:%d id:%s name:%s !!!!\n", device_tab[i].idx, device_tab[i].id, device_tab[i].name);
+		device_map.insert(std::pair<char*, char*>(device_tab[i].id, device_tab[i].name));
+		printf("webcam id:%s name:%s !!!!\n", device_tab[i].id, device_tab[i].name);
 	}
-	return *device_map;
-}
-	
-std::map<unsigned int, char*> &phapi::getAudioPlaybackDevices()
-{
-	ph_audio_card_desc_t* device_tab;
-	int pos;
-	int i;
-	std::map<unsigned int, char*> *device_map = new std::map<unsigned int, char*>;
+	
+	if(device_tab)
+		delete device_tab;
+	
+	return device_map;
+}
+	
+std::map<char*, char*> phapi::getAudioPlaybackDevices()
+{
+	ph_audio_card_desc_t* device_tab = NULL;
+	int pos = 0;
+	int i = 0;
+	std::map<char*, char*> device_map;
 
 	pos = phAudioPlaybackCardList(&device_tab);
@@ -309,8 +317,11 @@
 	for (i = 0; i < pos; i++)
 	{
-		device_map->insert(std::pair<unsigned int, char*>(device_tab[i].idx, device_tab[i].id));
-		//  printf("MSSndCard idx:%d id:%s name:%s !!!!\n", device_tab[i].idx, device_tab[i].id, device_tab[i].name);
+		device_map.insert(std::pair<char*, char*>(device_tab[i].id, device_tab[i].name));
 	}
-	return *device_map;
+	
+	if(device_tab)
+		delete device_tab;
+	
+	return device_map;
 }
 
Index: phcpp/phapipp.h
===================================================================
--- phcpp/phapipp.h	(revision 131)
+++ phcpp/phapipp.h	(revision 138)
@@ -118,7 +118,7 @@
 	virtual void setUaString(const char *uastr);
 
-	virtual std::map<unsigned int, char*> &getAudioCaptureDevices();
-	virtual std::map<unsigned int, char*> &getAudioPlaybackDevices();
-	virtual std::map<unsigned int, char*> &getVideoWebcamDevices();
+	virtual std::map<char*, char*> getAudioCaptureDevices();
+	virtual std::map<char*, char*> getAudioPlaybackDevices();
+	virtual std::map<char*, char*> getVideoWebcamDevices();
 	
 	virtual void changeAudioDevices(const char *devstr);
@@ -322,10 +322,10 @@
 	}
 
-	std::map<unsigned int, char*> &getAudioCaptureDevices()
+	std::map<char*, char*> getAudioCaptureDevices()
     {
 		return phapi::getAudioCaptureDevices();
     }
 
-	std::map<unsigned int, char*> &getAudioPlaybackDevices()
+	std::map<char*, char*> getAudioPlaybackDevices()
     {
 		return phapi::getAudioPlaybackDevices();
Index: phtest/phtests_log.cpp
===================================================================
--- phtest/phtests_log.cpp	(revision 137)
+++ phtest/phtests_log.cpp	(revision 131)
@@ -67,5 +67,5 @@
 	if (logfd==INVALID_HANDLE_VALUE){
 #else
-	logfd = open(filename, O_CREAT|O_RDWR|O_TRUNC, 0644);
+	logfd = open(filename, O_CREAT|O_RDWR|O_TRUNC);
 	if (logfd == -1){
 #endif
