diff --git a/NEWS b/NEWS
index c34031a765c1d1b9c03ce403993de911ff304215..0173bf7d21b9f0294316546aaa9bc68b8b5f234d 100644
--- a/NEWS
+++ b/NEWS
@@ -7,6 +7,7 @@ linphone-3.3.0 -- ?????????
 	* new tabbed ui
 	* be nat friendly using OPTIONS request and using received,rport from
 		responses.
+	* use stun guessed ports even if symmetric is detected (works with freeboxes)
 	* improve bitrate usage of speex codec
 	* allow speex to run with vbr (variable bit rate) mode
 	* add speex/32000 (ultra wide band speex codec)
diff --git a/configure.in b/configure.in
index fec1ed27985f016350cf069316b558a9874e5381..2ecf17659a937a72f20e13f5ee39f763731fdf8a 100644
--- a/configure.in
+++ b/configure.in
@@ -1,6 +1,6 @@
 dnl Process this file with autoconf to produce a configure script.
 
-AC_INIT([linphone],[3.2.99.5],[linphone-developers@nongnu.org])
+AC_INIT([linphone],[3.2.99.7],[linphone-developers@nongnu.org])
 AC_CANONICAL_SYSTEM
 
 dnl Source packaging numbers
diff --git a/coreapi/help/doxygen.dox.in b/coreapi/help/doxygen.dox.in
index acdec9090a1d02294d6c2105af27d3038c1a9ba0..13502d42424b7f601c4eea830b7ce70ff517ed8c 100644
--- a/coreapi/help/doxygen.dox.in
+++ b/coreapi/help/doxygen.dox.in
@@ -28,6 +28,49 @@
  * @verbinclude COPYING
  */
 
+/**
+ * @defgroup tutorial_liblinphone Tutorial: Placing and receiving calls with liblinphone
+ * 
+
+<H1>Initialize liblinphone</H1>
+
+The first thing to do is to initialize the library passing it a set of callbacks functions to receive
+various notifications: incoming calls, progress of calls etc...
+These callbacks are all grouped in the LinphoneCoreVTable structure.
+All are optionnals (use NULL if you don't need them).
+The following code shows how initialize liblinphone:
+
+<PRE>
+	##include <linphonecore.h>
+
+	//callback function for notification of incoming calls
+	static void on_invite_recv(LinphoneCore *lc, const char *from){
+		printf("Receiving a call from %s\n",from);
+	}
+
+	//callback function for notification end of calls (by remote)
+	static void on_bye_recv(LinphoneCore *lc, const char *from){
+		printf("Remote end hangup\n");
+	}
+
+	/
+	static void on_display_status(LinphoneCore *lc, const char *msg){
+		printf("%s",msg);
+	}
+
+	int main(int argc, char *argv[]){
+		LinphoneCoreVTable vtable;
+		
+		memset(&vtable,0,sizeof(vtable));
+		vtable.inv_recv=&on_invite_recv;
+		vtable.bye_recv=&on_bye_recv;
+		vtable.display_status=&on_display_status;
+		
+	}
+
+</PRE>
+
+
 
 /** 
  * @defgroup initializing Initialization and destruction
diff --git a/coreapi/misc.c b/coreapi/misc.c
index 894c3fc2278ef8d784f6f5592dbb6d7f92899eab..55aa83d4de20982bb3593921b2bc0d05431330a2 100644
--- a/coreapi/misc.c
+++ b/coreapi/misc.c
@@ -567,7 +567,8 @@ void linphone_core_run_stun_tests(LinphoneCore *lc, LinphoneCall *call){
 				}
 			}
 		}
-		if (ac->addr[0]!='\0' && vc->addr[0]!='\0' && strcmp(ac->addr,vc->addr)==0){
+		if ((ac->addr[0]!='\0' && vc->addr[0]!='\0' && strcmp(ac->addr,vc->addr)==0)
+		    || sock2==-1){
 			strcpy(call->localdesc->addr,ac->addr);
 		}
 		close_socket(sock1);
diff --git a/mediastreamer2 b/mediastreamer2
index b437bd3bcac6ce8f09218168ae75cc11e9a9255e..0ca839b53751c4b687535bcfae747273f3dd0c44 160000
--- a/mediastreamer2
+++ b/mediastreamer2
@@ -1 +1 @@
-Subproject commit b437bd3bcac6ce8f09218168ae75cc11e9a9255e
+Subproject commit 0ca839b53751c4b687535bcfae747273f3dd0c44