diff --git a/gajim/chat_control_base.py b/gajim/chat_control_base.py
index 55080a983f46e76b8f0ddc93997f5d286847294b..5e8928bf9b3771c1368278159ab988ca22071dbe 100644
--- a/gajim/chat_control_base.py
+++ b/gajim/chat_control_base.py
@@ -437,12 +437,14 @@ def remove_session(self, session):
     def _nec_our_status(self, obj):
         if self.account != obj.conn.name:
             return
+
+        if obj.show == 'connecting':
+            return
+
         if obj.show == 'offline':
             self.got_disconnected()
         else:
-            # Other code rejoins all GCs, so we don't do it here
-            if not self._type.is_groupchat:
-                self.got_connected()
+            self.got_connected()
         if self.parent_win:
             self.parent_win.redraw_tab(self)
 
diff --git a/gajim/common/connection.py b/gajim/common/connection.py
index a518e9181a58477ee0f6075e111f840f09225a7e..c5d9ecda7a69ba18898ede68457dabd77b335d06 100644
--- a/gajim/common/connection.py
+++ b/gajim/common/connection.py
@@ -86,31 +86,22 @@ class CommonConnection:
     def __init__(self, name):
         self.name = name
         self._modules = {}
-        # self.connected:
-        # 0=>offline,
-        # 1=>connection in progress,
-        # 2=>online
-        # 3=>free for chat
-        # ...
-        self.connected = 0
         self.connection = None # xmpppy ClientCommon instance
         self.is_zeroconf = False
         self.password = None
         self.server_resource = helpers.get_resource(self.name)
-        self.status = ''
-        self.old_show = ''
         self.priority = app.get_priority(name, 'offline')
         self.time_to_reconnect = None
         self._reconnect_timer_source = None
 
         self._state = ClientState.DISCONNECTED
+        self._status = 'offline'
+        self._status_message = ''
 
         # If handlers have been registered
         self.handlers_registered = False
 
         self.pep = {}
-        # Do we continue connection when we get roster (send presence,get vcard..)
-        self.continue_connect_info = None
 
         # Remember where we are in the register agent process
         self.agent_registrations = {}
@@ -134,8 +125,12 @@ def state(self):
         return self._state
 
     @property
-    def is_connected(self):
-        return self.connected > 1
+    def status(self):
+        return self._status
+
+    @property
+    def status_message(self):
+        return self._status_message
 
     def _register_new_handlers(self, con):
         for handler in modules.get_handlers(self):
@@ -174,9 +169,6 @@ def quit(self, kill_core):
         if kill_core and app.account_is_connected(self.name):
             self.disconnect(reconnect=False)
 
-    def get_status(self):
-        return app.SHOW_LIST[self.connected]
-
     def new_account(self, name, config, sync=False):
         """
         To be implemented by derived classes
@@ -189,12 +181,6 @@ def _on_new_account(self, con=None, con_type=None):
         """
         raise NotImplementedError
 
-    def send_agent_status(self, agent, ptype):
-        """
-        To be implemented by derived classes
-        """
-        raise NotImplementedError
-
     def _event_dispatcher(self, realm, event, data):
         if realm == '':
             if event == 'STANZA RECEIVED':
@@ -212,38 +198,44 @@ def change_status(self, show, msg, auto=False):
         if not msg:
             msg = ''
 
-        if show != 'offline' and self._state.is_disconnected:
-            # set old_show to requested 'show' in case we need to
-            # recconect before we auth to server
-            self.old_show = show
+        self._status = show
+        self._status_message = msg
+
+        if self._state.is_disconnected:
+            if show == 'offline':
+                return
+
             self.server_resource = helpers.get_resource(self.name)
             self.connect_and_init(show, msg)
             return
 
+        if self._state.is_connecting or self._state.is_reconnect_scheduled:
+            if show == 'offline':
+                self.disconnect(reconnect=False)
+            else:
+                log.warning('Can\'t change status while connecting')
+            return
+
+        # We are connected
         if show == 'offline':
-            if self.connection:
-                p = self.get_module('Presence').get_presence(
-                    typ='unavailable',
-                    status=msg,
-                    caps=False)
+            presence = self.get_module('Presence').get_presence(
+                typ='unavailable',
+                status=msg,
+                caps=False)
 
-                self.connection.send(p, now=True)
+            self.connection.send(presence, now=True)
             self.disconnect(reconnect=False)
             return
 
-        if show != 'offline' and self._state.is_connected:
-            if show not in ['offline', 'online', 'chat', 'away', 'xa', 'dnd']:
-                return -1
+        idle_time = None
+        if auto:
+            if app.is_installed('IDLE') and app.config.get('autoaway'):
+                idle_sec = idle.Monitor.get_idle_sec()
+                idle_time = time.strftime(
+                    '%Y-%m-%dT%H:%M:%SZ',
+                    time.gmtime(time.time() - idle_sec))
 
-            self.connected = app.SHOW_LIST.index(show)
-            idle_time = None
-            if auto:
-                if app.is_installed('IDLE') and app.config.get('autoaway'):
-                    idle_sec = idle.Monitor.get_idle_sec()
-                    idle_time = time.strftime('%Y-%m-%dT%H:%M:%SZ',
-                        time.gmtime(time.time() - idle_sec))
-
-            self._update_status(show, msg, idle_time=idle_time)
+        self._update_status(show, msg, idle_time=idle_time)
 
 
 class Connection(CommonConnection, ConnectionHandlers):
@@ -312,20 +304,15 @@ def get_own_jid(self, warn=False):
         return nbxmpp.JID(app.get_jid_from_account(self.name))
 
     def reconnect(self):
-        # Do not try to reco while we are already trying
+        if self._state not in (ClientState.DISCONNECTED,
+                               ClientState.RECONNECT_SCHEDULED):
+            # Do not try to reco while we are already trying
+            return
+
         self.time_to_reconnect = None
-        if not self._state.is_connected: # connection failed
-            log.info('Reconnect')
-            self.connected = 1
-            app.nec.push_incoming_event(OurShowEvent(None, conn=self,
-                show='connecting'))
-            self.retrycount += 1
-            self.connect_and_init(self.old_show, self.status)
-        else:
-            log.info('Reconnect successfull')
-            # reconnect succeeded
-            self.time_to_reconnect = None
-            self.retrycount = 0
+        log.info('Reconnect')
+        self.retrycount += 1
+        self.connect_and_init()
 
     def disconnect(self, reconnect=True, immediately=False):
         self.get_module('Ping').remove_timeout()
@@ -346,16 +333,6 @@ def disconnect(self, reconnect=True, immediately=False):
         else:
             self.connection.start_disconnect()
 
-    def set_oldst(self): # Set old state
-        if self.old_show:
-            self.connected = app.SHOW_LIST.index(self.old_show)
-            app.nec.push_incoming_event(OurShowEvent(
-                None, conn=self, show=self.old_show))
-        else: # we default to online
-            self.connected = 2
-            app.nec.push_incoming_event(OurShowEvent(
-                None, conn=self, show=app.SHOW_LIST[self.connected]))
-
     def _on_disconnect(self, reconnect=True):
         # Clear disconnect handlers
         self.connection.disconnect_handlers = []
@@ -363,11 +340,6 @@ def _on_disconnect(self, reconnect=True):
         log.info('Disconnect %s, reconnect: %s', self.name, reconnect)
 
         if reconnect and not self.removing_account:
-            if app.account_is_connected(self.name):
-                # we cannot change our status to offline or connecting
-                # after we auth to server
-                self.old_show = app.SHOW_LIST[self.connected]
-
             if not self._sm_resume_data:
                 self._sm_resume_data = self.connection.get_resume_data()
             self._disconnect()
@@ -383,7 +355,6 @@ def _on_disconnect(self, reconnect=True):
     def _disconnect(self):
         log.info('Set state disconnected')
         self.get_module('Ping').remove_timeout()
-        self.connected = 0
         self._set_state(ClientState.DISCONNECTED)
         self.disable_reconnect_timer()
 
@@ -399,14 +370,14 @@ def _disconnect(self):
                                                  account=self.name))
 
     def _set_reconnect_timer(self):
-        self.connected = -1
-        app.nec.push_incoming_event(OurShowEvent(
-            None, conn=self, show='error'))
+        self._set_state(ClientState.RECONNECT_SCHEDULED)
+        app.nec.push_incoming_event(
+            OurShowEvent(None, conn=self, show='offline'))
         if app.status_before_autoaway[self.name]:
             # We were auto away. So go back online
-            self.status = app.status_before_autoaway[self.name]
+            self._status_message = app.status_before_autoaway[self.name]
             app.status_before_autoaway[self.name] = ''
-            self.old_show = 'online'
+            self._status = 'online'
         # this check has moved from reconnect method
         # do exponential backoff until less than 5 minutes
         if self.retrycount < 2 or self.last_time_to_reconnect is None:
@@ -613,8 +584,9 @@ def connect(self, data=None):
                     use_custom = False
 
         # create connection if it doesn't already exist
-        self.connected = 1
         self._set_state(ClientState.CONNECTING)
+        app.nec.push_incoming_event(
+            OurShowEvent(None, conn=self, show='connecting'))
 
         h = hostname
         p = 5222
@@ -703,6 +675,7 @@ def _on_resolve_txt(self, host, result_array):
     def _connect_to_next_host(self, retry=False):
         log.debug('Connection to next host')
         if not self._hosts:
+            self._set_state(ClientState.DISCONNECTED)
             if not retry and self.retrycount == 0:
                 log.debug("Out of hosts, giving up connecting to %s", self.name)
                 self.time_to_reconnect = None
@@ -822,30 +795,30 @@ def log_hosttype_info(self, port):
     def get_connection_info(self):
         return self._current_host, self._proxy
 
-    def _connect_failure(self, con_type=None):
-        if not con_type:
-            # we are not retrying, and not conecting
-            if not self.retrycount and not self._state.is_disconnected:
-                self._disconnect()
-                if self._proxy:
-                    pritxt = _('Could not connect to "%(host)s" via proxy "%(proxy)s"') %\
-                        {'host': self._hostname, 'proxy': self._proxy['host']}
-                else:
-                    pritxt = _('Could not connect to "%(host)s"') % {'host': \
-                        self._hostname}
-                sectxt = _('Check your connection or try again later.')
-                if self.streamError:
-                    # show error dialog
-                    key = nbxmpp.NS_XMPP_STREAMS + ' ' + self.streamError
-                    if key in nbxmpp.ERRORS:
-                        sectxt2 = _('Server replied: %s') % nbxmpp.ERRORS[key][2]
-                        app.nec.push_incoming_event(InformationEvent(None,
-                            conn=self, level='error', pri_txt=pritxt,
-                            sec_txt='%s\n%s' % (sectxt2, sectxt)))
-                        return
-                # show popup
-                app.nec.push_incoming_event(ConnectionLostEvent(None,
-                    conn=self, title=pritxt, msg=sectxt))
+    def _connect_failure(self):
+        # we are not retrying, and not conecting
+        if not self.retrycount and not self._state.is_disconnected:
+            self._disconnect()
+
+        if self._proxy:
+            pritxt = _('Could not connect to "%(host)s" via proxy "%(proxy)s"') %\
+                {'host': self._hostname, 'proxy': self._proxy['host']}
+        else:
+            pritxt = _('Could not connect to "%(host)s"') % {'host': \
+                self._hostname}
+        sectxt = _('Check your connection or try again later.')
+        if self.streamError:
+            # show error dialog
+            key = nbxmpp.NS_XMPP_STREAMS + ' ' + self.streamError
+            if key in nbxmpp.ERRORS:
+                sectxt2 = _('Server replied: %s') % nbxmpp.ERRORS[key][2]
+                app.nec.push_incoming_event(InformationEvent(None,
+                    conn=self, level='error', pri_txt=pritxt,
+                    sec_txt='%s\n%s' % (sectxt2, sectxt)))
+                return
+        # show popup
+        app.nec.push_incoming_event(ConnectionLostEvent(None,
+            conn=self, title=pritxt, msg=sectxt))
 
     def on_proxy_failure(self, reason):
         log.error('Connection to proxy failed: %s', reason)
@@ -1094,10 +1067,11 @@ def _on_resume_successful(self):
         # Connection was successful, reset sm resume data
         self._sm_resume_data = {}
 
-        self.connected = 2
         self._set_state(ClientState.CONNECTED)
         self.retrycount = 0
-        self.set_oldst()
+
+        app.nec.push_incoming_event(
+            OurShowEvent(None, conn=self, show=self._status))
         self._set_send_timeouts()
 
     def _on_connection_active(self):
@@ -1120,7 +1094,6 @@ def _on_connection_active(self):
                              old_jid=old_jid,
                              new_jid=new_jid))
 
-        self.connected = 2
         self._set_state(ClientState.CONNECTED)
         self.retrycount = 0
         self._discover_server()
@@ -1150,9 +1123,8 @@ def connect_and_auth(self):
         self.on_connect_failure = self._connect_failure
         self.connect()
 
-    def connect_and_init(self, show, msg):
+    def connect_and_init(self, *args):
         self.disable_reconnect_timer()
-        self.continue_connect_info = [show, msg]
         self.connect_and_auth()
 
     def _discover_server(self):
@@ -1199,27 +1171,21 @@ def discover_ft_proxies(self):
                 app.proxy65_manager.resolve(proxy, self.connection, our_jid,
                     testit=testit)
 
-    def send_first_presence(self, signed=''):
-        if not self._state.is_connected or not self.continue_connect_info:
-            return
-        show = self.continue_connect_info[0]
-        msg = self.continue_connect_info[1]
-        self.connected = app.SHOW_LIST.index(show)
-        sshow = helpers.get_xmpp_show(show)
-        # send our presence
-        if show not in ['offline', 'online', 'chat', 'away', 'xa', 'dnd']:
+    def send_first_presence(self):
+        if not self._state.is_connected:
             return
-        priority = app.get_priority(self.name, sshow)
+
+        priority = app.get_priority(self.name, self._status)
 
         self.get_module('Presence').send_presence(
             priority=priority,
-            show=sshow,
-            status=msg)
+            show=self._status,
+            status=self._status_message)
 
         if self.connection:
             self.priority = priority
-        app.nec.push_incoming_event(OurShowEvent(None, conn=self,
-            show=show))
+        app.nec.push_incoming_event(
+            OurShowEvent(None, conn=self, show=self._status))
 
         if not self.avatar_conversion:
             # ask our VCard
@@ -1233,22 +1199,20 @@ def send_first_presence(self, signed=''):
         # Inform GUI we just signed in
         app.nec.push_incoming_event(NetworkEvent('signed-in', conn=self))
         modules.send_stored_publish(self.name)
-        self.continue_connect_info = None
 
     def _update_status(self, show, msg, idle_time=None):
-        xmpp_show = helpers.get_xmpp_show(show)
-        priority = app.get_priority(self.name, xmpp_show)
+        priority = app.get_priority(self.name, show)
 
         self.get_module('Presence').send_presence(
             priority=priority,
-            show=xmpp_show,
+            show=show,
             status=msg,
             idle_time=idle_time)
 
         if self.connection:
             self.priority = priority
-            app.nec.push_incoming_event(OurShowEvent(None, conn=self,
-                show=show))
+            app.nec.push_incoming_event(
+                OurShowEvent(None, conn=self, show=show))
 
     def send_stanza(self, stanza):
         """
@@ -1348,17 +1312,6 @@ def _on_new_account(self, con=None, con_type=None):
         self.connection = con
         nbxmpp.features.getRegInfo(con, self._hostname)
 
-    def send_agent_status(self, agent, ptype):
-        if not self._state.is_connected:
-            return
-        show = helpers.get_xmpp_show(app.SHOW_LIST[self.connected])
-
-        self.get_module('Presence').send_presence(
-            agent,
-            ptype,
-            show=show,
-            caps=ptype != 'unavailable')
-
     def unregister_account(self, callback):
         if not self._state.is_connected:
             return
@@ -1370,8 +1323,6 @@ def _reconnect_alarm(self):
         if not app.config.get_per('accounts', self.name, 'active'):
             # Account may have been disabled
             return
-        if self.time_to_reconnect:
-            if not self._state.is_connected:
-                self.reconnect()
-            else:
-                self.time_to_reconnect = None
+
+        if self._state.is_reconnect_scheduled:
+            self.reconnect()
diff --git a/gajim/common/connection_handlers_events.py b/gajim/common/connection_handlers_events.py
index 23e9cfb71689e7ef6617ce38713982c07b7c43b0..00750a95673dc98e7d558f52d6c7a4eb5030ce7f 100644
--- a/gajim/common/connection_handlers_events.py
+++ b/gajim/common/connection_handlers_events.py
@@ -53,6 +53,9 @@ class PresenceReceivedEvent(nec.NetworkIncomingEvent):
 class OurShowEvent(nec.NetworkIncomingEvent):
     name = 'our-show'
 
+    def init(self):
+        self.reconnect = False
+
 class MessageSentEvent(nec.NetworkIncomingEvent):
     name = 'message-sent'
 
@@ -286,7 +289,7 @@ def handle_incoming_msg_event(self, msg_obj):
                 if app.config.get('autopopupaway'):
                     # always show notification
                     self.do_popup = True
-                if app.connections[self.conn.name].connected in (2, 3):
+                if app.connections[self.conn.name].status in ('online', 'chat'):
                     # we're online or chat
                     self.do_popup = True
 
@@ -352,7 +355,7 @@ def handle_incoming_gc_msg_event(self, msg_obj):
                 # always show notification
                 self.do_popup = True
 
-            elif app.connections[self.conn.name].connected in (2, 3):
+            elif app.connections[self.conn.name].status in ('online', 'chat'):
                 # we're online or chat
                 self.do_popup = True
 
diff --git a/gajim/common/const.py b/gajim/common/const.py
index 19f216669b34d39c4b56d7ef6626ae7b89875e54..a13a49fe8d187cc78bf31afe00b496e3fc9ad74b 100644
--- a/gajim/common/const.py
+++ b/gajim/common/const.py
@@ -217,13 +217,18 @@ def __str__(self):
 
 class ClientState(IntEnum):
     DISCONNECTED = 0
-    CONNECTING = 1
-    CONNECTED = 2
+    RECONNECT_SCHEDULED = 1
+    CONNECTING = 2
+    CONNECTED = 3
 
     @property
     def is_disconnected(self):
         return self == ClientState.DISCONNECTED
 
+    @property
+    def is_reconnect_scheduled(self):
+        return self == ClientState.RECONNECT_SCHEDULED
+
     @property
     def is_connecting(self):
         return self == ClientState.CONNECTING
diff --git a/gajim/common/dbus/logind.py b/gajim/common/dbus/logind.py
index ab787841194247dfcf5183ffacd412d6504987a5..e866127e8ef7b06863829aff082b3f8a3e0f0c16 100644
--- a/gajim/common/dbus/logind.py
+++ b/gajim/common/dbus/logind.py
@@ -68,11 +68,11 @@ def _on_prepare_for_sleep(self, connection, _sender_name, _object_path,
 
             for name, conn in app.connections.items():
                 if app.account_is_connected(name):
-                    conn.old_show = app.SHOW_LIST[conn.connected]
-                    st = conn.status
+                    st = conn.status_message
                     conn.change_status('offline',
                                        _('Machine is going to sleep'))
-                    conn.status = st
+                    # TODO: Make this nicer
+                    conn._status_message = st  # pylint: disable=protected-access
                     conn.time_to_reconnect = 5
 
             self._disinhibit_sleep()
diff --git a/gajim/common/helpers.py b/gajim/common/helpers.py
index 062df05c11d5227fcfc48b079515cb689514d8d9..114c19d8927383df6d3e6ca6cacc64d117dc8707 100644
--- a/gajim/common/helpers.py
+++ b/gajim/common/helpers.py
@@ -682,28 +682,42 @@ def play_sound_file(path_to_soundfile):
         except GLib.Error as error:
             log.error('Could not play sound: %s', error.message)
 
+def get_connection_status(account):
+    con = app.connections[account]
+    if con.state.is_reconnect_scheduled:
+        return 'error'
+
+    if con.state.is_connecting:
+        return 'connecting'
+
+    if con.state.is_disconnected:
+        return 'offline'
+    return con.status
+
 def get_global_show():
     maxi = 0
     for account in app.connections:
         if not app.config.get_per('accounts', account,
-        'sync_with_global_status'):
+                                  'sync_with_global_status'):
             continue
-        connected = app.connections[account].connected
-        if connected > maxi:
-            maxi = connected
+        status = get_connection_status(account)
+        index = app.SHOW_LIST.index(status)
+        if index > maxi:
+            maxi = index
     return app.SHOW_LIST[maxi]
 
-def get_global_status():
+def get_global_status_message():
     maxi = 0
     for account in app.connections:
         if not app.config.get_per('accounts', account,
-        'sync_with_global_status'):
+                                  'sync_with_global_status'):
             continue
-        connected = app.connections[account].connected
-        if connected > maxi:
-            maxi = connected
-            status = app.connections[account].status
-    return status
+        status = app.connections[account].status
+        index = app.SHOW_LIST.index(status)
+        if index > maxi:
+            maxi = index
+            status_message = app.connections[account].status_message
+    return status_message
 
 
 def statuses_unified():
@@ -713,11 +727,11 @@ def statuses_unified():
     reference = None
     for account in app.connections:
         if not app.config.get_per('accounts', account,
-        'sync_with_global_status'):
+                                  'sync_with_global_status'):
             continue
         if reference is None:
-            reference = app.connections[account].connected
-        elif reference != app.connections[account].connected:
+            reference = app.connections[account].status
+        elif reference != app.connections[account].status:
             return False
     return True
 
@@ -818,7 +832,7 @@ def allow_showing_notification(account, type_='notify_on_new_message',
         return False
     if app.config.get('autopopupaway'): # always show notification
         return True
-    if app.connections[account].connected in (2, 3): # we're online or chat
+    if app.connections[account].status in ('online', 'chat'): # we're online or chat
         return True
     return False
 
@@ -829,14 +843,14 @@ def allow_popup_window(account):
     autopopup = app.config.get('autopopup')
     autopopupaway = app.config.get('autopopupaway')
     if autopopup and (autopopupaway or \
-    app.connections[account].connected in (2, 3)): # we're online or chat
+    app.connections[account].status in ('online', 'chat')): # we're online or chat
         return True
     return False
 
 def allow_sound_notification(account, sound_event):
-    if app.config.get('sounddnd') or app.connections[account].connected != \
-    app.SHOW_LIST.index('dnd') and app.config.get_per('soundevents',
-    sound_event, 'enabled'):
+    if (app.config.get('sounddnd') or
+            app.connections[account].status != 'dnd' and
+            app.config.get_per('soundevents', sound_event, 'enabled')):
         return True
     return False
 
@@ -984,11 +998,8 @@ def get_accounts_info():
     accounts = []
     accounts_list = sorted(app.contacts.get_accounts())
     for account in accounts_list:
-        status_idx = app.connections[account].connected
-        # uncomment the following to hide offline accounts
-        # if status_idx == 0: continue
-        status = app.SHOW_LIST[status_idx]
-        message = app.connections[account].status
+        status = app.connections[account].status
+        message = app.connections[account].status_message
         single_line = get_uf_show(status)
         if message is None:
             message = ''
@@ -1007,8 +1018,7 @@ def get_accounts_info():
 def get_current_show(account):
     if account not in app.connections:
         return 'offline'
-    status = app.connections[account].connected
-    return app.SHOW_LIST[status]
+    return app.connections[account].status
 
 def update_optional_features(account=None):
     if account is not None:
@@ -1051,9 +1061,9 @@ def update_optional_features(account=None):
         if not app.account_is_connected(account_):
             return
 
-        connected = app.connections[account_].connected
+        status = app.connections[account_].status
         app.connections[account_].change_status(
-            app.SHOW_LIST[connected], app.connections[account_].status)
+            status, app.connections[account_].status_message)
 
 def jid_is_blocked(account, jid):
     con = app.connections[account]
diff --git a/gajim/common/modules/muc.py b/gajim/common/modules/muc.py
index 3cf9af5b19cce87f9812bc7e3a084619c9847f45..e7d00a6a89288c7229be12bee6ffc8eae75c6e4f 100644
--- a/gajim/common/modules/muc.py
+++ b/gajim/common/modules/muc.py
@@ -179,12 +179,10 @@ def _on_disco_result(self, result):
         self._join(muc_data)
 
     def _join(self, muc_data):
-        show = helpers.get_xmpp_show(app.SHOW_LIST[self._con.connected])
-
         presence = self._con.get_module('Presence').get_presence(
             muc_data.occupant_jid,
-            show=show,
-            status=self._con.status)
+            show=self._con.status,
+            status=self._con.status_message)
 
         muc_x = presence.setTag(nbxmpp.NS_MUC + ' x')
         self._add_history_query(muc_x, str(muc_data.jid))
@@ -204,12 +202,10 @@ def _rejoin(self, room_jid):
         return True
 
     def _create(self, muc_data):
-        show = helpers.get_xmpp_show(app.SHOW_LIST[self._con.connected])
-
         presence = self._con.get_module('Presence').get_presence(
             muc_data.occupant_jid,
-            show=show,
-            status=self._con.status)
+            show=self._con.status,
+            status=self._con.status_message)
 
         presence.setTag(nbxmpp.NS_MUC + ' x')
 
@@ -313,14 +309,13 @@ def update_presence(self, auto=False):
             self._send_presence(muc_data, auto)
 
     def _send_presence(self, muc_data, auto):
-        show = app.SHOW_LIST[self._con.connected]
-        if show == 'offline':
+        if self._con.status == 'offline':
             # FIXME: Check if this
             return
 
-        status = self._con.status
+        message = self._con.status_message
 
-        xmpp_show = helpers.get_xmpp_show(show)
+        xmpp_show = helpers.get_xmpp_show(self._con.status)
 
         idle_time = None
         if auto and app.is_installed('IDLE') and app.config.get('autoaway'):
@@ -328,22 +323,22 @@ def _send_presence(self, muc_data, auto):
             idle_time = time.strftime('%Y-%m-%dT%H:%M:%SZ',
                                       time.gmtime(time.time() - idle_sec))
 
-        self._log.info('Send presence: %s, show: %s, status: %s, idle_time: %s',
-                       muc_data.occupant_jid, xmpp_show, status, idle_time)
+        self._log.info('Send presence: %s, show: %s, '
+                       'message: %s, idle_time: %s',
+                       muc_data.occupant_jid, xmpp_show, message, idle_time)
 
         self._con.get_module('Presence').send_presence(
             muc_data.occupant_jid,
             show=xmpp_show,
-            status=status,
+            status=self._con.status,
             caps=True,
             idle_time=idle_time)
 
     def change_nick(self, room_jid, new_nick):
-        show = helpers.get_xmpp_show(app.SHOW_LIST[self._con.connected])
         self._con.get_module('Presence').send_presence(
             '%s/%s' % (room_jid, new_nick),
-            show=show,
-            status=self._con.status)
+            show=self._con.status,
+            status=self._con.status_message)
 
     def _add_history_query(self, muc_x, room_jid):
         disco_info = app.logger.get_last_disco_info(room_jid)
diff --git a/gajim/common/modules/privacylists.py b/gajim/common/modules/privacylists.py
index 4c5b4b3733f3edc93145db27054a700c47d6428f..cb4f9660ca2b39998bf46f98e97b5f256877c010 100644
--- a/gajim/common/modules/privacylists.py
+++ b/gajim/common/modules/privacylists.py
@@ -343,13 +343,13 @@ def unblock_contacts(self, contact_list):
         else:
             self.set_privacy_list(self.default_list, new_blocked_list)
         if not app.interface.roster.regroup:
-            show = app.SHOW_LIST[self._con.connected]
+            show = self._con.status
         else:   # accounts merged
             show = helpers.get_global_show()
 
         for contact in contact_list:
             self._con.get_module('Presence').send_presence(
-                contact.jid, show=show, status=self._con.status)
+                contact.jid, show=show, status=self._con.status_message)
             self._presence_probe(contact.jid)
 
     def block_group(self, group, contact_list, _message):
@@ -404,13 +404,13 @@ def unblock_group(self, group, contact_list):
         else:
             self.set_privacy_list(self.default_list, new_blocked_list)
         if not app.interface.roster.regroup:
-            show = app.SHOW_LIST[self._con.connected]
+            show = self._con.status
         else:   # accounts merged
             show = helpers.get_global_show()
 
         for contact in contact_list:
             self._con.get_module('Presence').send_presence(
-                contact.jid, show=show, status=self._con.status)
+                contact.jid, show=show, status=self._con.status_message)
 
     def _presence_probe(self, jid):
         self._log.info('Presence probe: %s', jid)
diff --git a/gajim/common/modules/vcard_avatars.py b/gajim/common/modules/vcard_avatars.py
index 5421b133bad2fca95015b97884f5f85b1a39854b..4208a42b8e0539a867b2ebb0ca84e1cdff8f7088 100644
--- a/gajim/common/modules/vcard_avatars.py
+++ b/gajim/common/modules/vcard_avatars.py
@@ -21,7 +21,6 @@
 from nbxmpp.const import AvatarState
 
 from gajim.common import app
-from gajim.common import helpers
 from gajim.common import configpaths
 from gajim.common.const import RequestAvatar
 from gajim.common.modules.base import BaseModule
@@ -221,12 +220,10 @@ def send_avatar_presence(self, force=False, after_publish=False):
                 self._log.debug('Avatar already advertised')
                 return
 
-        show = helpers.get_xmpp_show(app.SHOW_LIST[self._con.connected])
-
         self._con.get_module('Presence').send_presence(
             priority=self._con.priority,
-            show=show,
-            status=self._con.status)
+            show=self._con.status,
+            status=self._con.status_message)
 
         self.avatar_advertised = True
 
diff --git a/gajim/common/zeroconf/connection_handlers_zeroconf.py b/gajim/common/zeroconf/connection_handlers_zeroconf.py
index 19297fc0c7f132bec03a26da137586df960077aa..cb12f395d09081073cd1edb071d76869cc74bfc4 100644
--- a/gajim/common/zeroconf/connection_handlers_zeroconf.py
+++ b/gajim/common/zeroconf/connection_handlers_zeroconf.py
@@ -35,8 +35,6 @@
 
 log = logging.getLogger('gajim.c.z.connection_handlers_zeroconf')
 
-STATUS_LIST = ['offline', 'connecting', 'online', 'chat', 'away', 'xa', 'dnd']
-
 
 class ConnectionHandlersZeroconf(connection_handlers.ConnectionHandlersBase):
     def __init__(self):
diff --git a/gajim/common/zeroconf/connection_zeroconf.py b/gajim/common/zeroconf/connection_zeroconf.py
index 8a017bc17dcfb49fc2a3c5034885c84efd9515fd..b94c6dc44ed8275231bd89521357c6440017dec3 100644
--- a/gajim/common/zeroconf/connection_zeroconf.py
+++ b/gajim/common/zeroconf/connection_zeroconf.py
@@ -44,7 +44,6 @@
 from gajim.common.zeroconf import client_zeroconf
 from gajim.common.zeroconf import zeroconf
 from gajim.common.zeroconf.connection_handlers_zeroconf import ConnectionHandlersZeroconf
-from gajim.common.zeroconf.connection_handlers_zeroconf import STATUS_LIST
 from gajim.common.connection_handlers_events import OurShowEvent
 from gajim.common.connection_handlers_events import InformationEvent
 from gajim.common.connection_handlers_events import ConnectionLostEvent
@@ -111,7 +110,7 @@ def reconnect(self):
         log.debug('reconnect')
 
         self.disconnect()
-        self.change_status(self.old_show, self.status)
+        self.change_status(self._status, self._status_message)
 
     def disable_account(self):
         self.disconnect()
@@ -246,7 +245,7 @@ def connect(self, show='online', msg=''):
             if not zeroconf.test_zeroconf():
                 app.nec.push_incoming_event(OurShowEvent(None, conn=self,
                     show='offline'))
-                self.status = 'offline'
+                self._status = 'offline'
                 app.nec.push_incoming_event(ConnectionLostEvent(None,
                     conn=self, title=_('Could not connect to "%s"') % self.name,
                     msg=_('Please check if Avahi or Bonjour is installed.')))
@@ -256,7 +255,7 @@ def connect(self, show='online', msg=''):
             if not result:
                 app.nec.push_incoming_event(OurShowEvent(None, conn=self,
                     show='offline'))
-                self.status = 'offline'
+                self._status = 'offline'
                 if result is False:
                     app.nec.push_incoming_event(ConnectionLostEvent(None,
                         conn=self, title=_('Could not start local service'),
@@ -282,7 +281,7 @@ def connect(self, show='online', msg=''):
                 avatar_sha=None))
             self._on_presence(jid)
 
-        self.connected = STATUS_LIST.index(show)
+        self._status = show
 
         # refresh all contacts data every five seconds
         self.call_resolve_timeout = True
@@ -292,18 +291,10 @@ def connect(self, show='online', msg=''):
     def disconnect(self, reconnect=True, immediately=True):
         log.info('Start disconnecting zeroconf')
         if reconnect:
-            if app.account_is_connected(self.name):
-                # we cannot change our status to offline or connecting
-                # after we auth to server
-                self.old_show = STATUS_LIST[self.connected]
-
-            # random number to show we wait network manager to send
-            # us a reconenct
             self.time_to_reconnect = 5
         else:
             self.time_to_reconnect = None
 
-        self.connected = 0
         self._set_state(ClientState.DISCONNECTED)
         if self.connection:
             self.connection.disconnect()
@@ -314,7 +305,6 @@ def disconnect(self, reconnect=True, immediately=True):
             show='offline'))
 
     def _on_disconnect(self):
-        self.connected = 0
         self._set_state(ClientState.DISCONNECTED)
         app.nec.push_incoming_event(OurShowEvent(None, conn=self,
             show='offline'))
@@ -340,7 +330,7 @@ def update_details(self):
                 self.port = port
                 last_msg = self.connection.last_msg
                 self.disconnect()
-                if not self.connect(self.status, last_msg):
+                if not self.connect(self._status, last_msg):
                     return
                 self.connection.announce()
             else:
@@ -362,11 +352,10 @@ def connect_and_init(self, show, msg):
                 show=show))
         else:
             # show notification that avahi or system bus is down
-            self.connected = 0
             self._set_state(ClientState.DISCONNECTED)
             app.nec.push_incoming_event(OurShowEvent(None, conn=self,
                 show='offline'))
-            self.status = 'offline'
+            self._status = 'offline'
             app.nec.push_incoming_event(ConnectionLostEvent(None, conn=self,
                 title=_('Could not change status of account "%s"') % self.name,
                 msg=_('Please check if avahi-daemon is running.')))
@@ -379,7 +368,7 @@ def _update_status(self, show, msg, idle_time=None):
             # show notification that avahi or system bus is down
             app.nec.push_incoming_event(OurShowEvent(None, conn=self,
                 show='offline'))
-            self.status = 'offline'
+            self._status = 'offline'
             app.nec.push_incoming_event(ConnectionLostEvent(None, conn=self,
                 title=_('Could not change status of account "%s"') % self.name,
                 msg=_('Please check if avahi-daemon is running.')))
diff --git a/gajim/groupchat_control.py b/gajim/groupchat_control.py
index 31ebc1d1d290c4301ae65793fd780386992d4ac5..a9ec23aea900fbcbeea4c1808a22a665ba724c09 100644
--- a/gajim/groupchat_control.py
+++ b/gajim/groupchat_control.py
@@ -1127,6 +1127,17 @@ def _on_decrypted_message_received(self, event):
                                     msg_log_id=event.msg_log_id,
                                     displaymarking=event.displaymarking)
 
+    def _nec_our_status(self, event):
+        if self.account != event.conn.name:
+            return
+
+        if (event.show == 'offline' and
+                not event.conn.state.is_reconnect_scheduled):
+            self.got_disconnected()
+
+        if self.parent_win:
+            self.parent_win.redraw_tab(self)
+
     def _nec_ping(self, event):
         if self.contact.jid != event.contact.room_jid:
             return
diff --git a/gajim/gtk/accounts.py b/gajim/gtk/accounts.py
index bb2bffe61754a5c534c9efa51860f22dfda1fb37..0f42ee570ba23699d8a3c382eba00782e7f64d1c 100644
--- a/gajim/gtk/accounts.py
+++ b/gajim/gtk/accounts.py
@@ -122,8 +122,8 @@ def login(account, show_before, status_before):
                 account, show_before, status_before)
 
         def relog(account):
-            show_before = app.SHOW_LIST[app.connections[account].connected]
-            status_before = app.connections[account].status
+            show_before = app.connections[account].status
+            status_before = app.connections[account].status_message
             app.interface.roster.send_status(
                 account, 'offline', _('Be right back.'))
             GLib.timeout_add(500, login, account, show_before, status_before)
@@ -781,8 +781,8 @@ def on_destroy(self, *args):
         # Update priority
         if self.account not in app.connections:
             return
-        show = app.SHOW_LIST[app.connections[self.account].connected]
-        status = app.connections[self.account].status
+        show = app.connections[self.account].status
+        status = app.connections[self.account].status_message
         app.connections[self.account].change_status(show, status)
 
 
diff --git a/gajim/gtk/statusicon.py b/gajim/gtk/statusicon.py
index ad805db69f8adc7b9cf2f5780babd9c917eccafe..a44cd21eb42cfa748bbe78de26e5596f6cd98b0b 100644
--- a/gajim/gtk/statusicon.py
+++ b/gajim/gtk/statusicon.py
@@ -381,7 +381,7 @@ def on_response(message, pep_dict):
                                           acct,
                                           'sync_with_global_status'):
                     continue
-                show = app.SHOW_LIST[app.connections[acct].connected]
+                show = app.connections[acct].status
                 app.interface.roster.send_status(acct, show, message)
                 app.interface.roster.send_pep(acct, pep_dict)
         dlg = dialogs.ChangeStatusMessageDialog(on_response, status)
diff --git a/gajim/gtk/tooltips.py b/gajim/gtk/tooltips.py
index fd7789c559d86fd7057aa00799e8fe7c65ab1d2d..2ade3930bf1baa689894c7f803558ad55267cb25 100644
--- a/gajim/gtk/tooltips.py
+++ b/gajim/gtk/tooltips.py
@@ -325,8 +325,8 @@ def _populate_grid(self, contacts, account, typ):
                 jid=jid,
                 account=account,
                 name=account_name,
-                show=connection.get_status(),
-                status=connection.status,
+                show=connection.status,
+                status=connection.status_message,
                 resource=connection.get_own_jid().getResource(),
                 priority=connection.priority)
 
diff --git a/gajim/gui_interface.py b/gajim/gui_interface.py
index e26a627ba207a3e0a925e95875ba487bce779e4f..4fe3235b4b06c3842254a2e04096c4ea3be376d5 100644
--- a/gajim/gui_interface.py
+++ b/gajim/gui_interface.py
@@ -806,7 +806,7 @@ def popup_ft_result(self, account, jid, file_props):
 
         if (app.config.get('notify_on_file_complete') and
                 (app.config.get('autopopupaway') or
-                app.connections[account].connected in (2, 3))):
+                app.connections[account].status in ('online', 'chat'))):
             # We want to be notified and we are online/chat or we don't mind
             # to be bugged when away/na/busy
             app.notification.popup(
@@ -829,15 +829,14 @@ def handle_event_signed_in(self, obj):
         app.logger.insert_jid(obj.conn.get_own_jid().getStripped())
         account = obj.conn.name
         app.block_signed_in_notifications[account] = True
-        connected = obj.conn.connected
 
         pep_supported = obj.conn.get_module('PEP').supported
 
-        if not idle.Monitor.is_unknown() and connected in (2, 3):
+        if not idle.Monitor.is_unknown() and obj.conn.status in ('online', 'chat'):
             # we go online or free for chat, so we activate auto status
             app.sleeper_state[account] = 'online'
-        elif not ((idle.Monitor.is_away() and connected == 4) or \
-        (idle.Monitor.is_xa() and connected == 5)):
+        elif not ((idle.Monitor.is_away() and obj.conn.status == 'away') or \
+        (idle.Monitor.is_xa() and obj.conn.status == 'xa')):
             # If we are autoaway/xa and come back after a disconnection, do
             # nothing
             # Else disable autoaway
@@ -891,10 +890,8 @@ def handle_event_metacontacts(obj):
     def handle_event_zc_name_conflict(self, obj):
         def _on_ok(new_name):
             app.config.set_per('accounts', obj.conn.name, 'name', new_name)
-            show = obj.conn.old_show
-            status = obj.conn.status
             obj.conn.username = new_name
-            obj.conn.change_status(show, status)
+            obj.conn.change_status(obj.conn.status, obj.conn.status_message)
 
         def _on_cancel(*args):
             obj.conn.change_status('offline', '')
@@ -916,11 +913,11 @@ def handle_event_resource_conflict(self, obj):
         # First we go offline, but we don't overwrite status message
         account = obj.conn.name
         conn = obj.conn
-        self.roster.send_status(account, 'offline', conn.status)
+        self.roster.send_status(account, 'offline', conn.status_message)
 
         def _set_resource(new_resource):
             app.config.set_per('accounts', account, 'resource', new_resource)
-            self.roster.send_status(account, conn.old_show, conn.status)
+            self.roster.send_status(account, conn.status, conn.status_message)
 
         proposed_resource = conn.server_resource
         if proposed_resource.startswith('gajim.'):
@@ -1675,8 +1672,8 @@ def read_sleepy(self):
                     app.sleeper_state[account] = 'online'
                 if app.sleeper_state[account] == 'idle':
                     # we go to the previous state
-                    connected = app.connections[account].connected
-                    self.roster.send_status(account, app.SHOW_LIST[connected],
+                    status = app.connections[account].status
+                    self.roster.send_status(account, status,
                         app.status_before_autoaway[account])
                     app.status_before_autoaway[account] = ''
                     app.sleeper_state[account] = 'off'
@@ -1684,7 +1681,7 @@ def read_sleepy(self):
                 if app.sleeper_state[account] == 'online':
                     # we save out online status
                     app.status_before_autoaway[account] = \
-                        app.connections[account].status
+                        app.connections[account].status_message
                     # we go away (no auto status) [we pass True to auto param]
                     auto_message = app.config.get('autoaway_message')
                     if not auto_message:
@@ -1703,8 +1700,8 @@ def read_sleepy(self):
                     # we save out online status
                     app.status_before_autoaway[account] = \
                         app.connections[account].status
-                    connected = app.connections[account].connected
-                    self.roster.send_status(account, app.SHOW_LIST[connected],
+                    status = app.connections[account].status
+                    self.roster.send_status(account, status,
                         app.status_before_autoaway[account], auto=True)
                     app.sleeper_state[account] = 'idle'
             elif idle.Monitor.is_xa() and \
@@ -1837,7 +1834,7 @@ def autoconnect(self):
                         app.config.get_per('accounts', a, 'last_status_msg')))
                     continue
                 show = app.config.get_per('accounts', a, 'autoconnect_as')
-                if show not in app.SHOW_LIST:
+                if show not in ['online', 'chat', 'away', 'xa', 'dnd']:
                     continue
                 if show not in shows:
                     shows[show] = [a]
diff --git a/gajim/remote_control.py b/gajim/remote_control.py
index 656daea0032a5dd26d77266e437f6d01c1a311ce..73f8353068b2b0de19b37f671c8c335088f652ac 100644
--- a/gajim/remote_control.py
+++ b/gajim/remote_control.py
@@ -408,8 +408,7 @@ def get_status(self, account):
             # If user did not ask for account, returns the global status
             return helpers.get_global_show()
         # return show for the given account
-        index = app.connections[account].connected
-        return app.SHOW_LIST[index]
+        return app.connections[account].status
 
     def get_status_message(self, account):
         """
@@ -417,7 +416,7 @@ def get_status_message(self, account):
         """
         if not account:
             # If user did not ask for account, returns the global status
-            return str(helpers.get_global_status())
+            return str(helpers.get_global_status_message())
         # return show for the given account
         status = app.connections[account].status
         return status
@@ -638,7 +637,7 @@ def change_status(self, status, message, account):
             if not status:
                 if account not in app.connections:
                     return False
-                status = app.SHOW_LIST[app.connections[account].connected]
+                status = app.connections[account].status
             GLib.idle_add(app.interface.roster.send_status, account, status,
                           message)
         else:
@@ -652,7 +651,7 @@ def change_status(self, status, message, account):
                 else:
                     if acc not in app.connections:
                         continue
-                    status_ = app.SHOW_LIST[app.connections[acc].connected]
+                    status_ = app.connections[acc].status
                 GLib.idle_add(app.interface.roster.send_status, acc, status_,
                               message)
         return False
@@ -664,8 +663,8 @@ def set_priority(self, prio, account):
         """
         if account:
             app.config.set_per('accounts', account, 'priority', prio)
-            show = app.SHOW_LIST[app.connections[account].connected]
-            status = app.connections[account].status
+            show = app.connections[account].status
+            status = app.connections[account].status_message
             GLib.idle_add(app.connections[account].change_status, show, status)
         else:
             # account not specified, so change prio of all accounts
@@ -676,8 +675,8 @@ def set_priority(self, prio, account):
                                           'sync_with_global_status'):
                     continue
                 app.config.set_per('accounts', acc, 'priority', prio)
-                show = app.SHOW_LIST[app.connections[acc].connected]
-                status = app.connections[acc].status
+                show = app.connections[acc].status
+                status = app.connections[acc].status_message
                 GLib.idle_add(app.connections[acc].change_status, show, status)
 
     def show_next_pending_event(self):
@@ -709,11 +708,10 @@ def account_info(self, account):
         if account in app.connections:
             # account is valid
             con = app.connections[account]
-            index = con.connected
-            result['status'] = app.SHOW_LIST[index]
+            result['status'] = con.status
             result['name'] = con.name
             result['jid'] = app.get_jid_from_account(con.name)
-            result['message'] = con.status
+            result['message'] = con.status_message
             result['priority'] = str(con.priority)
             result['resource'] = app.config.get_per('accounts', con.name,
                                                     'resource')
diff --git a/gajim/roster_window.py b/gajim/roster_window.py
index 843d25787623cc467bc39b5e3948de7d3fed14ff..37bd788d8fe57e4f1911c942d420cb906fb329ec 100644
--- a/gajim/roster_window.py
+++ b/gajim/roster_window.py
@@ -291,7 +291,7 @@ def add_account(self, account):
                 None, None, None, True] + [None] * self.nb_ext_renderers)
             self._iters['MERGED']['account'] = it
         else:
-            show = app.SHOW_LIST[app.connections[account].connected]
+            show = app.connections[account].status
             our_jid = app.get_jid_from_account(account)
 
             tls_pixbuf = None
@@ -2247,7 +2247,7 @@ def on_response(message, pep_dict):
 
     def update_status_combobox(self):
         # table to change index in connection.connected to index in combobox
-        table = {'offline':8, 'connecting':8, 'online':0, 'chat':1, 'away':2,
+        table = {'offline':8, 'connecting':8, 'error': 8, 'online':0, 'chat':1, 'away':2,
             'xa':3, 'dnd':4}
 
         liststore = self.status_combobox.get_model()
@@ -2695,12 +2695,6 @@ def on_info_zeroconf(self, widget, contact, account):
                 return
             info[contact.jid] = vcard.ZeroconfVcardWindow(contact, account)
 
-    def on_agent_logging(self, widget, jid, state, account):
-        """
-        When an agent is requested to log in or off
-        """
-        app.connections[account].send_agent_status(jid, state)
-
     def on_edit_agent(self, widget, contact, account):
         """
         When we want to modify the agent registration
@@ -3067,7 +3061,7 @@ def _on_rename(new_name):
             transient_for=self.window).show()
 
     def on_change_status_message_activate(self, widget, account):
-        show = app.SHOW_LIST[app.connections[account].connected]
+        show = app.connections[account].status
         def on_response(message, pep_dict):
             if message is None: # None is if user pressed Cancel
                 return
@@ -3178,8 +3172,7 @@ def on_response(message, pep_dict):
                             if not app.config.get_per('accounts', account,
                             'sync_with_global_status'):
                                 continue
-                            current_show = app.SHOW_LIST[
-                                app.connections[account].connected]
+                            current_show = app.connections[account].status
                             self.send_status(account, current_show, message)
                             self.send_pep(account, pep_dict)
                 dialogs.ChangeStatusMessageDialog(on_response, status)
@@ -3234,8 +3227,7 @@ def on_response(message, pep_dict):
                         if not app.config.get_per('accounts', acct,
                         'sync_with_global_status'):
                             continue
-                        current_show = app.SHOW_LIST[app.connections[acct].\
-                            connected]
+                        current_show = app.connections[acct].status
                         self.send_status(acct, current_show, message)
                         self.send_pep(acct, pep_dict)
                 dialogs.ChangeStatusMessageDialog(on_response, show)
@@ -3392,8 +3384,7 @@ def on_response(message, pep_dict):
                         if not app.config.get_per('accounts', account,
                         'sync_with_global_status'):
                             continue
-                        current_show = app.SHOW_LIST[
-                            app.connections[account].connected]
+                        current_show = app.connections[account].status
                         self.send_status(account, current_show, message)
                         self.send_pep(account, pep_dict)
                 self.combobox_callback_active = False
@@ -4421,15 +4412,14 @@ def update_icons(self):
         self.update_status_combobox()
 
     def set_account_status_icon(self, account):
-        status = app.connections[account].connected
         child_iterA = self._get_account_iter(account, self.model)
         if not child_iterA:
             return
         if not self.regroup:
-            show = app.SHOW_LIST[status]
+            status = helpers.get_connection_status(account)
         else: # accounts merged
-            show = helpers.get_global_show()
-        self.model[child_iterA][Column.IMG] = get_icon_name(show)
+            status = helpers.get_global_show()
+        self.model[child_iterA][Column.IMG] = get_icon_name(status)
 
 ################################################################################
 ### Style and theme related methods