diff -dur ekiga-3.3.0.orig/lib/engine/components/opal/sip-endpoint.cpp ekiga-3.3.0/lib/engine/components/opal/sip-endpoint.cpp
--- ekiga-3.3.0.orig/lib/engine/components/opal/sip-endpoint.cpp	2010-11-30 16:39:50.000000000 +0100
+++ ekiga-3.3.0/lib/engine/components/opal/sip-endpoint.cpp	2011-04-30 11:40:36.000000000 +0200
@@ -438,46 +438,58 @@
   return 1;
 }
 
-
 bool
-Opal::Sip::EndPoint::set_listen_port (unsigned port)
+Opal::Sip::EndPoint::add_listener (unsigned port, PString address)
 {
   unsigned udp_min, udp_max;
 
-  listen_iface.protocol = "udp";
-  listen_iface.voip_protocol = "sip";
-  listen_iface.id = "*";
-
+  PTRACE (3, "Opal::Sip::EndPoint\tadd_listener " << address << ":" << port);
   manager.get_udp_ports (udp_min, udp_max);
 
-  if (port > 0) {
+  std::stringstream str;
 
-    std::stringstream str;
-    RemoveListener (NULL);
+  str << "udp$" << address << ":" << port;
+  if (!StartListeners (PStringArray (str.str ()))) {
 
-    str << "udp$*:" << port;
-    if (!StartListeners (PStringArray (str.str ()))) {
+    port = udp_min;
+    str << "udp$" <<  address << ":" << port;
+    while (port <= udp_max) {
 
-      port = udp_min;
-      str << "udp$*:" << port;
-      while (port <= udp_max) {
+      if (StartListeners (PStringArray (str.str ()))) {
 
-        if (StartListeners (PStringArray (str.str ()))) {
+	listen_iface.port = port;
+	return true;
+      }
 
-          listen_iface.port = port;
-          return true;
-        }
+      port++;
+    }
+  }
+  return false;
+}
 
-        port++;
-      }
+
+bool
+Opal::Sip::EndPoint::set_listen_port (unsigned port)
+{
+  listen_iface.protocol = "udp";
+  listen_iface.voip_protocol = "sip";
+  listen_iface.id = "*";
+
+  bool result = false;
+  if (port > 0) {
+#if P_HAS_IPV6
+    if (PIPSocket::GetDefaultIpAddressFamily() == PF_INET6) {
+      result = add_listener(port, "0.0.0.0");
+      result |= add_listener(port, "[::]");
     }
     else {
-      listen_iface.port = port;
-      return true;
+      result = add_listener(port, "*");
     }
+#else
+    result = add_listener(port, "*");
+#endif
   }
-
-  return false;
+  return result;
 }
 
 
diff -dur ekiga-3.3.0.orig/lib/engine/components/opal/sip-endpoint.h ekiga-3.3.0/lib/engine/components/opal/sip-endpoint.h
--- ekiga-3.3.0.orig/lib/engine/components/opal/sip-endpoint.h	2010-11-04 18:43:15.000000000 +0100
+++ ekiga-3.3.0/lib/engine/components/opal/sip-endpoint.h	2011-04-29 21:34:39.000000000 +0200
@@ -204,6 +204,7 @@
 
       /* Callbacks */
     private:
+      bool add_listener (unsigned port, PString address);
       void on_dial (std::string uri);
       void on_message (std::string uri,
 		       std::string name);
