diff --git a/build/android/Android.mk b/build/android/Android.mk
index c2b04b3897ad324767b1c86b97f9b12ba2996093..18fbbdbfd3cd1bbd0405ec2ab8ee47050859b6b5 100755
--- a/build/android/Android.mk
+++ b/build/android/Android.mk
@@ -87,6 +87,9 @@ LOCAL_CFLAGS += -DVIDEO_ENABLED
 ifeq ($(BUILD_X264),1)
 LOCAL_CFLAGS += -DHAVE_X264
 endif
+ifeq ($(BUILD_OPENH264),1)
+LOCAL_CFLAGS += -DHAVE_OPENH264
+endif
 endif
 
 ifeq ($(BUILD_CONTACT_HEADER),1)
@@ -175,6 +178,11 @@ LOCAL_STATIC_LIBRARIES += \
 	libmsx264 \
 	libx264
 endif
+ifeq ($(BUILD_OPENH264),1)
+LOCAL_STATIC_LIBRARIES += \
+	libmsopenh264 \
+	libwels
+endif
 endif
 
 ifeq ($(BUILD_UPNP),1)
diff --git a/coreapi/linphonecore_jni.cc b/coreapi/linphonecore_jni.cc
index f7c8f46eba191cc815b2663a13c8e5af2b664973..8248524187c89ae51e3ae264d75e7ce8e097ee8c 100644
--- a/coreapi/linphonecore_jni.cc
+++ b/coreapi/linphonecore_jni.cc
@@ -26,6 +26,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
 extern "C" {
 #include "mediastreamer2/mediastream.h"
+#include "mediastreamer2/mscommon.h"
 }
 #include "mediastreamer2/msjava.h"
 #include "private.h"
@@ -39,6 +40,9 @@ extern "C" void libmsilbc_init();
 #ifdef HAVE_X264
 extern "C" void libmsx264_init();
 #endif
+#ifdef HAVE_OPENH264
+extern "C" void libmsopenh264_init();
+#endif
 #ifdef HAVE_AMR
 extern "C" void libmsamr_init();
 #endif
@@ -742,12 +746,17 @@ extern "C" jlong Java_org_linphone_core_LinphoneCoreImpl_newLinphoneCore(JNIEnv*
 	const char* factoryConfig = jfactoryConfig?env->GetStringUTFChars(jfactoryConfig, NULL):NULL;
 	LinphoneCoreData* ldata = new LinphoneCoreData(env,thiz,jlistener,juserdata);
 
+	ms_init(); // Initialize mediastreamer2 before loading the plugins
+
 #ifdef HAVE_ILBC
 	libmsilbc_init(); // requires an fpu
 #endif
 #ifdef HAVE_X264
 	libmsx264_init();
 #endif
+#ifdef HAVE_OPENH264
+	libmsopenh264_init();
+#endif
 #ifdef HAVE_AMR
 	libmsamr_init();
 #endif
@@ -776,6 +785,7 @@ extern "C" void Java_org_linphone_core_LinphoneCoreImpl_delete(JNIEnv*  env
 		,jlong lc) {
 	LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_get_user_data((LinphoneCore*)lc);
 	linphone_core_destroy((LinphoneCore*)lc);
+	ms_exit();
 	delete lcData;
 }
 
diff --git a/mediastreamer2 b/mediastreamer2
index a33899b52d15236fe99b5399242ab9d8c2a0f24e..7111661bd810352ed7a4ecc9c30c7754d3006a92 160000
--- a/mediastreamer2
+++ b/mediastreamer2
@@ -1 +1 @@
-Subproject commit a33899b52d15236fe99b5399242ab9d8c2a0f24e
+Subproject commit 7111661bd810352ed7a4ecc9c30c7754d3006a92