diff --git a/src/common/zeroconf/client_zeroconf.py b/src/common/zeroconf/client_zeroconf.py
index 779d0ed57f6708ea59c1aa41826d193239c5de57..8f16f2cbcbe055489dc4c9b56e49728b34bb44a7 100644
--- a/src/common/zeroconf/client_zeroconf.py
+++ b/src/common/zeroconf/client_zeroconf.py
@@ -517,8 +517,7 @@ class ClientZeroconf:
 	def zeroconf_init(self, show, msg):
 		self.zeroconf = zeroconf.Zeroconf(self.caller._on_new_service,
 			self.caller._on_remove_service, self.caller._on_name_conflictCB, 
-			self.caller._on_disconnected, self.caller.username, self.caller.host, 
-			self.port)
+			self.caller._on_disconnected, self.caller._on_error, self.caller.username, self.caller.host, self.port)
 		self.zeroconf.txt['msg'] = msg
 		self.zeroconf.txt['status'] = show
 		self.zeroconf.txt['1st'] = self.caller.first
diff --git a/src/common/zeroconf/connection_zeroconf.py b/src/common/zeroconf/connection_zeroconf.py
index 3e4a260ce7ea69e12f62ed81a6271c25a945e03a..5815798e18ea2d1d75b9b3c71639e9793e365ab0 100644
--- a/src/common/zeroconf/connection_zeroconf.py
+++ b/src/common/zeroconf/connection_zeroconf.py
@@ -90,11 +90,6 @@ class ConnectionZeroconf(ConnectionHandlersZeroconf):
 		self.muc_jid = {} # jid of muc server for each transport type
 		self.vcard_supported = False
 
-	def _on_name_conflictCB(self, alt_name):
-		self.disconnect()
-		self.dispatch('STATUS', 'offline')
-		self.dispatch('ZC_NAME_CONFLICT', alt_name)
-
 	def get_config_values_or_default(self):
 		''' get name, host, port from config, or 
 		create zeroconf account with default values'''
@@ -206,6 +201,14 @@ class ConnectionZeroconf(ConnectionHandlersZeroconf):
 		self.status = 'offline'
 		self.disconnect()
 
+	def _on_name_conflictCB(self, alt_name):
+		self.disconnect()
+		self.dispatch('STATUS', 'offline')
+		self.dispatch('ZC_NAME_CONFLICT', alt_name)
+
+	def _on_error(self, message):
+		self.dispatch('ERROR', (_('Avahi error'), _("%s\nLink-local messaging might not work properly.") % message))
+	
 	def connect(self, show = 'online', msg = ''):
 		self.get_config_values_or_default()
 		if not self.connection:
diff --git a/src/common/zeroconf/zeroconf.py b/src/common/zeroconf/zeroconf.py
index b18fdb28ca869bef3432f88223f5feee20e68b3e..f8c4da099fa84340d2957a36378f879f42423fb6 100755
--- a/src/common/zeroconf/zeroconf.py
+++ b/src/common/zeroconf/zeroconf.py
@@ -34,7 +34,7 @@ C_ADDRESS, C_PORT, C_BARE_NAME, C_TXT = range(9)
 
 class Zeroconf:
 	def __init__(self, new_serviceCB, remove_serviceCB, name_conflictCB, 
-		disconnected_CB, name, host, port):
+		disconnected_CB, error_CB, name, host, port):
 		self.server = None
 		self.domain = None   # specific domain to browse
 		self.stype = '_presence._tcp'	
@@ -49,6 +49,7 @@ class Zeroconf:
 		self.remove_serviceCB = remove_serviceCB
 		self.name_conflictCB = name_conflictCB
 		self.disconnected_CB = disconnected_CB
+		self.error_CB = error_CB
 		
 		self.service_browser = None
 		self.domain_browser = None
@@ -166,9 +167,12 @@ class Zeroconf:
 
 	def service_add_fail_callback(self, err):
 		gajim.log.debug('Error while adding service. %s' % str(err))
-		alternative_name = self.server.GetAlternativeServiceName(self.username)
+		if str(err) == 'Local name collision':
+			alternative_name = self.server.GetAlternativeServiceName(self.username)
+			self.name_conflictCB(alternative_name)
+		else:
+			self.error_CB(_('Error while adding service. %s') % str(err))
 		self.disconnect()
-		self.name_conflictCB(alternative_name)
 
 	def server_state_changed_callback(self, state, error):
 		print 'server.state %s' % state