diff --git a/res/values/non_localizable_strings.xml b/res/values/non_localizable_strings.xml
index c427191b4..0c92b2e4a 100644
--- a/res/values/non_localizable_strings.xml
+++ b/res/values/non_localizable_strings.xml
@@ -78,6 +78,7 @@
pref_codec_silk24_key
pref_codecs_key
pref_stun_server_key
+ pref_ice_enable_key
pref_video_codec_vp8_key
pref_media_encryption_key
none
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 736abc9d5..7c7279028 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -214,6 +214,8 @@
Removes the echo heard by other end (not recommended)
Removes the echo heard by other end (brute force method)
Stun server
+ Enable ICE
+ A STUN server must be configured to use ICE
Calibrating...
Calibrated [%s ms]
failed
diff --git a/res/xml-v14/preferences.xml b/res/xml-v14/preferences.xml
index 1c34388fb..72f417abc 100644
--- a/res/xml-v14/preferences.xml
+++ b/res/xml-v14/preferences.xml
@@ -52,7 +52,15 @@
-
+
+
+
+
+
diff --git a/src/org/linphone/LinphoneManager.java b/src/org/linphone/LinphoneManager.java
index f24e9cdc2..069322d6e 100644
--- a/src/org/linphone/LinphoneManager.java
+++ b/src/org/linphone/LinphoneManager.java
@@ -688,8 +688,13 @@ public final class LinphoneManager implements LinphoneCoreListener {
//stun server
String lStun = getPrefString(R.string.pref_stun_server_key, null);
+ boolean useICE = getPrefBoolean(R.string.pref_ice_enable_key, false);
mLc.setStunServer(lStun);
- mLc.setFirewallPolicy((lStun!=null && lStun.length()>0) ? FirewallPolicy.UseStun : FirewallPolicy.NoFirewall);
+ if (lStun!=null && lStun.length()>0) {
+ mLc.setFirewallPolicy(useICE ? FirewallPolicy.UseIce : FirewallPolicy.UseStun);
+ } else {
+ mLc.setFirewallPolicy(FirewallPolicy.NoFirewall);
+ }
//accounts
try {