/// <summary>
        ///   Closes the Session
        /// </summary>
        public IXmppSession Close()
        {
            if (connection != null &&
                (connection.State == XmppConnectionState.Opening ||
                 connection.State == XmppConnectionState.Open))
            {
                try
                {
                    State = XmppSessionState.LoggingOut;

                    if (connection.State == XmppConnectionState.Open)
                    {
                        // Save session configuration
                        AvatarStorage.Save();

                        // Change presence to unavailable
                        SetUnavailable();

                        // Clear all chats
                        chats.Clear();
                    }

                    // Close connection
                    connection.Close();

                    // Unwire XmppConnection events
                    Unsubscribe();
                }
                catch
                {
                }
                finally
                {
                    State = XmppSessionState.LoggedOut;
                }
            }

            return(this);
        }