[Pkg-cli-apps-commits] [SCM] smuxi branch, master, updated. debian/0.8.9.2-2-5-g1d30b64

Mirco Bauer meebey at meebey.net
Sat Jun 30 15:22:56 UTC 2012


The following commit has been merged in the master branch:
commit 7c31cd4f1e366cf170d9451f7e2714d67d5ada52
Author: Mirco Bauer <meebey at meebey.net>
Date:   Sat Jun 30 16:54:23 2012 +0200

    Imported Upstream version 0.8.10

diff --git a/Makefile.am b/Makefile.am
index cff5eaf..d05d297 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -60,7 +60,7 @@ update-pot:
 	done
 
 update-transifex:
-	tx pull -l ca,da,de,en_GB,es,fi,fr,ru,sk,sv,tr,ur,zh_CN
+	tx pull -l ca,da,de,en_GB,es,fi,fr,hr,pl,ru,sk,sv,tr,ur,zh_CN
 
 mail-po: update-po
 	for PODIR in $(PODIRS); do \
@@ -205,7 +205,7 @@ run-gnome: all
 
 run-stfl: all
 	cd $(BUILD_DIR) && \
-		mono ./smuxi-frontend-stfl.exe -d 2> smuxi-frontend-stfl.err
+		mono --debug ./smuxi-frontend-stfl.exe -d 2> smuxi-frontend-stfl.err
 
 run-server: all
 	cd $(BUILD_DIR) && \
diff --git a/Makefile.in b/Makefile.in
index f4f8704..14fb93b 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.2 from Makefile.am.
+# Makefile.in generated by automake 1.11.5 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -15,6 +15,23 @@
 
 @SET_MAKE@
 VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -58,6 +75,11 @@ RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
 	install-pdf-recursive install-ps-recursive install-recursive \
 	installcheck-recursive installdirs-recursive pdf-recursive \
 	ps-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
 RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
   distclean-recursive maintainer-clean-recursive
 AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
@@ -71,9 +93,11 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 distdir = $(PACKAGE)-$(VERSION)
 top_distdir = $(distdir)
 am__remove_distdir = \
-  { test ! -d "$(distdir)" \
-    || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
-         && rm -fr "$(distdir)"; }; }
+  if test -d "$(distdir)"; then \
+    find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
+      && rm -rf "$(distdir)" \
+      || { sleep 5 && rm -rf "$(distdir)"; }; \
+  else :; fi
 am__relativize = \
   dir0=`pwd`; \
   sed_first='s,^\([^/]*\)/.*$$,\1,'; \
@@ -108,6 +132,7 @@ distcleancheck_listfiles = find . -type f -print
 ACLOCAL = @ACLOCAL@
 ALL_LINGUAS = @ALL_LINGUAS@
 AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
@@ -167,6 +192,8 @@ GLIB_SHARP_20_LIBS = @GLIB_SHARP_20_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
 GREP = @GREP@
+GTKSPELL_CFLAGS = @GTKSPELL_CFLAGS@
+GTKSPELL_LIBS = @GTKSPELL_LIBS@
 GTK_SHARP_20_CFLAGS = @GTK_SHARP_20_CFLAGS@
 GTK_SHARP_20_LIBS = @GTK_SHARP_20_LIBS@
 INDICATE_SHARP_CFLAGS = @INDICATE_SHARP_CFLAGS@
@@ -181,6 +208,10 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
 INTLTOOL_MERGE = @INTLTOOL_MERGE@
 INTLTOOL_PERL = @INTLTOOL_PERL@
 INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@
+INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@
+INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@
+INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@
 INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
@@ -291,6 +322,8 @@ htmldir = @htmldir@
 includedir = @includedir@
 infodir = @infodir@
 install_sh = @install_sh@
+intltool__v_merge_options_ = @intltool__v_merge_options_@
+intltool__v_merge_options_0 = @intltool__v_merge_options_0@
 libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
@@ -633,13 +666,10 @@ distdir: $(DISTFILES)
 	done
 	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
 	  if test "$$subdir" = .; then :; else \
-	    test -d "$(distdir)/$$subdir" \
-	    || $(MKDIR_P) "$(distdir)/$$subdir" \
-	    || exit 1; \
-	  fi; \
-	done
-	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
 	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
 	    $(am__relativize); \
 	    new_distdir=$$reldir; \
@@ -674,6 +704,10 @@ dist-bzip2: distdir
 	tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2
 	$(am__remove_distdir)
 
+dist-lzip: distdir
+	tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz
+	$(am__remove_distdir)
+
 dist-lzma: distdir
 	tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma
 	$(am__remove_distdir)
@@ -710,6 +744,8 @@ distcheck: dist
 	  bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
 	*.tar.lzma*) \
 	  lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\
+	*.tar.lz*) \
+	  lzip -dc $(distdir).tar.lz | $(am__untar) ;;\
 	*.tar.xz*) \
 	  xz -dc $(distdir).tar.xz | $(am__untar) ;;\
 	*.tar.Z*) \
@@ -894,18 +930,18 @@ uninstall-am:
 .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
 	all all-am am--refresh check check-am clean clean-generic \
 	clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \
-	dist-gzip dist-lzma dist-shar dist-tarZ dist-xz dist-zip \
-	distcheck distclean distclean-generic distclean-libtool \
-	distclean-tags distcleancheck distdir distuninstallcheck dvi \
-	dvi-am html html-am info info-am install install-am \
-	install-data install-data-am install-dvi install-dvi-am \
-	install-exec install-exec-am install-html install-html-am \
-	install-info install-info-am install-man install-pdf \
-	install-pdf-am install-ps install-ps-am install-strip \
-	installcheck installcheck-am installdirs installdirs-am \
-	maintainer-clean maintainer-clean-generic mostlyclean \
-	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
-	tags tags-recursive uninstall uninstall-am
+	dist-gzip dist-lzip dist-lzma dist-shar dist-tarZ dist-xz \
+	dist-zip distcheck distclean distclean-generic \
+	distclean-libtool distclean-tags distcleancheck distdir \
+	distuninstallcheck dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	installdirs-am maintainer-clean maintainer-clean-generic \
+	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+	ps ps-am tags tags-recursive uninstall uninstall-am
 
 
 # forcely disable parallel builds
@@ -925,7 +961,7 @@ update-pot:
 	done
 
 update-transifex:
-	tx pull -l ca,da,de,en_GB,es,fi,fr,ru,sk,sv,tr,ur,zh_CN
+	tx pull -l ca,da,de,en_GB,es,fi,fr,hr,pl,ru,sk,sv,tr,ur,zh_CN
 
 mail-po: update-po
 	for PODIR in $(PODIRS); do \
@@ -1000,7 +1036,7 @@ run-gnome: all
 
 run-stfl: all
 	cd $(BUILD_DIR) && \
-		mono ./smuxi-frontend-stfl.exe -d 2> smuxi-frontend-stfl.err
+		mono --debug ./smuxi-frontend-stfl.exe -d 2> smuxi-frontend-stfl.err
 
 run-server: all
 	cd $(BUILD_DIR) && \
diff --git a/aclocal.m4 b/aclocal.m4
index a4dc45c..f9cfdfc 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -1,4 +1,4 @@
-# generated automatically by aclocal 1.11.2 -*- Autoconf -*-
+# generated automatically by aclocal 1.11.5 -*- Autoconf -*-
 
 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
 # 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation,
@@ -14,8 +14,8 @@
 
 m4_ifndef([AC_AUTOCONF_VERSION],
   [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
-m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],,
-[m4_warning([this file was generated for autoconf 2.68.
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],,
+[m4_warning([this file was generated for autoconf 2.69.
 You have another version of autoconf.  It may work, but is not guaranteed to.
 If you have problems, you may need to regenerate the build system entirely.
 To do so, use the procedure documented by the package, typically `autoreconf'.])])
@@ -4288,17 +4288,6 @@ freebsd* | dragonfly*)
   esac
   ;;
 
-gnu*)
-  version_type=linux # correct to gnu/linux during the next big refactor
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  ;;
-
 haiku*)
   version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
@@ -4415,7 +4404,7 @@ linux*oldld* | linux*aout* | linux*coff*)
   ;;
 
 # This must be glibc/ELF.
-linux* | k*bsd*-gnu | kopensolaris*-gnu)
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
   version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
@@ -5031,10 +5020,6 @@ freebsd* | dragonfly*)
   fi
   ;;
 
-gnu*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
 haiku*)
   lt_cv_deplibs_check_method=pass_all
   ;;
@@ -5073,7 +5058,7 @@ irix5* | irix6* | nonstopux*)
   ;;
 
 # This must be glibc/ELF.
-linux* | k*bsd*-gnu | kopensolaris*-gnu)
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
   lt_cv_deplibs_check_method=pass_all
   ;;
 
@@ -5825,7 +5810,7 @@ m4_if([$1], [CXX], [
 	    ;;
 	esac
 	;;
-      linux* | k*bsd*-gnu | kopensolaris*-gnu)
+      linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
 	case $cc_basename in
 	  KCC*)
 	    # KAI C++ Compiler
@@ -6124,7 +6109,7 @@ m4_if([$1], [CXX], [
       _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
       ;;
 
-    linux* | k*bsd*-gnu | kopensolaris*-gnu)
+    linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
       case $cc_basename in
       # old Intel for x86_64 which still supported -KPIC.
       ecc*)
@@ -8013,9 +7998,6 @@ if test "$_lt_caught_CXX_error" != yes; then
         _LT_TAGVAR(ld_shlibs, $1)=yes
         ;;
 
-      gnu*)
-        ;;
-
       haiku*)
         _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
         _LT_TAGVAR(link_all_deplibs, $1)=yes
@@ -8177,7 +8159,7 @@ if test "$_lt_caught_CXX_error" != yes; then
         _LT_TAGVAR(inherit_rpath, $1)=yes
         ;;
 
-      linux* | k*bsd*-gnu | kopensolaris*-gnu)
+      linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
         case $cc_basename in
           KCC*)
 	    # Kuck and Associates, Inc. (KAI) C++ Compiler
@@ -11142,7 +11124,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION],
 [am__api_version='1.11'
 dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
 dnl require some minimum version.  Point them to the right macro.
-m4_if([$1], [1.11.2], [],
+m4_if([$1], [1.11.5], [],
       [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
 ])
 
@@ -11158,7 +11140,7 @@ m4_define([_AM_AUTOCONF_VERSION], [])
 # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
 # This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
 AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
-[AM_AUTOMAKE_VERSION([1.11.2])dnl
+[AM_AUTOMAKE_VERSION([1.11.5])dnl
 m4_ifndef([AC_AUTOCONF_VERSION],
   [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
 _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
@@ -12037,7 +12019,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
 
 # Check how to create a tarball.                            -*- Autoconf -*-
 
-# Copyright (C) 2004, 2005  Free Software Foundation, Inc.
+# Copyright (C) 2004, 2005, 2012 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -12059,10 +12041,11 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
 # a tarball read from stdin.
 #     $(am__untar) < result.tar
 AC_DEFUN([_AM_PROG_TAR],
-[# Always define AMTAR for backward compatibility.
-AM_MISSING_PROG([AMTAR], [tar])
+[# Always define AMTAR for backward compatibility.  Yes, it's still used
+# in the wild :-(  We should find a proper way to deprecate it ...
+AC_SUBST([AMTAR], ['$${TAR-tar}'])
 m4_if([$1], [v7],
-     [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
+     [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'],
      [m4_case([$1], [ustar],, [pax],,
               [m4_fatal([Unknown tar format])])
 AC_MSG_CHECKING([how to create a $1 tar archive])
diff --git a/config.guess b/config.guess
index 40eaed4..d622a44 100755
--- a/config.guess
+++ b/config.guess
@@ -2,9 +2,9 @@
 # Attempt to guess a canonical system name.
 #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
 #   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
-#   2011 Free Software Foundation, Inc.
+#   2011, 2012 Free Software Foundation, Inc.
 
-timestamp='2011-05-11'
+timestamp='2012-02-10'
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
@@ -17,9 +17,7 @@ timestamp='2011-05-11'
 # General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
-# 02110-1301, USA.
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
 #
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
@@ -57,8 +55,8 @@ GNU config.guess ($timestamp)
 
 Originally written by Per Bothner.
 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free
-Software Foundation, Inc.
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
+Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -145,7 +143,7 @@ UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
 case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
     *:NetBSD:*:*)
 	# NetBSD (nbsd) targets should (where applicable) match one or
-	# more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
+	# more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*,
 	# *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
 	# switched to ELF, *-*-netbsd* would select the old
 	# object file format.  This provides both forward
@@ -792,13 +790,12 @@ EOF
 	echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
 	exit ;;
     *:FreeBSD:*:*)
-	case ${UNAME_MACHINE} in
-	    pc98)
-		echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+	UNAME_PROCESSOR=`/usr/bin/uname -p`
+	case ${UNAME_PROCESSOR} in
 	    amd64)
 		echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
 	    *)
-		echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+		echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
 	esac
 	exit ;;
     i*:CYGWIN*:*)
@@ -807,6 +804,9 @@ EOF
     *:MINGW*:*)
 	echo ${UNAME_MACHINE}-pc-mingw32
 	exit ;;
+    i*:MSYS*:*)
+	echo ${UNAME_MACHINE}-pc-msys
+	exit ;;
     i*:windows32*:*)
 	# uname -m includes "-pc" on this system.
 	echo ${UNAME_MACHINE}-mingw32
@@ -861,6 +861,13 @@ EOF
     i*86:Minix:*:*)
 	echo ${UNAME_MACHINE}-pc-minix
 	exit ;;
+    aarch64:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    aarch64_be:Linux:*:*)
+	UNAME_MACHINE=aarch64_be
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
     alpha:Linux:*:*)
 	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
 	  EV5)   UNAME_MACHINE=alphaev5 ;;
@@ -895,13 +902,16 @@ EOF
 	echo ${UNAME_MACHINE}-unknown-linux-gnu
 	exit ;;
     cris:Linux:*:*)
-	echo cris-axis-linux-gnu
+	echo ${UNAME_MACHINE}-axis-linux-gnu
 	exit ;;
     crisv32:Linux:*:*)
-	echo crisv32-axis-linux-gnu
+	echo ${UNAME_MACHINE}-axis-linux-gnu
 	exit ;;
     frv:Linux:*:*)
-	echo frv-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    hexagon:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
 	exit ;;
     i*86:Linux:*:*)
 	LIBC=gnu
@@ -943,7 +953,7 @@ EOF
 	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
 	;;
     or32:Linux:*:*)
-	echo or32-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
 	exit ;;
     padre:Linux:*:*)
 	echo sparc-unknown-linux-gnu
@@ -978,13 +988,13 @@ EOF
 	echo ${UNAME_MACHINE}-unknown-linux-gnu
 	exit ;;
     tile*:Linux:*:*)
-	echo ${UNAME_MACHINE}-tilera-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
 	exit ;;
     vax:Linux:*:*)
 	echo ${UNAME_MACHINE}-dec-linux-gnu
 	exit ;;
     x86_64:Linux:*:*)
-	echo x86_64-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
 	exit ;;
     xtensa*:Linux:*:*)
 	echo ${UNAME_MACHINE}-unknown-linux-gnu
@@ -1315,6 +1325,9 @@ EOF
     i*86:AROS:*:*)
 	echo ${UNAME_MACHINE}-pc-aros
 	exit ;;
+    x86_64:VMkernel:*:*)
+	echo ${UNAME_MACHINE}-unknown-esx
+	exit ;;
 esac
 
 #echo '(No uname command or uname output not recognized.)' 1>&2
diff --git a/config.sub b/config.sub
index 30fdca8..6205f84 100755
--- a/config.sub
+++ b/config.sub
@@ -2,9 +2,9 @@
 # Configuration validation subroutine script.
 #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
 #   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
-#   2011 Free Software Foundation, Inc.
+#   2011, 2012 Free Software Foundation, Inc.
 
-timestamp='2011-03-23'
+timestamp='2012-04-18'
 
 # This file is (in principle) common to ALL GNU software.
 # The presence of a machine in this file suggests that SOME GNU software
@@ -21,9 +21,7 @@ timestamp='2011-03-23'
 # GNU General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
-# 02110-1301, USA.
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
 #
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
@@ -76,8 +74,8 @@ version="\
 GNU config.sub ($timestamp)
 
 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free
-Software Foundation, Inc.
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
+Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -132,6 +130,10 @@ case $maybe_os in
     os=-$maybe_os
     basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
     ;;
+  android-linux)
+    os=-linux-android
+    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown
+    ;;
   *)
     basic_machine=`echo $1 | sed 's/-[^-]*$//'`
     if [ $basic_machine != $1 ]
@@ -223,6 +225,12 @@ case $os in
 	-isc*)
 		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
 		;;
+	-lynx*178)
+		os=-lynxos178
+		;;
+	-lynx*5)
+		os=-lynxos5
+		;;
 	-lynx*)
 		os=-lynxos
 		;;
@@ -247,17 +255,22 @@ case $basic_machine in
 	# Some are omitted here because they have special meanings below.
 	1750a | 580 \
 	| a29k \
+	| aarch64 | aarch64_be \
 	| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
 	| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
 	| am33_2.0 \
 	| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
+        | be32 | be64 \
 	| bfin \
 	| c4x | clipper \
 	| d10v | d30v | dlx | dsp16xx \
+	| epiphany \
 	| fido | fr30 | frv \
 	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+	| hexagon \
 	| i370 | i860 | i960 | ia64 \
 	| ip2k | iq2000 \
+	| le32 | le64 \
 	| lm32 \
 	| m32c | m32r | m32rle | m68000 | m68k | m88k \
 	| maxq | mb | microblaze | mcore | mep | metag \
@@ -291,7 +304,7 @@ case $basic_machine in
 	| pdp10 | pdp11 | pj | pjl \
 	| powerpc | powerpc64 | powerpc64le | powerpcle \
 	| pyramid \
-	| rx \
+	| rl78 | rx \
 	| score \
 	| sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
 	| sh64 | sh64le \
@@ -300,7 +313,7 @@ case $basic_machine in
 	| spu \
 	| tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
 	| ubicom32 \
-	| v850 | v850e \
+	| v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
 	| we32k \
 	| x86 | xc16x | xstormy16 | xtensa \
 	| z8k | z80)
@@ -315,8 +328,7 @@ case $basic_machine in
 	c6x)
 		basic_machine=tic6x-unknown
 		;;
-	m6811 | m68hc11 | m6812 | m68hc12 | picochip)
-		# Motorola 68HC11/12.
+	m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip)
 		basic_machine=$basic_machine-unknown
 		os=-none
 		;;
@@ -329,7 +341,10 @@ case $basic_machine in
 	strongarm | thumb | xscale)
 		basic_machine=arm-unknown
 		;;
-
+	xgate)
+		basic_machine=$basic_machine-unknown
+		os=-none
+		;;
 	xscaleeb)
 		basic_machine=armeb-unknown
 		;;
@@ -352,11 +367,13 @@ case $basic_machine in
 	# Recognize the basic CPU types with company name.
 	580-* \
 	| a29k-* \
+	| aarch64-* | aarch64_be-* \
 	| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
 	| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
 	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
 	| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
 	| avr-* | avr32-* \
+	| be32-* | be64-* \
 	| bfin-* | bs2000-* \
 	| c[123]* | c30-* | [cjt]90-* | c4x-* \
 	| clipper-* | craynv-* | cydra-* \
@@ -365,8 +382,10 @@ case $basic_machine in
 	| f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
 	| h8300-* | h8500-* \
 	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+	| hexagon-* \
 	| i*86-* | i860-* | i960-* | ia64-* \
 	| ip2k-* | iq2000-* \
+	| le32-* | le64-* \
 	| lm32-* \
 	| m32c-* | m32r-* | m32rle-* \
 	| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
@@ -400,7 +419,7 @@ case $basic_machine in
 	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
 	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
 	| pyramid-* \
-	| romp-* | rs6000-* | rx-* \
+	| rl78-* | romp-* | rs6000-* | rx-* \
 	| sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
 	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
 	| sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
@@ -408,10 +427,11 @@ case $basic_machine in
 	| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \
 	| tahoe-* \
 	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
-	| tile-* | tilegx-* \
+	| tile*-* \
 	| tron-* \
 	| ubicom32-* \
-	| v850-* | v850e-* | vax-* \
+	| v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
+	| vax-* \
 	| we32k-* \
 	| x86-* | x86_64-* | xc16x-* | xps100-* \
 	| xstormy16-* | xtensa*-* \
@@ -711,7 +731,6 @@ case $basic_machine in
 	i370-ibm* | ibm*)
 		basic_machine=i370-ibm
 		;;
-# I'm not sure what "Sysv32" means.  Should this be sysv3.2?
 	i*86v32)
 		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
 		os=-sysv32
@@ -808,10 +827,18 @@ case $basic_machine in
 	ms1-*)
 		basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
 		;;
+	msys)
+		basic_machine=i386-pc
+		os=-msys
+		;;
 	mvs)
 		basic_machine=i370-ibm
 		os=-mvs
 		;;
+	nacl)
+		basic_machine=le32-unknown
+		os=-nacl
+		;;
 	ncr3000)
 		basic_machine=i486-ncr
 		os=-sysv4
@@ -1120,13 +1147,8 @@ case $basic_machine in
 		basic_machine=t90-cray
 		os=-unicos
 		;;
-	# This must be matched before tile*.
-	tilegx*)
-		basic_machine=tilegx-unknown
-		os=-linux-gnu
-		;;
 	tile*)
-		basic_machine=tile-unknown
+		basic_machine=$basic_machine-unknown
 		os=-linux-gnu
 		;;
 	tx39)
@@ -1336,7 +1358,7 @@ case $os in
 	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
 	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
 	      | -chorusos* | -chorusrdb* | -cegcc* \
-	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+	      | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
 	      | -mingw32* | -linux-gnu* | -linux-android* \
 	      | -linux-newlib* | -linux-uclibc* \
 	      | -uxpv* | -beos* | -mpeix* | -udk* \
@@ -1521,6 +1543,9 @@ case $basic_machine in
 	c4x-* | tic4x-*)
 		os=-coff
 		;;
+	hexagon-*)
+		os=-elf
+		;;
 	tic54x-*)
 		os=-coff
 		;;
@@ -1548,9 +1573,6 @@ case $basic_machine in
 		;;
 	m68000-sun)
 		os=-sunos3
-		# This also exists in the configure program, but was not the
-		# default.
-		# os=-sunos4
 		;;
 	m68*-cisco)
 		os=-aout
diff --git a/configure b/configure
index ef15128..6952aa8 100755
--- a/configure
+++ b/configure
@@ -1,13 +1,11 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.68 for smuxi 0.8.9.2.
+# Generated by GNU Autoconf 2.69 for smuxi 0.8.10.
 #
 # Report bugs to <http://www.smuxi.org/issues/new>.
 #
 #
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
-# Foundation, Inc.
+# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
 #
 #
 # This configure script is free software; the Free Software Foundation
@@ -136,6 +134,31 @@ export LANGUAGE
 # CDPATH.
 (unset CDPATH) >/dev/null 2>&1 && unset CDPATH
 
+# Use a proper internal environment variable to ensure we don't fall
+  # into an infinite loop, continuously re-executing ourselves.
+  if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
+    _as_can_reexec=no; export _as_can_reexec;
+    # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+  *v*x* | *x*v* ) as_opts=-vx ;;
+  *v* ) as_opts=-v ;;
+  *x* ) as_opts=-x ;;
+  * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+as_fn_exit 255
+  fi
+  # We don't want this to propagate to other subprocesses.
+          { _as_can_reexec=; unset _as_can_reexec;}
 if test "x$CONFIG_SHELL" = x; then
   as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
   emulate sh
@@ -169,7 +192,8 @@ if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
 else
   exitcode=1; echo positional parameters were not saved.
 fi
-test x\$exitcode = x0 || exit 1"
+test x\$exitcode = x0 || exit 1
+test -x / || exit 1"
   as_suggested="  as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
   as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
   eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
@@ -222,21 +246,25 @@ IFS=$as_save_IFS
 
 
       if test "x$CONFIG_SHELL" != x; then :
-  # We cannot yet assume a decent shell, so we have to provide a
-	# neutralization value for shells without unset; and this also
-	# works around shells that cannot unset nonexistent variables.
-	# Preserve -v and -x to the replacement shell.
-	BASH_ENV=/dev/null
-	ENV=/dev/null
-	(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-	export CONFIG_SHELL
-	case $- in # ((((
-	  *v*x* | *x*v* ) as_opts=-vx ;;
-	  *v* ) as_opts=-v ;;
-	  *x* ) as_opts=-x ;;
-	  * ) as_opts= ;;
-	esac
-	exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"}
+  export CONFIG_SHELL
+             # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+  *v*x* | *x*v* ) as_opts=-vx ;;
+  *v* ) as_opts=-v ;;
+  *x* ) as_opts=-x ;;
+  * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+exit 255
 fi
 
     if test x$as_have_required = xno; then :
@@ -339,6 +367,14 @@ $as_echo X"$as_dir" |
 
 
 } # as_fn_mkdir_p
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+  test -f "$1" && test -x "$1"
+} # as_fn_executable_p
 # as_fn_append VAR VALUE
 # ----------------------
 # Append the text in VALUE to the end of the definition contained in VAR. Take
@@ -460,6 +496,10 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits
   chmod +x "$as_me.lineno" ||
     { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
 
+  # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
+  # already done that, so ensure we don't try to do so again and fall
+  # in an infinite loop.  This has already happened in practice.
+  _as_can_reexec=no; export _as_can_reexec
   # Don't try to exec as it changes $[0], causing all sort of problems
   # (the dirname of $[0] is not the place where we might find the
   # original and so on.  Autoconf is especially sensitive to this).
@@ -494,16 +534,16 @@ if (echo >conf$$.file) 2>/dev/null; then
     # ... but there are two gotchas:
     # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
     # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-    # In both cases, we have to default to `cp -p'.
+    # In both cases, we have to default to `cp -pR'.
     ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
-      as_ln_s='cp -p'
+      as_ln_s='cp -pR'
   elif ln conf$$.file conf$$ 2>/dev/null; then
     as_ln_s=ln
   else
-    as_ln_s='cp -p'
+    as_ln_s='cp -pR'
   fi
 else
-  as_ln_s='cp -p'
+  as_ln_s='cp -pR'
 fi
 rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
 rmdir conf$$.dir 2>/dev/null
@@ -515,28 +555,8 @@ else
   as_mkdir_p=false
 fi
 
-if test -x / >/dev/null 2>&1; then
-  as_test_x='test -x'
-else
-  if ls -dL / >/dev/null 2>&1; then
-    as_ls_L_option=L
-  else
-    as_ls_L_option=
-  fi
-  as_test_x='
-    eval sh -c '\''
-      if test -d "$1"; then
-	test -d "$1/.";
-      else
-	case $1 in #(
-	-*)set "./$1";;
-	esac;
-	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
-	???[sx]*):;;*)false;;esac;fi
-    '\'' sh
-  '
-fi
-as_executable_p=$as_test_x
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
 
 # Sed expression to map a string onto a valid CPP name.
 as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
@@ -570,8 +590,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='smuxi'
 PACKAGE_TARNAME='smuxi'
-PACKAGE_VERSION='0.8.9.2'
-PACKAGE_STRING='smuxi 0.8.9.2'
+PACKAGE_VERSION='0.8.10'
+PACKAGE_STRING='smuxi 0.8.10'
 PACKAGE_BUGREPORT='http://www.smuxi.org/issues/new'
 PACKAGE_URL=''
 
@@ -662,6 +682,8 @@ ENABLE_ENGINE_IRC_FALSE
 ENABLE_ENGINE_IRC_TRUE
 SMARTIRC4NET_FILES
 subdirs
+GTKSPELL_LIBS
+GTKSPELL_CFLAGS
 NDESK_DBUS_GLIB_LIBS
 NDESK_DBUS_GLIB_CFLAGS
 NDESK_DBUS_LIBS
@@ -760,6 +782,13 @@ INTLTOOL_PROP_RULE
 INTLTOOL_KEYS_RULE
 INTLTOOL_DIRECTORY_RULE
 INTLTOOL_DESKTOP_RULE
+intltool__v_merge_options_0
+intltool__v_merge_options_
+INTLTOOL_V_MERGE_OPTIONS
+INTLTOOL__v_MERGE_0
+INTLTOOL__v_MERGE_
+INTLTOOL_V_MERGE
+AM_DEFAULT_VERBOSITY
 INTLTOOL_EXTRACT
 INTLTOOL_MERGE
 INTLTOOL_UPDATE
@@ -899,6 +928,7 @@ with_db4o
 with_indicate
 with_notify
 with_dbus
+with_gtkspell
 enable_engine_irc
 enable_engine_oscar
 enable_engine_xmpp
@@ -944,6 +974,8 @@ NDESK_DBUS_CFLAGS
 NDESK_DBUS_LIBS
 NDESK_DBUS_GLIB_CFLAGS
 NDESK_DBUS_GLIB_LIBS
+GTKSPELL_CFLAGS
+GTKSPELL_LIBS
 OSCARLIB_CFLAGS
 OSCARLIB_LIBS
 MSNPSHARP_CFLAGS
@@ -1411,8 +1443,6 @@ target=$target_alias
 if test "x$host_alias" != x; then
   if test "x$build_alias" = x; then
     cross_compiling=maybe
-    $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host.
-    If a cross compiler is detected then cross compile mode will be used" >&2
   elif test "x$build_alias" != "x$host_alias"; then
     cross_compiling=yes
   fi
@@ -1498,7 +1528,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures smuxi 0.8.9.2 to adapt to many kinds of systems.
+\`configure' configures smuxi 0.8.10 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1568,7 +1598,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of smuxi 0.8.9.2:";;
+     short | recursive ) echo "Configuration of smuxi 0.8.10:";;
    esac
   cat <<\_ACEOF
 
@@ -1624,6 +1654,7 @@ Optional Packages:
   --with-indicate         Support Messaging Menu [default=auto]
   --with-notify           Support Desktop Notifications [default=auto]
   --with-dbus             Support D-Bus [default=auto]
+  --with-gtkspell         Support GTK+ spell checking [default=auto]
   --with-twitter-api-key  Specify custom Twitter API key
 
 Some influential environment variables:
@@ -1676,6 +1707,10 @@ Some influential environment variables:
               C compiler flags for NDESK_DBUS_GLIB, overriding pkg-config
   NDESK_DBUS_GLIB_LIBS
               linker flags for NDESK_DBUS_GLIB, overriding pkg-config
+  GTKSPELL_CFLAGS
+              C compiler flags for GTKSPELL, overriding pkg-config
+  GTKSPELL_LIBS
+              linker flags for GTKSPELL, overriding pkg-config
   OSCARLIB_CFLAGS
               C compiler flags for OSCARLIB, overriding pkg-config
   OSCARLIB_LIBS
@@ -1765,10 +1800,10 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-smuxi configure 0.8.9.2
-generated by GNU Autoconf 2.68
+smuxi configure 0.8.10
+generated by GNU Autoconf 2.69
 
-Copyright (C) 2010 Free Software Foundation, Inc.
+Copyright (C) 2012 Free Software Foundation, Inc.
 This configure script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it.
 _ACEOF
@@ -1844,7 +1879,7 @@ $as_echo "$ac_try_echo"; } >&5
 	 test ! -s conftest.err
        } && test -s conftest$ac_exeext && {
 	 test "$cross_compiling" = yes ||
-	 $as_test_x conftest$ac_exeext
+	 test -x conftest$ac_exeext
        }; then :
   ac_retval=0
 else
@@ -2043,8 +2078,8 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by smuxi $as_me 0.8.9.2, which was
-generated by GNU Autoconf 2.68.  Invocation command line was
+It was created by smuxi $as_me 0.8.10, which was
+generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
 
@@ -2462,7 +2497,7 @@ case $as_dir/ in #((
     # by default.
     for ac_prog in ginstall scoinst install; do
       for ac_exec_ext in '' $ac_executable_extensions; do
-	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+	if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
 	  if test $ac_prog = install &&
 	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
 	    # AIX install.  It has an incompatible calling convention.
@@ -2631,7 +2666,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_STRIP="${ac_tool_prefix}strip"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -2671,7 +2706,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_STRIP="strip"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -2722,7 +2757,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_prog in mkdir gmkdir; do
 	 for ac_exec_ext in '' $ac_executable_extensions; do
-	   { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue
+	   as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue
 	   case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
 	     'mkdir (GNU coreutils) '* | \
 	     'mkdir (coreutils) '* | \
@@ -2775,7 +2810,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_AWK="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -2861,7 +2896,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='smuxi'
- VERSION='0.8.9.2'
+ VERSION='0.8.10'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -2891,9 +2926,9 @@ MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
 
 # We need awk for the "check" target.  The system "awk" is bad on
 # some platforms.
-# Always define AMTAR for backward compatibility.
-
-AMTAR=${AMTAR-"${am_missing_run}tar"}
+# Always define AMTAR for backward compatibility.  Yes, it's still used
+# in the wild :-(  We should find a proper way to deprecate it ...
+AMTAR='$${TAR-tar}'
 
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to create a ustar tar archive" >&5
@@ -3024,7 +3059,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3334,7 +3369,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_CC="${ac_tool_prefix}gcc"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3374,7 +3409,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_CC="gcc"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3427,7 +3462,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_CC="${ac_tool_prefix}cc"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3468,7 +3503,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
        ac_prog_rejected=yes
        continue
@@ -3526,7 +3561,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3570,7 +3605,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_CC="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -4016,8 +4051,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <stdarg.h>
 #include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
+struct stat;
 /* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
 struct buf { int x; };
 FILE * (*rcsopen) (struct buf *, struct stat *, int);
@@ -4252,7 +4286,7 @@ do
     for ac_prog in sed gsed; do
     for ac_exec_ext in '' $ac_executable_extensions; do
       ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
-      { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue
+      as_fn_executable_p "$ac_path_SED" || continue
 # Check for GNU ac_path_SED and select it if it is found.
   # Check for GNU $ac_path_SED
 case `"$ac_path_SED" --version 2>&1` in
@@ -4328,7 +4362,7 @@ do
     for ac_prog in grep ggrep; do
     for ac_exec_ext in '' $ac_executable_extensions; do
       ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
-      { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
+      as_fn_executable_p "$ac_path_GREP" || continue
 # Check for GNU ac_path_GREP and select it if it is found.
   # Check for GNU $ac_path_GREP
 case `"$ac_path_GREP" --version 2>&1` in
@@ -4394,7 +4428,7 @@ do
     for ac_prog in egrep; do
     for ac_exec_ext in '' $ac_executable_extensions; do
       ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
-      { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
+      as_fn_executable_p "$ac_path_EGREP" || continue
 # Check for GNU ac_path_EGREP and select it if it is found.
   # Check for GNU $ac_path_EGREP
 case `"$ac_path_EGREP" --version 2>&1` in
@@ -4461,7 +4495,7 @@ do
     for ac_prog in fgrep; do
     for ac_exec_ext in '' $ac_executable_extensions; do
       ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext"
-      { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue
+      as_fn_executable_p "$ac_path_FGREP" || continue
 # Check for GNU ac_path_FGREP and select it if it is found.
   # Check for GNU $ac_path_FGREP
 case `"$ac_path_FGREP" --version 2>&1` in
@@ -4717,7 +4751,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -4761,7 +4795,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_DUMPBIN="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -5185,7 +5219,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -5225,7 +5259,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_OBJDUMP="objdump"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -5351,10 +5385,6 @@ freebsd* | dragonfly*)
   fi
   ;;
 
-gnu*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
 haiku*)
   lt_cv_deplibs_check_method=pass_all
   ;;
@@ -5393,7 +5423,7 @@ irix5* | irix6* | nonstopux*)
   ;;
 
 # This must be glibc/ELF.
-linux* | k*bsd*-gnu | kopensolaris*-gnu)
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
   lt_cv_deplibs_check_method=pass_all
   ;;
 
@@ -5531,7 +5561,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -5571,7 +5601,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_DLLTOOL="dlltool"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -5675,7 +5705,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_AR="$ac_tool_prefix$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -5719,7 +5749,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_AR="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -5844,7 +5874,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_STRIP="${ac_tool_prefix}strip"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -5884,7 +5914,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_STRIP="strip"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -5943,7 +5973,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -5983,7 +6013,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_RANLIB="ranlib"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -6632,7 +6662,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -6672,7 +6702,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_MANIFEST_TOOL="mt"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -6752,7 +6782,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -6792,7 +6822,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_DSYMUTIL="dsymutil"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -6844,7 +6874,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -6884,7 +6914,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_NMEDIT="nmedit"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -6936,7 +6966,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_LIPO="${ac_tool_prefix}lipo"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -6976,7 +7006,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_LIPO="lipo"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -7028,7 +7058,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_OTOOL="${ac_tool_prefix}otool"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -7068,7 +7098,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_OTOOL="otool"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -7120,7 +7150,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -7160,7 +7190,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_OTOOL64="otool64"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -8286,7 +8316,7 @@ lt_prog_compiler_static=
       lt_prog_compiler_static='-non_shared'
       ;;
 
-    linux* | k*bsd*-gnu | kopensolaris*-gnu)
+    linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
       case $cc_basename in
       # old Intel for x86_64 which still supported -KPIC.
       ecc*)
@@ -10456,17 +10486,6 @@ freebsd* | dragonfly*)
   esac
   ;;
 
-gnu*)
-  version_type=linux # correct to gnu/linux during the next big refactor
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  ;;
-
 haiku*)
   version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
@@ -10583,7 +10602,7 @@ linux*oldld* | linux*aout* | linux*coff*)
   ;;
 
 # This must be glibc/ELF.
-linux* | k*bsd*-gnu | kopensolaris*-gnu)
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
   version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
@@ -11656,14 +11675,12 @@ case "$am__api_version" in
     ;;
 esac
 
+INTLTOOL_REQUIRED_VERSION_AS_INT=`echo 0.25 | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'`
+INTLTOOL_APPLIED_VERSION=`intltool-update --version | head -1 | cut -d" " -f3`
+INTLTOOL_APPLIED_VERSION_AS_INT=`echo $INTLTOOL_APPLIED_VERSION | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'`
 if test -n "0.25"; then
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for intltool >= 0.25" >&5
 $as_echo_n "checking for intltool >= 0.25... " >&6; }
-
-    INTLTOOL_REQUIRED_VERSION_AS_INT=`echo 0.25 | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'`
-    INTLTOOL_APPLIED_VERSION=`intltool-update --version | head -1 | cut -d" " -f3`
-    INTLTOOL_APPLIED_VERSION_AS_INT=`echo $INTLTOOL_APPLIED_VERSION | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'`
-
     { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_APPLIED_VERSION found" >&5
 $as_echo "$INTLTOOL_APPLIED_VERSION found" >&6; }
     test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge "$INTLTOOL_REQUIRED_VERSION_AS_INT" ||
@@ -11688,7 +11705,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_INTLTOOL_UPDATE="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -11728,7 +11745,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_INTLTOOL_MERGE="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -11768,7 +11785,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_INTLTOOL_EXTRACT="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -11794,25 +11811,48 @@ if test -z "$INTLTOOL_UPDATE" -o -z "$INTLTOOL_MERGE" -o -z "$INTLTOOL_EXTRACT";
     as_fn_error $? "The intltool scripts were not found. Please install intltool." "$LINENO" 5
 fi
 
-  INTLTOOL_DESKTOP_RULE='%.desktop:   %.desktop.in   $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
-INTLTOOL_DIRECTORY_RULE='%.directory: %.directory.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
-     INTLTOOL_KEYS_RULE='%.keys:      %.keys.in      $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -k -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
-     INTLTOOL_PROP_RULE='%.prop:      %.prop.in      $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
-      INTLTOOL_OAF_RULE='%.oaf:       %.oaf.in       $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -o -p $(top_srcdir)/po $< $@'
-     INTLTOOL_PONG_RULE='%.pong:      %.pong.in      $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
-   INTLTOOL_SERVER_RULE='%.server:    %.server.in    $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -o -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
-    INTLTOOL_SHEET_RULE='%.sheet:     %.sheet.in     $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
-INTLTOOL_SOUNDLIST_RULE='%.soundlist: %.soundlist.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
-       INTLTOOL_UI_RULE='%.ui:        %.ui.in        $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
-      INTLTOOL_XML_RULE='%.xml:       %.xml.in       $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
-      INTLTOOL_XML_NOMERGE_RULE='%.xml:       %.xml.in       $(INTLTOOL_MERGE) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u /tmp $< $@'
-      INTLTOOL_XAM_RULE='%.xam:       %.xml.in       $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
-      INTLTOOL_KBD_RULE='%.kbd:       %.kbd.in       $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -m -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
-    INTLTOOL_CAVES_RULE='%.caves:     %.caves.in     $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
-  INTLTOOL_SCHEMAS_RULE='%.schemas:   %.schemas.in   $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -s -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
-    INTLTOOL_THEME_RULE='%.theme:     %.theme.in     $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
-    INTLTOOL_SERVICE_RULE='%.service: %.service.in   $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
-   INTLTOOL_POLICY_RULE='%.policy:    %.policy.in    $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+if test -z "$AM_DEFAULT_VERBOSITY"; then
+  AM_DEFAULT_VERBOSITY=1
+fi
+
+
+INTLTOOL_V_MERGE='$(INTLTOOL__v_MERGE_$(V))'
+INTLTOOL__v_MERGE_='$(INTLTOOL__v_MERGE_$(AM_DEFAULT_VERBOSITY))'
+INTLTOOL__v_MERGE_0='@echo "  ITMRG " $@;'
+
+
+
+
+INTLTOOL_V_MERGE_OPTIONS='$(intltool__v_merge_options_$(V))'
+intltool__v_merge_options_='$(intltool__v_merge_options_$(AM_DEFAULT_VERBOSITY))'
+intltool__v_merge_options_0='-q'
+
+
+
+
+  INTLTOOL_DESKTOP_RULE='%.desktop:   %.desktop.in   $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+INTLTOOL_DIRECTORY_RULE='%.directory: %.directory.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+     INTLTOOL_KEYS_RULE='%.keys:      %.keys.in      $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -k -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+     INTLTOOL_PROP_RULE='%.prop:      %.prop.in      $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+      INTLTOOL_OAF_RULE='%.oaf:       %.oaf.in       $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -o -p $(top_srcdir)/po $< $@'
+     INTLTOOL_PONG_RULE='%.pong:      %.pong.in      $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+   INTLTOOL_SERVER_RULE='%.server:    %.server.in    $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -o -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+    INTLTOOL_SHEET_RULE='%.sheet:     %.sheet.in     $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+INTLTOOL_SOUNDLIST_RULE='%.soundlist: %.soundlist.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+       INTLTOOL_UI_RULE='%.ui:        %.ui.in        $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+      INTLTOOL_XML_RULE='%.xml:       %.xml.in       $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+if test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge 5000; then
+      INTLTOOL_XML_NOMERGE_RULE='%.xml:       %.xml.in       $(INTLTOOL_MERGE) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u --no-translations $< $@'
+else
+      INTLTOOL_XML_NOMERGE_RULE='%.xml:       %.xml.in       $(INTLTOOL_MERGE) ; $(INTLTOOL_V_MERGE)_it_tmp_dir=tmp.intltool.$$RANDOM && mkdir $$_it_tmp_dir && LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u $$_it_tmp_dir $< $@ && rmdir $$_it_tmp_dir'
+fi
+      INTLTOOL_XAM_RULE='%.xam:       %.xml.in       $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+      INTLTOOL_KBD_RULE='%.kbd:       %.kbd.in       $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -m -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+    INTLTOOL_CAVES_RULE='%.caves:     %.caves.in     $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+  INTLTOOL_SCHEMAS_RULE='%.schemas:   %.schemas.in   $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -s -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+    INTLTOOL_THEME_RULE='%.theme:     %.theme.in     $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+    INTLTOOL_SERVICE_RULE='%.service: %.service.in   $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+   INTLTOOL_POLICY_RULE='%.policy:    %.policy.in    $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
 
 
 
@@ -11929,7 +11969,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_XGETTEXT="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -11969,7 +12009,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_MSGMERGE="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -12009,7 +12049,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_MSGFMT="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -12049,7 +12089,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -12100,7 +12140,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_INTLTOOL_PERL="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -12131,7 +12171,7 @@ $INTLTOOL_PERL -e "use 5.8.1;" > /dev/null 2>&1
 if test $? -ne 0; then
    as_fn_error $? "perl 5.8.1 is required for intltool" "$LINENO" 5
 else
-   IT_PERL_VERSION="`$INTLTOOL_PERL -e \"printf '%vd', $^V\"`"
+   IT_PERL_VERSION=`$INTLTOOL_PERL -e "printf '%vd', $^V"`
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $IT_PERL_VERSION" >&5
 $as_echo "$IT_PERL_VERSION" >&6; }
 fi
@@ -12423,7 +12463,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -14416,7 +14456,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -14459,7 +14499,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -14623,7 +14663,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_MONO="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -14674,7 +14714,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_MCS="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -15266,7 +15306,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_XBUILD="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -15955,6 +15995,123 @@ fi
 	fi
 fi
 
+
+# Check whether --with-gtkspell was given.
+if test "${with_gtkspell+set}" = set; then :
+  withval=$with_gtkspell;
+else
+  with_gtkspell=auto
+
+fi
+
+WITH_GTKSPELL=$with_gtkspell
+if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtkspell-2.0\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "gtkspell-2.0") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  GTKSPELL_SUPPORT=yes
+else
+  GTKSPELL_SUPPORT=no
+fi
+if test "x$WITH_GTKSPELL" = "xauto"; then
+	WITH_GTKSPELL=$GTKSPELL_SUPPORT
+fi
+if test "x$WITH_GTKSPELL" = "xyes"; then
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GTKSPELL" >&5
+$as_echo_n "checking for GTKSPELL... " >&6; }
+
+if test -n "$GTKSPELL_CFLAGS"; then
+    pkg_cv_GTKSPELL_CFLAGS="$GTKSPELL_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtkspell-2.0 >= 2.0.9\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "gtkspell-2.0 >= 2.0.9") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_GTKSPELL_CFLAGS=`$PKG_CONFIG --cflags "gtkspell-2.0 >= 2.0.9" 2>/dev/null`
+		      test "x$?" != "x0" && pkg_failed=yes
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$GTKSPELL_LIBS"; then
+    pkg_cv_GTKSPELL_LIBS="$GTKSPELL_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtkspell-2.0 >= 2.0.9\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "gtkspell-2.0 >= 2.0.9") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_GTKSPELL_LIBS=`$PKG_CONFIG --libs "gtkspell-2.0 >= 2.0.9" 2>/dev/null`
+		      test "x$?" != "x0" && pkg_failed=yes
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+   	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        GTKSPELL_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gtkspell-2.0 >= 2.0.9" 2>&1`
+        else
+	        GTKSPELL_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gtkspell-2.0 >= 2.0.9" 2>&1`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$GTKSPELL_PKG_ERRORS" >&5
+
+	as_fn_error $? "Package requirements (gtkspell-2.0 >= 2.0.9) were not met:
+
+$GTKSPELL_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables GTKSPELL_CFLAGS
+and GTKSPELL_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details." "$LINENO" 5
+elif test $pkg_failed = untried; then
+     	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+	{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "The pkg-config script could not be found or is too old.  Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables GTKSPELL_CFLAGS
+and GTKSPELL_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.
+See \`config.log' for more details" "$LINENO" 5; }
+else
+	GTKSPELL_CFLAGS=$pkg_cv_GTKSPELL_CFLAGS
+	GTKSPELL_LIBS=$pkg_cv_GTKSPELL_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+fi
+fi
+
 # Engines
 # Check whether --enable-engine-irc was given.
 if test "${enable_engine_irc+set}" = set; then :
@@ -16108,7 +16265,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_XBUILD="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -16294,7 +16451,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_XBUILD="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -16750,6 +16907,9 @@ $as_echo "not found" >&6; }
 	if test "x$WITH_NOTIFY" = "xyes"; then
 		FRONTEND_GNOME_COMPILER_FLAGS+=" -define:NOTIFY_SHARP"
 	fi
+	if test "x$WITH_GTKSPELL" = "xyes"; then
+		FRONTEND_GNOME_COMPILER_FLAGS+=" -define:GTKSPELL"
+	fi
 	if $PKG_CONFIG 'mono >= 2.6'; then
 		FRONTEND_GNOME_COMPILER_FLAGS+=" -platform:x86"
 	fi
@@ -17554,16 +17714,16 @@ if (echo >conf$$.file) 2>/dev/null; then
     # ... but there are two gotchas:
     # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
     # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-    # In both cases, we have to default to `cp -p'.
+    # In both cases, we have to default to `cp -pR'.
     ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
-      as_ln_s='cp -p'
+      as_ln_s='cp -pR'
   elif ln conf$$.file conf$$ 2>/dev/null; then
     as_ln_s=ln
   else
-    as_ln_s='cp -p'
+    as_ln_s='cp -pR'
   fi
 else
-  as_ln_s='cp -p'
+  as_ln_s='cp -pR'
 fi
 rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
 rmdir conf$$.dir 2>/dev/null
@@ -17623,28 +17783,16 @@ else
   as_mkdir_p=false
 fi
 
-if test -x / >/dev/null 2>&1; then
-  as_test_x='test -x'
-else
-  if ls -dL / >/dev/null 2>&1; then
-    as_ls_L_option=L
-  else
-    as_ls_L_option=
-  fi
-  as_test_x='
-    eval sh -c '\''
-      if test -d "$1"; then
-	test -d "$1/.";
-      else
-	case $1 in #(
-	-*)set "./$1";;
-	esac;
-	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
-	???[sx]*):;;*)false;;esac;fi
-    '\'' sh
-  '
-fi
-as_executable_p=$as_test_x
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+  test -f "$1" && test -x "$1"
+} # as_fn_executable_p
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
 
 # Sed expression to map a string onto a valid CPP name.
 as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
@@ -17665,8 +17813,8 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by smuxi $as_me 0.8.9.2, which was
-generated by GNU Autoconf 2.68.  Invocation command line was
+This file was extended by smuxi $as_me 0.8.10, which was
+generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
   CONFIG_HEADERS  = $CONFIG_HEADERS
@@ -17722,11 +17870,11 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-smuxi config.status 0.8.9.2
-configured by $0, generated by GNU Autoconf 2.68,
+smuxi config.status 0.8.10
+configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
-Copyright (C) 2010 Free Software Foundation, Inc.
+Copyright (C) 2012 Free Software Foundation, Inc.
 This config.status script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it."
 
@@ -17806,7 +17954,7 @@ fi
 _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 if \$ac_cs_recheck; then
-  set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+  set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
   shift
   \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
   CONFIG_SHELL='$SHELL'
@@ -19670,6 +19818,7 @@ fi
 	  GNOME:               $ENABLE_FRONTEND_GNOME (IRC: $ENABLE_FRONTEND_GNOME_IRC XMPP: $ENABLE_FRONTEND_GNOME_XMPP)
 	  + Messaging Menu:    $WITH_INDICATE
 	  + Notifications:     $WITH_NOTIFY
+	  + Spell Checking:    $WITH_GTKSPELL
 	  + D-Bus:             $WITH_DBUS
 	  Ncurses:             $ENABLE_FRONTEND_CURSES
 	  STFL:                $ENABLE_FRONTEND_STFL
@@ -19699,6 +19848,7 @@ $as_echo "
 	  GNOME:               $ENABLE_FRONTEND_GNOME (IRC: $ENABLE_FRONTEND_GNOME_IRC XMPP: $ENABLE_FRONTEND_GNOME_XMPP)
 	  + Messaging Menu:    $WITH_INDICATE
 	  + Notifications:     $WITH_NOTIFY
+	  + Spell Checking:    $WITH_GTKSPELL
 	  + D-Bus:             $WITH_DBUS
 	  Ncurses:             $ENABLE_FRONTEND_CURSES
 	  STFL:                $ENABLE_FRONTEND_STFL
diff --git a/configure.ac b/configure.ac
index efe7eff..ff51366 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,5 +1,5 @@
 AC_PREREQ([2.54])
-AC_INIT([smuxi], [0.8.9.2], [http://www.smuxi.org/issues/new])
+AC_INIT([smuxi], [0.8.10], [http://www.smuxi.org/issues/new])
 # using the --foreign option makes automake less strict about GNU policy 
 AC_CONFIG_MACRO_DIR([.])
 AM_INIT_AUTOMAKE([foreign tar-ustar])
@@ -297,6 +297,20 @@ if test "x$WITH_DBUS" = "xyes"; then
 	fi
 fi
 
+AC_ARG_WITH([gtkspell],
+	AC_HELP_STRING([--with-gtkspell], [Support GTK+ spell checking @<:@default=auto@:>@]),
+	[],
+	with_gtkspell=auto
+)
+WITH_GTKSPELL=$with_gtkspell
+PKG_CHECK_EXISTS([gtkspell-2.0], GTKSPELL_SUPPORT=yes, GTKSPELL_SUPPORT=no)
+if test "x$WITH_GTKSPELL" = "xauto"; then
+	WITH_GTKSPELL=$GTKSPELL_SUPPORT
+fi
+if test "x$WITH_GTKSPELL" = "xyes"; then
+	PKG_CHECK_MODULES([GTKSPELL], [gtkspell-2.0 >= 2.0.9])
+fi
+
 # Engines
 AC_ARG_ENABLE([engine-irc],
 	AC_HELP_STRING([--enable-engine-irc], [Enable IRC protocol support (default yes)]),
@@ -460,6 +474,9 @@ if test "x$ENABLE_FRONTEND_GNOME" != "xno"; then
 	if test "x$WITH_NOTIFY" = "xyes"; then
 		FRONTEND_GNOME_COMPILER_FLAGS+=" -define:NOTIFY_SHARP"
 	fi
+	if test "x$WITH_GTKSPELL" = "xyes"; then
+		FRONTEND_GNOME_COMPILER_FLAGS+=" -define:GTKSPELL"
+	fi
 	if $PKG_CONFIG 'mono >= 2.6'; then
 		FRONTEND_GNOME_COMPILER_FLAGS+=" -platform:x86"
 	fi
@@ -600,6 +617,7 @@ AC_MSG_RESULT([
 	  GNOME:               $ENABLE_FRONTEND_GNOME (IRC: $ENABLE_FRONTEND_GNOME_IRC XMPP: $ENABLE_FRONTEND_GNOME_XMPP)
 	  + Messaging Menu:    $WITH_INDICATE
 	  + Notifications:     $WITH_NOTIFY
+	  + Spell Checking:    $WITH_GTKSPELL
 	  + D-Bus:             $WITH_DBUS
 	  Ncurses:             $ENABLE_FRONTEND_CURSES
 	  STFL:                $ENABLE_FRONTEND_STFL
diff --git a/glade/smuxi-frontend-gnome.glade b/glade/smuxi-frontend-gnome.glade
index 7444b0e..e4e5740 100644
--- a/glade/smuxi-frontend-gnome.glade
+++ b/glade/smuxi-frontend-gnome.glade
@@ -1539,6 +1539,33 @@ yy/yyyy = year</property>
                             <property name="position">1</property>
                           </packing>
                         </child>
+                        <child>
+                          <widget class="GtkCheckButton" id="AutoSwitchPersonChatsCheckButton">
+                            <property name="label" translatable="yes">Automatically switch to newly opened person chats</property>
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="receives_default">False</property>
+                            <property name="draw_indicator">True</property>
+                          </widget>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="position">2</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <widget class="GtkCheckButton" id="AutoSwitchGroupChatsCheckButton">
+                            <property name="label" translatable="yes">Automatically switch to newly opened group chats</property>
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="receives_default">False</property>
+                            <property name="draw_indicator">True</property>
+                            <signal name="toggled" handler="_OnChanged"/>
+                          </widget>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="position">3</property>
+                          </packing>
+                        </child>
                       </widget>
                       <packing>
                         <property name="position">1</property>
diff --git a/intltool.m4 b/intltool.m4
index 839e855..33353ed 100644
--- a/intltool.m4
+++ b/intltool.m4
@@ -23,7 +23,7 @@
 ## the same distribution terms that you use for the rest of that program.
 
 dnl IT_PROG_INTLTOOL([MINIMUM-VERSION], [no-xml])
-# serial 40 IT_PROG_INTLTOOL
+# serial 42 IT_PROG_INTLTOOL
 AC_DEFUN([IT_PROG_INTLTOOL], [
 AC_PREREQ([2.50])dnl
 AC_REQUIRE([AM_NLS])dnl
@@ -36,13 +36,11 @@ case "$am__api_version" in
     ;;
 esac
 
+INTLTOOL_REQUIRED_VERSION_AS_INT=`echo $1 | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'`
+INTLTOOL_APPLIED_VERSION=`intltool-update --version | head -1 | cut -d" " -f3`
+INTLTOOL_APPLIED_VERSION_AS_INT=`echo $INTLTOOL_APPLIED_VERSION | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'`
 if test -n "$1"; then
     AC_MSG_CHECKING([for intltool >= $1])
-
-    INTLTOOL_REQUIRED_VERSION_AS_INT=`echo $1 | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'`
-    INTLTOOL_APPLIED_VERSION=`intltool-update --version | head -1 | cut -d" " -f3`
-    [INTLTOOL_APPLIED_VERSION_AS_INT=`echo $INTLTOOL_APPLIED_VERSION | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'`
-    ]
     AC_MSG_RESULT([$INTLTOOL_APPLIED_VERSION found])
     test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge "$INTLTOOL_REQUIRED_VERSION_AS_INT" ||
 	AC_MSG_ERROR([Your intltool is too old.  You need intltool $1 or later.])
@@ -55,25 +53,48 @@ if test -z "$INTLTOOL_UPDATE" -o -z "$INTLTOOL_MERGE" -o -z "$INTLTOOL_EXTRACT";
     AC_MSG_ERROR([The intltool scripts were not found. Please install intltool.])
 fi
 
-  INTLTOOL_DESKTOP_RULE='%.desktop:   %.desktop.in   $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
-INTLTOOL_DIRECTORY_RULE='%.directory: %.directory.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
-     INTLTOOL_KEYS_RULE='%.keys:      %.keys.in      $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -k -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
-     INTLTOOL_PROP_RULE='%.prop:      %.prop.in      $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
-      INTLTOOL_OAF_RULE='%.oaf:       %.oaf.in       $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -o -p $(top_srcdir)/po $< [$]@'
-     INTLTOOL_PONG_RULE='%.pong:      %.pong.in      $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
-   INTLTOOL_SERVER_RULE='%.server:    %.server.in    $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -o -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
-    INTLTOOL_SHEET_RULE='%.sheet:     %.sheet.in     $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
-INTLTOOL_SOUNDLIST_RULE='%.soundlist: %.soundlist.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
-       INTLTOOL_UI_RULE='%.ui:        %.ui.in        $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
-      INTLTOOL_XML_RULE='%.xml:       %.xml.in       $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
-      INTLTOOL_XML_NOMERGE_RULE='%.xml:       %.xml.in       $(INTLTOOL_MERGE) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u /tmp $< [$]@' 
-      INTLTOOL_XAM_RULE='%.xam:       %.xml.in       $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
-      INTLTOOL_KBD_RULE='%.kbd:       %.kbd.in       $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -m -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
-    INTLTOOL_CAVES_RULE='%.caves:     %.caves.in     $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
-  INTLTOOL_SCHEMAS_RULE='%.schemas:   %.schemas.in   $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -s -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
-    INTLTOOL_THEME_RULE='%.theme:     %.theme.in     $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
-    INTLTOOL_SERVICE_RULE='%.service: %.service.in   $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@'
-   INTLTOOL_POLICY_RULE='%.policy:    %.policy.in    $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@'
+if test -z "$AM_DEFAULT_VERBOSITY"; then
+  AM_DEFAULT_VERBOSITY=1
+fi
+AC_SUBST([AM_DEFAULT_VERBOSITY])
+
+INTLTOOL_V_MERGE='$(INTLTOOL__v_MERGE_$(V))'
+INTLTOOL__v_MERGE_='$(INTLTOOL__v_MERGE_$(AM_DEFAULT_VERBOSITY))'
+INTLTOOL__v_MERGE_0='@echo "  ITMRG " [$]@;'
+AC_SUBST(INTLTOOL_V_MERGE)
+AC_SUBST(INTLTOOL__v_MERGE_)
+AC_SUBST(INTLTOOL__v_MERGE_0)
+
+INTLTOOL_V_MERGE_OPTIONS='$(intltool__v_merge_options_$(V))'
+intltool__v_merge_options_='$(intltool__v_merge_options_$(AM_DEFAULT_VERBOSITY))'
+intltool__v_merge_options_0='-q'
+AC_SUBST(INTLTOOL_V_MERGE_OPTIONS)
+AC_SUBST(intltool__v_merge_options_)
+AC_SUBST(intltool__v_merge_options_0)
+
+  INTLTOOL_DESKTOP_RULE='%.desktop:   %.desktop.in   $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
+INTLTOOL_DIRECTORY_RULE='%.directory: %.directory.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
+     INTLTOOL_KEYS_RULE='%.keys:      %.keys.in      $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -k -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
+     INTLTOOL_PROP_RULE='%.prop:      %.prop.in      $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
+      INTLTOOL_OAF_RULE='%.oaf:       %.oaf.in       $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -o -p $(top_srcdir)/po $< [$]@'
+     INTLTOOL_PONG_RULE='%.pong:      %.pong.in      $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
+   INTLTOOL_SERVER_RULE='%.server:    %.server.in    $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -o -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
+    INTLTOOL_SHEET_RULE='%.sheet:     %.sheet.in     $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
+INTLTOOL_SOUNDLIST_RULE='%.soundlist: %.soundlist.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
+       INTLTOOL_UI_RULE='%.ui:        %.ui.in        $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
+      INTLTOOL_XML_RULE='%.xml:       %.xml.in       $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
+if test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge 5000; then
+      INTLTOOL_XML_NOMERGE_RULE='%.xml:       %.xml.in       $(INTLTOOL_MERGE) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u --no-translations $< [$]@'
+else
+      INTLTOOL_XML_NOMERGE_RULE='%.xml:       %.xml.in       $(INTLTOOL_MERGE) ; $(INTLTOOL_V_MERGE)_it_tmp_dir=tmp.intltool.[$][$]RANDOM && mkdir [$][$]_it_tmp_dir && LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u [$][$]_it_tmp_dir $< [$]@ && rmdir [$][$]_it_tmp_dir'
+fi
+      INTLTOOL_XAM_RULE='%.xam:       %.xml.in       $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
+      INTLTOOL_KBD_RULE='%.kbd:       %.kbd.in       $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -m -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
+    INTLTOOL_CAVES_RULE='%.caves:     %.caves.in     $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
+  INTLTOOL_SCHEMAS_RULE='%.schemas:   %.schemas.in   $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -s -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
+    INTLTOOL_THEME_RULE='%.theme:     %.theme.in     $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
+    INTLTOOL_SERVICE_RULE='%.service: %.service.in   $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@'
+   INTLTOOL_POLICY_RULE='%.policy:    %.policy.in    $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@'
 
 _IT_SUBST(INTLTOOL_DESKTOP_RULE)
 _IT_SUBST(INTLTOOL_DIRECTORY_RULE)
@@ -119,7 +140,7 @@ $INTLTOOL_PERL -e "use 5.8.1;" > /dev/null 2>&1
 if test $? -ne 0; then
    AC_MSG_ERROR([perl 5.8.1 is required for intltool])
 else
-   IT_PERL_VERSION="`$INTLTOOL_PERL -e \"printf '%vd', $^V\"`"
+   IT_PERL_VERSION=`$INTLTOOL_PERL -e "printf '%vd', $^V"`
    AC_MSG_RESULT([$IT_PERL_VERSION])
 fi
 if test "x$2" != "xno-xml"; then
diff --git a/lib/Makefile.in b/lib/Makefile.in
index cf0933c..683d80f 100644
--- a/lib/Makefile.in
+++ b/lib/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.2 from Makefile.am.
+# Makefile.in generated by automake 1.11.5 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -16,6 +16,23 @@
 @SET_MAKE@
 
 VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -54,6 +71,11 @@ RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
 	install-pdf-recursive install-ps-recursive install-recursive \
 	installcheck-recursive installdirs-recursive pdf-recursive \
 	ps-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
 am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
 am__vpath_adj = case $$p in \
     $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
@@ -120,6 +142,7 @@ am__relativize = \
 ACLOCAL = @ACLOCAL@
 ALL_LINGUAS = @ALL_LINGUAS@
 AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
@@ -179,6 +202,8 @@ GLIB_SHARP_20_LIBS = @GLIB_SHARP_20_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
 GREP = @GREP@
+GTKSPELL_CFLAGS = @GTKSPELL_CFLAGS@
+GTKSPELL_LIBS = @GTKSPELL_LIBS@
 GTK_SHARP_20_CFLAGS = @GTK_SHARP_20_CFLAGS@
 GTK_SHARP_20_LIBS = @GTK_SHARP_20_LIBS@
 INDICATE_SHARP_CFLAGS = @INDICATE_SHARP_CFLAGS@
@@ -193,6 +218,10 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
 INTLTOOL_MERGE = @INTLTOOL_MERGE@
 INTLTOOL_PERL = @INTLTOOL_PERL@
 INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@
+INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@
+INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@
+INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@
 INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
@@ -308,6 +337,8 @@ htmldir = @htmldir@
 includedir = @includedir@
 infodir = @infodir@
 install_sh = @install_sh@
+intltool__v_merge_options_ = @intltool__v_merge_options_@
+intltool__v_merge_options_0 = @intltool__v_merge_options_0@
 libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
@@ -453,8 +484,11 @@ clean-libtool:
 	-rm -rf .libs _libs
 install-pkgappDATA: $(pkgapp_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(pkgappdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgappdir)"
 	@list='$(pkgapp_DATA)'; test -n "$(pkgappdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(pkgappdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(pkgappdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -637,13 +671,10 @@ distdir: $(DISTFILES)
 	done
 	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
 	  if test "$$subdir" = .; then :; else \
-	    test -d "$(distdir)/$$subdir" \
-	    || $(MKDIR_P) "$(distdir)/$$subdir" \
-	    || exit 1; \
-	  fi; \
-	done
-	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
 	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
 	    $(am__relativize); \
 	    new_distdir=$$reldir; \
diff --git a/lib/Newtonsoft.Json/Src/Newtonsoft.Json/Newtonsoft.Json.csproj b/lib/Newtonsoft.Json/Src/Newtonsoft.Json/Newtonsoft.Json.csproj
index 9a31b5e..3b9feba 100644
--- a/lib/Newtonsoft.Json/Src/Newtonsoft.Json/Newtonsoft.Json.csproj
+++ b/lib/Newtonsoft.Json/Src/Newtonsoft.Json/Newtonsoft.Json.csproj
@@ -1,4 +1,5 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
@@ -10,8 +11,6 @@
     <RootNamespace>Newtonsoft.Json</RootNamespace>
     <AssemblyName>Newtonsoft.Json</AssemblyName>
     <SignAssembly>false</SignAssembly>
-    <AssemblyOriginatorKeyFile>
-    </AssemblyOriginatorKeyFile>
     <SccProjectName>
     </SccProjectName>
     <SccLocalPath>
@@ -40,7 +39,6 @@
     <IsWebBootstrapper>false</IsWebBootstrapper>
     <UseApplicationTrust>false</UseApplicationTrust>
     <BootstrapperEnabled>true</BootstrapperEnabled>
-    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>
diff --git a/lib/SmartIrc4net/Makefile.am b/lib/SmartIrc4net/Makefile.am
index 38b4433..c07b726 100644
--- a/lib/SmartIrc4net/Makefile.am
+++ b/lib/SmartIrc4net/Makefile.am
@@ -3,8 +3,7 @@ SUBDIRS = \
 
 EXTRA_DIST = \
 	$(PACKAGE_NAME).snk \
-	SmartIrc4net.mds \
-	SmartIrc4net.mdp \
+	SmartIrc4net.csproj \
 	API_CHANGE \
 	CHANGELOG \
 	CREDITS \
diff --git a/lib/SmartIrc4net/Makefile.in b/lib/SmartIrc4net/Makefile.in
index b2323f3..652f827 100644
--- a/lib/SmartIrc4net/Makefile.in
+++ b/lib/SmartIrc4net/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.2 from Makefile.am.
+# Makefile.in generated by automake 1.11.5 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -15,6 +15,23 @@
 
 @SET_MAKE@
 VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -56,6 +73,11 @@ RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
 	install-pdf-recursive install-ps-recursive install-recursive \
 	installcheck-recursive installdirs-recursive pdf-recursive \
 	ps-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
 RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
   distclean-recursive maintainer-clean-recursive
 AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
@@ -68,9 +90,11 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 distdir = $(PACKAGE)-$(VERSION)
 top_distdir = $(distdir)
 am__remove_distdir = \
-  { test ! -d "$(distdir)" \
-    || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
-         && rm -fr "$(distdir)"; }; }
+  if test -d "$(distdir)"; then \
+    find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
+      && rm -rf "$(distdir)" \
+      || { sleep 5 && rm -rf "$(distdir)"; }; \
+  else :; fi
 am__relativize = \
   dir0=`pwd`; \
   sed_first='s,^\([^/]*\)/.*$$,\1,'; \
@@ -197,8 +221,7 @@ SUBDIRS = \
 
 EXTRA_DIST = \
 	$(PACKAGE_NAME).snk \
-	SmartIrc4net.mds \
-	SmartIrc4net.mdp \
+	SmartIrc4net.csproj \
 	API_CHANGE \
 	CHANGELOG \
 	CREDITS \
@@ -416,13 +439,10 @@ distdir: $(DISTFILES)
 	done
 	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
 	  if test "$$subdir" = .; then :; else \
-	    test -d "$(distdir)/$$subdir" \
-	    || $(MKDIR_P) "$(distdir)/$$subdir" \
-	    || exit 1; \
-	  fi; \
-	done
-	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
 	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
 	    $(am__relativize); \
 	    new_distdir=$$reldir; \
@@ -457,6 +477,10 @@ dist-bzip2: distdir
 	tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2
 	$(am__remove_distdir)
 
+dist-lzip: distdir
+	tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz
+	$(am__remove_distdir)
+
 dist-lzma: distdir
 	tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma
 	$(am__remove_distdir)
@@ -493,6 +517,8 @@ distcheck: dist
 	  bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
 	*.tar.lzma*) \
 	  lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\
+	*.tar.lz*) \
+	  lzip -dc $(distdir).tar.lz | $(am__untar) ;;\
 	*.tar.xz*) \
 	  xz -dc $(distdir).tar.xz | $(am__untar) ;;\
 	*.tar.Z*) \
@@ -676,15 +702,15 @@ uninstall-am:
 .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
 	all all-am am--refresh check check-am clean clean-generic \
 	ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \
-	dist-lzma dist-shar dist-tarZ dist-xz dist-zip distcheck \
-	distclean distclean-generic distclean-tags distcleancheck \
-	distdir distuninstallcheck dvi dvi-am html html-am info \
-	info-am install install-am install-data install-data-am \
-	install-dvi install-dvi-am install-exec install-exec-am \
-	install-html install-html-am install-info install-info-am \
-	install-man install-pdf install-pdf-am install-ps \
-	install-ps-am install-strip installcheck installcheck-am \
-	installdirs installdirs-am maintainer-clean \
+	dist-lzip dist-lzma dist-shar dist-tarZ dist-xz dist-zip \
+	distcheck distclean distclean-generic distclean-tags \
+	distcleancheck distdir distuninstallcheck dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs installdirs-am maintainer-clean \
 	maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
 	pdf-am ps ps-am tags tags-recursive uninstall uninstall-am
 
diff --git a/lib/SmartIrc4net/SmartIrc4net.csproj b/lib/SmartIrc4net/SmartIrc4net.csproj
new file mode 100644
index 0000000..2056ab0
--- /dev/null
+++ b/lib/SmartIrc4net/SmartIrc4net.csproj
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>10.0.0</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{91D3003B-7E65-4EAF-8EE1-DA43832E7A9C}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <RootNamespace>SmartIrc4net</RootNamespace>
+    <AssemblyName>Meebey.SmartIrc4net</AssemblyName>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\debug</OutputPath>
+    <DefineConstants>TRACE;DEBUG;LOG4NET;NET_2_0</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CheckForOverflowUnderflow>true</CheckForOverflowUnderflow>
+    <ConsolePause>false</ConsolePause>
+    <RunWithWarnings>false</RunWithWarnings>
+    <Execution>
+      <Execution clr-version="Net_2_0" />
+    </Execution>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>none</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\release</OutputPath>
+    <DefineConstants>NET_2_0</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <RunWithWarnings>false</RunWithWarnings>
+    <ConsolePause>false</ConsolePause>
+    <Execution>
+      <Execution clr-version="Net_2_0" />
+    </Execution>
+  </PropertyGroup>
+  <ItemGroup>
+    <Compile Include="src\AssemblyInfo.cs" />
+    <Compile Include="src\Logger.cs" />
+    <Compile Include="src\Consts.cs" />
+    <Compile Include="src\EventArgs.cs" />
+    <Compile Include="src\Exceptions.cs" />
+    <Compile Include="src\IrcConnection\IrcConnection.cs" />
+    <Compile Include="src\IrcConnection\Delegates.cs" />
+    <Compile Include="src\IrcConnection\EventArgs.cs" />
+    <Compile Include="src\IrcCommands\IrcCommands.cs" />
+    <Compile Include="src\IrcCommands\Rfc2812.cs" />
+    <Compile Include="src\IrcClient\IrcClient.cs" />
+    <Compile Include="src\IrcClient\IrcMessageData.cs" />
+    <Compile Include="src\IrcClient\Delegates.cs" />
+    <Compile Include="src\IrcClient\EventArgs.cs" />
+    <Compile Include="src\IrcClient\IrcUser.cs" />
+    <Compile Include="src\IrcClient\Channel.cs" />
+    <Compile Include="src\IrcClient\NonRfcChannel.cs" />
+    <Compile Include="src\IrcClient\ChannelUser.cs" />
+    <Compile Include="src\IrcClient\NonRfcChannelUser.cs" />
+    <Compile Include="src\IrcConnection\IrcProperties.cs" />
+    <Compile Include="src\IrcClient\ChannelInfo.cs" />
+    <Compile Include="src\IrcClient\WhoInfo.cs" />
+    <Compile Include="src\IrcClient\BanInfo.cs" />
+    <Compile Include="src\IrcFeatures\DccChat.cs" />
+    <Compile Include="src\IrcFeatures\DccConnection.cs" />
+    <Compile Include="src\IrcFeatures\DccSend.cs" />
+    <Compile Include="src\IrcFeatures\Delegates.cs" />
+    <Compile Include="src\IrcFeatures\EventArgs.cs" />
+    <Compile Include="src\IrcFeatures\IrcConstants.cs" />
+    <Compile Include="src\IrcFeatures\IrcFeatures.cs" />
+    <Compile Include="src\StarkSoftProxy\HttpProxyClient.cs" />
+    <Compile Include="src\StarkSoftProxy\IProxyClient.cs" />
+    <Compile Include="src\StarkSoftProxy\ProxyClientFactory.cs" />
+    <Compile Include="src\StarkSoftProxy\Socks4ProxyClient.cs" />
+    <Compile Include="src\StarkSoftProxy\Socks4aProxyClient.cs" />
+    <Compile Include="src\StarkSoftProxy\Socks5ProxyClient.cs" />
+    <Compile Include="src\StarkSoftProxy\Utils.cs" />
+    <Compile Include="src\StarkSoftProxy\EventArgs\CreateConnectionAsyncCompletedEventArgs.cs" />
+    <Compile Include="src\StarkSoftProxy\Exceptions\ProxyException.cs" />
+    <Compile Include="src\IrcConnection\ProxyType.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="log4net, Version=1.2.9.0, Culture=neutral, PublicKeyToken=a5715cc6d5c3540b">
+      <Package>log4net</Package>
+    </Reference>
+    <Reference Include="System.Core" />
+  </ItemGroup>
+  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+</Project>
\ No newline at end of file
diff --git a/lib/SmartIrc4net/SmartIrc4net.mdp b/lib/SmartIrc4net/SmartIrc4net.mdp
deleted file mode 100644
index 3ce4b72..0000000
--- a/lib/SmartIrc4net/SmartIrc4net.mdp
+++ /dev/null
@@ -1,64 +0,0 @@
-<Project name="SmartIrc4net" fileversion="2.0" DefaultNamespace="SmartIrc4net" language="C#" clr-version="Net_2_0" targetFramework="3.5" ctype="DotNetProject">
-  <Configurations active="Debug">
-    <Configuration name="Debug" ctype="DotNetProjectConfiguration">
-      <Output directory="bin/debug" assembly="Meebey.SmartIrc4net" />
-      <Build debugmode="True" target="Library" />
-      <Execution consolepause="False" runwithwarnings="False" runtime="MsNet" clr-version="Net_2_0" />
-      <CodeGeneration compiler="Mcs" warninglevel="4" optimize="False" unsafecodeallowed="False" generateoverflowchecks="True" definesymbols="TRACE,DEBUG,LOG4NET,NET_2_0" generatexmldocumentation="False" ctype="CSharpCompilerParameters" />
-    </Configuration>
-    <Configuration name="Release" ctype="DotNetProjectConfiguration">
-      <Output directory="bin/release" assembly="Meebey.SmartIrc4net" />
-      <Build debugmode="False" target="Library" />
-      <Execution consolepause="False" runwithwarnings="False" runtime="MsNet" clr-version="Net_2_0" />
-      <CodeGeneration compiler="Mcs" warninglevel="4" optimize="True" unsafecodeallowed="False" generateoverflowchecks="False" definesymbols="NET_2_0" generatexmldocumentation="False" ctype="CSharpCompilerParameters" />
-    </Configuration>
-  </Configurations>
-  <Contents>
-    <File subtype="Code" buildaction="Compile" name="src/AssemblyInfo.cs" />
-    <File subtype="Code" buildaction="Compile" name="src/Logger.cs" />
-    <File subtype="Code" buildaction="Compile" name="src/Consts.cs" />
-    <File subtype="Code" buildaction="Compile" name="src/EventArgs.cs" />
-    <File subtype="Code" buildaction="Compile" name="src/Exceptions.cs" />
-    <File subtype="Code" buildaction="Compile" name="src/IrcConnection/IrcConnection.cs" />
-    <File subtype="Code" buildaction="Compile" name="src/IrcConnection/Delegates.cs" />
-    <File subtype="Code" buildaction="Compile" name="src/IrcConnection/EventArgs.cs" />
-    <File subtype="Code" buildaction="Compile" name="src/IrcCommands/IrcCommands.cs" />
-    <File subtype="Code" buildaction="Compile" name="src/IrcCommands/Rfc2812.cs" />
-    <File subtype="Code" buildaction="Compile" name="src/IrcClient/IrcClient.cs" />
-    <File subtype="Code" buildaction="Compile" name="src/IrcClient/IrcMessageData.cs" />
-    <File subtype="Code" buildaction="Compile" name="src/IrcClient/Delegates.cs" />
-    <File subtype="Code" buildaction="Compile" name="src/IrcClient/EventArgs.cs" />
-    <File subtype="Code" buildaction="Compile" name="src/IrcClient/IrcUser.cs" />
-    <File subtype="Code" buildaction="Compile" name="src/IrcClient/Channel.cs" />
-    <File subtype="Code" buildaction="Compile" name="src/IrcClient/NonRfcChannel.cs" />
-    <File subtype="Code" buildaction="Compile" name="src/IrcClient/ChannelUser.cs" />
-    <File subtype="Code" buildaction="Compile" name="src/IrcClient/NonRfcChannelUser.cs" />
-    <File subtype="Code" buildaction="Compile" name="src/IrcConnection/IrcProperties.cs" />
-    <File subtype="Code" buildaction="Compile" name="src/IrcClient/ChannelInfo.cs" />
-    <File subtype="Code" buildaction="Compile" name="src/IrcClient/WhoInfo.cs" />
-    <File subtype="Code" buildaction="Compile" name="src/IrcClient/BanInfo.cs" />
-    <File subtype="Code" buildaction="Compile" name="src/IrcFeatures/DccChat.cs" />
-    <File subtype="Code" buildaction="Compile" name="src/IrcFeatures/DccConnection.cs" />
-    <File subtype="Code" buildaction="Compile" name="src/IrcFeatures/DccSend.cs" />
-    <File subtype="Code" buildaction="Compile" name="src/IrcFeatures/Delegates.cs" />
-    <File subtype="Code" buildaction="Compile" name="src/IrcFeatures/EventArgs.cs" />
-    <File subtype="Code" buildaction="Compile" name="src/IrcFeatures/IrcConstants.cs" />
-    <File subtype="Code" buildaction="Compile" name="src/IrcFeatures/IrcFeatures.cs" />
-    <File subtype="Code" buildaction="Compile" name="src/StarkSoftProxy/HttpProxyClient.cs" />
-    <File subtype="Code" buildaction="Compile" name="src/StarkSoftProxy/IProxyClient.cs" />
-    <File subtype="Code" buildaction="Compile" name="src/StarkSoftProxy/ProxyClientFactory.cs" />
-    <File subtype="Code" buildaction="Compile" name="src/StarkSoftProxy/Socks4ProxyClient.cs" />
-    <File subtype="Code" buildaction="Compile" name="src/StarkSoftProxy/Socks4aProxyClient.cs" />
-    <File subtype="Code" buildaction="Compile" name="src/StarkSoftProxy/Socks5ProxyClient.cs" />
-    <File subtype="Code" buildaction="Compile" name="src/StarkSoftProxy/Utils.cs" />
-    <File subtype="Code" buildaction="Compile" name="src/StarkSoftProxy/EventArgs/CreateConnectionAsyncCompletedEventArgs.cs" />
-    <File subtype="Code" buildaction="Compile" name="src/StarkSoftProxy/Exceptions/ProxyException.cs" />
-    <File subtype="Code" buildaction="Compile" name="src/IrcConnection/ProxyType.cs" />
-  </Contents>
-  <References>
-    <ProjectReference type="Gac" localcopy="True" refto="System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
-    <ProjectReference type="Gac" localcopy="True" refto="log4net, Version=1.2.9.0, Culture=neutral, PublicKeyToken=a5715cc6d5c3540b" />
-    <ProjectReference type="Gac" localcopy="True" refto="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
-  </References>
-  <DeploymentInformation strategy="File" />
-</Project>
\ No newline at end of file
diff --git a/lib/SmartIrc4net/SmartIrc4net.mds b/lib/SmartIrc4net/SmartIrc4net.mds
deleted file mode 100644
index 496c09c..0000000
--- a/lib/SmartIrc4net/SmartIrc4net.mds
+++ /dev/null
@@ -1,33 +0,0 @@
-<Combine fileversion="2.0" releaseversion="0.4.5" name="SmartIrc4net">
-  <Policies>
-    <ChangeLogPolicy UpdateMode="Nearest" inheritsSet="Mono">
-      <MessageStyle LineAlign="0" />
-    </ChangeLogPolicy>
-    <TextStylePolicy RemoveTrailingWhitespace="True" inheritsSet="VisualStudio" inheritsScope="text/plain" scope="text/plain" />
-    <TextStylePolicy inheritsSet="null" scope="text/x-csharp" />
-    <CSharpFormattingPolicy IndentSwitchBody="True" AllowPropertyGetBlockInline="False" AllowPropertySetBlockInline="False" IfElseBraceForcement="AddBraces" ForBraceForcement="AddBraces" ForEachBraceForcement="AddBraces" WhileBraceForcement="AddBraces" UsingBraceForcement="AddBraces" FixedBraceForcement="AddBraces" BeforeMethodCallParentheses="False" BeforeMethodDeclarationParentheses="False" BeforeConstructorDeclarationParentheses="False" BeforeDelegateDeclarationParentheses="False" NewParentheses="False" inheritsSet="Mono" inheritsScope="text/x-csharp" scope="text/x-csharp" />
-    <StandardHeader Text=" SmartIrc4net - the IRC library for .NET/C# <http://smartirc4net.sf.net>&#xA;&#xA; Copyright (c) ${Year} ${CopyrightHolder}&#xA;&#xA; Full LGPL License: <http://www.gnu.org/licenses/lgpl.txt>&#xA;&#xA; This library is free software; you can redistribute it and/or modify&#xA; it under the terms of the GNU Lesser General Public License as&#xA; published by the Free Software Foundation; either version 2.1 of the&#xA; License, or (at your option) any later version.&#xA;&#xA; This library is distributed in the hope that it will be useful, but&#xA; WITHOUT ANY WARRANTY; without even the implied warranty of&#xA; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU&#xA; Lesser General Public License for more details.&#xA;&#xA; You should have received a copy of the GNU Lesser General Public&#xA; License along with this library; if not, write to the Free Software&#xA; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA" inheritsSet="Apache2License" />
-  </Policies>
-  <Configurations active="Debug">
-    <Configuration name="Release" ctype="CombineConfiguration">
-      <Entry build="True" name="SmartIrc4net" configuration="Release" />
-      <Entry build="True" name="Test" configuration="Release" />
-      <Entry build="True" name="Benchmark" configuration="Release" />
-    </Configuration>
-    <Configuration name="Debug" ctype="CombineConfiguration">
-      <Entry build="True" name="SmartIrc4net" configuration="Debug" />
-      <Entry build="True" name="Test" configuration="Debug" />
-      <Entry build="True" name="Benchmark" configuration="Debug" />
-    </Configuration>
-  </Configurations>
-  <StartMode startupentry="Benchmark" single="True">
-    <Execute type="None" entry="SmartIrc4net" />
-    <Execute type="None" entry="Test" />
-    <Execute type="None" entry="Benchmark" />
-  </StartMode>
-  <Entries>
-    <Entry filename="SmartIrc4net.mdp" />
-    <Entry filename="examples/test/MonoDevelop/test.mdp" />
-    <Entry filename="examples/benchmark/MonoDevelop/benchmark.mdp" />
-  </Entries>
-</Combine>
\ No newline at end of file
diff --git a/lib/SmartIrc4net/aclocal.m4 b/lib/SmartIrc4net/aclocal.m4
index b69c910..116159c 100644
--- a/lib/SmartIrc4net/aclocal.m4
+++ b/lib/SmartIrc4net/aclocal.m4
@@ -1,4 +1,4 @@
-# generated automatically by aclocal 1.11.2 -*- Autoconf -*-
+# generated automatically by aclocal 1.11.5 -*- Autoconf -*-
 
 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
 # 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation,
@@ -14,8 +14,8 @@
 
 m4_ifndef([AC_AUTOCONF_VERSION],
   [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
-m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],,
-[m4_warning([this file was generated for autoconf 2.68.
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],,
+[m4_warning([this file was generated for autoconf 2.69.
 You have another version of autoconf.  It may work, but is not guaranteed to.
 If you have problems, you may need to regenerate the build system entirely.
 To do so, use the procedure documented by the package, typically `autoreconf'.])])
@@ -198,7 +198,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION],
 [am__api_version='1.11'
 dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
 dnl require some minimum version.  Point them to the right macro.
-m4_if([$1], [1.11.2], [],
+m4_if([$1], [1.11.5], [],
       [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
 ])
 
@@ -214,7 +214,7 @@ m4_define([_AM_AUTOCONF_VERSION], [])
 # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
 # This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
 AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
-[AM_AUTOMAKE_VERSION([1.11.2])dnl
+[AM_AUTOMAKE_VERSION([1.11.5])dnl
 m4_ifndef([AC_AUTOCONF_VERSION],
   [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
 _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
@@ -756,7 +756,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
 
 # Check how to create a tarball.                            -*- Autoconf -*-
 
-# Copyright (C) 2004, 2005  Free Software Foundation, Inc.
+# Copyright (C) 2004, 2005, 2012 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -778,10 +778,11 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
 # a tarball read from stdin.
 #     $(am__untar) < result.tar
 AC_DEFUN([_AM_PROG_TAR],
-[# Always define AMTAR for backward compatibility.
-AM_MISSING_PROG([AMTAR], [tar])
+[# Always define AMTAR for backward compatibility.  Yes, it's still used
+# in the wild :-(  We should find a proper way to deprecate it ...
+AC_SUBST([AMTAR], ['$${TAR-tar}'])
 m4_if([$1], [v7],
-     [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
+     [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'],
      [m4_case([$1], [ustar],, [pax],,
               [m4_fatal([Unknown tar format])])
 AC_MSG_CHECKING([how to create a $1 tar archive])
diff --git a/lib/SmartIrc4net/configure b/lib/SmartIrc4net/configure
index f9fa34a..00f1a33 100755
--- a/lib/SmartIrc4net/configure
+++ b/lib/SmartIrc4net/configure
@@ -1,11 +1,9 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.68 for smartirc4net 0.4.5.1.
+# Generated by GNU Autoconf 2.69 for smartirc4net 0.4.5.1.
 #
 #
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
-# Foundation, Inc.
+# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
 #
 #
 # This configure script is free software; the Free Software Foundation
@@ -134,6 +132,31 @@ export LANGUAGE
 # CDPATH.
 (unset CDPATH) >/dev/null 2>&1 && unset CDPATH
 
+# Use a proper internal environment variable to ensure we don't fall
+  # into an infinite loop, continuously re-executing ourselves.
+  if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
+    _as_can_reexec=no; export _as_can_reexec;
+    # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+  *v*x* | *x*v* ) as_opts=-vx ;;
+  *v* ) as_opts=-v ;;
+  *x* ) as_opts=-x ;;
+  * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+as_fn_exit 255
+  fi
+  # We don't want this to propagate to other subprocesses.
+          { _as_can_reexec=; unset _as_can_reexec;}
 if test "x$CONFIG_SHELL" = x; then
   as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
   emulate sh
@@ -167,7 +190,8 @@ if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
 else
   exitcode=1; echo positional parameters were not saved.
 fi
-test x\$exitcode = x0 || exit 1"
+test x\$exitcode = x0 || exit 1
+test -x / || exit 1"
   as_suggested="  as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
   as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
   eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
@@ -211,21 +235,25 @@ IFS=$as_save_IFS
 
 
       if test "x$CONFIG_SHELL" != x; then :
-  # We cannot yet assume a decent shell, so we have to provide a
-	# neutralization value for shells without unset; and this also
-	# works around shells that cannot unset nonexistent variables.
-	# Preserve -v and -x to the replacement shell.
-	BASH_ENV=/dev/null
-	ENV=/dev/null
-	(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-	export CONFIG_SHELL
-	case $- in # ((((
-	  *v*x* | *x*v* ) as_opts=-vx ;;
-	  *v* ) as_opts=-v ;;
-	  *x* ) as_opts=-x ;;
-	  * ) as_opts= ;;
-	esac
-	exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"}
+  export CONFIG_SHELL
+             # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+  *v*x* | *x*v* ) as_opts=-vx ;;
+  *v* ) as_opts=-v ;;
+  *x* ) as_opts=-x ;;
+  * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+exit 255
 fi
 
     if test x$as_have_required = xno; then :
@@ -327,6 +355,14 @@ $as_echo X"$as_dir" |
 
 
 } # as_fn_mkdir_p
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+  test -f "$1" && test -x "$1"
+} # as_fn_executable_p
 # as_fn_append VAR VALUE
 # ----------------------
 # Append the text in VALUE to the end of the definition contained in VAR. Take
@@ -448,6 +484,10 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits
   chmod +x "$as_me.lineno" ||
     { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
 
+  # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
+  # already done that, so ensure we don't try to do so again and fall
+  # in an infinite loop.  This has already happened in practice.
+  _as_can_reexec=no; export _as_can_reexec
   # Don't try to exec as it changes $[0], causing all sort of problems
   # (the dirname of $[0] is not the place where we might find the
   # original and so on.  Autoconf is especially sensitive to this).
@@ -482,16 +522,16 @@ if (echo >conf$$.file) 2>/dev/null; then
     # ... but there are two gotchas:
     # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
     # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-    # In both cases, we have to default to `cp -p'.
+    # In both cases, we have to default to `cp -pR'.
     ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
-      as_ln_s='cp -p'
+      as_ln_s='cp -pR'
   elif ln conf$$.file conf$$ 2>/dev/null; then
     as_ln_s=ln
   else
-    as_ln_s='cp -p'
+    as_ln_s='cp -pR'
   fi
 else
-  as_ln_s='cp -p'
+  as_ln_s='cp -pR'
 fi
 rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
 rmdir conf$$.dir 2>/dev/null
@@ -503,28 +543,8 @@ else
   as_mkdir_p=false
 fi
 
-if test -x / >/dev/null 2>&1; then
-  as_test_x='test -x'
-else
-  if ls -dL / >/dev/null 2>&1; then
-    as_ls_L_option=L
-  else
-    as_ls_L_option=
-  fi
-  as_test_x='
-    eval sh -c '\''
-      if test -d "$1"; then
-	test -d "$1/.";
-      else
-	case $1 in #(
-	-*)set "./$1";;
-	esac;
-	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
-	???[sx]*):;;*)false;;esac;fi
-    '\'' sh
-  '
-fi
-as_executable_p=$as_test_x
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
 
 # Sed expression to map a string onto a valid CPP name.
 as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
@@ -1121,8 +1141,6 @@ target=$target_alias
 if test "x$host_alias" != x; then
   if test "x$build_alias" = x; then
     cross_compiling=maybe
-    $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host.
-    If a cross compiler is detected then cross compile mode will be used" >&2
   elif test "x$build_alias" != "x$host_alias"; then
     cross_compiling=yes
   fi
@@ -1366,9 +1384,9 @@ test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
 smartirc4net configure 0.4.5.1
-generated by GNU Autoconf 2.68
+generated by GNU Autoconf 2.69
 
-Copyright (C) 2010 Free Software Foundation, Inc.
+Copyright (C) 2012 Free Software Foundation, Inc.
 This configure script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it.
 _ACEOF
@@ -1383,7 +1401,7 @@ This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
 It was created by smartirc4net $as_me 0.4.5.1, which was
-generated by GNU Autoconf 2.68.  Invocation command line was
+generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
 
@@ -1798,7 +1816,7 @@ case $as_dir/ in #((
     # by default.
     for ac_prog in ginstall scoinst install; do
       for ac_exec_ext in '' $ac_executable_extensions; do
-	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+	if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
 	  if test $ac_prog = install &&
 	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
 	    # AIX install.  It has an incompatible calling convention.
@@ -1967,7 +1985,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_STRIP="${ac_tool_prefix}strip"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -2007,7 +2025,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_STRIP="strip"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -2058,7 +2076,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_prog in mkdir gmkdir; do
 	 for ac_exec_ext in '' $ac_executable_extensions; do
-	   { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue
+	   as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue
 	   case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
 	     'mkdir (GNU coreutils) '* | \
 	     'mkdir (coreutils) '* | \
@@ -2111,7 +2129,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_AWK="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -2227,11 +2245,11 @@ MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
 
 # We need awk for the "check" target.  The system "awk" is bad on
 # some platforms.
-# Always define AMTAR for backward compatibility.
-
-AMTAR=${AMTAR-"${am_missing_run}tar"}
+# Always define AMTAR for backward compatibility.  Yes, it's still used
+# in the wild :-(  We should find a proper way to deprecate it ...
+AMTAR='$${TAR-tar}'
 
-am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
+am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'
 
 
 
@@ -2313,7 +2331,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -2356,7 +2374,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -2520,7 +2538,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_MONO="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -2573,7 +2591,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_MCS="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -2647,7 +2665,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_GACUTIL="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3192,16 +3210,16 @@ if (echo >conf$$.file) 2>/dev/null; then
     # ... but there are two gotchas:
     # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
     # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-    # In both cases, we have to default to `cp -p'.
+    # In both cases, we have to default to `cp -pR'.
     ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
-      as_ln_s='cp -p'
+      as_ln_s='cp -pR'
   elif ln conf$$.file conf$$ 2>/dev/null; then
     as_ln_s=ln
   else
-    as_ln_s='cp -p'
+    as_ln_s='cp -pR'
   fi
 else
-  as_ln_s='cp -p'
+  as_ln_s='cp -pR'
 fi
 rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
 rmdir conf$$.dir 2>/dev/null
@@ -3261,28 +3279,16 @@ else
   as_mkdir_p=false
 fi
 
-if test -x / >/dev/null 2>&1; then
-  as_test_x='test -x'
-else
-  if ls -dL / >/dev/null 2>&1; then
-    as_ls_L_option=L
-  else
-    as_ls_L_option=
-  fi
-  as_test_x='
-    eval sh -c '\''
-      if test -d "$1"; then
-	test -d "$1/.";
-      else
-	case $1 in #(
-	-*)set "./$1";;
-	esac;
-	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
-	???[sx]*):;;*)false;;esac;fi
-    '\'' sh
-  '
-fi
-as_executable_p=$as_test_x
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+  test -f "$1" && test -x "$1"
+} # as_fn_executable_p
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
 
 # Sed expression to map a string onto a valid CPP name.
 as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
@@ -3304,7 +3310,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # values after options handling.
 ac_log="
 This file was extended by smartirc4net $as_me 0.4.5.1, which was
-generated by GNU Autoconf 2.68.  Invocation command line was
+generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
   CONFIG_HEADERS  = $CONFIG_HEADERS
@@ -3357,10 +3363,10 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
 smartirc4net config.status 0.4.5.1
-configured by $0, generated by GNU Autoconf 2.68,
+configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
-Copyright (C) 2010 Free Software Foundation, Inc.
+Copyright (C) 2012 Free Software Foundation, Inc.
 This config.status script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it."
 
@@ -3440,7 +3446,7 @@ fi
 _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 if \$ac_cs_recheck; then
-  set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+  set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
   shift
   \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
   CONFIG_SHELL='$SHELL'
diff --git a/lib/SmartIrc4net/src/IrcClient/IrcClient.cs b/lib/SmartIrc4net/src/IrcClient/IrcClient.cs
index 6374119..9a500b1 100644
--- a/lib/SmartIrc4net/src/IrcClient/IrcClient.cs
+++ b/lib/SmartIrc4net/src/IrcClient/IrcClient.cs
@@ -1868,6 +1868,10 @@ namespace Meebey.SmartIrc4net
         {
             string channelname = ircdata.Channel;
             string who = ircdata.Nick;
+            if (String.IsNullOrEmpty(who)) {
+                // the server itself kicked
+                who = ircdata.From;
+            }
             string whom = ircdata.RawMessageArray[3];
             string reason = ircdata.Message;
             bool isme = IsMe(whom);          
diff --git a/lib/SmartIrc4net/src/Makefile.in b/lib/SmartIrc4net/src/Makefile.in
index bcb9cc4..0766f08 100644
--- a/lib/SmartIrc4net/src/Makefile.in
+++ b/lib/SmartIrc4net/src/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.2 from Makefile.am.
+# Makefile.in generated by automake 1.11.5 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -16,6 +16,23 @@
 @SET_MAKE@
 
 VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -46,6 +63,11 @@ CONFIG_CLEAN_FILES = AssemblyInfo.cs
 CONFIG_CLEAN_VPATH_FILES =
 SOURCES =
 DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
 am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
 am__vpath_adj = case $$p in \
     $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
@@ -224,8 +246,11 @@ AssemblyInfo.cs: $(top_builddir)/config.status $(srcdir)/AssemblyInfo.cs.in
 	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
 install-pkgappDATA: $(pkgapp_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(pkgappdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgappdir)"
 	@list='$(pkgapp_DATA)'; test -n "$(pkgappdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(pkgappdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(pkgappdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -242,8 +267,11 @@ uninstall-pkgappDATA:
 	dir='$(DESTDIR)$(pkgappdir)'; $(am__uninstall_files_from_dir)
 install-pkgconfigDATA: $(pkgconfig_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)"
 	@list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
diff --git a/lib/SmartIrc4net/src/StarkSoftProxy/Socks5ProxyClient.cs b/lib/SmartIrc4net/src/StarkSoftProxy/Socks5ProxyClient.cs
index 9ad618a..7c2f426 100644
--- a/lib/SmartIrc4net/src/StarkSoftProxy/Socks5ProxyClient.cs
+++ b/lib/SmartIrc4net/src/StarkSoftProxy/Socks5ProxyClient.cs
@@ -395,7 +395,7 @@ namespace Starksoft.Net.Proxy
                 //       +----+------+----------+------+----------+
 
                 byte[] credentials = new byte[_proxyUserName.Length + _proxyPassword.Length + 3];
-                credentials[0] = SOCKS5_VERSION_NUMBER;
+                credentials[0] = 1;
                 credentials[1] = (byte)_proxyUserName.Length; 
                 Array.Copy(ASCIIEncoding.ASCII.GetBytes(_proxyUserName), 0, credentials, 2, _proxyUserName.Length); 
                 credentials[_proxyUserName.Length + 2] = (byte)_proxyPassword.Length;
@@ -414,6 +414,15 @@ namespace Starksoft.Net.Proxy
                 // A STATUS field of X'00' indicates success. If the server returns a
                 // `failure' (STATUS value other than X'00') status, it MUST close the
                 // connection.
+                stream.Write(credentials, 0, credentials.Length);
+                byte[] crResponse = new byte[2];
+                stream.Read(crResponse, 0, crResponse.Length);
+
+                if (crResponse[1] != 0)
+                {
+                    _tcpClient.Close();
+                    throw new ProxyException("Proxy authentification failure!");
+                }
             }
         }
 
@@ -533,12 +542,12 @@ namespace Starksoft.Net.Proxy
             byte[] response = new byte[255];
             
             // read proxy server response
-            stream.Read(response, 0, response.Length);
+            var responseSize = stream.Read(response, 0, response.Length);
             
             byte replyCode = response[1];
 
             //  evaluate the reply code for an error condition
-            if (replyCode != SOCKS5_CMD_REPLY_SUCCEEDED)
+            if (responseSize < 2  || replyCode != SOCKS5_CMD_REPLY_SUCCEEDED)
                 HandleProxyCommandError(response, destinationHost, destinationPort );
         }
 
diff --git a/lib/Twitterizer/Twitterizer2/Twitterizer2.csproj b/lib/Twitterizer/Twitterizer2/Twitterizer2.csproj
index a80e715..3795d72 100644
--- a/lib/Twitterizer/Twitterizer2/Twitterizer2.csproj
+++ b/lib/Twitterizer/Twitterizer2/Twitterizer2.csproj
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
@@ -15,11 +15,8 @@
     <FileUpgradeFlags>
     </FileUpgradeFlags>
     <OldToolsVersion>3.5</OldToolsVersion>
-    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
     <UpgradeBackupLocation />
     <IsWebBootstrapper>false</IsWebBootstrapper>
-    <TargetFrameworkProfile>
-    </TargetFrameworkProfile>
     <PublishUrl>publish\</PublishUrl>
     <Install>true</Install>
     <InstallFrom>Disk</InstallFrom>
@@ -65,6 +62,8 @@
     <PlatformTarget>AnyCPU</PlatformTarget>
     <ErrorReport>prompt</ErrorReport>
     <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+    <WarningLevel>4</WarningLevel>
+    <Optimize>false</Optimize>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Mono-Release|AnyCPU' ">
     <OutputPath>bin\Mono-Release\</OutputPath>
@@ -76,6 +75,7 @@
     <PlatformTarget>AnyCPU</PlatformTarget>
     <ErrorReport>prompt</ErrorReport>
     <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+    <WarningLevel>4</WarningLevel>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'CCNET|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>
@@ -86,17 +86,19 @@
     <PlatformTarget>AnyCPU</PlatformTarget>
     <ErrorReport>prompt</ErrorReport>
     <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+    <WarningLevel>4</WarningLevel>
+    <Optimize>false</Optimize>
   </PropertyGroup>
   <PropertyGroup>
     <RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>
   </PropertyGroup>
   <ItemGroup>
     <Reference Include="System" />
-    <Reference Include="System.configuration" />
     <Reference Include="System.Drawing" />
     <Reference Include="System.Runtime.Serialization" />
     <Reference Include="System.Web" />
     <Reference Include="System.Xml" />
+    <Reference Include="System.Configuration" />
   </ItemGroup>
   <ItemGroup>
     <Compile Include="..\CommonAssemblyInfo.cs">
diff --git a/lib/jabber-net/2005-jabber-net.csproj b/lib/jabber-net/2005-jabber-net.csproj
index c375385..6a6ec8a 100644
--- a/lib/jabber-net/2005-jabber-net.csproj
+++ b/lib/jabber-net/2005-jabber-net.csproj
@@ -1,4 +1,5 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
   <PropertyGroup>
     <ProjectType>Local</ProjectType>
     <ProductVersion>8.0.50727</ProductVersion>
@@ -6,8 +7,6 @@
     <ProjectGuid>{6CAE854A-F202-4D2B-B10E-E8D8E81E5EF5}</ProjectGuid>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ApplicationIcon>
-    </ApplicationIcon>
     <AssemblyKeyContainerName>
     </AssemblyKeyContainerName>
     <AssemblyName>jabber-net</AssemblyName>
@@ -17,25 +16,19 @@
     <DefaultTargetSchema>IE50</DefaultTargetSchema>
     <DelaySign>false</DelaySign>
     <OutputType>Library</OutputType>
-    <RootNamespace>
-    </RootNamespace>
+    <RootNamespace>jabbernet</RootNamespace>
     <RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>
-    <StartupObject>
-    </StartupObject>
     <FileUpgradeFlags>
     </FileUpgradeFlags>
     <UpgradeBackupLocation>
     </UpgradeBackupLocation>
     <SignAssembly>true</SignAssembly>
-    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <OutputPath>bin5\Debug\</OutputPath>
     <BaseIntermediateOutputPath>obj5\</BaseIntermediateOutputPath>
     <IntermediateOutputPath>obj5\Debug\</IntermediateOutputPath>
-    <AllowUnsafeBlocks>false</AllowUnsafeBlocks>
     <BaseAddress>285212672</BaseAddress>
-    <CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>
     <ConfigurationOverrideFile>
     </ConfigurationOverrideFile>
     <DefineConstants Condition="'$(BuildMono)'==''">TRACE;DEBUG;NET20 NO_SRV</DefineConstants>
@@ -43,13 +36,9 @@
     <DocumentationFile>2005-jabber-net.xml</DocumentationFile>
     <DebugSymbols>true</DebugSymbols>
     <FileAlignment>4096</FileAlignment>
-    <NoStdLib>false</NoStdLib>
-    <NoWarn>
-    </NoWarn>
     <Optimize>false</Optimize>
     <RegisterForComInterop>false</RegisterForComInterop>
     <RemoveIntegerChecks>false</RemoveIntegerChecks>
-    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
     <WarningLevel>4</WarningLevel>
     <DebugType>full</DebugType>
     <ErrorReport>prompt</ErrorReport>
@@ -58,23 +47,16 @@
     <OutputPath>bin5\Release\</OutputPath>
     <BaseIntermediateOutputPath>obj5\</BaseIntermediateOutputPath>
     <IntermediateOutputPath>obj5\Debug\</IntermediateOutputPath>
-    <AllowUnsafeBlocks>false</AllowUnsafeBlocks>
     <BaseAddress>285212672</BaseAddress>
-    <CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>
     <ConfigurationOverrideFile>
     </ConfigurationOverrideFile>
     <DefineConstants Condition="'$(BuildMono)'==''">TRACE;NET20 NO_SRV</DefineConstants>
     <DefineConstants Condition="'$(BuildMono)'=='true'">TRACE;NO_SRV</DefineConstants>
     <DocumentationFile>2005-jabber-net.xml</DocumentationFile>
-    <DebugSymbols>false</DebugSymbols>
     <FileAlignment>4096</FileAlignment>
-    <NoStdLib>false</NoStdLib>
-    <NoWarn>
-    </NoWarn>
     <Optimize>true</Optimize>
     <RegisterForComInterop>false</RegisterForComInterop>
     <RemoveIntegerChecks>false</RemoveIntegerChecks>
-    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
     <WarningLevel>4</WarningLevel>
     <DebugType>none</DebugType>
     <ErrorReport>prompt</ErrorReport>
@@ -424,12 +406,18 @@
     <Compile Include="xpnet\UTF8Encoding.cs">
       <SubType>Code</SubType>
     </Compile>
-    <EmbeddedResource Include="jabber\client\JabberClient.bmp" />
+    <EmbeddedResource Include="jabber\client\JabberClient.bmp">
+      <LogicalName>jabber.client.JabberClient.bmp</LogicalName>
+    </EmbeddedResource>
     <EmbeddedResource Include="jabber\client\JabberClient.resx">
       <DependentUpon>JabberClient.cs</DependentUpon>
     </EmbeddedResource>
-    <EmbeddedResource Include="jabber\client\PresenceManager.bmp" />
-    <EmbeddedResource Include="jabber\client\RosterManager.bmp" />
+    <EmbeddedResource Include="jabber\client\PresenceManager.bmp">
+      <LogicalName>jabber.client.PresenceManager.bmp</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="jabber\client\RosterManager.bmp">
+      <LogicalName>jabber.client.RosterManager.bmp</LogicalName>
+    </EmbeddedResource>
     <EmbeddedResource Include="jabber\client\RosterManager.resx">
       <DependentUpon>RosterManager.cs</DependentUpon>
     </EmbeddedResource>
@@ -437,7 +425,9 @@
       <DependentUpon>XmppStream.cs</DependentUpon>
       <SubType>Designer</SubType>
     </EmbeddedResource>
-    <EmbeddedResource Include="jabber\server\JabberService.bmp" />
+    <EmbeddedResource Include="jabber\server\JabberService.bmp">
+      <LogicalName>jabber.server.JabberService.bmp</LogicalName>
+    </EmbeddedResource>
     <EmbeddedResource Include="jabber\server\JabberService.resx">
       <DependentUpon>JabberService.cs</DependentUpon>
     </EmbeddedResource>
@@ -446,20 +436,28 @@
     <None Include="jabbernet.key" />
   </ItemGroup>
   <ItemGroup>
-    <EmbeddedResource Include="jabber\connection\DiscoManager.bmp" />
+    <EmbeddedResource Include="jabber\connection\DiscoManager.bmp">
+      <LogicalName>jabber.connection.DiscoManager.bmp</LogicalName>
+    </EmbeddedResource>
   </ItemGroup>
   <ItemGroup>
-    <EmbeddedResource Include="jabber\connection\CapsManager.bmp" />
+    <EmbeddedResource Include="jabber\connection\CapsManager.bmp">
+      <LogicalName>jabber.connection.CapsManager.bmp</LogicalName>
+    </EmbeddedResource>
   </ItemGroup>
   <ItemGroup>
-    <EmbeddedResource Include="jabber\connection\PubSubManager.bmp" />
+    <EmbeddedResource Include="jabber\connection\PubSubManager.bmp">
+      <LogicalName>jabber.connection.PubSubManager.bmp</LogicalName>
+    </EmbeddedResource>
   </ItemGroup>
   <ItemGroup>
     <EmbeddedResource Include="jabber\connection\CertificatePrompt.resx">
       <SubType>Designer</SubType>
       <DependentUpon>CertificatePrompt.cs</DependentUpon>
     </EmbeddedResource>
-    <EmbeddedResource Include="jabber\connection\ConferenceManager.bmp" />
+    <EmbeddedResource Include="jabber\connection\ConferenceManager.bmp">
+      <LogicalName>jabber.connection.ConferenceManager.bmp</LogicalName>
+    </EmbeddedResource>
   </ItemGroup>
   <ItemGroup>
     <ProjectReference Condition="'$(BuildMono)'==''" Include="netlib.Dns\netlib.Dns.csproj">
diff --git a/ltmain.sh b/ltmain.sh
index c7d06c3..33f642a 100644
--- a/ltmain.sh
+++ b/ltmain.sh
@@ -70,7 +70,7 @@
 #         compiler:		$LTCC
 #         compiler flags:		$LTCFLAGS
 #         linker:		$LD (gnu? $with_gnu_ld)
-#         $progname:	(GNU libtool) 2.4.2 Debian-2.4.2-1
+#         $progname:	(GNU libtool) 2.4.2 Debian-2.4.2-1.1
 #         automake:	$automake_version
 #         autoconf:	$autoconf_version
 #
@@ -80,7 +80,7 @@
 
 PROGRAM=libtool
 PACKAGE=libtool
-VERSION="2.4.2 Debian-2.4.2-1"
+VERSION="2.4.2 Debian-2.4.2-1.1"
 TIMESTAMP=""
 package_revision=1.3337
 
diff --git a/missing b/missing
index 28055d2..86a8fc3 100755
--- a/missing
+++ b/missing
@@ -1,10 +1,10 @@
 #! /bin/sh
 # Common stub for a few missing GNU programs while installing.
 
-scriptversion=2009-04-28.21; # UTC
+scriptversion=2012-01-06.13; # UTC
 
 # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006,
-# 2008, 2009 Free Software Foundation, Inc.
+# 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
 # Originally by Fran,cois Pinard <pinard at iro.umontreal.ca>, 1996.
 
 # This program is free software; you can redistribute it and/or modify
@@ -84,7 +84,6 @@ Supported PROGRAM values:
   help2man     touch the output file
   lex          create \`lex.yy.c', if possible, from existing .c
   makeinfo     touch the output file
-  tar          try tar, gnutar, gtar, then tar without non-portable flags
   yacc         create \`y.tab.[ch]', if possible, from existing .[ch]
 
 Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and
@@ -122,15 +121,6 @@ case $1 in
     # Not GNU programs, they don't have --version.
     ;;
 
-  tar*)
-    if test -n "$run"; then
-       echo 1>&2 "ERROR: \`tar' requires --run"
-       exit 1
-    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
-       exit 1
-    fi
-    ;;
-
   *)
     if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
        # We have it, but it failed.
@@ -226,7 +216,7 @@ WARNING: \`$1' $msg.  You should only need it if
          \`Bison' from any GNU archive site."
     rm -f y.tab.c y.tab.h
     if test $# -ne 1; then
-        eval LASTARG="\${$#}"
+        eval LASTARG=\${$#}
 	case $LASTARG in
 	*.y)
 	    SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
@@ -256,7 +246,7 @@ WARNING: \`$1' is $msg.  You should only need it if
          \`Flex' from any GNU archive site."
     rm -f lex.yy.c
     if test $# -ne 1; then
-        eval LASTARG="\${$#}"
+        eval LASTARG=\${$#}
 	case $LASTARG in
 	*.l)
 	    SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
@@ -318,41 +308,6 @@ WARNING: \`$1' is $msg.  You should only need it if
     touch $file
     ;;
 
-  tar*)
-    shift
-
-    # We have already tried tar in the generic part.
-    # Look for gnutar/gtar before invocation to avoid ugly error
-    # messages.
-    if (gnutar --version > /dev/null 2>&1); then
-       gnutar "$@" && exit 0
-    fi
-    if (gtar --version > /dev/null 2>&1); then
-       gtar "$@" && exit 0
-    fi
-    firstarg="$1"
-    if shift; then
-	case $firstarg in
-	*o*)
-	    firstarg=`echo "$firstarg" | sed s/o//`
-	    tar "$firstarg" "$@" && exit 0
-	    ;;
-	esac
-	case $firstarg in
-	*h*)
-	    firstarg=`echo "$firstarg" | sed s/h//`
-	    tar "$firstarg" "$@" && exit 0
-	    ;;
-	esac
-    fi
-
-    echo 1>&2 "\
-WARNING: I can't seem to be able to run \`tar' with the given arguments.
-         You may want to install GNU tar or Free paxutils, or check the
-         command line arguments."
-    exit 1
-    ;;
-
   *)
     echo 1>&2 "\
 WARNING: \`$1' is needed, and is $msg.
diff --git a/po-Engine-IRC/de.po b/po-Engine-IRC/de.po
index 5d02bca..d58360e 100644
--- a/po-Engine-IRC/de.po
+++ b/po-Engine-IRC/de.po
@@ -301,7 +301,7 @@ msgstr "{0} ist nun bekannt als: {1}"
 #: ../src/Engine-IRC/Protocols/Irc/IrcProtocolManager.cs:2998
 #, csharp-format
 msgid "{0} changed the topic of {1} to: {2}"
-msgstr "{0} hat das Thema von {1} auf {2} geändert"
+msgstr "{0} hat das Thema geändert: von {1} auf {2}"
 
 #. TRANSLATOR: do NOT change the position of {1}!
 #: ../src/Engine-IRC/Protocols/Irc/IrcProtocolManager.cs:3075
diff --git a/po-Frontend-GNOME/POTFILES.in b/po-Frontend-GNOME/POTFILES.in
index 416e9c7..53827e1 100644
--- a/po-Frontend-GNOME/POTFILES.in
+++ b/po-Frontend-GNOME/POTFILES.in
@@ -23,6 +23,7 @@ src/Frontend-GNOME/Views/Chats/ProtocolChatView.cs
 src/Frontend-GNOME/Preferences/ServerListView.cs
 src/Frontend-GNOME/gtk-gui/Smuxi.Frontend.Gnome.ChatFindDialog.cs
 src/Frontend-GNOME/gtk-gui/Smuxi.Frontend.Gnome.FindGroupChatDialog.cs
+src/Frontend-GNOME/gtk-gui/Smuxi.Frontend.Gnome.JoinWidget.cs
 src/Frontend-GNOME/gtk-gui/Smuxi.Frontend.Gnome.QuickConnectDialog.cs
 src/Frontend-GNOME/gtk-gui/Smuxi.Frontend.Gnome.SteticPreferencesDialog.cs
 src/Frontend-GNOME/gtk-gui/Smuxi.Frontend.Gnome.EngineAssistantConnectionWidget.cs
diff --git a/src/AssemblyVersion.cs b/src/AssemblyVersion.cs
index b8ad651..223a661 100644
--- a/src/AssemblyVersion.cs
+++ b/src/AssemblyVersion.cs
@@ -36,5 +36,5 @@ using System.Runtime.CompilerServices;
 [assembly: AssemblyTrademark("")]
 [assembly: AssemblyCulture("")]
 
-[assembly: AssemblyVersion("0.8.9.2")]
+[assembly: AssemblyVersion("0.8.10")]
 
diff --git a/src/Common/Defines.cs b/src/Common/Defines.cs
index 38bff7e..4fdc804 100644
--- a/src/Common/Defines.cs
+++ b/src/Common/Defines.cs
@@ -26,11 +26,11 @@ namespace Smuxi.Common
 {
     public static class Defines
     {
-        public const string GitBranch   = "release/0.8.9";
-        public const string GitCommitHash = "fe845eb";
+        public const string GitBranch   = "master";
+        public const string GitCommitHash = "5df4305";
 
         private static readonly string f_InstallPrefix = "/usr/local";
-        private static readonly string f_DistVersion = "release/0.8.9/fe845eb";
+        private static readonly string f_DistVersion = "master/5df4305";
         private static readonly string f_TwitterApiKey = "60QV2qQx9cS7y1BJDbgAA|2VgD6qQKddsF5HYQ0TrRgs3tFTnCwDONBmRlTmG658";
 
         public static string InstallPrefix {
diff --git a/src/Common/Makefile.in b/src/Common/Makefile.in
index d2a7674..49d3af6 100644
--- a/src/Common/Makefile.in
+++ b/src/Common/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.2 from Makefile.am.
+# Makefile.in generated by automake 1.11.5 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -17,6 +17,23 @@
 
 
 VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -83,12 +100,18 @@ am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(pkgappdir)" \
 SCRIPTS = $(bin_SCRIPTS) $(pkgapp_SCRIPTS)
 SOURCES =
 DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
 DATA = $(linuxdesktopapplications_DATA) $(linuxpkgconfig_DATA) \
 	$(programfiles_DATA) $(programfilesicons_DATA)
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 ALL_LINGUAS = @ALL_LINGUAS@
 AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
@@ -148,6 +171,8 @@ GLIB_SHARP_20_LIBS = @GLIB_SHARP_20_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
 GREP = @GREP@
+GTKSPELL_CFLAGS = @GTKSPELL_CFLAGS@
+GTKSPELL_LIBS = @GTKSPELL_LIBS@
 GTK_SHARP_20_CFLAGS = @GTK_SHARP_20_CFLAGS@
 GTK_SHARP_20_LIBS = @GTK_SHARP_20_LIBS@
 INDICATE_SHARP_CFLAGS = @INDICATE_SHARP_CFLAGS@
@@ -162,6 +187,10 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
 INTLTOOL_MERGE = @INTLTOOL_MERGE@
 INTLTOOL_PERL = @INTLTOOL_PERL@
 INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@
+INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@
+INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@
+INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@
 INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
@@ -272,6 +301,8 @@ htmldir = @htmldir@
 includedir = @includedir@
 infodir = @infodir@
 install_sh = @install_sh@
+intltool__v_merge_options_ = @intltool__v_merge_options_@
+intltool__v_merge_options_0 = @intltool__v_merge_options_0@
 libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
@@ -432,6 +463,7 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
 	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
 	esac;
+$(top_srcdir)/Makefile.include:
 
 $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
@@ -447,8 +479,11 @@ smuxi-common.pc: $(top_builddir)/config.status $(srcdir)/smuxi-common.pc.in
 	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
 install-binSCRIPTS: $(bin_SCRIPTS)
 	@$(NORMAL_INSTALL)
-	test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
 	@list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
@@ -479,8 +514,11 @@ uninstall-binSCRIPTS:
 	dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir)
 install-pkgappSCRIPTS: $(pkgapp_SCRIPTS)
 	@$(NORMAL_INSTALL)
-	test -z "$(pkgappdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgappdir)"
 	@list='$(pkgapp_SCRIPTS)'; test -n "$(pkgappdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(pkgappdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(pkgappdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
@@ -517,8 +555,11 @@ clean-libtool:
 	-rm -rf .libs _libs
 install-linuxdesktopapplicationsDATA: $(linuxdesktopapplications_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(linuxdesktopapplicationsdir)" || $(MKDIR_P) "$(DESTDIR)$(linuxdesktopapplicationsdir)"
 	@list='$(linuxdesktopapplications_DATA)'; test -n "$(linuxdesktopapplicationsdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(linuxdesktopapplicationsdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(linuxdesktopapplicationsdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -535,8 +576,11 @@ uninstall-linuxdesktopapplicationsDATA:
 	dir='$(DESTDIR)$(linuxdesktopapplicationsdir)'; $(am__uninstall_files_from_dir)
 install-linuxpkgconfigDATA: $(linuxpkgconfig_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(linuxpkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(linuxpkgconfigdir)"
 	@list='$(linuxpkgconfig_DATA)'; test -n "$(linuxpkgconfigdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(linuxpkgconfigdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(linuxpkgconfigdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -553,8 +597,11 @@ uninstall-linuxpkgconfigDATA:
 	dir='$(DESTDIR)$(linuxpkgconfigdir)'; $(am__uninstall_files_from_dir)
 install-programfilesDATA: $(programfiles_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(programfilesdir)" || $(MKDIR_P) "$(DESTDIR)$(programfilesdir)"
 	@list='$(programfiles_DATA)'; test -n "$(programfilesdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(programfilesdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(programfilesdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -571,8 +618,11 @@ uninstall-programfilesDATA:
 	dir='$(DESTDIR)$(programfilesdir)'; $(am__uninstall_files_from_dir)
 install-programfilesiconsDATA: $(programfilesicons_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(programfilesiconsdir)" || $(MKDIR_P) "$(DESTDIR)$(programfilesiconsdir)"
 	@list='$(programfilesicons_DATA)'; test -n "$(programfilesiconsdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(programfilesiconsdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(programfilesiconsdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
diff --git a/src/Common/Platform.cs b/src/Common/Platform.cs
index cb1b290..6053c85 100644
--- a/src/Common/Platform.cs
+++ b/src/Common/Platform.cs
@@ -156,6 +156,30 @@ namespace Smuxi.Common
             }
         }
 
+        public static string CachePath {
+            get {
+                string cachePath = null;
+                if (Environment.OSVersion.Platform == PlatformID.Win32NT) {
+                    cachePath = Environment.GetFolderPath(
+                        Environment.SpecialFolder.LocalApplicationData
+                    );
+                    cachePath = Path.Combine(cachePath, "smuxi");
+                    cachePath = Path.Combine(cachePath, "cache");
+                } else {
+                    var home = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
+                    var xdgCache = Environment.GetEnvironmentVariable("XDG_CACHE_HOME");
+                    if (String.IsNullOrEmpty(xdgCache)) {
+                        xdgCache = Path.Combine(home, ".cache");
+                    }
+                    cachePath = Path.Combine(xdgCache, "smuxi");
+                }
+                if (!Directory.Exists(cachePath)) {
+                    Directory.CreateDirectory(cachePath);
+                }
+                return cachePath;
+            }
+        }
+
         public static string GetBuffersPath(string username)
         {
             var dbPath = GetBuffersBasePath();
diff --git a/src/Engine-IRC/Makefile.in b/src/Engine-IRC/Makefile.in
index def6ee8..2372f5c 100644
--- a/src/Engine-IRC/Makefile.in
+++ b/src/Engine-IRC/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.2 from Makefile.am.
+# Makefile.in generated by automake 1.11.5 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -17,6 +17,23 @@
 
 
 VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -83,12 +100,18 @@ am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(pkgappdir)" \
 SCRIPTS = $(bin_SCRIPTS) $(pkgapp_SCRIPTS)
 SOURCES =
 DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
 DATA = $(linuxdesktopapplications_DATA) $(linuxpkgconfig_DATA) \
 	$(programfiles_DATA) $(programfilesicons_DATA)
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 ALL_LINGUAS = @ALL_LINGUAS@
 AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
@@ -148,6 +171,8 @@ GLIB_SHARP_20_LIBS = @GLIB_SHARP_20_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
 GREP = @GREP@
+GTKSPELL_CFLAGS = @GTKSPELL_CFLAGS@
+GTKSPELL_LIBS = @GTKSPELL_LIBS@
 GTK_SHARP_20_CFLAGS = @GTK_SHARP_20_CFLAGS@
 GTK_SHARP_20_LIBS = @GTK_SHARP_20_LIBS@
 INDICATE_SHARP_CFLAGS = @INDICATE_SHARP_CFLAGS@
@@ -162,6 +187,10 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
 INTLTOOL_MERGE = @INTLTOOL_MERGE@
 INTLTOOL_PERL = @INTLTOOL_PERL@
 INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@
+INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@
+INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@
+INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@
 INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
@@ -272,6 +301,8 @@ htmldir = @htmldir@
 includedir = @includedir@
 infodir = @infodir@
 install_sh = @install_sh@
+intltool__v_merge_options_ = @intltool__v_merge_options_@
+intltool__v_merge_options_0 = @intltool__v_merge_options_0@
 libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
@@ -452,6 +483,7 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
 	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
 	esac;
+$(top_srcdir)/Makefile.include:
 
 $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
@@ -465,8 +497,11 @@ smuxi-engine-irc.pc: $(top_builddir)/config.status $(srcdir)/smuxi-engine-irc.pc
 	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
 install-binSCRIPTS: $(bin_SCRIPTS)
 	@$(NORMAL_INSTALL)
-	test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
 	@list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
@@ -497,8 +532,11 @@ uninstall-binSCRIPTS:
 	dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir)
 install-pkgappSCRIPTS: $(pkgapp_SCRIPTS)
 	@$(NORMAL_INSTALL)
-	test -z "$(pkgappdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgappdir)"
 	@list='$(pkgapp_SCRIPTS)'; test -n "$(pkgappdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(pkgappdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(pkgappdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
@@ -535,8 +573,11 @@ clean-libtool:
 	-rm -rf .libs _libs
 install-linuxdesktopapplicationsDATA: $(linuxdesktopapplications_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(linuxdesktopapplicationsdir)" || $(MKDIR_P) "$(DESTDIR)$(linuxdesktopapplicationsdir)"
 	@list='$(linuxdesktopapplications_DATA)'; test -n "$(linuxdesktopapplicationsdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(linuxdesktopapplicationsdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(linuxdesktopapplicationsdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -553,8 +594,11 @@ uninstall-linuxdesktopapplicationsDATA:
 	dir='$(DESTDIR)$(linuxdesktopapplicationsdir)'; $(am__uninstall_files_from_dir)
 install-linuxpkgconfigDATA: $(linuxpkgconfig_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(linuxpkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(linuxpkgconfigdir)"
 	@list='$(linuxpkgconfig_DATA)'; test -n "$(linuxpkgconfigdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(linuxpkgconfigdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(linuxpkgconfigdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -571,8 +615,11 @@ uninstall-linuxpkgconfigDATA:
 	dir='$(DESTDIR)$(linuxpkgconfigdir)'; $(am__uninstall_files_from_dir)
 install-programfilesDATA: $(programfiles_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(programfilesdir)" || $(MKDIR_P) "$(DESTDIR)$(programfilesdir)"
 	@list='$(programfiles_DATA)'; test -n "$(programfilesdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(programfilesdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(programfilesdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -589,8 +636,11 @@ uninstall-programfilesDATA:
 	dir='$(DESTDIR)$(programfilesdir)'; $(am__uninstall_files_from_dir)
 install-programfilesiconsDATA: $(programfilesicons_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(programfilesiconsdir)" || $(MKDIR_P) "$(DESTDIR)$(programfilesiconsdir)"
 	@list='$(programfilesicons_DATA)'; test -n "$(programfilesiconsdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(programfilesiconsdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(programfilesiconsdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
diff --git a/src/Engine-IRC/Protocols/Irc/IrcProtocolManager.cs b/src/Engine-IRC/Protocols/Irc/IrcProtocolManager.cs
index c246c19..f480407 100644
--- a/src/Engine-IRC/Protocols/Irc/IrcProtocolManager.cs
+++ b/src/Engine-IRC/Protocols/Irc/IrcProtocolManager.cs
@@ -347,6 +347,16 @@ namespace Smuxi.Engine
             Trace.Call(fm);
             
             try {
+                MessageBuilder builder;
+                if (!String.IsNullOrEmpty(_IrcClient.ProxyHost)) {
+                    builder = CreateMessageBuilder();
+                    builder.AppendEventPrefix();
+                    builder.AppendText(_("Using proxy: {0}:{1}"),
+                                       _IrcClient.ProxyHost,
+                                       _IrcClient.ProxyPort);
+                    Session.AddMessageToChat(Chat, builder.ToMessage());
+                }
+
                 string msg;
                 msg = String.Format(_("Connecting to {0} port {1}..."), _Host, _Port);
                 fm.SetStatus(msg);
@@ -363,7 +373,7 @@ namespace Smuxi.Engine
                     realname = "unset";
                 }
                 if (!Regex.IsMatch(_Username, "^[a-z0-9]+$", RegexOptions.IgnoreCase)) {
-                    var builder = CreateMessageBuilder();
+                    builder = CreateMessageBuilder();
                     builder.AppendEventPrefix();
                     builder.AppendWarningText(
                         "Warning: Your username (ident) contains special " +
@@ -877,11 +887,12 @@ namespace Smuxi.Engine
 
             string[] help = {
             "help",
-            "connect irc server port [password] [nicknames]",
+            "connect irc server [port|+port] [password] [nicknames]",
             "say",
             "join/j channel(s) [key]",
             "part/p [channel(s)] [part-message]",
             "topic [new-topic]",
+            "names",
             "cycle/rejoin",
             "msg/query (channel|nick) message",
             "amsg message",
@@ -933,8 +944,14 @@ namespace Smuxi.Engine
             }
             
             if (cd.DataArray.Length >= 4) {
+                var port = cd.DataArray[3];
+                var ssl = port.StartsWith("+");
+                if (ssl) {
+                    server.UseEncryption = true;
+                    port = port.Substring(1);
+                }
                 try {
-                    server.Port = Int32.Parse(cd.DataArray[3]);
+                    server.Port = Int32.Parse(port);
                 } catch (FormatException) {
                     fm.AddTextToChat(
                         cd.Chat,
@@ -1305,7 +1322,9 @@ namespace Smuxi.Engine
                 if (nextChar != " ") {
                     // we split in the middle of a word, split it better!
                     int lastWordPos = chunk.LastIndexOf(" ");
-                    if (lastWordPos != -1) {
+                    if (lastWordPos > 0) {
+                        // the chunk has to get smaller, else we run into an
+                        // endless loop
                         chunk = chunk.Substring(0, lastWordPos);
                     }
                 }
@@ -2156,8 +2175,12 @@ namespace Smuxi.Engine
                 _IrcClient.ProxyType = ircProxyType;
                 _IrcClient.ProxyHost = proxy.Address.Host;
                 _IrcClient.ProxyPort = proxy.Address.Port;
-                _IrcClient.ProxyUsername = proxySettings.ProxyUsername;
-                _IrcClient.ProxyPassword = proxySettings.ProxyPassword;
+                if (!String.IsNullOrEmpty(proxySettings.ProxyUsername)) {
+                    _IrcClient.ProxyUsername = proxySettings.ProxyUsername;
+                }
+                if (!String.IsNullOrEmpty(proxySettings.ProxyPassword)) {
+                    _IrcClient.ProxyPassword = proxySettings.ProxyPassword;
+                }
             }
 
             if (server != null) {
@@ -2891,20 +2914,27 @@ namespace Smuxi.Engine
 #if LOG4NET
             _Logger.Debug("_OnKick() e.Channel: "+e.Channel+" e.Whom: "+e.Whom);
 #endif
-            GroupChatModel cchat = (GroupChatModel) GetChat(e.Channel, ChatType.Group);
+            var chat = (GroupChatModel) GetChat(e.Channel, ChatType.Group);
+            var builder = CreateMessageBuilder();
+            builder.AppendEventPrefix();
             if (e.Data.Irc.IsMe(e.Whom)) {
-                Session.AddTextToChat(cchat,
-                    "-!- " + String.Format(
-                                _("You were kicked from {0} by {1} [{2}]"),
-                                e.Channel, e.Who, e.KickReason));
-                Session.DisableChat(cchat);
+                // TRANSLATOR: do NOT change the position of {1}!
+                builder.AppendText(_("You were kicked from {0} by {1}"),
+                                   e.Channel, String.Empty);
+                builder.AppendIdendityName(GetPerson(chat, e.Who));
+                builder.AppendText(" [").AppendMessage(e.KickReason).AppendText("]");
+                Session.AddMessageToChat(chat, builder.ToMessage());
+                Session.DisableChat(chat);
             } else {
-                PersonModel user = cchat.GetPerson(e.Whom);
-                Session.RemovePersonFromGroupChat(cchat, user);
-                Session.AddTextToChat(cchat,
-                    "-!- " + String.Format(
-                                _("{0} was kicked from {1} by {2} [{3}]"),
-                                e.Whom, e.Channel, e.Who, e.KickReason));
+                PersonModel user = chat.GetPerson(e.Whom);
+                Session.RemovePersonFromGroupChat(chat, user);
+                builder.AppendIdendityName(GetPerson(chat, e.Whom));
+                // TRANSLATOR: do NOT change the position of {0} and {2}!
+                builder.AppendText(_("{0} was kicked from {1} by {2}"),
+                                   String.Empty, e.Channel, String.Empty);
+                builder.AppendIdendityName(GetPerson(chat, e.Who));
+                builder.AppendText(" [").AppendMessage(e.KickReason).AppendText("]");
+                Session.AddMessageToChat(chat, builder.ToMessage());
             }
         }
         
diff --git a/src/Engine-MSNP/Makefile.in b/src/Engine-MSNP/Makefile.in
index 6301f02..1676375 100644
--- a/src/Engine-MSNP/Makefile.in
+++ b/src/Engine-MSNP/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.2 from Makefile.am.
+# Makefile.in generated by automake 1.11.5 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -17,6 +17,23 @@
 
 
 VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -83,12 +100,18 @@ am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(pkgappdir)" \
 SCRIPTS = $(bin_SCRIPTS) $(pkgapp_SCRIPTS)
 SOURCES =
 DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
 DATA = $(linuxdesktopapplications_DATA) $(linuxpkgconfig_DATA) \
 	$(programfiles_DATA) $(programfilesicons_DATA)
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 ALL_LINGUAS = @ALL_LINGUAS@
 AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
@@ -148,6 +171,8 @@ GLIB_SHARP_20_LIBS = @GLIB_SHARP_20_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
 GREP = @GREP@
+GTKSPELL_CFLAGS = @GTKSPELL_CFLAGS@
+GTKSPELL_LIBS = @GTKSPELL_LIBS@
 GTK_SHARP_20_CFLAGS = @GTK_SHARP_20_CFLAGS@
 GTK_SHARP_20_LIBS = @GTK_SHARP_20_LIBS@
 INDICATE_SHARP_CFLAGS = @INDICATE_SHARP_CFLAGS@
@@ -162,6 +187,10 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
 INTLTOOL_MERGE = @INTLTOOL_MERGE@
 INTLTOOL_PERL = @INTLTOOL_PERL@
 INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@
+INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@
+INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@
+INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@
 INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
@@ -272,6 +301,8 @@ htmldir = @htmldir@
 includedir = @includedir@
 infodir = @infodir@
 install_sh = @install_sh@
+intltool__v_merge_options_ = @intltool__v_merge_options_@
+intltool__v_merge_options_0 = @intltool__v_merge_options_0@
 libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
@@ -443,6 +474,7 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
 	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
 	esac;
+$(top_srcdir)/Makefile.include:
 
 $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
@@ -456,8 +488,11 @@ smuxi-engine-msnp.pc: $(top_builddir)/config.status $(srcdir)/smuxi-engine-msnp.
 	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
 install-binSCRIPTS: $(bin_SCRIPTS)
 	@$(NORMAL_INSTALL)
-	test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
 	@list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
@@ -488,8 +523,11 @@ uninstall-binSCRIPTS:
 	dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir)
 install-pkgappSCRIPTS: $(pkgapp_SCRIPTS)
 	@$(NORMAL_INSTALL)
-	test -z "$(pkgappdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgappdir)"
 	@list='$(pkgapp_SCRIPTS)'; test -n "$(pkgappdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(pkgappdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(pkgappdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
@@ -526,8 +564,11 @@ clean-libtool:
 	-rm -rf .libs _libs
 install-linuxdesktopapplicationsDATA: $(linuxdesktopapplications_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(linuxdesktopapplicationsdir)" || $(MKDIR_P) "$(DESTDIR)$(linuxdesktopapplicationsdir)"
 	@list='$(linuxdesktopapplications_DATA)'; test -n "$(linuxdesktopapplicationsdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(linuxdesktopapplicationsdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(linuxdesktopapplicationsdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -544,8 +585,11 @@ uninstall-linuxdesktopapplicationsDATA:
 	dir='$(DESTDIR)$(linuxdesktopapplicationsdir)'; $(am__uninstall_files_from_dir)
 install-linuxpkgconfigDATA: $(linuxpkgconfig_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(linuxpkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(linuxpkgconfigdir)"
 	@list='$(linuxpkgconfig_DATA)'; test -n "$(linuxpkgconfigdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(linuxpkgconfigdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(linuxpkgconfigdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -562,8 +606,11 @@ uninstall-linuxpkgconfigDATA:
 	dir='$(DESTDIR)$(linuxpkgconfigdir)'; $(am__uninstall_files_from_dir)
 install-programfilesDATA: $(programfiles_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(programfilesdir)" || $(MKDIR_P) "$(DESTDIR)$(programfilesdir)"
 	@list='$(programfiles_DATA)'; test -n "$(programfilesdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(programfilesdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(programfilesdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -580,8 +627,11 @@ uninstall-programfilesDATA:
 	dir='$(DESTDIR)$(programfilesdir)'; $(am__uninstall_files_from_dir)
 install-programfilesiconsDATA: $(programfilesicons_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(programfilesiconsdir)" || $(MKDIR_P) "$(DESTDIR)$(programfilesiconsdir)"
 	@list='$(programfilesicons_DATA)'; test -n "$(programfilesiconsdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(programfilesiconsdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(programfilesiconsdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
diff --git a/src/Engine-OSCAR/Makefile.in b/src/Engine-OSCAR/Makefile.in
index f2fc072..d8b9293 100644
--- a/src/Engine-OSCAR/Makefile.in
+++ b/src/Engine-OSCAR/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.2 from Makefile.am.
+# Makefile.in generated by automake 1.11.5 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -17,6 +17,23 @@
 
 
 VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -83,12 +100,18 @@ am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(pkgappdir)" \
 SCRIPTS = $(bin_SCRIPTS) $(pkgapp_SCRIPTS)
 SOURCES =
 DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
 DATA = $(linuxdesktopapplications_DATA) $(linuxpkgconfig_DATA) \
 	$(programfiles_DATA) $(programfilesicons_DATA)
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 ALL_LINGUAS = @ALL_LINGUAS@
 AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
@@ -148,6 +171,8 @@ GLIB_SHARP_20_LIBS = @GLIB_SHARP_20_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
 GREP = @GREP@
+GTKSPELL_CFLAGS = @GTKSPELL_CFLAGS@
+GTKSPELL_LIBS = @GTKSPELL_LIBS@
 GTK_SHARP_20_CFLAGS = @GTK_SHARP_20_CFLAGS@
 GTK_SHARP_20_LIBS = @GTK_SHARP_20_LIBS@
 INDICATE_SHARP_CFLAGS = @INDICATE_SHARP_CFLAGS@
@@ -162,6 +187,10 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
 INTLTOOL_MERGE = @INTLTOOL_MERGE@
 INTLTOOL_PERL = @INTLTOOL_PERL@
 INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@
+INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@
+INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@
+INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@
 INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
@@ -272,6 +301,8 @@ htmldir = @htmldir@
 includedir = @includedir@
 infodir = @infodir@
 install_sh = @install_sh@
+intltool__v_merge_options_ = @intltool__v_merge_options_@
+intltool__v_merge_options_0 = @intltool__v_merge_options_0@
 libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
@@ -437,6 +468,7 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
 	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
 	esac;
+$(top_srcdir)/Makefile.include:
 
 $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
@@ -450,8 +482,11 @@ smuxi-engine-oscar.pc: $(top_builddir)/config.status $(srcdir)/smuxi-engine-osca
 	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
 install-binSCRIPTS: $(bin_SCRIPTS)
 	@$(NORMAL_INSTALL)
-	test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
 	@list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
@@ -482,8 +517,11 @@ uninstall-binSCRIPTS:
 	dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir)
 install-pkgappSCRIPTS: $(pkgapp_SCRIPTS)
 	@$(NORMAL_INSTALL)
-	test -z "$(pkgappdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgappdir)"
 	@list='$(pkgapp_SCRIPTS)'; test -n "$(pkgappdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(pkgappdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(pkgappdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
@@ -520,8 +558,11 @@ clean-libtool:
 	-rm -rf .libs _libs
 install-linuxdesktopapplicationsDATA: $(linuxdesktopapplications_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(linuxdesktopapplicationsdir)" || $(MKDIR_P) "$(DESTDIR)$(linuxdesktopapplicationsdir)"
 	@list='$(linuxdesktopapplications_DATA)'; test -n "$(linuxdesktopapplicationsdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(linuxdesktopapplicationsdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(linuxdesktopapplicationsdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -538,8 +579,11 @@ uninstall-linuxdesktopapplicationsDATA:
 	dir='$(DESTDIR)$(linuxdesktopapplicationsdir)'; $(am__uninstall_files_from_dir)
 install-linuxpkgconfigDATA: $(linuxpkgconfig_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(linuxpkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(linuxpkgconfigdir)"
 	@list='$(linuxpkgconfig_DATA)'; test -n "$(linuxpkgconfigdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(linuxpkgconfigdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(linuxpkgconfigdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -556,8 +600,11 @@ uninstall-linuxpkgconfigDATA:
 	dir='$(DESTDIR)$(linuxpkgconfigdir)'; $(am__uninstall_files_from_dir)
 install-programfilesDATA: $(programfiles_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(programfilesdir)" || $(MKDIR_P) "$(DESTDIR)$(programfilesdir)"
 	@list='$(programfiles_DATA)'; test -n "$(programfilesdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(programfilesdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(programfilesdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -574,8 +621,11 @@ uninstall-programfilesDATA:
 	dir='$(DESTDIR)$(programfilesdir)'; $(am__uninstall_files_from_dir)
 install-programfilesiconsDATA: $(programfilesicons_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(programfilesiconsdir)" || $(MKDIR_P) "$(DESTDIR)$(programfilesiconsdir)"
 	@list='$(programfilesicons_DATA)'; test -n "$(programfilesiconsdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(programfilesiconsdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(programfilesiconsdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
diff --git a/src/Engine-Twitter/Makefile.in b/src/Engine-Twitter/Makefile.in
index f4cb3af..e68fa55 100644
--- a/src/Engine-Twitter/Makefile.in
+++ b/src/Engine-Twitter/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.2 from Makefile.am.
+# Makefile.in generated by automake 1.11.5 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -17,6 +17,23 @@
 
 
 VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -81,12 +98,18 @@ am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(pkgappdir)" \
 	"$(DESTDIR)$(programfilesiconsdir)"
 SCRIPTS = $(bin_SCRIPTS) $(pkgapp_SCRIPTS)
 DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
 DATA = $(linuxdesktopapplications_DATA) $(linuxpkgconfig_DATA) \
 	$(pkgapp_DATA) $(programfiles_DATA) $(programfilesicons_DATA)
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 ALL_LINGUAS = @ALL_LINGUAS@
 AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
@@ -146,6 +169,8 @@ GLIB_SHARP_20_LIBS = @GLIB_SHARP_20_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
 GREP = @GREP@
+GTKSPELL_CFLAGS = @GTKSPELL_CFLAGS@
+GTKSPELL_LIBS = @GTKSPELL_LIBS@
 GTK_SHARP_20_CFLAGS = @GTK_SHARP_20_CFLAGS@
 GTK_SHARP_20_LIBS = @GTK_SHARP_20_LIBS@
 INDICATE_SHARP_CFLAGS = @INDICATE_SHARP_CFLAGS@
@@ -160,6 +185,10 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
 INTLTOOL_MERGE = @INTLTOOL_MERGE@
 INTLTOOL_PERL = @INTLTOOL_PERL@
 INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@
+INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@
+INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@
+INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@
 INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
@@ -270,6 +299,8 @@ htmldir = @htmldir@
 includedir = @includedir@
 infodir = @infodir@
 install_sh = @install_sh@
+intltool__v_merge_options_ = @intltool__v_merge_options_@
+intltool__v_merge_options_0 = @intltool__v_merge_options_0@
 libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
@@ -392,6 +423,7 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
 	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
 	esac;
+$(top_srcdir)/Makefile.include:
 
 $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
@@ -403,8 +435,11 @@ $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
 $(am__aclocal_m4_deps):
 install-binSCRIPTS: $(bin_SCRIPTS)
 	@$(NORMAL_INSTALL)
-	test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
 	@list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
@@ -435,8 +470,11 @@ uninstall-binSCRIPTS:
 	dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir)
 install-pkgappSCRIPTS: $(pkgapp_SCRIPTS)
 	@$(NORMAL_INSTALL)
-	test -z "$(pkgappdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgappdir)"
 	@list='$(pkgapp_SCRIPTS)'; test -n "$(pkgappdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(pkgappdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(pkgappdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
@@ -473,8 +511,11 @@ clean-libtool:
 	-rm -rf .libs _libs
 install-linuxdesktopapplicationsDATA: $(linuxdesktopapplications_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(linuxdesktopapplicationsdir)" || $(MKDIR_P) "$(DESTDIR)$(linuxdesktopapplicationsdir)"
 	@list='$(linuxdesktopapplications_DATA)'; test -n "$(linuxdesktopapplicationsdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(linuxdesktopapplicationsdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(linuxdesktopapplicationsdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -491,8 +532,11 @@ uninstall-linuxdesktopapplicationsDATA:
 	dir='$(DESTDIR)$(linuxdesktopapplicationsdir)'; $(am__uninstall_files_from_dir)
 install-linuxpkgconfigDATA: $(linuxpkgconfig_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(linuxpkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(linuxpkgconfigdir)"
 	@list='$(linuxpkgconfig_DATA)'; test -n "$(linuxpkgconfigdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(linuxpkgconfigdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(linuxpkgconfigdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -509,8 +553,11 @@ uninstall-linuxpkgconfigDATA:
 	dir='$(DESTDIR)$(linuxpkgconfigdir)'; $(am__uninstall_files_from_dir)
 install-pkgappDATA: $(pkgapp_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(pkgappdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgappdir)"
 	@list='$(pkgapp_DATA)'; test -n "$(pkgappdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(pkgappdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(pkgappdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -527,8 +574,11 @@ uninstall-pkgappDATA:
 	dir='$(DESTDIR)$(pkgappdir)'; $(am__uninstall_files_from_dir)
 install-programfilesDATA: $(programfiles_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(programfilesdir)" || $(MKDIR_P) "$(DESTDIR)$(programfilesdir)"
 	@list='$(programfiles_DATA)'; test -n "$(programfilesdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(programfilesdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(programfilesdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -545,8 +595,11 @@ uninstall-programfilesDATA:
 	dir='$(DESTDIR)$(programfilesdir)'; $(am__uninstall_files_from_dir)
 install-programfilesiconsDATA: $(programfilesicons_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(programfilesiconsdir)" || $(MKDIR_P) "$(DESTDIR)$(programfilesiconsdir)"
 	@list='$(programfilesicons_DATA)'; test -n "$(programfilesiconsdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(programfilesiconsdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(programfilesiconsdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
diff --git a/src/Engine-Twitter/Protocols/Twitter/TwitterProtocolManager.cs b/src/Engine-Twitter/Protocols/Twitter/TwitterProtocolManager.cs
index b3d65b1..996f80b 100644
--- a/src/Engine-Twitter/Protocols/Twitter/TwitterProtocolManager.cs
+++ b/src/Engine-Twitter/Protocols/Twitter/TwitterProtocolManager.cs
@@ -78,6 +78,9 @@ namespace Smuxi.Engine
         bool                    f_Listening;
         bool                    f_IsConnected;
 
+        int                     ErrorResponseCount { get; set; }
+        const int               MaxErrorResponseCount = 3;
+
         public override string NetworkID {
             get {
                 if (f_TwitterUser == null) {
@@ -169,14 +172,16 @@ namespace Smuxi.Engine
             var proxySettings = new ProxySettings();
             proxySettings.ApplyConfig(Session.UserConfig);
             var twitterUrl = new OptionalProperties().APIBaseAddress;
-            f_WebProxy = proxySettings.GetWebProxy(twitterUrl);
+            var proxy = proxySettings.GetWebProxy(twitterUrl);
             // HACK: Twitterizer will always use the system proxy if set to null
             // so explicitely override this by setting an empty proxy
-            if (f_WebProxy == null) {
+            if (proxy == null) {
                 f_WebProxy = new WebProxy();
+            } else {
+                f_WebProxy = proxy;
             }
-            f_OptionalProperties = CreateOptions<OptionalProperties>();
 
+            f_OptionalProperties = CreateOptions<OptionalProperties>();
             f_ProtocolChat = new ProtocolChatModel(NetworkID, "Twitter " + f_Username, this);
             f_ProtocolChat.InitMessageBuffer(
                 MessageBufferPersistencyType.Volatile
@@ -185,6 +190,16 @@ namespace Smuxi.Engine
             Session.AddChat(f_ProtocolChat);
             Session.SyncChat(f_ProtocolChat);
 
+            MessageBuilder builder;
+            if (proxy != null && proxy.Address != null) {
+                builder = CreateMessageBuilder();
+                builder.AppendEventPrefix();
+                builder.AppendText(_("Using proxy: {0}:{1}"),
+                                   proxy.Address.Host,
+                                   proxy.Address.Port);
+                Session.AddMessageToChat(Chat, builder.ToMessage());
+            }
+
             string msg;
             msg = String.Format(_("Connecting to Twitter..."));
             fm.SetStatus(msg);
@@ -195,7 +210,6 @@ namespace Smuxi.Engine
                 f_OAuthTokens.ConsumerKey = key[0];
                 f_OAuthTokens.ConsumerSecret = key[1];
 
-                MessageBuilder builder;
                 var password = server.Password ?? String.Empty;
                 var access = password.Split('|');
                 if (access.Length == 2) {
@@ -1453,6 +1467,7 @@ namespace Smuxi.Engine
             switch (response.Result) {
                 case RequestResult.Success:
                     // no error at all
+                    ErrorResponseCount = 0;
                     return false;
                 case RequestResult.ConnectionFailure:
                 case RequestResult.RateLimited:
@@ -1470,12 +1485,33 @@ namespace Smuxi.Engine
                     return true;
             }
 
+            if (ErrorResponseCount++ < MaxErrorResponseCount) {
 #if LOG4NET
-            f_Logger.Debug("IsTemporilyErrorResponse(): " +
-                           "Detected permanent error " +
-                           "RequestUrl: " + response.RequestUrl + " " +
-                           "Result: " + response.Result + " " +
-                           "Content:\n" + response.Content);
+                f_Logger.WarnFormat(
+                    "IsTemporilyErrorResponse(): Ignoring permanent error " +
+                    "({0}/{1}) " +
+                    "RequestUrl: {2} " +
+                    "Result: {3} " +
+                    "Content:\n{4}",
+                    ErrorResponseCount,
+                    MaxErrorResponseCount,
+                    response.RequestUrl,
+                    response.Result,
+                    response.Content
+                );
+#endif
+                return true;
+            }
+
+#if LOG4NET
+            f_Logger.ErrorFormat(
+                "IsTemporilyErrorResponse(): Detected permanent error " +
+                "RequestUrl: {0} Result: {1} " +
+                "Content:\n{2}",
+                response.RequestUrl,
+                response.Result,
+                response.Content
+            );
 #endif
             return false;
         }
diff --git a/src/Engine-XMPP/Makefile.in b/src/Engine-XMPP/Makefile.in
index dcabdc3..e93b1c6 100644
--- a/src/Engine-XMPP/Makefile.in
+++ b/src/Engine-XMPP/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.2 from Makefile.am.
+# Makefile.in generated by automake 1.11.5 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -17,6 +17,23 @@
 
 
 VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -82,12 +99,18 @@ am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(pkgappdir)" \
 	"$(DESTDIR)$(programfilesiconsdir)"
 SCRIPTS = $(bin_SCRIPTS) $(pkgapp_SCRIPTS)
 DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
 DATA = $(linuxdesktopapplications_DATA) $(linuxpkgconfig_DATA) \
 	$(pkgapp_DATA) $(programfiles_DATA) $(programfilesicons_DATA)
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 ALL_LINGUAS = @ALL_LINGUAS@
 AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
@@ -147,6 +170,8 @@ GLIB_SHARP_20_LIBS = @GLIB_SHARP_20_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
 GREP = @GREP@
+GTKSPELL_CFLAGS = @GTKSPELL_CFLAGS@
+GTKSPELL_LIBS = @GTKSPELL_LIBS@
 GTK_SHARP_20_CFLAGS = @GTK_SHARP_20_CFLAGS@
 GTK_SHARP_20_LIBS = @GTK_SHARP_20_LIBS@
 INDICATE_SHARP_CFLAGS = @INDICATE_SHARP_CFLAGS@
@@ -161,6 +186,10 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
 INTLTOOL_MERGE = @INTLTOOL_MERGE@
 INTLTOOL_PERL = @INTLTOOL_PERL@
 INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@
+INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@
+INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@
+INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@
 INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
@@ -271,6 +300,8 @@ htmldir = @htmldir@
 includedir = @includedir@
 infodir = @infodir@
 install_sh = @install_sh@
+intltool__v_merge_options_ = @intltool__v_merge_options_@
+intltool__v_merge_options_0 = @intltool__v_merge_options_0@
 libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
@@ -397,6 +428,7 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
 	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
 	esac;
+$(top_srcdir)/Makefile.include:
 
 $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
@@ -410,8 +442,11 @@ smuxi-engine-xmpp.pc: $(top_builddir)/config.status $(srcdir)/smuxi-engine-xmpp.
 	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
 install-binSCRIPTS: $(bin_SCRIPTS)
 	@$(NORMAL_INSTALL)
-	test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
 	@list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
@@ -442,8 +477,11 @@ uninstall-binSCRIPTS:
 	dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir)
 install-pkgappSCRIPTS: $(pkgapp_SCRIPTS)
 	@$(NORMAL_INSTALL)
-	test -z "$(pkgappdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgappdir)"
 	@list='$(pkgapp_SCRIPTS)'; test -n "$(pkgappdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(pkgappdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(pkgappdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
@@ -480,8 +518,11 @@ clean-libtool:
 	-rm -rf .libs _libs
 install-linuxdesktopapplicationsDATA: $(linuxdesktopapplications_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(linuxdesktopapplicationsdir)" || $(MKDIR_P) "$(DESTDIR)$(linuxdesktopapplicationsdir)"
 	@list='$(linuxdesktopapplications_DATA)'; test -n "$(linuxdesktopapplicationsdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(linuxdesktopapplicationsdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(linuxdesktopapplicationsdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -498,8 +539,11 @@ uninstall-linuxdesktopapplicationsDATA:
 	dir='$(DESTDIR)$(linuxdesktopapplicationsdir)'; $(am__uninstall_files_from_dir)
 install-linuxpkgconfigDATA: $(linuxpkgconfig_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(linuxpkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(linuxpkgconfigdir)"
 	@list='$(linuxpkgconfig_DATA)'; test -n "$(linuxpkgconfigdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(linuxpkgconfigdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(linuxpkgconfigdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -516,8 +560,11 @@ uninstall-linuxpkgconfigDATA:
 	dir='$(DESTDIR)$(linuxpkgconfigdir)'; $(am__uninstall_files_from_dir)
 install-pkgappDATA: $(pkgapp_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(pkgappdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgappdir)"
 	@list='$(pkgapp_DATA)'; test -n "$(pkgappdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(pkgappdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(pkgappdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -534,8 +581,11 @@ uninstall-pkgappDATA:
 	dir='$(DESTDIR)$(pkgappdir)'; $(am__uninstall_files_from_dir)
 install-programfilesDATA: $(programfiles_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(programfilesdir)" || $(MKDIR_P) "$(DESTDIR)$(programfilesdir)"
 	@list='$(programfiles_DATA)'; test -n "$(programfilesdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(programfilesdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(programfilesdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -552,8 +602,11 @@ uninstall-programfilesDATA:
 	dir='$(DESTDIR)$(programfilesdir)'; $(am__uninstall_files_from_dir)
 install-programfilesiconsDATA: $(programfilesicons_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(programfilesiconsdir)" || $(MKDIR_P) "$(DESTDIR)$(programfilesiconsdir)"
 	@list='$(programfilesicons_DATA)'; test -n "$(programfilesiconsdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(programfilesiconsdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(programfilesiconsdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
diff --git a/src/Engine-XMPP/Protocols/Xmpp/XmppProtocolManager.cs b/src/Engine-XMPP/Protocols/Xmpp/XmppProtocolManager.cs
index 302825b..2840b2f 100644
--- a/src/Engine-XMPP/Protocols/Xmpp/XmppProtocolManager.cs
+++ b/src/Engine-XMPP/Protocols/Xmpp/XmppProtocolManager.cs
@@ -68,6 +68,12 @@ namespace Smuxi.Engine
         
         public override string NetworkID {
             get {
+                if (!String.IsNullOrEmpty(_JabberClient.NetworkHost)) {
+                    return _JabberClient.NetworkHost;
+                }
+                if (!String.IsNullOrEmpty(_JabberClient.Server)) {
+                    return _JabberClient.Server;
+                }
                 return "XMPP";
             }
         }
@@ -128,6 +134,8 @@ namespace Smuxi.Engine
             Host = server.Hostname;
             Port = server.Port;
 
+            ApplyConfig(Session.UserConfig, server);
+
             // TODO: use config for single network chat or once per network manager
             _NetworkChat = Session.CreateChat<ProtocolChatModel>(
                 NetworkID, "Jabber " + Host, this
@@ -135,8 +143,14 @@ namespace Smuxi.Engine
             Session.AddChat(_NetworkChat);
             Session.SyncChat(_NetworkChat);
 
-            ApplyConfig(Session.UserConfig, server);
-
+            if (!String.IsNullOrEmpty(_JabberClient.ProxyHost)) {
+                var builder = CreateMessageBuilder();
+                builder.AppendEventPrefix();
+                builder.AppendText(_("Using proxy: {0}:{1}"),
+                                   _JabberClient.ProxyHost,
+                                   _JabberClient.ProxyPort);
+                Session.AddMessageToChat(Chat, builder.ToMessage());
+            }
             _JabberClient.Connect();
         }
         
@@ -411,6 +425,11 @@ namespace Smuxi.Engine
         
         public void CommandJoin(CommandModel cd)
         {
+            if (cd.DataArray.Length < 2) {
+                NotEnoughParameters(cd);
+                return;
+            }
+
             string jid = cd.DataArray[1];
             ChatModel chat = GetChat(jid, ChatType.Group);
             if (chat == null) {
diff --git a/src/Engine/Config/Config.cs b/src/Engine/Config/Config.cs
index 58e9444..7927b44 100644
--- a/src/Engine/Config/Config.cs
+++ b/src/Engine/Config/Config.cs
@@ -249,7 +249,9 @@ namespace Smuxi.Engine
             Get(prefix+"EngineBufferLines", 100);
             Get(prefix+"StripColors", false);
             Get(prefix+"StripFormattings", false);
-            
+            Get(prefix+"AutoSwitchPersonChats", false);
+            Get(prefix+"AutoSwitchGroupChats", true);
+
             prefix = "Engine/Users/DEFAULT/Interface/Notebook/Tab/";
             Get(prefix+"NoActivityColor", "#000000");
             Get(prefix+"ActivityColor",   "#0080FF");
@@ -459,6 +461,8 @@ namespace Smuxi.Engine
                 LoadUserEntry(user, "Interface/Notebook/EngineBufferLines", null);
                 LoadUserEntry(user, "Interface/Notebook/StripColors", null);
                 LoadUserEntry(user, "Interface/Notebook/StripFormattings", null);
+                LoadUserEntry(user, "Interface/Notebook/AutoSwitchPersonChats", null);
+                LoadUserEntry(user, "Interface/Notebook/AutoSwitchGroupChats", null);
                 LoadUserEntry(user, "Interface/Notebook/Tab/NoActivityColor", null);
                 LoadUserEntry(user, "Interface/Notebook/Tab/ActivityColor", null);
                 LoadUserEntry(user, "Interface/Notebook/Tab/EventColor", null);
diff --git a/src/Engine/Config/FrontendConfig.cs b/src/Engine/Config/FrontendConfig.cs
index 024d936..03eb53a 100644
--- a/src/Engine/Config/FrontendConfig.cs
+++ b/src/Engine/Config/FrontendConfig.cs
@@ -81,6 +81,9 @@ namespace Smuxi.Engine
             // setting required default values
             prefix = "Frontend/";
             LoadEntry(prefix+"UseLowBandwidthMode", false);
+            LoadEntry(prefix+"ShowQuickJoin", true);
+            LoadEntry(prefix+"ShowMenuBar", true);
+            LoadEntry(prefix+"ShowStatusBar", true);
 
             prefix = "Frontend/Engines/";
             Get<string[]>(prefix+"Engines", new string[] {});
diff --git a/src/Engine/Config/ProxySettings.cs b/src/Engine/Config/ProxySettings.cs
index f38f669..05be4aa 100644
--- a/src/Engine/Config/ProxySettings.cs
+++ b/src/Engine/Config/ProxySettings.cs
@@ -60,6 +60,16 @@ namespace Smuxi.Engine
             }
 
             if (SystemWebProxy == null) {
+                if (DefaultWebProxy.Address.Scheme.StartsWith("socks") &&
+                    destination.Scheme.StartsWith("http")) {
+#if LOG4NET
+                    f_Logger.DebugFormat("GetWebProxy(<{0}>): ignoring " +
+                                         "SOCKS proxy for HTTP destination: {1}",
+                                         destination, DefaultWebProxy.Address);
+#endif
+                    return null;
+                }
+
 #if LOG4NET
                 f_Logger.DebugFormat("GetWebProxy(<{0}>): returning default proxy: {1}",
                                      destination, DefaultWebProxy.Address);
@@ -139,9 +149,9 @@ namespace Smuxi.Engine
                     DefaultWebProxy = null;
                     SystemWebProxy = proxy;
                     break;
-                case ProxyType.Http:
+                default:
                     var uriBuilder = new UriBuilder();
-                    uriBuilder.Scheme = "http";
+                    uriBuilder.Scheme = ProxyType.ToString().ToLower();
                     uriBuilder.Host = ProxyHostname;
                     uriBuilder.Port = ProxyPort;
                     uriBuilder.UserName = ProxyUsername;
diff --git a/src/Engine/Config/ServerListController.cs b/src/Engine/Config/ServerListController.cs
index d519f41..4b035f1 100644
--- a/src/Engine/Config/ServerListController.cs
+++ b/src/Engine/Config/ServerListController.cs
@@ -119,7 +119,27 @@ namespace Smuxi.Engine
             }
             return networks;
         }
-        
+
+        public ServerModel GetServerByNetwork(string network)
+        {
+            Trace.Call(network);
+
+            if (network == null) {
+                throw new ArgumentNullException("network");
+            }
+            if (network.Trim().Length == 0) {
+                throw new InvalidOperationException(_("Network must not be empty."));
+            }
+
+            var servers = GetServerList();
+            foreach (var server in servers) {
+                if (String.Compare(server.Network, network, true) == 0) {
+                    return server;
+                }
+            }
+            return null;
+        }
+
         public void AddServer(ServerModel server)
         {
             Trace.Call(server);
diff --git a/src/Engine/Makefile.in b/src/Engine/Makefile.in
index ccc690e..c12e18b 100644
--- a/src/Engine/Makefile.in
+++ b/src/Engine/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.2 from Makefile.am.
+# Makefile.in generated by automake 1.11.5 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -17,6 +17,23 @@
 
 
 VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -85,12 +102,18 @@ am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(pkgappdir)" \
 SCRIPTS = $(bin_SCRIPTS) $(pkgapp_SCRIPTS)
 SOURCES =
 DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
 DATA = $(linuxdesktopapplications_DATA) $(linuxpkgconfig_DATA) \
 	$(programfiles_DATA) $(programfilesicons_DATA)
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 ALL_LINGUAS = @ALL_LINGUAS@
 AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
@@ -150,6 +173,8 @@ GLIB_SHARP_20_LIBS = @GLIB_SHARP_20_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
 GREP = @GREP@
+GTKSPELL_CFLAGS = @GTKSPELL_CFLAGS@
+GTKSPELL_LIBS = @GTKSPELL_LIBS@
 GTK_SHARP_20_CFLAGS = @GTK_SHARP_20_CFLAGS@
 GTK_SHARP_20_LIBS = @GTK_SHARP_20_LIBS@
 INDICATE_SHARP_CFLAGS = @INDICATE_SHARP_CFLAGS@
@@ -164,6 +189,10 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
 INTLTOOL_MERGE = @INTLTOOL_MERGE@
 INTLTOOL_PERL = @INTLTOOL_PERL@
 INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@
+INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@
+INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@
+INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@
 INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
@@ -274,6 +303,8 @@ htmldir = @htmldir@
 includedir = @includedir@
 infodir = @infodir@
 install_sh = @install_sh@
+intltool__v_merge_options_ = @intltool__v_merge_options_@
+intltool__v_merge_options_0 = @intltool__v_merge_options_0@
 libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
@@ -482,6 +513,7 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
 	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
 	esac;
+$(top_srcdir)/Makefile.include:
 
 $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
@@ -495,8 +527,11 @@ smuxi-engine.pc: $(top_builddir)/config.status $(srcdir)/smuxi-engine.pc.in
 	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
 install-binSCRIPTS: $(bin_SCRIPTS)
 	@$(NORMAL_INSTALL)
-	test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
 	@list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
@@ -527,8 +562,11 @@ uninstall-binSCRIPTS:
 	dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir)
 install-pkgappSCRIPTS: $(pkgapp_SCRIPTS)
 	@$(NORMAL_INSTALL)
-	test -z "$(pkgappdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgappdir)"
 	@list='$(pkgapp_SCRIPTS)'; test -n "$(pkgappdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(pkgappdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(pkgappdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
@@ -565,8 +603,11 @@ clean-libtool:
 	-rm -rf .libs _libs
 install-linuxdesktopapplicationsDATA: $(linuxdesktopapplications_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(linuxdesktopapplicationsdir)" || $(MKDIR_P) "$(DESTDIR)$(linuxdesktopapplicationsdir)"
 	@list='$(linuxdesktopapplications_DATA)'; test -n "$(linuxdesktopapplicationsdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(linuxdesktopapplicationsdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(linuxdesktopapplicationsdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -583,8 +624,11 @@ uninstall-linuxdesktopapplicationsDATA:
 	dir='$(DESTDIR)$(linuxdesktopapplicationsdir)'; $(am__uninstall_files_from_dir)
 install-linuxpkgconfigDATA: $(linuxpkgconfig_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(linuxpkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(linuxpkgconfigdir)"
 	@list='$(linuxpkgconfig_DATA)'; test -n "$(linuxpkgconfigdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(linuxpkgconfigdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(linuxpkgconfigdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -601,8 +645,11 @@ uninstall-linuxpkgconfigDATA:
 	dir='$(DESTDIR)$(linuxpkgconfigdir)'; $(am__uninstall_files_from_dir)
 install-programfilesDATA: $(programfiles_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(programfilesdir)" || $(MKDIR_P) "$(DESTDIR)$(programfilesdir)"
 	@list='$(programfiles_DATA)'; test -n "$(programfilesdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(programfilesdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(programfilesdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -619,8 +666,11 @@ uninstall-programfilesDATA:
 	dir='$(DESTDIR)$(programfilesdir)'; $(am__uninstall_files_from_dir)
 install-programfilesiconsDATA: $(programfilesicons_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(programfilesiconsdir)" || $(MKDIR_P) "$(DESTDIR)$(programfilesiconsdir)"
 	@list='$(programfilesicons_DATA)'; test -n "$(programfilesiconsdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(programfilesiconsdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(programfilesiconsdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
diff --git a/src/Engine/Messages/MessagePartModel.cs b/src/Engine/Messages/MessagePartModel.cs
index ae74432..85861e5 100644
--- a/src/Engine/Messages/MessagePartModel.cs
+++ b/src/Engine/Messages/MessagePartModel.cs
@@ -93,7 +93,7 @@ namespace Smuxi.Engine
             return Equals(part);
         }
 
-        public bool Equals(MessagePartModel part)
+        public virtual bool Equals(MessagePartModel part)
         {
             if ((object) part == null) {
                 return false;
diff --git a/src/Engine/Messages/TextMessagePartModel.cs b/src/Engine/Messages/TextMessagePartModel.cs
index bcb2945..85c9329 100644
--- a/src/Engine/Messages/TextMessagePartModel.cs
+++ b/src/Engine/Messages/TextMessagePartModel.cs
@@ -226,8 +226,9 @@ namespace Smuxi.Engine
             return base.Equals(textPart);
         }
 
-        public bool Equals(TextMessagePartModel textPart)
+        public override bool Equals(MessagePartModel part)
         {
+            var textPart = part as TextMessagePartModel;
             if ((object) textPart == null) {
                 return false;
             }
diff --git a/src/Engine/Session.cs b/src/Engine/Session.cs
index 8865802..e0301b7 100644
--- a/src/Engine/Session.cs
+++ b/src/Engine/Session.cs
@@ -419,6 +419,7 @@ namespace Smuxi.Engine
             string[] help = {
                 "help",
                 "connect/server protocol [protocol-parameters]",
+                "connect/server network",
                 "disconnect [server]",
                 "network list",
                 "network close [network]",
@@ -444,9 +445,15 @@ namespace Smuxi.Engine
             }
             
             FrontendManager fm = cd.FrontendManager;
-            
-            string protocol;
-            if (cd.DataArray.Length >= 3) {
+
+            string protocol = null;
+            ServerModel server = null;
+            // first lookup by network name
+            if (cd.DataArray.Length == 2) {
+                var network = cd.Parameter;
+                var serverSettings = new ServerListController(UserConfig);
+                server = serverSettings.GetServerByNetwork(network);
+            } else if (cd.DataArray.Length >= 3) {
                 protocol = cd.DataArray[1];
             } else if (cd.DataArray.Length >= 2) {
                 // HACK: simply assume the user meant irc if not specified as
@@ -479,7 +486,7 @@ namespace Smuxi.Engine
             }
             */
 
-            if (protocolManager == null) {
+            if (protocolManager == null && server == null) {
                 try {
                     protocolManager = CreateProtocolManager(protocol);
                     _ProtocolManagers.Add(protocolManager);
@@ -510,7 +517,11 @@ namespace Smuxi.Engine
             // run in background so it can't block the command queue
             ThreadPool.QueueUserWorkItem(delegate {
                 try {
-                    protocolManager.Command(cd);
+                    if (protocolManager == null && server != null) {
+                        protocolManager = Connect(server, fm);
+                    } else {
+                        protocolManager.Command(cd);
+                    }
 
                     // set this as current protocol manager
                     // but only if there was none set (we might be on a chat for example)
@@ -658,7 +669,13 @@ namespace Smuxi.Engine
             if (cd == null) {
                 throw new ArgumentNullException("cd");
             }
-            
+
+            if (cd.DataArray.Length == 1) {
+                // no parameter given, fallback to list
+                _CommandNetworkList(cd);
+                return;
+            }
+
             FrontendManager fm = cd.FrontendManager;
             if (cd.DataArray.Length >= 2) {
                 switch (cd.DataArray[1].ToLower()) {
@@ -681,18 +698,63 @@ namespace Smuxi.Engine
             }
         }
         
-        private void _CommandNetworkList(CommandModel cd)
+        private void _CommandNetworkList(CommandModel cmd)
         {
-            FrontendManager fm = cd.FrontendManager;
-            fm.AddTextToChat(cd.Chat, "-!- " + _("Networks") + ":");
+            var frontend = cmd.FrontendManager;
+            var servers = new ServerListController(UserConfig);
+            var availableNetworks = servers.GetNetworks();
+            var connectedNetworks = new List<IProtocolManager>();
             lock (_ProtocolManagers) {
-                foreach (IProtocolManager nm in _ProtocolManagers) {
-                    fm.AddTextToChat(cd.Chat, "-!- " +
-                        _("Protocol") + ": " + nm.Protocol + " " +
-                        _("Network") + ": " + nm.NetworkID + " " +
-                        _("Host") + ": " + nm.Host + " " +
-                        _("Port") + ": " + nm.Port);
+                foreach (IProtocolManager pm in _ProtocolManagers) {
+                    if (pm.IsConnected) {
+                        connectedNetworks.Add(pm);
+                        if (!String.IsNullOrEmpty(pm.NetworkID)) {
+                            availableNetworks.Remove(pm.NetworkID);
+                        }
+                    }
+                }
+            }
+
+            var msg = CreateMessageBuilder();
+            // TRANSLATOR: this line is used as a label / category for a
+            // list of networks below
+            msg.AppendHeader(_("Connected Networks"));
+            frontend.AddMessageToChat(cmd.Chat, msg.ToMessage());
+            foreach (var network in connectedNetworks) {
+                msg = CreateMessageBuilder();
+                msg.AppendEventPrefix();
+                msg.AppendText("{0}: {1} ", _("Network"),  network.NetworkID);
+                msg.AppendText("{0}: {1} ", _("Protocol"), network.Protocol);
+                msg.AppendText("{0}: {1} ", _("Host"),     network.Host);
+                msg.AppendText("{0}: {1}",  _("Port"),     network.Port);
+                frontend.AddMessageToChat(cmd.Chat, msg.ToMessage());
+            }
+            if (connectedNetworks.Count == 0) {
+                msg = CreateMessageBuilder();
+                // TRANSLATOR: no connected networks
+                msg.AppendEventPrefix().AppendText("<{0}>", _("None"));
+                frontend.AddMessageToChat(cmd.Chat, msg.ToMessage());
+            }
+
+            msg = CreateMessageBuilder();
+            // TRANSLATOR: this line is used as a label / category for a
+            // list of networks below
+            msg.AppendHeader(_("Available Networks"));
+            frontend.AddMessageToChat(cmd.Chat, msg.ToMessage());
+            foreach (var network in availableNetworks) {
+                if (network == null || network.Trim().Length == 0) {
+                    continue;
                 }
+                msg = CreateMessageBuilder();
+                msg.AppendEventPrefix();
+                msg.AppendText("{0}: {1}", _("Network"), network);
+                frontend.AddMessageToChat(cmd.Chat, msg.ToMessage());
+            }
+            if (availableNetworks.Count == 0) {
+                msg = CreateMessageBuilder();
+                // TRANSLATOR: no available networks
+                msg.AppendEventPrefix().AppendText("<{0}>", _("None"));
+                frontend.AddMessageToChat(cmd.Chat, msg.ToMessage());
             }
         }
         
diff --git a/src/Engine/TextColor.cs b/src/Engine/TextColor.cs
index 2f5132b..2f89a27 100644
--- a/src/Engine/TextColor.cs
+++ b/src/Engine/TextColor.cs
@@ -47,6 +47,9 @@ namespace Smuxi.Engine
             get {
                 return f_Value;
             }
+            set {
+                f_Value = value;
+            }
         }
         
         public string HexCode {
diff --git a/src/Frontend-Curses/Makefile.in b/src/Frontend-Curses/Makefile.in
index 47517b0..4fc485d 100644
--- a/src/Frontend-Curses/Makefile.in
+++ b/src/Frontend-Curses/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.2 from Makefile.am.
+# Makefile.in generated by automake 1.11.5 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -17,6 +17,23 @@
 
 
 VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -83,12 +100,18 @@ am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(pkgappdir)" \
 SCRIPTS = $(bin_SCRIPTS) $(pkgapp_SCRIPTS)
 SOURCES =
 DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
 DATA = $(linuxdesktopapplications_DATA) $(linuxpkgconfig_DATA) \
 	$(programfiles_DATA) $(programfilesicons_DATA)
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 ALL_LINGUAS = @ALL_LINGUAS@
 AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
@@ -148,6 +171,8 @@ GLIB_SHARP_20_LIBS = @GLIB_SHARP_20_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
 GREP = @GREP@
+GTKSPELL_CFLAGS = @GTKSPELL_CFLAGS@
+GTKSPELL_LIBS = @GTKSPELL_LIBS@
 GTK_SHARP_20_CFLAGS = @GTK_SHARP_20_CFLAGS@
 GTK_SHARP_20_LIBS = @GTK_SHARP_20_LIBS@
 INDICATE_SHARP_CFLAGS = @INDICATE_SHARP_CFLAGS@
@@ -162,6 +187,10 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
 INTLTOOL_MERGE = @INTLTOOL_MERGE@
 INTLTOOL_PERL = @INTLTOOL_PERL@
 INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@
+INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@
+INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@
+INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@
 INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
@@ -272,6 +301,8 @@ htmldir = @htmldir@
 includedir = @includedir@
 infodir = @infodir@
 install_sh = @install_sh@
+intltool__v_merge_options_ = @intltool__v_merge_options_@
+intltool__v_merge_options_0 = @intltool__v_merge_options_0@
 libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
@@ -459,6 +490,7 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
 	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
 	esac;
+$(top_srcdir)/Makefile.include:
 
 $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
@@ -472,8 +504,11 @@ smuxi-frontend-curses: $(top_builddir)/config.status $(srcdir)/smuxi-frontend-cu
 	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
 install-binSCRIPTS: $(bin_SCRIPTS)
 	@$(NORMAL_INSTALL)
-	test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
 	@list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
@@ -504,8 +539,11 @@ uninstall-binSCRIPTS:
 	dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir)
 install-pkgappSCRIPTS: $(pkgapp_SCRIPTS)
 	@$(NORMAL_INSTALL)
-	test -z "$(pkgappdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgappdir)"
 	@list='$(pkgapp_SCRIPTS)'; test -n "$(pkgappdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(pkgappdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(pkgappdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
@@ -542,8 +580,11 @@ clean-libtool:
 	-rm -rf .libs _libs
 install-linuxdesktopapplicationsDATA: $(linuxdesktopapplications_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(linuxdesktopapplicationsdir)" || $(MKDIR_P) "$(DESTDIR)$(linuxdesktopapplicationsdir)"
 	@list='$(linuxdesktopapplications_DATA)'; test -n "$(linuxdesktopapplicationsdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(linuxdesktopapplicationsdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(linuxdesktopapplicationsdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -560,8 +601,11 @@ uninstall-linuxdesktopapplicationsDATA:
 	dir='$(DESTDIR)$(linuxdesktopapplicationsdir)'; $(am__uninstall_files_from_dir)
 install-linuxpkgconfigDATA: $(linuxpkgconfig_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(linuxpkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(linuxpkgconfigdir)"
 	@list='$(linuxpkgconfig_DATA)'; test -n "$(linuxpkgconfigdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(linuxpkgconfigdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(linuxpkgconfigdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -578,8 +622,11 @@ uninstall-linuxpkgconfigDATA:
 	dir='$(DESTDIR)$(linuxpkgconfigdir)'; $(am__uninstall_files_from_dir)
 install-programfilesDATA: $(programfiles_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(programfilesdir)" || $(MKDIR_P) "$(DESTDIR)$(programfilesdir)"
 	@list='$(programfiles_DATA)'; test -n "$(programfilesdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(programfilesdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(programfilesdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -596,8 +643,11 @@ uninstall-programfilesDATA:
 	dir='$(DESTDIR)$(programfilesdir)'; $(am__uninstall_files_from_dir)
 install-programfilesiconsDATA: $(programfilesicons_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(programfilesiconsdir)" || $(MKDIR_P) "$(DESTDIR)$(programfilesiconsdir)"
 	@list='$(programfilesicons_DATA)'; test -n "$(programfilesiconsdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(programfilesiconsdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(programfilesiconsdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
diff --git a/src/Frontend-GNOME-IRC/Makefile.in b/src/Frontend-GNOME-IRC/Makefile.in
index 9bbc610..804d71c 100644
--- a/src/Frontend-GNOME-IRC/Makefile.in
+++ b/src/Frontend-GNOME-IRC/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.2 from Makefile.am.
+# Makefile.in generated by automake 1.11.5 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -17,6 +17,23 @@
 
 
 VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -82,12 +99,18 @@ am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(pkgappdir)" \
 SCRIPTS = $(bin_SCRIPTS) $(pkgapp_SCRIPTS)
 SOURCES =
 DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
 DATA = $(linuxdesktopapplications_DATA) $(linuxpkgconfig_DATA) \
 	$(programfiles_DATA) $(programfilesicons_DATA)
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 ALL_LINGUAS = @ALL_LINGUAS@
 AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
@@ -147,6 +170,8 @@ GLIB_SHARP_20_LIBS = @GLIB_SHARP_20_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
 GREP = @GREP@
+GTKSPELL_CFLAGS = @GTKSPELL_CFLAGS@
+GTKSPELL_LIBS = @GTKSPELL_LIBS@
 GTK_SHARP_20_CFLAGS = @GTK_SHARP_20_CFLAGS@
 GTK_SHARP_20_LIBS = @GTK_SHARP_20_LIBS@
 INDICATE_SHARP_CFLAGS = @INDICATE_SHARP_CFLAGS@
@@ -161,6 +186,10 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
 INTLTOOL_MERGE = @INTLTOOL_MERGE@
 INTLTOOL_PERL = @INTLTOOL_PERL@
 INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@
+INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@
+INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@
+INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@
 INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
@@ -271,6 +300,8 @@ htmldir = @htmldir@
 includedir = @includedir@
 infodir = @infodir@
 install_sh = @install_sh@
+intltool__v_merge_options_ = @intltool__v_merge_options_@
+intltool__v_merge_options_0 = @intltool__v_merge_options_0@
 libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
@@ -468,6 +499,7 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
 	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
 	esac;
+$(top_srcdir)/Makefile.include:
 
 $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
@@ -479,8 +511,11 @@ $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
 $(am__aclocal_m4_deps):
 install-binSCRIPTS: $(bin_SCRIPTS)
 	@$(NORMAL_INSTALL)
-	test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
 	@list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
@@ -511,8 +546,11 @@ uninstall-binSCRIPTS:
 	dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir)
 install-pkgappSCRIPTS: $(pkgapp_SCRIPTS)
 	@$(NORMAL_INSTALL)
-	test -z "$(pkgappdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgappdir)"
 	@list='$(pkgapp_SCRIPTS)'; test -n "$(pkgappdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(pkgappdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(pkgappdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
@@ -549,8 +587,11 @@ clean-libtool:
 	-rm -rf .libs _libs
 install-linuxdesktopapplicationsDATA: $(linuxdesktopapplications_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(linuxdesktopapplicationsdir)" || $(MKDIR_P) "$(DESTDIR)$(linuxdesktopapplicationsdir)"
 	@list='$(linuxdesktopapplications_DATA)'; test -n "$(linuxdesktopapplicationsdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(linuxdesktopapplicationsdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(linuxdesktopapplicationsdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -567,8 +608,11 @@ uninstall-linuxdesktopapplicationsDATA:
 	dir='$(DESTDIR)$(linuxdesktopapplicationsdir)'; $(am__uninstall_files_from_dir)
 install-linuxpkgconfigDATA: $(linuxpkgconfig_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(linuxpkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(linuxpkgconfigdir)"
 	@list='$(linuxpkgconfig_DATA)'; test -n "$(linuxpkgconfigdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(linuxpkgconfigdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(linuxpkgconfigdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -585,8 +629,11 @@ uninstall-linuxpkgconfigDATA:
 	dir='$(DESTDIR)$(linuxpkgconfigdir)'; $(am__uninstall_files_from_dir)
 install-programfilesDATA: $(programfiles_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(programfilesdir)" || $(MKDIR_P) "$(DESTDIR)$(programfilesdir)"
 	@list='$(programfiles_DATA)'; test -n "$(programfilesdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(programfilesdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(programfilesdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -603,8 +650,11 @@ uninstall-programfilesDATA:
 	dir='$(DESTDIR)$(programfilesdir)'; $(am__uninstall_files_from_dir)
 install-programfilesiconsDATA: $(programfilesicons_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(programfilesiconsdir)" || $(MKDIR_P) "$(DESTDIR)$(programfilesiconsdir)"
 	@list='$(programfilesicons_DATA)'; test -n "$(programfilesiconsdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(programfilesiconsdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(programfilesiconsdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
diff --git a/src/Frontend-GNOME-XMPP/Makefile.in b/src/Frontend-GNOME-XMPP/Makefile.in
index a14ef1c..0373bc2 100644
--- a/src/Frontend-GNOME-XMPP/Makefile.in
+++ b/src/Frontend-GNOME-XMPP/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.2 from Makefile.am.
+# Makefile.in generated by automake 1.11.5 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -17,6 +17,23 @@
 
 
 VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -82,12 +99,18 @@ am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(pkgappdir)" \
 SCRIPTS = $(bin_SCRIPTS) $(pkgapp_SCRIPTS)
 SOURCES =
 DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
 DATA = $(linuxdesktopapplications_DATA) $(linuxpkgconfig_DATA) \
 	$(programfiles_DATA) $(programfilesicons_DATA)
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 ALL_LINGUAS = @ALL_LINGUAS@
 AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
@@ -147,6 +170,8 @@ GLIB_SHARP_20_LIBS = @GLIB_SHARP_20_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
 GREP = @GREP@
+GTKSPELL_CFLAGS = @GTKSPELL_CFLAGS@
+GTKSPELL_LIBS = @GTKSPELL_LIBS@
 GTK_SHARP_20_CFLAGS = @GTK_SHARP_20_CFLAGS@
 GTK_SHARP_20_LIBS = @GTK_SHARP_20_LIBS@
 INDICATE_SHARP_CFLAGS = @INDICATE_SHARP_CFLAGS@
@@ -161,6 +186,10 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
 INTLTOOL_MERGE = @INTLTOOL_MERGE@
 INTLTOOL_PERL = @INTLTOOL_PERL@
 INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@
+INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@
+INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@
+INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@
 INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
@@ -271,6 +300,8 @@ htmldir = @htmldir@
 includedir = @includedir@
 infodir = @infodir@
 install_sh = @install_sh@
+intltool__v_merge_options_ = @intltool__v_merge_options_@
+intltool__v_merge_options_0 = @intltool__v_merge_options_0@
 libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
@@ -458,6 +489,7 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
 	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
 	esac;
+$(top_srcdir)/Makefile.include:
 
 $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
@@ -469,8 +501,11 @@ $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
 $(am__aclocal_m4_deps):
 install-binSCRIPTS: $(bin_SCRIPTS)
 	@$(NORMAL_INSTALL)
-	test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
 	@list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
@@ -501,8 +536,11 @@ uninstall-binSCRIPTS:
 	dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir)
 install-pkgappSCRIPTS: $(pkgapp_SCRIPTS)
 	@$(NORMAL_INSTALL)
-	test -z "$(pkgappdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgappdir)"
 	@list='$(pkgapp_SCRIPTS)'; test -n "$(pkgappdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(pkgappdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(pkgappdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
@@ -539,8 +577,11 @@ clean-libtool:
 	-rm -rf .libs _libs
 install-linuxdesktopapplicationsDATA: $(linuxdesktopapplications_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(linuxdesktopapplicationsdir)" || $(MKDIR_P) "$(DESTDIR)$(linuxdesktopapplicationsdir)"
 	@list='$(linuxdesktopapplications_DATA)'; test -n "$(linuxdesktopapplicationsdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(linuxdesktopapplicationsdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(linuxdesktopapplicationsdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -557,8 +598,11 @@ uninstall-linuxdesktopapplicationsDATA:
 	dir='$(DESTDIR)$(linuxdesktopapplicationsdir)'; $(am__uninstall_files_from_dir)
 install-linuxpkgconfigDATA: $(linuxpkgconfig_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(linuxpkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(linuxpkgconfigdir)"
 	@list='$(linuxpkgconfig_DATA)'; test -n "$(linuxpkgconfigdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(linuxpkgconfigdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(linuxpkgconfigdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -575,8 +619,11 @@ uninstall-linuxpkgconfigDATA:
 	dir='$(DESTDIR)$(linuxpkgconfigdir)'; $(am__uninstall_files_from_dir)
 install-programfilesDATA: $(programfiles_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(programfilesdir)" || $(MKDIR_P) "$(DESTDIR)$(programfilesdir)"
 	@list='$(programfiles_DATA)'; test -n "$(programfilesdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(programfilesdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(programfilesdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -593,8 +640,11 @@ uninstall-programfilesDATA:
 	dir='$(DESTDIR)$(programfilesdir)'; $(am__uninstall_files_from_dir)
 install-programfilesiconsDATA: $(programfilesicons_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(programfilesiconsdir)" || $(MKDIR_P) "$(DESTDIR)$(programfilesiconsdir)"
 	@list='$(programfilesicons_DATA)'; test -n "$(programfilesiconsdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(programfilesiconsdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(programfilesiconsdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
diff --git a/src/Frontend-GNOME/AboutDialog.cs b/src/Frontend-GNOME/AboutDialog.cs
index d4d1f0a..d829df8 100644
--- a/src/Frontend-GNOME/AboutDialog.cs
+++ b/src/Frontend-GNOME/AboutDialog.cs
@@ -39,10 +39,10 @@ namespace Smuxi.Frontend.Gnome
             var version = Frontend.Version.ToString();
             var distVersion = Defines.DistVersion;
             if (!String.IsNullOrEmpty(distVersion)) {
-                version = String.Format("{0} ({1})", version, distVersion);
+                Version = String.Format("\n Vendor: {0}", distVersion);
             }
-            Version = "\n Frontend: " + Frontend.UIName + " " + version  +
-                      "\n Engine: " + Frontend.EngineVersion;
+            Version += "\n Frontend: " + Frontend.UIName + " " + version  +
+                       "\n Engine: " + Frontend.EngineVersion;
             Copyright = "Copyright © 2005-2012 Mirco Bauer <meebey at meebey.net>";
             Authors = new string[] {
                 "Mirco Bauer <meebey at meebey.net>",
diff --git a/src/Frontend-GNOME/ChatViewManager.cs b/src/Frontend-GNOME/ChatViewManager.cs
index c35fb3f..e681bde 100644
--- a/src/Frontend-GNOME/ChatViewManager.cs
+++ b/src/Frontend-GNOME/ChatViewManager.cs
@@ -43,6 +43,8 @@ namespace Smuxi.Frontend.Gnome
         private Gtk.TreeView   f_TreeView;
         private UserConfig     f_Config;
         ChatViewSyncManager    SyncManager { get; set; }
+        bool AutoSwitchPersonChats { get; set; }
+        bool AutoSwitchGroupChats { get; set; }
 
         public event ChatViewManagerChatAddedEventHandler   ChatAdded;
         public event ChatViewManagerChatRemovedEventHandler ChatRemoved;
@@ -196,7 +198,13 @@ namespace Smuxi.Frontend.Gnome
             if (config == null) {
                 throw new ArgumentNullException("config");
             }
-            
+
+            var prefix = "Interface/Notebook/";
+            AutoSwitchPersonChats =
+                config[prefix + "AutoSwitchPersonChats"] as bool? ?? false;
+            AutoSwitchGroupChats =
+                config[prefix + "AutoSwitchGroupChats"] as bool? ?? true;
+
             f_Config = config;
             foreach (ChatView chat in f_Chats) {
                 chat.ApplyConfig(f_Config);
@@ -249,7 +257,11 @@ namespace Smuxi.Frontend.Gnome
 #if GTK_SHARP_2_10
                 f_Notebook.SetTabReorderable(chatView, true);
 #endif
-                chatView.ShowAll();
+
+                if ((chatView is PersonChatView && AutoSwitchPersonChats) ||
+                    (chatView is GroupChatView && AutoSwitchGroupChats)) {
+                    CurrentChatNumber = idx;
+                }
 
                 if (ChatAdded != null) {
                     ChatAdded(this, new ChatViewManagerChatAddedEventArgs(chatView));
diff --git a/src/Frontend-GNOME/EngineManagerDialog.cs b/src/Frontend-GNOME/EngineManagerDialog.cs
index 11c96ec..feb196c 100644
--- a/src/Frontend-GNOME/EngineManagerDialog.cs
+++ b/src/Frontend-GNOME/EngineManagerDialog.cs
@@ -46,7 +46,27 @@ namespace Smuxi.Frontend.Gnome
         private EngineManager _EngineManager;
         private Gtk.Button    _EditButton;
         private Gtk.Button    _DeleteButton;
-        
+
+        public string SelectedEngine {
+            get {
+                Gtk.TreeIter iter;
+                if (!_ComboBox.GetActiveIter(out iter)) {
+                    return null;
+                }
+                return (string) _ComboBox.Model.GetValue(iter, 0);
+            } set {
+                int i = 0;
+                foreach (object[] row in (Gtk.ListStore) _ComboBox.Model) {
+                    if ((string) row[0] == value) {
+                        _ComboBox.Active = i;
+                        return;
+                    }
+                    i++;
+                }
+                throw new ArgumentException(_("Engine not found."), "value");
+            }
+        }
+
         public EngineManagerDialog(EngineManager engineManager)
         {
             Trace.Call(engineManager);
diff --git a/src/Frontend-GNOME/Entry.cs b/src/Frontend-GNOME/Entry.cs
index 786846a..8dc293a 100644
--- a/src/Frontend-GNOME/Entry.cs
+++ b/src/Frontend-GNOME/Entry.cs
@@ -1,13 +1,7 @@
 /*
- * $Id$
- * $URL$
- * $Rev$
- * $Author$
- * $Date$
- *
  * Smuxi - Smart MUltipleXed Irc
  *
- * Copyright (c) 2005-2008 Mirco Bauer <meebey at meebey.net>
+ * Copyright (c) 2005-2012 Mirco Bauer <meebey at meebey.net>
  *
  * Full GPL License: <http://www.gnu.org/licenses/gpl.txt>
  *
@@ -27,6 +21,8 @@
  */
 
 using System;
+using System.Runtime.InteropServices;
+using System.Threading;
 using System.Collections;
 using System.Collections.Generic;
 using System.Collections.Specialized;
@@ -36,7 +32,7 @@ using Smuxi.Common;
 
 namespace Smuxi.Frontend.Gnome
 {
-    public class Entry : Gtk.Entry
+    public class Entry : Gtk.TextView
     {
 #if LOG4NET
         private static readonly log4net.ILog _Logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
@@ -48,6 +44,7 @@ namespace Smuxi.Frontend.Gnome
         private new EntrySettings Settings { get; set; }
 
         ChatViewManager ChatViewManager;
+        event EventHandler<EventArgs> Activated;
 
         /*
         public StringCollection History {
@@ -79,6 +76,30 @@ namespace Smuxi.Frontend.Gnome
         }
         */
 
+        public string Text {
+            get {
+                return Buffer.Text;
+            }
+            set {
+                Buffer.Text = value;
+            }
+        }
+
+        public int Position {
+            get {
+                return Buffer.CursorPosition;
+            }
+            set {
+                Gtk.TextIter position;
+                if (value < 0) {
+                    position = Buffer.EndIter;
+                } else {
+                    position = Buffer.GetIterAtOffset(value);
+                }
+                Buffer.PlaceCursor(position);
+            }
+        }
+
         public Entry(ChatViewManager chatViewManager)
         {
             Trace.Call(chatViewManager);
@@ -91,16 +112,17 @@ namespace Smuxi.Frontend.Gnome
             
             ChatViewManager = chatViewManager;
             Settings = new EntrySettings();
+            WrapMode = Gtk.WrapMode.WordChar;
 
+            InitSpellCheck();
             InitCommandManager();
             Frontend.SessionPropertyChanged += delegate {
                 InitCommandManager();
             };
 
-            Activated += new EventHandler(_OnActivated);
+            Activated += _OnActivated;
             KeyPressEvent += new Gtk.KeyPressEventHandler(_OnKeyPress);
-            FocusOutEvent += new Gtk.FocusOutEventHandler(_OnFocusOut);
-            ClipboardPasted += new EventHandler(_OnClipboardPasted);
+            PasteClipboard += _OnClipboardPasted;
         }
 
         public void UpdateHistoryChangedLine()
@@ -367,66 +389,28 @@ namespace Smuxi.Frontend.Gnome
                     HistoryNext();
                     break;
                 case Gdk.Key.Page_Up:
+                    // supress scrolling
                     ChatViewManager.CurrentChatView.ScrollUp();
+                    e.RetVal = true;
                     break;
                 case Gdk.Key.Page_Down:
+                    // supress scrolling
                     ChatViewManager.CurrentChatView.ScrollDown();
+                    e.RetVal = true;
+                    break;
+                case Gdk.Key.Return:
+                case Gdk.Key.KP_Enter:
+                case Gdk.Key.ISO_Enter:
+                case Gdk.Key.Key_3270_Enter:
+                    // supress adding a newline
+                    e.RetVal = true;
+                    if (Activated != null) {
+                        Activated(this, EventArgs.Empty);
+                    }
                     break;
             }
         }
 
-        private void _OnFocusOut(object sender, Gtk.FocusOutEventArgs e)
-        {
-            Trace.Call(sender, e);
-            
-            if (Frontend.MainWindow.CaretMode) {
-                return;
-            }
-            
-            // we can't just move to focus directly back as that breaks the
-            // notebook scrolling, see trac bug#11
-            
-            // grant the user 250ms to start a selection
-            GLib.Timeout.Add(250, new GLib.TimeoutHandler(delegate {
-                // TODO: check mouse buttons, if left mouse button is still pressed
-                // we should not interrupt either, as the user is going to make a selection!
-
-                // don't interrupt on-going entry selections
-                int start, end;
-                if (GetSelectionBounds(out start, out end)) {
-#if LOG4NET
-                    //_Logger.Debug("_OnFocusOut(): Entry has on-going selection, waiting..."); 
-#endif
-                    return true;
-                }
-
-                ChatView chat = ChatViewManager.CurrentChatView;
-                if (chat == null) {
-                    return false;
-                }
-
-                // don't interrupt on-going selections
-                if (chat.HasSelection && chat.HasFocus) {
-#if LOG4NET
-                    //_Logger.Debug("_OnFocusOut(): CurrentChatView has on-going selection, waiting..."); 
-#endif
-                    return true;
-                }
-                
-                // HACK: for some reason the selection of the TextView gets
-                // lost when moving the focus from the TextView to the entry
-                // being non-empty. So we empty it, move focus and then set the
-                // old value back. GTK+ bug maybe?
-                string text = Text;
-                Text = String.Empty;
-                HasFocus = true;
-                Text = text;
-                Position = -1;
-                
-                return false;
-            }));
-        }
-        
         private void _OnActivated(object sender, EventArgs e)
         {
             Trace.Call(sender, e);
@@ -535,6 +519,10 @@ namespace Smuxi.Frontend.Gnome
                         _CommandList(cd);
                         handled = true;
                         break;
+                    case "sync":
+                        _CommandSync(cd);
+                        handled = true;
+                        break;
                 }
             }
             
@@ -553,6 +541,7 @@ namespace Smuxi.Frontend.Gnome
             string[] help = {
             "help",
             "window (number|channelname|queryname|close)",
+            "sync",
             "clear",
             "echo data",
             "exec command",
@@ -656,6 +645,32 @@ namespace Smuxi.Frontend.Gnome
             }
         }
     
+        private void _CommandSync(CommandModel cmd)
+        {
+            if (Frontend.IsLocalEngine) {
+                return;
+            }
+
+            var chatView = ChatViewManager.CurrentChatView;
+            ThreadPool.QueueUserWorkItem(delegate {
+                try {
+                    // HACK: force a full sync
+                    Frontend.UseLowBandwidthMode = false;
+                    chatView.Sync();
+                    Frontend.UseLowBandwidthMode = true;
+
+                    Gtk.Application.Invoke(delegate {
+                        Frontend.UseLowBandwidthMode = false;
+                        chatView.Populate();
+                        Frontend.UseLowBandwidthMode = true;
+                        chatView.ScrollToEnd();
+                    });
+                } catch (Exception ex) {
+                    Frontend.ShowError(null, ex);
+                }
+            });
+        }
+
         private void _CommandClear(CommandModel cd)
         {
             ChatViewManager.CurrentChatView.Clear();
@@ -669,7 +684,7 @@ namespace Smuxi.Frontend.Gnome
                 return;
             }
 
-            int position = CursorPosition;
+            int position = Position;
             string text = Text;
             string word;
             int previous_space;
@@ -850,9 +865,31 @@ namespace Smuxi.Frontend.Gnome
             }
         }
 
+        private void InitSpellCheck()
+        {
+#if GTKSPELL
+            try {
+                gtkspell_new_attach(Handle, null, IntPtr.Zero);
+            } catch (Exception ex) {
+                _Logger.Error("InitSpellCheck(): gtkspell_new_attach() "+
+                              "threw exception", ex);
+            }
+#endif
+        }
+
         private static string _(string msg)
         {
             return Mono.Unix.Catalog.GetString(msg);
-        }        
+        }
+
+#if GTKSPELL
+        [DllImport("gtkspell.dll")]
+        static extern IntPtr gtkspell_new_attach(IntPtr text_view,
+                                                 string locale,
+                                                 IntPtr error);
+
+        [DllImport("gtkspell.dll")]
+        static extern void gtkspell_detach(IntPtr obj);
+#endif
     }
 }
diff --git a/src/Frontend-GNOME/Frontend.cs b/src/Frontend-GNOME/Frontend.cs
index 5c89937..3ecd8eb 100644
--- a/src/Frontend-GNOME/Frontend.cs
+++ b/src/Frontend-GNOME/Frontend.cs
@@ -167,6 +167,9 @@ namespace Smuxi.Frontend.Gnome
                 }
                 return (bool) _FrontendConfig["UseLowBandwidthMode"];
             }
+            set {
+                _FrontendConfig["UseLowBandwidthMode"] = value;
+            }
         }
 
         public static void Init(string[] args)
@@ -201,9 +204,29 @@ namespace Smuxi.Frontend.Gnome
                 ConnectEngineToGUI();
             } else {
                 // there are remote engines defined, means we have to ask
+                string engine = null;
+                for (int i = 0; i < args.Length; i++) {
+                    var arg = args[i];
+                    switch (arg) {
+                        case "-e":
+                        case "--engine":
+                            if (args.Length >=  i + 1) {
+                                engine = args[i + 1];
+                            }
+                            break;
+                    }
+                }
                 //_SplashScreenWindow.Destroy();
                 _SplashScreenWindow = null;
-                ShowEngineManagerDialog();
+                try {
+                    ShowEngineManagerDialog(engine);
+                } catch (ArgumentException ex) {
+                    if (ex.ParamName == "value") {
+                        Console.WriteLine(ex.Message);
+                        System.Environment.Exit(1);
+                    }
+                    throw;
+                }
             }
             
             if (_SplashScreenWindow != null) {
@@ -481,6 +504,7 @@ namespace Smuxi.Frontend.Gnome
                 Gtk.DialogFlags.Modal,
                 Gtk.MessageType.Error,
                 Gtk.ButtonsType.Ok,
+                false,
                 msg
             );
             md.Run();
@@ -569,15 +593,26 @@ namespace Smuxi.Frontend.Gnome
             ShowException(null, ex);
         }
         
-        public static void ShowEngineManagerDialog()
+        public static void ShowEngineManagerDialog(string engine)
         {
-            Trace.Call();
+            Trace.Call(engine);
             
             EngineManagerDialog diag = new EngineManagerDialog(_MainWindow.EngineManager);
-            diag.Run();
+            if (!String.IsNullOrEmpty(engine)) {
+                diag.SelectedEngine = engine;
+                // 1 == connect button
+                diag.Respond(1);
+            } else {
+                diag.Run();
+            }
             diag.Destroy();
         }
 
+        public static void ShowEngineManagerDialog()
+        {
+            ShowEngineManagerDialog(null);
+        }
+
         public static bool ShowReconnectDialog(Gtk.Window parent)
         {
             Trace.Call(parent);
@@ -673,6 +708,115 @@ namespace Smuxi.Frontend.Gnome
             }
         }
 
+        public static void OpenChatLink(Uri link)
+        {
+            Trace.Call(link);
+
+            if (Session == null) {
+                return;
+            }
+
+            // supported:
+            // smuxi://freenode/#smuxi
+            // irc://#smuxi
+            // irc://irc.oftc.net/
+            // irc://irc.oftc.net/#smuxi
+            // irc://irc.oftc.net:6667/#smuxi
+            // not supported (yet):
+            // smuxi:///meebey
+
+            IProtocolManager manager = null;
+            var linkPort = link.Port;
+            if (linkPort == -1) {
+                switch (link.Scheme) {
+                    case "irc":
+                        linkPort = 6667;
+                        break;
+                    case "ircs":
+                        linkPort = 6697;
+                        break;
+                }
+            }
+            var linkChat = link.Fragment;
+            if (String.IsNullOrEmpty(linkChat)) {
+                linkChat = link.AbsolutePath.Substring(1);
+            }
+
+            var linkProtocol = link.Scheme;
+            var linkHost = link.Host;
+            string linkNetwork = null;
+            if (!linkHost.Contains(".")) {
+                // this seems to be a network name
+                linkNetwork = linkHost;
+            }
+
+            // find existing protocol chat
+            foreach (var chatView in MainWindow.ChatViewManager.Chats) {
+                if (!(chatView is ProtocolChatView)) {
+                    continue;
+                }
+                var protocolChat = (ProtocolChatView) chatView;
+                var host = protocolChat.Host;
+                var port = protocolChat.Port;
+                var network = protocolChat.NetworkID;
+                // check first by network name with fallback to host+port
+                if ((!String.IsNullOrEmpty(network) &&
+                     String.Compare(network, linkNetwork, true) == 0) ||
+                    (String.Compare(host, linkHost, true) == 0 &&
+                     port == linkPort)) {
+                    manager = protocolChat.ProtocolManager;
+                    break;
+                }
+            }
+
+            if (manager == null) {
+                ServerModel server = null;
+                if (!String.IsNullOrEmpty(linkNetwork)) {
+                    // try to find a server with this network name and connect to it
+                    var serverSettings = new ServerListController(UserConfig);
+                    server = serverSettings.GetServerByNetwork(linkNetwork);
+                    // ignore OnConnectCommands
+                    server.OnConnectCommands = null;
+                } else if (!String.IsNullOrEmpty(linkHost)) {
+                    server = new ServerModel() {
+                        Protocol = linkProtocol,
+                        Hostname = linkHost,
+                        Port = linkPort
+                    };
+                }
+                if (server != null) {
+                    manager = Session.Connect(server, FrontendManager);
+                }
+            }
+
+            if (String.IsNullOrEmpty(linkChat)) {
+                return;
+            }
+
+            // switch to existing chat
+            foreach (var chatView in MainWindow.ChatViewManager.Chats) {
+                if (manager != null && chatView.ProtocolManager != manager) {
+                    continue;
+                }
+                if (String.Compare(chatView.ID, linkChat, true) == 0) {
+                    MainWindow.ChatViewManager.CurrentChatView = chatView;
+                    return;
+                }
+            }
+
+            // join chat
+            if (manager != null) {
+                var chat = new GroupChatModel(linkChat, linkChat, null);
+                ThreadPool.QueueUserWorkItem(delegate {
+                    try {
+                        manager.OpenChat(FrontendManager, chat);
+                    } catch (Exception ex) {
+                        Frontend.ShowException(ex);
+                    }
+                });
+            }
+        }
+
 #if GTK_SHARP_2_10
         private static void _OnUnhandledException(GLib.UnhandledExceptionArgs e)
         {
diff --git a/src/Frontend-GNOME/Gtk.WindowExtensions.cs b/src/Frontend-GNOME/Gtk.WindowExtensions.cs
new file mode 100644
index 0000000..9c40e1c
--- /dev/null
+++ b/src/Frontend-GNOME/Gtk.WindowExtensions.cs
@@ -0,0 +1,76 @@
+// Smuxi - Smart MUltipleXed Irc
+//
+// Copyright (c) 2012 Mirco Bauer <meebey at meebey.net>
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Gtk.Extensions
+{
+    public static class WindowExtensions
+    {
+        static bool IsGdkX11Available = true;
+
+        [DllImport("libgdk-x11-2.0.so.0")]
+        static extern UInt32 gdk_x11_get_server_time(IntPtr gdkWindowHandle);
+
+        public static void PresentWithServerTime(this Gtk.Window window)
+        {
+            if (window == null) {
+                return;
+            }
+            var gdkWindow = window.GdkWindow;
+            if (gdkWindow == null || !IsGdkX11Available) {
+                window.Present();
+                return;
+            }
+
+            // HACK: disabled, see window.AddEvents() below
+            /*
+            if ((gdkWindow.Events & Gdk.EventMask.PropertyChangeMask) == 0) {
+                // GDK_PROPERTY_CHANGE_MASK is not set thus we have to bail out
+                // else gdk_x11_get_server_time() will hang!
+                window.Present();
+                return;
+            }
+            */
+
+            // HACK: we can't obtain and check for GDK_PROPERTY_CHANGE_MASK as
+            // gdk_window_x11_get_events() filters that mask, thus we have to
+            // ignorantly set it using gtk_widget_add_events() else
+            // gdk_x11_get_server_time() would hang if it wasn't set!
+            window.AddEvents((int) Gdk.EventMask.PropertyChangeMask);
+
+            try {
+                // TODO: should we fallback to gdk_x11_display_get_user_time?
+                var timestamp = gdk_x11_get_server_time(gdkWindow.Handle);
+                window.PresentWithTime(timestamp);
+            } catch (DllNotFoundException) {
+                IsGdkX11Available = false;
+                // no libgdk-x11 available (probably Mac OS X or Windows), thus
+                // fallback to gtk_window_present() without a timestamp as they
+                // don't require a timestamp to change the window focus
+                window.Present();
+            }
+        }
+    }
+}
diff --git a/src/Frontend-GNOME/IndicateManager.cs b/src/Frontend-GNOME/IndicateManager.cs
index 9962448..56b6237 100644
--- a/src/Frontend-GNOME/IndicateManager.cs
+++ b/src/Frontend-GNOME/IndicateManager.cs
@@ -32,6 +32,7 @@ using DBus;
 using NDesk.DBus;
     #endif
 #endif
+using Gtk.Extensions;
 using Smuxi.Common;
 using Smuxi.Engine;
 
@@ -42,7 +43,7 @@ namespace Smuxi.Frontend.Gnome
 #if LOG4NET
         private static readonly log4net.ILog Logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
 #endif
-        const string BusName = "com.canonical.indicate";
+        const string BusName = "com.canonical.indicator.session";
         private static DateTime UnixEpoch = new DateTime(1970, 1, 1, 0, 0, 0);
         private static string PersonChatIconBase64 { get; set; }
         private static string GroupChatIconBase64  { get; set; }
@@ -53,6 +54,7 @@ namespace Smuxi.Frontend.Gnome
         Dictionary<ChatView, MessageTextViewMessageHighlightedEventHandler> HighlightEventHandlers { get; set; }
         bool IsInitialized { get; set; }
         bool IsEnabled { get; set; }
+        string DesktopFile { get; set; }
 
         static IndicateManager()
         {
@@ -118,12 +120,41 @@ namespace Smuxi.Frontend.Gnome
                 return;
             }
 
+            var home = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
+            var blacklistPath = Path.Combine(home, ".config");
+            blacklistPath = Path.Combine(blacklistPath, "indicators");
+            blacklistPath = Path.Combine(blacklistPath, "messages");
+            blacklistPath = Path.Combine(blacklistPath, "applications-blacklist");
+            if (!Directory.Exists(blacklistPath)) {
+                Directory.CreateDirectory(blacklistPath);
+            }
+            blacklistPath = Path.Combine(blacklistPath, "smuxi-frontend-gnome");
+
             if ((bool) userConfig["Interface/Notification/MessagingMenuEnabled"]) {
+                // persist in menu
+                if (File.Exists(blacklistPath)) {
+                    File.Delete(blacklistPath);
+                }
+                var path = Path.Combine(home, ".config");
+                path = Path.Combine(path, "indicators");
+                path = Path.Combine(path, "messages");
+                path = Path.Combine(path, "applications");
+                if (!Directory.Exists(path)) {
+                    Directory.CreateDirectory(path);
+                }
+                path = Path.Combine(path, "smuxi-frontend-gnome");
+                File.WriteAllText(path, DesktopFile + "\n");
+
                 Server.Show();
                 IsEnabled = true;
                 // hide the main window instead of closing it
                 MainWindow.NotificationAreaIconMode = NotificationAreaIconMode.Closed;
             } else {
+                // non-persistent in menu using the blacklist as per
+                // specification:
+                // https://wiki.ubuntu.com/MessagingMenu/#Registration
+                File.WriteAllText(blacklistPath, DesktopFile + "\n");
+
                 Server.Hide();
                 IsEnabled = false;
             }
@@ -165,11 +196,10 @@ namespace Smuxi.Frontend.Gnome
 
             var insDesktopFile = Path.Combine(Defines.InstallPrefix, partialPath);
             var sysDesktopFile = Path.Combine("/usr", partialPath);
-            string desktopFile = null;
             if (File.Exists(insDesktopFile)) {
-                desktopFile = insDesktopFile;
+                DesktopFile = insDesktopFile;
             } else if (File.Exists(sysDesktopFile)) {
-                desktopFile = sysDesktopFile;
+                DesktopFile = sysDesktopFile;
             } else {
 #if LOG4NET
                 Logger.Error("Init(): smuxi-frontend-gnome.desktop could not " +
@@ -179,7 +209,7 @@ namespace Smuxi.Frontend.Gnome
             }
 
             Server.SetType("message.im");
-            Server.DesktopFile(desktopFile);
+            Server.DesktopFile(DesktopFile);
             Server.ServerDisplay += OnServerServerDisplay;
 
             MainWindow.FocusInEvent += OnMainWindowFocusInEvent;
@@ -303,7 +333,7 @@ namespace Smuxi.Frontend.Gnome
             indicator.SetPropertyBool("draw-attention", true);
             indicator.UserDisplay += delegate {
                 try {
-                    MainWindow.Present();
+                    MainWindow.PresentWithServerTime();
                     MainWindow.Notebook.CurrentChatView = chatView;
                     DisposeIndicator(chatView);
                 } catch (Exception ex) {
diff --git a/src/Frontend-GNOME/Main.cs b/src/Frontend-GNOME/Main.cs
index 13ba541..c608517 100644
--- a/src/Frontend-GNOME/Main.cs
+++ b/src/Frontend-GNOME/Main.cs
@@ -90,8 +90,9 @@ namespace Smuxi.Frontend.Gnome
             Console.WriteLine("Usage: smuxi-frontend-gnome [options]");
             Console.WriteLine();
             Console.WriteLine("Options:");
-            Console.WriteLine("  -h --help   Show this help");
-            Console.WriteLine("  -d --debug  Enable debug output");
+            Console.WriteLine("  -h --help                Show this help");
+            Console.WriteLine("  -d --debug               Enable debug output");
+            Console.WriteLine("  -e --engine engine-name  Connect to engine");
         }
     }
 }
diff --git a/src/Frontend-GNOME/MainWindow.cs b/src/Frontend-GNOME/MainWindow.cs
index 81b6f97..0aab58f 100644
--- a/src/Frontend-GNOME/MainWindow.cs
+++ b/src/Frontend-GNOME/MainWindow.cs
@@ -22,6 +22,7 @@
 
 using System;
 using System.IO;
+using System.Linq;
 using System.Threading;
 using System.Reflection;
 using SysDiag = System.Diagnostics;
@@ -36,8 +37,6 @@ namespace Smuxi.Frontend.Gnome
 #if LOG4NET
         private static readonly log4net.ILog f_Logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
 #endif
-        private Gtk.MenuBar      _MenuBar;
-        private Gtk.CheckMenuItem _ShowMenuBarItem;
         private Gtk.Statusbar    _NetworkStatusbar;
         private Gtk.Statusbar    _Statusbar;
         private Gtk.ProgressBar  _ProgressBar;
@@ -68,18 +67,20 @@ namespace Smuxi.Frontend.Gnome
         private bool             _IsMaximized;
         private bool             _IsFullscreen;
 
-        public Gtk.MenuBar MenuBar {
-            get {
-                return _MenuBar;
-            }
-        }
+        public Gtk.MenuBar MenuBar { get; private set; }
+        Gtk.HBox MenuHBox { get; set; }
+        Gtk.HBox StatusHBox { get; set; }
+        JoinWidget JoinWidget { get; set; }
+        Gtk.CheckMenuItem ShowQuickJoinMenuItem { get; set; }
+        Gtk.CheckMenuItem ShowMenuBarMenuItem  { get; set; }
+        Gtk.CheckMenuItem ShowStatusBarMenuItem  { get; set; }
 
         public bool ShowMenuBar {
             get {
-                return _MenuBar.Visible;
+                return MenuBar.Visible;
             }
             set {
-                _ShowMenuBarItem.Active = value;
+                ShowMenuBarMenuItem.Active = value;
             }
         }
 
@@ -242,7 +243,7 @@ namespace Smuxi.Frontend.Gnome
             AddAccelGroup(agrp);
             
             // Menu
-            _MenuBar = new Gtk.MenuBar();
+            MenuBar = new Gtk.MenuBar();
             Gtk.Menu menu;
             Gtk.MenuItem item;
             Gtk.ImageMenuItem image_item;
@@ -251,31 +252,25 @@ namespace Smuxi.Frontend.Gnome
             menu = new Gtk.Menu();
             item = new Gtk.MenuItem(_("_File"));
             item.Submenu = menu;
-            _MenuBar.Append(item);
+            MenuBar.Append(item);
 
             item = new Gtk.ImageMenuItem(Gtk.Stock.Preferences, agrp);
             item.Activated += new EventHandler(_OnPreferencesButtonClicked);
-            item.AccelCanActivate += delegate(object o, Gtk.AccelCanActivateArgs args) {
-                // allow the accelerator to be used even when the menu bar is hidden
-                args.RetVal = true;
-            };
+            item.AccelCanActivate += AccelCanActivateSensitive;
             menu.Append(item);
             
             menu.Append(new Gtk.SeparatorMenuItem());
             
             item = new Gtk.ImageMenuItem(Gtk.Stock.Quit, agrp);
             item.Activated += new EventHandler(_OnQuitButtonClicked);
-            item.AccelCanActivate += delegate(object o, Gtk.AccelCanActivateArgs args) {
-                // allow the accelerator to be used even when the menu bar is hidden
-                args.RetVal = true;
-            };
+            item.AccelCanActivate += AccelCanActivateSensitive;
             menu.Append(item);
             
             // Menu - Server
             menu = new Gtk.Menu();
             item = new Gtk.MenuItem(_("_Server"));
             item.Submenu = menu;
-            _MenuBar.Append(item);
+            MenuBar.Append(item);
             
             image_item = new Gtk.ImageMenuItem(_("_Quick Connect"));
             image_item.Image = new Gtk.Image(Gtk.Stock.Connect, Gtk.IconSize.Menu);
@@ -297,12 +292,17 @@ namespace Smuxi.Frontend.Gnome
             menu = new Gtk.Menu();
             item = new Gtk.MenuItem(_("_Chat"));
             item.Submenu = menu;
-            _MenuBar.Append(item);
+            MenuBar.Append(item);
             
             _OpenChatMenuItem = new Gtk.ImageMenuItem(_("Open / Join Chat"));
             _OpenChatMenuItem.Image = new Gtk.Image(Gtk.Stock.Open, Gtk.IconSize.Menu);
-            _OpenChatMenuItem.Activated += OnChatOpenChatButtonClicked;
-            _OpenChatMenuItem.Sensitive = false;
+            _OpenChatMenuItem.Activated += OnOpenChatMenuItemActivated;
+            akey = new Gtk.AccelKey();
+            akey.AccelFlags = Gtk.AccelFlags.Visible;
+            akey.AccelMods = Gdk.ModifierType.ControlMask;
+            akey.Key = Gdk.Key.L;
+            _OpenChatMenuItem.AddAccelerator("activate", agrp, akey);
+            _OpenChatMenuItem.AccelCanActivate += AccelCanActivateSensitive;
             menu.Append(_OpenChatMenuItem);
                     
             _FindGroupChatMenuItem = new Gtk.ImageMenuItem(_("_Find Group Chat"));
@@ -326,10 +326,7 @@ namespace Smuxi.Frontend.Gnome
             akey.AccelMods = Gdk.ModifierType.ControlMask;
             akey.Key = Gdk.Key.Page_Down;
             image_item.AddAccelerator("activate", agrp, akey);
-            image_item.AccelCanActivate += delegate(object o, Gtk.AccelCanActivateArgs args) {
-                // allow the accelerator to be used even when the menu bar is hidden
-                args.RetVal = true;
-            };
+            image_item.AccelCanActivate += AccelCanActivateSensitive;
             menu.Append(image_item);
             
             image_item = new Gtk.ImageMenuItem(_("_Previous Chat"));
@@ -340,10 +337,7 @@ namespace Smuxi.Frontend.Gnome
             akey.AccelMods = Gdk.ModifierType.ControlMask;
             akey.Key = Gdk.Key.Page_Up;
             image_item.AddAccelerator("activate", agrp, akey);
-            image_item.AccelCanActivate += delegate(object o, Gtk.AccelCanActivateArgs args) {
-                // allow the accelerator to be used even when the menu bar is hidden
-                args.RetVal = true;
-            };
+            image_item.AccelCanActivate += AccelCanActivateSensitive;
             menu.Append(image_item);
             
             menu.Append(new Gtk.SeparatorMenuItem());
@@ -396,17 +390,14 @@ namespace Smuxi.Frontend.Gnome
 
             _CloseChatMenuItem = new Gtk.ImageMenuItem(Gtk.Stock.Close, agrp);
             _CloseChatMenuItem.Activated += OnCloseChatMenuItemActivated;
-            _CloseChatMenuItem.AccelCanActivate += delegate(object o, Gtk.AccelCanActivateArgs args) {
-                // allow the accelerator to be used even when the menu bar is hidden
-                args.RetVal = true;
-            };
+            _CloseChatMenuItem.AccelCanActivate += AccelCanActivateSensitive;
             menu.Append(_CloseChatMenuItem);
 
             // Menu - Engine
             menu = new Gtk.Menu();
             item = new Gtk.MenuItem(_("_Engine"));
             item.Submenu = menu;
-            _MenuBar.Append(item);
+            MenuBar.Append(item);
 
             item = new Gtk.MenuItem(_("_Use Local Engine"));
             item.Activated += new EventHandler(_OnUseLocalEngineButtonClicked);
@@ -428,7 +419,7 @@ namespace Smuxi.Frontend.Gnome
             menu = new Gtk.Menu();
             item = new Gtk.MenuItem(_("_View"));
             item.Submenu = menu;
-            _MenuBar.Append(item);
+            MenuBar.Append(item);
             
             item = new Gtk.CheckMenuItem(_("_Caret Mode"));
             item.Activated += new EventHandler(_OnCaretModeButtonClicked);
@@ -436,10 +427,7 @@ namespace Smuxi.Frontend.Gnome
             akey.AccelFlags = Gtk.AccelFlags.Visible;
             akey.Key = Gdk.Key.F7;
             item.AddAccelerator("activate", agrp, akey);
-            item.AccelCanActivate += delegate(object o, Gtk.AccelCanActivateArgs args) {
-                // allow the accelerator to be used even when the menu bar is hidden
-                args.RetVal = true;
-            };
+            item.AccelCanActivate += AccelCanActivateSensitive;
             menu.Append(item);
             
             item = new Gtk.CheckMenuItem(_("_Browse Mode"));
@@ -454,22 +442,28 @@ namespace Smuxi.Frontend.Gnome
             akey.AccelFlags = Gtk.AccelFlags.Visible;
             akey.Key = Gdk.Key.F8;
             item.AddAccelerator("activate", agrp, akey);
-            item.AccelCanActivate += delegate(object o, Gtk.AccelCanActivateArgs args) {
-                // allow the accelerator to be used even when the menu bar is hidden
-                args.RetVal = true;
-            };
+            item.AccelCanActivate += AccelCanActivateSensitive;
             menu.Append(item);
 
-            _ShowMenuBarItem = new Gtk.CheckMenuItem(_("Show _Menubar"));
-            _ShowMenuBarItem.Active = true;
-            _ShowMenuBarItem.Activated += delegate {
-                try {
-                    _MenuBar.Visible = !_MenuBar.Visible;
-                } catch (Exception ex) {
-                    Frontend.ShowException(this, ex);
-                }
-            };
-            menu.Append(_ShowMenuBarItem);
+            ShowMenuBarMenuItem = new Gtk.CheckMenuItem(_("Show _Menubar"));
+            ShowMenuBarMenuItem.Active = (bool) Frontend.FrontendConfig["ShowMenuBar"];
+            ShowMenuBarMenuItem.Activated += OnShowMenuBarMenuItemActivated;
+            menu.Append(ShowMenuBarMenuItem);
+
+            ShowStatusBarMenuItem = new Gtk.CheckMenuItem(_("Show _Status Bar"));
+            ShowStatusBarMenuItem.Active = (bool) Frontend.FrontendConfig["ShowStatusBar"];
+            ShowStatusBarMenuItem.Activated += OnShowStatusBarMenuItemActivated;
+            menu.Append(ShowStatusBarMenuItem);
+
+            JoinWidget = new JoinWidget();
+            JoinWidget.NoShowAll = true;
+            JoinWidget.Visible = (bool) Frontend.FrontendConfig["ShowQuickJoin"];
+            JoinWidget.Activated += OnJoinWidgetActivated;
+
+            ShowQuickJoinMenuItem = new Gtk.CheckMenuItem(_("Show _Quick Join"));
+            ShowQuickJoinMenuItem.Active = JoinWidget.Visible;
+            ShowQuickJoinMenuItem.Activated += OnShowQuickJoinMenuItemActivated;
+            menu.Append(ShowQuickJoinMenuItem);
 
             item = new Gtk.ImageMenuItem(Gtk.Stock.Fullscreen, agrp);
             item.Activated += delegate {
@@ -483,26 +477,28 @@ namespace Smuxi.Frontend.Gnome
             akey.AccelFlags = Gtk.AccelFlags.Visible;
             akey.Key = Gdk.Key.F11;
             item.AddAccelerator("activate", agrp, akey);
-            item.AccelCanActivate += delegate(object o, Gtk.AccelCanActivateArgs args) {
-                // allow the accelerator to be used even when the menu bar is hidden
-                args.RetVal = true;
-            };
+            item.AccelCanActivate += AccelCanActivateSensitive;
             menu.Append(item);
 
             // Menu - Help
             menu = new Gtk.Menu();
             item = new Gtk.MenuItem(_("_Help"));
             item.Submenu = menu;
-            _MenuBar.Append(item);
+            MenuBar.Append(item);
             
             image_item = new Gtk.ImageMenuItem(Gtk.Stock.About, agrp);
             image_item.Activated += new EventHandler(_OnAboutButtonClicked);
             menu.Append(image_item);
-            
+
+            MenuBar.ShowAll();
+            MenuBar.NoShowAll = true;
+            MenuBar.Visible = ShowMenuBarMenuItem.Active;
+
             // TODO: network treeview
             _Notebook = new Notebook();
             _Notebook.SwitchPage += OnNotebookSwitchPage;
-            
+            _Notebook.FocusInEvent += OnNotebookFocusInEvent;
+
             _ChatViewManager = new ChatViewManager(_Notebook, null);
             Assembly asm = Assembly.GetExecutingAssembly();
             _ChatViewManager.Load(asm);
@@ -531,14 +527,43 @@ namespace Smuxi.Frontend.Gnome
             _EngineManager = new EngineManager(Frontend.FrontendConfig, _UI);
 
             _Entry = new Entry(_ChatViewManager);
-            
+            var entryScrolledWindow = new Gtk.ScrolledWindow();
+            entryScrolledWindow.ShadowType = Gtk.ShadowType.EtchedIn;
+            entryScrolledWindow.HscrollbarPolicy = Gtk.PolicyType.Never;
+            entryScrolledWindow.SizeRequested += delegate(object o, Gtk.SizeRequestedArgs args) {
+                // predict and set useful heigth
+                var layout = _Entry.CreatePangoLayout("Qp");
+                int lineWidth, lineHeigth;
+                layout.GetPixelSize(out lineHeigth, out lineHeigth);
+                var text = Entry.Text;
+                var newLines = text.Count(f => f == '\n');
+                // cap to 1-3 lines
+                if (text.Length > 0) {
+                    newLines++;
+                    newLines = Math.Max(newLines, 1);
+                    newLines = Math.Min(newLines, 3);
+                } else {
+                    newLines = 1;
+                }
+                // use text heigth + a bit extra
+                var bestSize = new Gtk.Requisition() {
+                    Height = (lineHeigth * newLines) + 5
+                };
+                args.Requisition = bestSize;
+            };
+            entryScrolledWindow.Add(_Entry);
+
             _ProgressBar = new Gtk.ProgressBar();
             _ProgressBar.BarStyle = Gtk.ProgressBarStyle.Continuous;
 
+            MenuHBox = new Gtk.HBox();
+            MenuHBox.PackStart(MenuBar, false, false, 0);
+            MenuHBox.PackEnd(JoinWidget, false, false, 0);
+
             Gtk.VBox vbox = new Gtk.VBox();
-            vbox.PackStart(_MenuBar, false, false, 0);
+            vbox.PackStart(MenuHBox, false, false, 0);
             vbox.PackStart(_Notebook, true, true, 0);
-            vbox.PackStart(_Entry, false, false, 0);
+            vbox.PackStart(entryScrolledWindow, false, false, 0);
 
             _NetworkStatusbar = new Gtk.Statusbar();
             _NetworkStatusbar.WidthRequest = 300;
@@ -552,11 +577,14 @@ namespace Smuxi.Frontend.Gnome
             status_bar_hbox.PackStart(_NetworkStatusbar, false, true, 0);
             status_bar_hbox.PackStart(_Statusbar, true, true, 0);
 
-            Gtk.HBox status_hbox = new Gtk.HBox();
-            status_hbox.PackStart(status_bar_hbox);
-            status_hbox.PackStart(_ProgressBar, false, false, 0);
+            StatusHBox = new Gtk.HBox();
+            StatusHBox.PackStart(status_bar_hbox);
+            StatusHBox.PackStart(_ProgressBar, false, false, 0);
+            StatusHBox.ShowAll();
+            StatusHBox.NoShowAll = true;
+            StatusHBox.Visible = ShowStatusBarMenuItem.Active;
 
-            vbox.PackStart(status_hbox, false, false, 0);
+            vbox.PackStart(StatusHBox, false, false, 0);
             Add(vbox);
         }
 
@@ -589,6 +617,7 @@ namespace Smuxi.Frontend.Gnome
             _Entry.ApplyConfig(userConfig);
             _Notebook.ApplyConfig(userConfig);
             _ChatViewManager.ApplyConfig(userConfig);
+            JoinWidget.ApplyConfig(userConfig);
         }
 
         public void UpdateTitle()
@@ -786,68 +815,7 @@ namespace Smuxi.Frontend.Gnome
                 Frontend.ShowException(this, ex);
             }
         }
-        
-        protected virtual void OnChatOpenChatButtonClicked(object sender, EventArgs e)
-        {
-            Trace.Call(sender, e);
-            
-            try {
-                OpenChatDialog dialog = new OpenChatDialog(this);
-                int res = dialog.Run();
-
-                var chatView = Notebook.CurrentChatView;
-                if (chatView == null) {
-                    return;
-                }
 
-                // FIXME: REMOTING CALL
-                var manager = chatView.ChatModel.ProtocolManager;
-                if (manager == null) {
-                    return;
-                }
-                ChatModel chat;
-                switch (dialog.ChatType) {
-                    case ChatType.Group:
-                        chat = new GroupChatModel(
-                            dialog.ChatName, 
-                            dialog.ChatName,
-                            null
-                        );
-                        break;
-                    case ChatType.Person:
-                        chat = new PersonChatModel(
-                            null,
-                            dialog.ChatName, 
-                            dialog.ChatName,
-                            null
-                        );
-                        break;
-                    default:
-                        throw new ApplicationException(
-                            String.Format(
-                                _("Unknown ChatType: {0}"),
-                                dialog.ChatType
-                            )
-                        );
-                }
-                
-                dialog.Destroy();
-                if (res != (int) Gtk.ResponseType.Ok) {
-                    return;
-                }
-                
-                ThreadPool.QueueUserWorkItem(delegate {
-                    try {
-                        manager.OpenChat(Frontend.FrontendManager, chat);
-                    } catch (Exception ex) {
-                        Frontend.ShowException(this, ex);
-                    }
-                });
-            } catch (Exception ex) {
-                Frontend.ShowException(this, ex);
-            }
-        }
-        
         protected virtual void OnChatFindGroupChatButtonClicked(object sender, EventArgs e)
         {
             Trace.Call(sender, e);
@@ -870,8 +838,7 @@ namespace Smuxi.Frontend.Gnome
                 return;
             }
 
-            // FIXME: REMOTING CALL
-            var manager = chatView.ChatModel.ProtocolManager;
+            var manager = chatView.ProtocolManager;
             if (manager == null) {
                 return;
             }
@@ -1040,18 +1007,109 @@ namespace Smuxi.Frontend.Gnome
                     return;
                 }
 
-                _OpenChatMenuItem.Sensitive = !(chatView is SessionChatView);
                 _CloseChatMenuItem.Sensitive = !(chatView is SessionChatView);
                 _FindGroupChatMenuItem.Sensitive = !(chatView is SessionChatView);
                 if (Frontend.IsLocalEngine) {
                     _OpenLogChatMenuItem.Sensitive =
                         File.Exists(chatView.ChatModel.LogFile);
                 }
+
+                // HACK: Gtk.Notebook moves the focus to the child after the
+                // page has been switched, so move the focus back to the entry
+                GLib.Idle.Add(delegate {
+                    Entry.GrabFocus();
+                    return false;
+                });
             } catch (Exception ex) {
                 Frontend.ShowException(this, ex);
             }
         }
-        
+
+        protected virtual void OnNotebookFocusInEvent(object sender, Gtk.FocusInEventArgs e)
+        {
+            // HACK: having the focus in the notebook doesn't make any sense,
+            // so move focus back to the entry
+            Entry.GrabFocus();
+        }
+
+        protected virtual void OnJoinWidgetActivated(object sender, EventArgs e)
+        {
+            Trace.Call(sender, e);
+
+            try {
+                var chatLink = JoinWidget.GetChatLink();
+                Frontend.OpenChatLink(chatLink);
+                JoinWidget.Clear();
+            } catch (Exception ex) {
+                Frontend.ShowException(this, ex);
+            }
+        }
+
+        protected virtual void OnShowQuickJoinMenuItemActivated(object sender, EventArgs e)
+        {
+            Trace.Call(sender, e);
+
+            try {
+                JoinWidget.Visible = !JoinWidget.Visible;
+                Frontend.FrontendConfig["ShowQuickJoin"] = JoinWidget.Visible;
+                Frontend.FrontendConfig.Save();
+            } catch (Exception ex) {
+                Frontend.ShowException(this, ex);
+            }
+        }
+
+        protected virtual void OnShowMenuBarMenuItemActivated(object sender, EventArgs e)
+        {
+            Trace.Call(sender, e);
+
+            try {
+                MenuBar.Visible = ShowMenuBarMenuItem.Active;
+                Frontend.FrontendConfig["ShowMenuBar"] = MenuBar.Visible;
+                Frontend.FrontendConfig.Save();
+            } catch (Exception ex) {
+                Frontend.ShowException(this, ex);
+            }
+        }
+
+        protected virtual void OnShowStatusBarMenuItemActivated(object sender, EventArgs e)
+        {
+            Trace.Call(sender, e);
+
+            try {
+                StatusHBox.Visible = ShowStatusBarMenuItem.Active;
+                Frontend.FrontendConfig["ShowStatusBar"] = StatusHBox.Visible;
+                Frontend.FrontendConfig.Save();
+            } catch (Exception ex) {
+                Frontend.ShowException(this, ex);
+            }
+        }
+
+        protected virtual void OnOpenChatMenuItemActivated(object sender, EventArgs e)
+        {
+            Trace.Call(sender, e);
+
+            try {
+                if (!ShowQuickJoinMenuItem.Active) {
+                    ShowQuickJoinMenuItem.Activate();
+                }
+                JoinWidget.HasFocus = true;
+            } catch (Exception ex) {
+                Frontend.ShowException(this, ex);
+            }
+        }
+
+        protected static void AccelCanActivateSensitive(object sender, Gtk.AccelCanActivateArgs e)
+        {
+            var widget = sender as Gtk.Widget;
+            if (widget != null && !widget.Sensitive) {
+                e.RetVal = false;
+                return;
+            }
+
+            // allow the accelerator to be used even when the menu bar is hidden
+            e.RetVal = true;
+        }
+
         private void _OnAboutButtonClicked(object obj, EventArgs args)
         {
             Trace.Call(obj, args);
diff --git a/src/Frontend-GNOME/Makefile.am b/src/Frontend-GNOME/Makefile.am
index 026b466..2998fa2 100644
--- a/src/Frontend-GNOME/Makefile.am
+++ b/src/Frontend-GNOME/Makefile.am
@@ -110,6 +110,7 @@ FILES = \
 	Entry.cs \
 	Frontend.cs \
 	GnomeUI.cs \
+	Gtk.WindowExtensions.cs \
 	IndicateManager.cs \
 	LinkTag.cs \
 	Main.cs \
@@ -125,6 +126,7 @@ FILES = \
 	PangoTools.cs \
 	Preferences/ServerListView.cs \
 	Preferences/PreferencesDialog.cs \
+	Views/JoinWidget.cs \
 	Views/MessageTextView.cs \
 	Views/ServerWidget.cs \
 	Views/ServerDialog.cs \
@@ -151,6 +153,7 @@ FILES = \
 	gtk-gui/Smuxi.Frontend.Gnome.EngineAssistantCredentialsWidget.cs \
 	gtk-gui/Smuxi.Frontend.Gnome.EngineAssistantIntroWidget.cs \
 	gtk-gui/Smuxi.Frontend.Gnome.EngineAssistantNameWidget.cs \
+	gtk-gui/Smuxi.Frontend.Gnome.JoinWidget.cs \
 	gtk-gui/Smuxi.Frontend.Gnome.OpenChatDialog.cs \
 	gtk-gui/Smuxi.Frontend.Gnome.SteticPreferencesDialog.cs \
 	gtk-gui/Smuxi.Frontend.Gnome.QuickConnectDialog.cs \
@@ -190,7 +193,6 @@ REFERENCES =  \
 	System \
     System.Core \
 	Mono.Posix \
-	System.Drawing \
 	$(GLIB_SHARP_20_LIBS) \
 	$(GLADE_SHARP_20_LIBS) \
 	$(GTK_SHARP_20_LIBS) \
diff --git a/src/Frontend-GNOME/Makefile.in b/src/Frontend-GNOME/Makefile.in
index 8bbcaaf..25448b4 100644
--- a/src/Frontend-GNOME/Makefile.in
+++ b/src/Frontend-GNOME/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.2 from Makefile.am.
+# Makefile.in generated by automake 1.11.5 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -17,6 +17,23 @@
 
 
 VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -87,6 +104,11 @@ am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(pkgappdir)" \
 SCRIPTS = $(bin_SCRIPTS) $(pkgapp_SCRIPTS)
 SOURCES =
 DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
 DATA = $(desktop_DATA) $(icon128_DATA) $(icon16_DATA) $(icon22_DATA) \
 	$(icon24_DATA) $(icon256_DATA) $(icon32_DATA) $(icon48_DATA) \
 	$(linuxdesktopapplications_DATA) $(linuxpkgconfig_DATA) \
@@ -95,6 +117,7 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 ALL_LINGUAS = @ALL_LINGUAS@
 AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
@@ -154,6 +177,8 @@ GLIB_SHARP_20_LIBS = @GLIB_SHARP_20_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
 GREP = @GREP@
+GTKSPELL_CFLAGS = @GTKSPELL_CFLAGS@
+GTKSPELL_LIBS = @GTKSPELL_LIBS@
 GTK_SHARP_20_CFLAGS = @GTK_SHARP_20_CFLAGS@
 GTK_SHARP_20_LIBS = @GTK_SHARP_20_LIBS@
 INDICATE_SHARP_CFLAGS = @INDICATE_SHARP_CFLAGS@
@@ -168,6 +193,10 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
 INTLTOOL_MERGE = @INTLTOOL_MERGE@
 INTLTOOL_PERL = @INTLTOOL_PERL@
 INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@
+INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@
+INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@
+INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@
 INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
@@ -278,6 +307,8 @@ htmldir = @htmldir@
 includedir = @includedir@
 infodir = @infodir@
 install_sh = @install_sh@
+intltool__v_merge_options_ = @intltool__v_merge_options_@
+intltool__v_merge_options_0 = @intltool__v_merge_options_0@
 libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
@@ -384,6 +415,7 @@ FILES = \
 	Entry.cs \
 	Frontend.cs \
 	GnomeUI.cs \
+	Gtk.WindowExtensions.cs \
 	IndicateManager.cs \
 	LinkTag.cs \
 	Main.cs \
@@ -399,6 +431,7 @@ FILES = \
 	PangoTools.cs \
 	Preferences/ServerListView.cs \
 	Preferences/PreferencesDialog.cs \
+	Views/JoinWidget.cs \
 	Views/MessageTextView.cs \
 	Views/ServerWidget.cs \
 	Views/ServerDialog.cs \
@@ -425,6 +458,7 @@ FILES = \
 	gtk-gui/Smuxi.Frontend.Gnome.EngineAssistantCredentialsWidget.cs \
 	gtk-gui/Smuxi.Frontend.Gnome.EngineAssistantIntroWidget.cs \
 	gtk-gui/Smuxi.Frontend.Gnome.EngineAssistantNameWidget.cs \
+	gtk-gui/Smuxi.Frontend.Gnome.JoinWidget.cs \
 	gtk-gui/Smuxi.Frontend.Gnome.OpenChatDialog.cs \
 	gtk-gui/Smuxi.Frontend.Gnome.SteticPreferencesDialog.cs \
 	gtk-gui/Smuxi.Frontend.Gnome.QuickConnectDialog.cs \
@@ -464,7 +498,6 @@ REFERENCES = \
 	System \
     System.Core \
 	Mono.Posix \
-	System.Drawing \
 	$(GLIB_SHARP_20_LIBS) \
 	$(GLADE_SHARP_20_LIBS) \
 	$(GTK_SHARP_20_LIBS) \
@@ -555,6 +588,7 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
 	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
 	esac;
+$(top_srcdir)/Makefile.include:
 
 $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
@@ -568,8 +602,11 @@ smuxi-frontend-gnome: $(top_builddir)/config.status $(srcdir)/smuxi-frontend-gno
 	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
 install-binSCRIPTS: $(bin_SCRIPTS)
 	@$(NORMAL_INSTALL)
-	test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
 	@list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
@@ -600,8 +637,11 @@ uninstall-binSCRIPTS:
 	dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir)
 install-pkgappSCRIPTS: $(pkgapp_SCRIPTS)
 	@$(NORMAL_INSTALL)
-	test -z "$(pkgappdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgappdir)"
 	@list='$(pkgapp_SCRIPTS)'; test -n "$(pkgappdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(pkgappdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(pkgappdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
@@ -638,8 +678,11 @@ clean-libtool:
 	-rm -rf .libs _libs
 install-desktopDATA: $(desktop_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(desktopdir)" || $(MKDIR_P) "$(DESTDIR)$(desktopdir)"
 	@list='$(desktop_DATA)'; test -n "$(desktopdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(desktopdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(desktopdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -656,8 +699,11 @@ uninstall-desktopDATA:
 	dir='$(DESTDIR)$(desktopdir)'; $(am__uninstall_files_from_dir)
 install-icon128DATA: $(icon128_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(icon128dir)" || $(MKDIR_P) "$(DESTDIR)$(icon128dir)"
 	@list='$(icon128_DATA)'; test -n "$(icon128dir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(icon128dir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(icon128dir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -674,8 +720,11 @@ uninstall-icon128DATA:
 	dir='$(DESTDIR)$(icon128dir)'; $(am__uninstall_files_from_dir)
 install-icon16DATA: $(icon16_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(icon16dir)" || $(MKDIR_P) "$(DESTDIR)$(icon16dir)"
 	@list='$(icon16_DATA)'; test -n "$(icon16dir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(icon16dir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(icon16dir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -692,8 +741,11 @@ uninstall-icon16DATA:
 	dir='$(DESTDIR)$(icon16dir)'; $(am__uninstall_files_from_dir)
 install-icon22DATA: $(icon22_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(icon22dir)" || $(MKDIR_P) "$(DESTDIR)$(icon22dir)"
 	@list='$(icon22_DATA)'; test -n "$(icon22dir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(icon22dir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(icon22dir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -710,8 +762,11 @@ uninstall-icon22DATA:
 	dir='$(DESTDIR)$(icon22dir)'; $(am__uninstall_files_from_dir)
 install-icon24DATA: $(icon24_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(icon24dir)" || $(MKDIR_P) "$(DESTDIR)$(icon24dir)"
 	@list='$(icon24_DATA)'; test -n "$(icon24dir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(icon24dir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(icon24dir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -728,8 +783,11 @@ uninstall-icon24DATA:
 	dir='$(DESTDIR)$(icon24dir)'; $(am__uninstall_files_from_dir)
 install-icon256DATA: $(icon256_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(icon256dir)" || $(MKDIR_P) "$(DESTDIR)$(icon256dir)"
 	@list='$(icon256_DATA)'; test -n "$(icon256dir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(icon256dir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(icon256dir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -746,8 +804,11 @@ uninstall-icon256DATA:
 	dir='$(DESTDIR)$(icon256dir)'; $(am__uninstall_files_from_dir)
 install-icon32DATA: $(icon32_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(icon32dir)" || $(MKDIR_P) "$(DESTDIR)$(icon32dir)"
 	@list='$(icon32_DATA)'; test -n "$(icon32dir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(icon32dir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(icon32dir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -764,8 +825,11 @@ uninstall-icon32DATA:
 	dir='$(DESTDIR)$(icon32dir)'; $(am__uninstall_files_from_dir)
 install-icon48DATA: $(icon48_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(icon48dir)" || $(MKDIR_P) "$(DESTDIR)$(icon48dir)"
 	@list='$(icon48_DATA)'; test -n "$(icon48dir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(icon48dir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(icon48dir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -782,8 +846,11 @@ uninstall-icon48DATA:
 	dir='$(DESTDIR)$(icon48dir)'; $(am__uninstall_files_from_dir)
 install-linuxdesktopapplicationsDATA: $(linuxdesktopapplications_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(linuxdesktopapplicationsdir)" || $(MKDIR_P) "$(DESTDIR)$(linuxdesktopapplicationsdir)"
 	@list='$(linuxdesktopapplications_DATA)'; test -n "$(linuxdesktopapplicationsdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(linuxdesktopapplicationsdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(linuxdesktopapplicationsdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -800,8 +867,11 @@ uninstall-linuxdesktopapplicationsDATA:
 	dir='$(DESTDIR)$(linuxdesktopapplicationsdir)'; $(am__uninstall_files_from_dir)
 install-linuxpkgconfigDATA: $(linuxpkgconfig_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(linuxpkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(linuxpkgconfigdir)"
 	@list='$(linuxpkgconfig_DATA)'; test -n "$(linuxpkgconfigdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(linuxpkgconfigdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(linuxpkgconfigdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -818,8 +888,11 @@ uninstall-linuxpkgconfigDATA:
 	dir='$(DESTDIR)$(linuxpkgconfigdir)'; $(am__uninstall_files_from_dir)
 install-programfilesDATA: $(programfiles_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(programfilesdir)" || $(MKDIR_P) "$(DESTDIR)$(programfilesdir)"
 	@list='$(programfiles_DATA)'; test -n "$(programfilesdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(programfilesdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(programfilesdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -836,8 +909,11 @@ uninstall-programfilesDATA:
 	dir='$(DESTDIR)$(programfilesdir)'; $(am__uninstall_files_from_dir)
 install-programfilesiconsDATA: $(programfilesicons_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(programfilesiconsdir)" || $(MKDIR_P) "$(DESTDIR)$(programfilesiconsdir)"
 	@list='$(programfilesicons_DATA)'; test -n "$(programfilesiconsdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(programfilesiconsdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(programfilesiconsdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -854,8 +930,11 @@ uninstall-programfilesiconsDATA:
 	dir='$(DESTDIR)$(programfilesiconsdir)'; $(am__uninstall_files_from_dir)
 install-svgiconDATA: $(svgicon_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(svgicondir)" || $(MKDIR_P) "$(DESTDIR)$(svgicondir)"
 	@list='$(svgicon_DATA)'; test -n "$(svgicondir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(svgicondir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(svgicondir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
diff --git a/src/Frontend-GNOME/NotifyManager.cs b/src/Frontend-GNOME/NotifyManager.cs
index ec46097..7c62fa3 100644
--- a/src/Frontend-GNOME/NotifyManager.cs
+++ b/src/Frontend-GNOME/NotifyManager.cs
@@ -23,6 +23,7 @@ using System;
 using System.IO;
 using System.Collections.Generic;
 using Notifications;
+using Gtk.Extensions;
 using Smuxi.Common;
 using Smuxi.Engine;
 
@@ -33,7 +34,6 @@ namespace Smuxi.Frontend.Gnome
 #if LOG4NET
         private static readonly log4net.ILog Logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
 #endif
-        private static DateTime UnixEpoch = new DateTime(1970, 1, 1, 0, 0, 0);
         private static Gdk.Pixbuf PersonChatIconPixbuf { get; set; }
         private static string     PersonChatIconName { get; set; }
         private static Gdk.Pixbuf GroupChatIconPixbuf { get; set; }
@@ -266,7 +266,7 @@ namespace Smuxi.Frontend.Gnome
             if (Capabilites.Contains("actions")) {
                 notification.AddAction("show", _("Show"), delegate {
                     try {
-                        MainWindow.Present();
+                        MainWindow.PresentWithServerTime();
                         MainWindow.Notebook.CurrentChatView = chatView;
                         notification.Close();
                     } catch (Exception ex) {
diff --git a/src/Frontend-GNOME/Preferences/PreferencesDialog.cs b/src/Frontend-GNOME/Preferences/PreferencesDialog.cs
index 20ee6d1..4ed0137 100644
--- a/src/Frontend-GNOME/Preferences/PreferencesDialog.cs
+++ b/src/Frontend-GNOME/Preferences/PreferencesDialog.cs
@@ -386,17 +386,22 @@ namespace Smuxi.Frontend.Gnome
                 // feature introduced in >= 0.8.1
                 Gtk.ComboBox persistencyTypeComboBox =
                     ((Gtk.ComboBox)_Glade["PersistencyTypeComboBox"]);
-                var persistencyType = (MessageBufferPersistencyType) Enum.Parse(
-                    typeof(MessageBufferPersistencyType),
-                    (string) Frontend.UserConfig["MessageBuffer/PersistencyType"]
-                );
-                i = 0;
-                foreach (object[] row in (Gtk.ListStore) persistencyTypeComboBox.Model) {
-                    if (((MessageBufferPersistencyType) row[0]) == persistencyType) {
-                        persistencyTypeComboBox.Active = i;
-                        break;
+                try {
+                    var persistencyType = (MessageBufferPersistencyType) Enum.Parse(
+                        typeof(MessageBufferPersistencyType),
+                        (string) Frontend.UserConfig["MessageBuffer/PersistencyType"]
+                    );
+                    i = 0;
+                    foreach (object[] row in (Gtk.ListStore) persistencyTypeComboBox.Model) {
+                        if (((MessageBufferPersistencyType) row[0]) == persistencyType) {
+                            persistencyTypeComboBox.Active = i;
+                            break;
+                        }
+                        i++;
                     }
-                    i++;
+                } catch (ArgumentException) {
+                    // for forward compatibility with newer engines
+                    persistencyTypeComboBox.Active = -1;
                 }
                 ((Gtk.SpinButton)_Glade["VolatileMaxCapacitySpinButton"]).Value =
                     (double)(int)Frontend.UserConfig["MessageBuffer/Volatile/MaxCapacity"];
@@ -437,7 +442,15 @@ namespace Smuxi.Frontend.Gnome
                     ((Gtk.RadioButton)_Glade["TabPositionRadioButtonNone"]).Active = true;
                 break;
             }
-            
+            if (Frontend.UserConfig["Interface/Notebook/AutoSwitchPersonChats"] != null) {
+                ((Gtk.CheckButton) _Glade["AutoSwitchPersonChatsCheckButton"]).Active =
+                    (bool) Frontend.UserConfig["Interface/Notebook/AutoSwitchPersonChats"];
+            }
+            if (Frontend.UserConfig["Interface/Notebook/AutoSwitchGroupChats"] != null) {
+                ((Gtk.CheckButton) _Glade["AutoSwitchGroupChatsCheckButton"]).Active =
+                    (bool) Frontend.UserConfig["Interface/Notebook/AutoSwitchGroupChats"];
+            }
+
             // Interface/Notebook/Channel
             switch ((string)Frontend.UserConfig["Interface/Notebook/Channel/UserListPosition"]) {
                 case "left":
@@ -682,17 +695,20 @@ namespace Smuxi.Frontend.Gnome
             // MessageBuffer
             if (Frontend.EngineVersion >= new Version("0.8.1")) {
                 var persistencyTypeComboBox = (Gtk.ComboBox) _Glade["PersistencyTypeComboBox"];
-                var persistencyType = MessageBufferPersistencyType.Volatile;
-                i = 0;
-                foreach (object[] row in (Gtk.ListStore) persistencyTypeComboBox.Model) {
-                    if (persistencyTypeComboBox.Active == i) {
-                        persistencyType = (MessageBufferPersistencyType) row[0];
-                        break;
+                // for forward compatibility with newer engines
+                if (persistencyTypeComboBox.Active != -1) {
+                    var persistencyType = MessageBufferPersistencyType.Volatile;
+                    i = 0;
+                    foreach (object[] row in (Gtk.ListStore) persistencyTypeComboBox.Model) {
+                        if (persistencyTypeComboBox.Active == i) {
+                            persistencyType = (MessageBufferPersistencyType) row[0];
+                            break;
+                        }
+                        i++;
                     }
-                    i++;
+                    Frontend.UserConfig["MessageBuffer/PersistencyType"] =
+                        persistencyType.ToString();
                 }
-                Frontend.UserConfig["MessageBuffer/PersistencyType"] =
-                    persistencyType.ToString();
                 Frontend.UserConfig["MessageBuffer/Volatile/MaxCapacity"] =
                     (int)((Gtk.SpinButton)_Glade["VolatileMaxCapacitySpinButton"]).Value;
                 Frontend.UserConfig["MessageBuffer/Persistent/MaxCapacity"] =
@@ -703,6 +719,7 @@ namespace Smuxi.Frontend.Gnome
             Frontend.UserConfig["Interface/ShowAdvancedSettings"] =
                 ((Gtk.CheckButton)_Glade["ShowAdvancedSettingsCheckButton"]).Active;
 
+            // Interface/Notebook
             Frontend.UserConfig["Interface/Notebook/TimestampFormat"] =
                 ((Gtk.Entry)_Glade["TimestampFormatEntry"]).Text;
             Frontend.UserConfig["Interface/Notebook/BufferLines"] =
@@ -727,7 +744,13 @@ namespace Smuxi.Frontend.Gnome
                 tab_position = "none";
             }
             Frontend.UserConfig["Interface/Notebook/TabPosition"] = tab_position;
-            
+
+            Frontend.UserConfig["Interface/Notebook/AutoSwitchPersonChats"] =
+                ((Gtk.CheckButton)_Glade["AutoSwitchPersonChatsCheckButton"]).Active;
+            Frontend.UserConfig["Interface/Notebook/AutoSwitchGroupChats"] =
+                ((Gtk.CheckButton)_Glade["AutoSwitchGroupChatsCheckButton"]).Active;
+
+            // Interface/Notebook/Channel
             string userlist_position = null;
              if (((Gtk.RadioButton)_Glade["UserListPositionRadioButtonLeft"]).Active) {
                 userlist_position = "left";
diff --git a/src/Frontend-GNOME/Views/Chats/ChatView.cs b/src/Frontend-GNOME/Views/Chats/ChatView.cs
index 90f7328..9588125 100644
--- a/src/Frontend-GNOME/Views/Chats/ChatView.cs
+++ b/src/Frontend-GNOME/Views/Chats/ChatView.cs
@@ -21,7 +21,6 @@
  */
 
 using System;
-using System.Drawing;
 using System.Threading;
 using System.Collections.Generic;
 using Smuxi.Common;
@@ -509,7 +508,7 @@ namespace Smuxi.Frontend.Gnome
                 msg.AppendMessage(_("Low Bandwidth Mode is active: no messages synced."));
                 AddMessage(msg.ToMessage());
             } else {
-                if (SyncedMessages.Count > 0) {
+                if (SyncedMessages != null) {
                     // TODO: push messages in batches and give back control to
                     // GTK+ in between for blocking the GUI thread less
                     foreach (MessageModel msg in SyncedMessages) {
@@ -565,7 +564,7 @@ namespace Smuxi.Frontend.Gnome
 
             ThreadPool.QueueUserWorkItem(delegate {
                 try {
-                    ChatModel.ProtocolManager.CloseChat(
+                    ProtocolManager.CloseChat(
                         Frontend.FrontendManager,
                         ChatModel
                     );
diff --git a/src/Frontend-GNOME/Views/Chats/GroupChatView.cs b/src/Frontend-GNOME/Views/Chats/GroupChatView.cs
index 37fdf49..63e9e15 100644
--- a/src/Frontend-GNOME/Views/Chats/GroupChatView.cs
+++ b/src/Frontend-GNOME/Views/Chats/GroupChatView.cs
@@ -188,6 +188,21 @@ namespace Smuxi.Frontend.Gnome
             _TopicScrolledWindow.ShowAll();
             _TopicScrolledWindow.Visible = false;
             _TopicScrolledWindow.NoShowAll = true;
+            _TopicScrolledWindow.SizeRequested += delegate(object o, Gtk.SizeRequestedArgs args) {
+                // predict and set useful topic heigth
+                Pango.Layout layout = _TopicTextView.CreatePangoLayout("Test Topic");
+                int lineWidth, lineHeigth;
+                layout.GetPixelSize(out lineWidth, out lineHeigth);
+                var lineSpacing = _TopicTextView.PixelsAboveLines +
+                                  _TopicTextView.PixelsBelowLines;
+                var text = Topic != null ? Topic.ToString() : String.Empty;
+                // hardcoded to 2 lines for now
+                var newLines = text.Length > 0 ? 2 : 0;
+                var bestSize = new Gtk.Requisition() {
+                    Height = ((lineHeigth + lineSpacing) * newLines) + 2
+                };
+                args.Requisition = bestSize;
+            };
 
             Add(_OutputHPaned);
             
@@ -457,15 +472,6 @@ namespace Smuxi.Frontend.Gnome
 
             // topic
             _TopicTextView.ApplyConfig(config);
-            // predict and set useful topic heigth
-            Pango.Layout layout = _TopicTextView.CreatePangoLayout("Test Topic");
-            int lineWidth, lineHeigth;
-            layout.GetPixelSize(out lineWidth, out lineHeigth);
-            // use 2 lines + a bit extra as the topic heigth
-            int bestHeigth = (lineHeigth * 2) + 5;
-            _TopicTextView.HeightRequest = bestHeigth;
-            _TopicScrolledWindow.HeightRequest = bestHeigth;
-
             string topic_pos = (string) config["Interface/Notebook/Channel/TopicPosition"];
             if (_TopicScrolledWindow.IsAncestor(_OutputVBox)) {
                 _OutputVBox.Remove(_TopicScrolledWindow);
@@ -591,7 +597,7 @@ namespace Smuxi.Frontend.Gnome
 
                 ThreadPool.QueueUserWorkItem(delegate {
                     try {
-                        ChatModel.ProtocolManager.OpenChat(
+                        ProtocolManager.OpenChat(
                             Frontend.FrontendManager,
                             personChat
                         );
diff --git a/src/Frontend-GNOME/Views/Chats/PersonChatView.cs b/src/Frontend-GNOME/Views/Chats/PersonChatView.cs
index dcbe617..68a3746 100644
--- a/src/Frontend-GNOME/Views/Chats/PersonChatView.cs
+++ b/src/Frontend-GNOME/Views/Chats/PersonChatView.cs
@@ -59,6 +59,7 @@ namespace Smuxi.Frontend.Gnome
             PersonChatModel = chat;
 
             Add(OutputScrolledWindow);
+            ShowAll();
         }
 
         public override void Sync()
diff --git a/src/Frontend-GNOME/Views/Chats/ProtocolChatView.cs b/src/Frontend-GNOME/Views/Chats/ProtocolChatView.cs
index 61c3709..a15d7f7 100644
--- a/src/Frontend-GNOME/Views/Chats/ProtocolChatView.cs
+++ b/src/Frontend-GNOME/Views/Chats/ProtocolChatView.cs
@@ -21,7 +21,16 @@
  */
 
 using System;
+using System.IO;
+using System.Net;
+using System.Net.Security;
+using System.Web;
+using System.Linq;
+using System.Text.RegularExpressions;
+using System.Security.Cryptography.X509Certificates;
 using System.Threading;
+using System.Collections.Generic;
+using SysPath = System.IO.Path;
 using Smuxi.Engine;
 using Smuxi.Common;
 
@@ -30,11 +39,24 @@ namespace Smuxi.Frontend.Gnome
     [ChatViewInfo(ChatType = ChatType.Protocol)]
     public class ProtocolChatView : ChatView
     {
+#if LOG4NET
+        private static readonly log4net.ILog f_Logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+#endif
         public static Gdk.Pixbuf IconPixbuf { get; private set; }
-        
+        static Dictionary<string, string> NetworkWebsiteUrls { get; set; }
+        ProxySettings ProxySettings { get; set; }
+        Gdk.Pixbuf ServerIconPixbuf { get; set; }
+        public string Host { get; private set; }
+        public int Port { get; private set; }
+        public string NetworkID { get; private set; }
+
         protected override Gtk.Image DefaultTabImage {
             get {
-                return new Gtk.Image(IconPixbuf);
+                var icon = IconPixbuf;
+                if (ServerIconPixbuf != null) {
+                    icon = ServerIconPixbuf;
+                }
+                return new Gtk.Image(icon);
             }
         }
 
@@ -43,24 +65,72 @@ namespace Smuxi.Frontend.Gnome
             IconPixbuf = Frontend.LoadIcon(
                 "smuxi-protocol-chat", 16, "protocol-chat_256x256.png"
             );
+            NetworkWebsiteUrls = new Dictionary<string, string>(
+                StringComparer.InvariantCultureIgnoreCase
+            );
+
+            // IRC
+            NetworkWebsiteUrls.Add("OFTC", "http://www.oftc.net/");
+            NetworkWebsiteUrls.Add("freenode", "http://freenode.net/");
+            NetworkWebsiteUrls.Add("QuakeNet", "http://www.quakenet.org/");
+            NetworkWebsiteUrls.Add("IRCnet", "http://www.ircnet.org/");
+            NetworkWebsiteUrls.Add("DALnet", "http://www.dal.net/");
+            NetworkWebsiteUrls.Add("GameSurge", "https://gamesurge.net/");
+            NetworkWebsiteUrls.Add("EFnet", "http://www.efnet.org/");
+            NetworkWebsiteUrls.Add("GIMPnet", "http://www.gimp.org/");
+            NetworkWebsiteUrls.Add("GSDnet", "http://www.gsd-software.net/");
+            NetworkWebsiteUrls.Add("ustream", "http://www.ustream.tv/");
+            NetworkWebsiteUrls.Add("Infinity-IRC", "http://www.infinityirc.com/");
+
+            // Twitter
+            NetworkWebsiteUrls.Add("Twitter", "http://www.twitter.com/");
+
+            // XMPP
+            NetworkWebsiteUrls.Add("talk.google.com", "http://www.google.com/talk/");
+            NetworkWebsiteUrls.Add("chat.facebook.com", "http://www.facebook.com/");
         }
 
         public ProtocolChatView(ChatModel chat) : base(chat)
         {
             Trace.Call(chat);
             
+            ProxySettings = new ProxySettings();
+
             Add(OutputScrolledWindow);
-            
             ShowAll();
         }
-        
+
+        public override void Sync()
+        {
+            Trace.Call();
+
+            base.Sync();
+
+            Host = ProtocolManager.Host;
+            Port = ProtocolManager.Port;
+            NetworkID = ProtocolManager.NetworkID;
+
+            try {
+                CheckIcon();
+            } catch (Exception ex) {
+#if LOG4NET
+                f_Logger.Error("Sync(): CheckIcon() threw exception!", ex);
+#endif
+            }
+        }
+
         public override void Close()
         {
             Trace.Call();
             
             // show warning if there are open chats (besides protocol chat)
-            // FIXME: REMOTING CALL 1 + 2 + 3
-            if (ChatModel.ProtocolManager.Chats.Count > 1) {
+            var ownedChats = 0;
+            foreach (var chatView in Frontend.MainWindow.ChatViewManager.Chats) {
+                if (chatView.ProtocolManager == ProtocolManager) {
+                    ownedChats++;
+                }
+            }
+            if (ownedChats > 1) {
                 Gtk.MessageDialog md = new Gtk.MessageDialog(
                     Frontend.MainWindow,
                     Gtk.DialogFlags.Modal,
@@ -91,7 +161,191 @@ namespace Smuxi.Frontend.Gnome
                 }
             });
         }
-        
+
+        public override void ApplyConfig(UserConfig config)
+        {
+            Trace.Call(config);
+
+            if (config == null) {
+                throw new ArgumentNullException("config");
+            }
+
+            base.ApplyConfig(config);
+
+            ProxySettings.ApplyConfig(config);
+        }
+
+        void CheckIcon()
+        {
+            Trace.Call();
+
+            var cachePath = Platform.CachePath;
+            var iconPath = SysPath.Combine(cachePath, "server-icons");
+            // REMOTING CALL
+            var protocol = ProtocolManager.Protocol;
+            iconPath = SysPath.Combine(iconPath, protocol);
+            if (!Directory.Exists(iconPath)) {
+                Directory.CreateDirectory(iconPath);
+            }
+            iconPath = SysPath.Combine(iconPath,
+                                       String.Format("{0}.ico", ID));
+            var iconFile = new FileInfo(iconPath);
+            if (iconFile.Exists && iconFile.Length > 0) {
+                // cached icon, use right away
+                UpdateServerIcon(iconPath);
+            }
+
+            string websiteUrl = null;
+            lock (NetworkWebsiteUrls) {
+                if (!NetworkWebsiteUrls.TryGetValue(ID, out websiteUrl)) {
+                    // unknown network, nothing to download
+                    return;
+                }
+                // download in background so Sync() doesn't get slowed down
+                ThreadPool.QueueUserWorkItem(delegate {
+                    try {
+                        // HACK: work around Mono's buggy certificate validation
+                        ServicePointManager.ServerCertificateValidationCallback += ValidateCertificate;
+                        DownloadServerIcon(websiteUrl, iconFile);
+                        iconFile.Refresh();
+                        if (!iconFile.Exists || iconFile.Length == 0) {
+                            return;
+                        }
+                        UpdateServerIcon(iconPath);
+                    } catch (Exception ex) {
+#if LOG4NET
+                        f_Logger.Error("CheckIcon(): Exception", ex);
+#endif
+                    } finally {
+                        ServicePointManager.ServerCertificateValidationCallback -= ValidateCertificate;
+                    }
+                });
+            }
+        }
+
+        void DownloadServerIcon(string websiteUrl, FileInfo iconFile)
+        {
+            Trace.Call(websiteUrl, iconFile);
+
+            var webClient = new WebClient();
+            // ignore proxy settings of remote engines
+            WebProxy proxy = null;
+            if (Frontend.IsLocalEngine) {
+                proxy = ProxySettings.GetWebProxy(websiteUrl);
+                if (proxy == null) {
+                    // HACK: WebClient will always use the system proxy if set to
+                    // null so explicitely override this by setting an empty proxy
+                    proxy = new WebProxy();
+                }
+            }
+            webClient.Proxy = proxy;
+            var content = webClient.DownloadString(websiteUrl);
+            var links = new List<Dictionary<string, string>>();
+            foreach (Match linkMatch in Regex.Matches(content, @"<link[\s]+([^>]*?)/?>")) {
+                var attributes = new Dictionary<string, string>();
+                foreach (Match attrMatch in Regex.Matches(linkMatch.Value, @"([\w]+)[\s]*=[\s]*[""']([^""']*)[""'][\s]*")) {
+                    var key = attrMatch.Groups[1].Value;
+                    var value = attrMatch.Groups[2].Value;
+                    attributes.Add(key, value);
+                }
+                links.Add(attributes);
+            }
+            string faviconRel = null;
+            foreach (var link in links) {
+                var iconLink = false;
+                foreach (var attribute in link) {
+                    if (attribute.Key != "rel" ||
+                        !attribute.Value.Split(' ').Contains("icon")) {
+                        continue;
+                    }
+                    iconLink = true;
+                    break;
+                }
+                if (!iconLink) {
+                    continue;
+                }
+                foreach (var attribute in link) {
+                    if (attribute.Key != "href") {
+                        continue;
+                    }
+                    // yay, we have found the favicon in all this junk
+                    faviconRel = attribute.Value;
+                    break;
+                }
+            }
+            string faviconUrl = null;
+            if (String.IsNullOrEmpty(faviconRel)) {
+                faviconRel = "/favicon.ico";
+            }
+            faviconUrl = new Uri(new Uri(websiteUrl), faviconRel).ToString();
+#if LOG4NET
+            f_Logger.DebugFormat("DownloadServerIcon(): favicon URL: {0}",
+                                 faviconUrl);
+#endif
+
+            var iconRequest = WebRequest.Create(faviconUrl);
+            iconRequest.Proxy = proxy;
+            if (iconRequest is HttpWebRequest) {
+                var iconHttpRequest = (HttpWebRequest) iconRequest;
+                if (iconFile.Exists) {
+                    iconHttpRequest.IfModifiedSince = iconFile.LastWriteTime;
+                }
+            }
+
+            WebResponse iconResponse;
+            try {
+                iconResponse = iconRequest.GetResponse();
+            } catch (WebException ex) {
+                if (ex.Response is HttpWebResponse) {
+                    var iconHttpResponse = (HttpWebResponse) ex.Response;
+                    if (iconHttpResponse.StatusCode == HttpStatusCode.NotModified) {
+                        // icon hasn't changed, nothing to do
+                        return;
+                    }
+                }
+                throw;
+            }
+
+            // save new or modified icon file
+            using (var iconStream = iconFile.OpenWrite())
+            using (var httpStream = iconResponse.GetResponseStream()) {
+                byte[] buffer = new byte[4096];
+                int read;
+                while ((read = httpStream.Read(buffer, 0, buffer.Length)) > 0) {
+                    iconStream.Write(buffer, 0, read);
+                }
+            }
+        }
+
+        void UpdateServerIcon(string iconPath)
+        {
+            Trace.Call(iconPath);
+
+            ServerIconPixbuf = new Gdk.Pixbuf(iconPath, 16, 16);
+            GLib.Idle.Add(delegate {
+                TabImage.Pixbuf = ServerIconPixbuf;
+                return false;
+            });
+        }
+
+        static bool ValidateCertificate(object sender,
+                                        X509Certificate certificate,
+                                        X509Chain chain,
+                                        SslPolicyErrors sslPolicyErrors)
+        {
+            if (sslPolicyErrors == SslPolicyErrors.None) {
+                return true;
+            }
+
+#if LOG4NET
+            f_Logger.Warn(
+                "ValidateCertificate(): Certificate error: " +
+                sslPolicyErrors
+            );
+#endif
+            return true;
+        }
+
         private static string _(string msg)
         {
             return Mono.Unix.Catalog.GetString(msg);
diff --git a/src/Frontend-GNOME/Views/Chats/SessionChatView.cs b/src/Frontend-GNOME/Views/Chats/SessionChatView.cs
index 6280083..318b035 100644
--- a/src/Frontend-GNOME/Views/Chats/SessionChatView.cs
+++ b/src/Frontend-GNOME/Views/Chats/SessionChatView.cs
@@ -58,6 +58,7 @@ namespace Smuxi.Frontend.Gnome
             OutputMessageTextView.ShowTimestamps = false;
 
             Add(OutputScrolledWindow);
+            ShowAll();
         }
         
         protected override void OnTabButtonPress(object sender, Gtk.ButtonPressEventArgs e)
diff --git a/src/Frontend-GNOME/Views/JoinWidget.cs b/src/Frontend-GNOME/Views/JoinWidget.cs
new file mode 100644
index 0000000..4e2e5a7
--- /dev/null
+++ b/src/Frontend-GNOME/Views/JoinWidget.cs
@@ -0,0 +1,109 @@
+// Smuxi - Smart MUltipleXed Irc
+//
+// Copyright (c) 2012 Mirco Bauer <meebey at meebey.net>
+//
+// Full GPL License: <http://www.gnu.org/licenses/gpl.txt>
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 2 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+using System;
+using System.Collections.Generic;
+using Smuxi.Common;
+using Smuxi.Engine;
+
+namespace Smuxi.Frontend.Gnome
+{
+    [System.ComponentModel.ToolboxItem(true)]
+    public partial class JoinWidget : Gtk.Bin
+    {
+        public EventHandler<EventArgs> Activated;
+
+        public bool HasFocus {
+            get {
+                return f_ChatEntry.HasFocus;
+            }
+            set {
+                f_ChatEntry.HasFocus = value;
+            }
+        }
+
+        public JoinWidget()
+        {
+            Build();
+
+            f_ChatEntry.Activated += delegate {
+                OnActivated(EventArgs.Empty);
+            };
+            f_JoinButton.Clicked += delegate {
+                OnActivated(EventArgs.Empty);
+            };
+        }
+
+        public void InitNetworks(IList<string> networks)
+        {
+            Trace.Call(networks);
+
+            if (networks == null) {
+                throw new ArgumentNullException("networks");
+            }
+
+            f_NetworkComboBox.Clear();
+            var cell = new Gtk.CellRendererText();
+            f_NetworkComboBox.PackStart(cell, false);
+            f_NetworkComboBox.AddAttribute(cell, "text", 0);
+
+            Gtk.ListStore store = new Gtk.ListStore(typeof(string));
+            foreach (string network in networks) {
+                if (String.IsNullOrEmpty(network)) {
+                    continue;
+                }
+                store.AppendValues(network);
+            }
+            store.SetSortColumnId(0, Gtk.SortType.Ascending);
+            f_NetworkComboBox.Model = store;
+            f_NetworkComboBox.Active = 0;
+        }
+
+        public void ApplyConfig(UserConfig config)
+        {
+            if (config == null) {
+                throw new ArgumentNullException("config");
+            }
+
+            var servers = new ServerListController(config);
+            InitNetworks(servers.GetNetworks());
+        }
+
+        public Uri GetChatLink()
+        {
+            return new Uri(
+                String.Format("smuxi://{0}/{1}",
+                              f_NetworkComboBox.ActiveText,
+                              f_ChatEntry.Text)
+            );
+        }
+
+        public void Clear()
+        {
+            f_ChatEntry.Text = String.Empty;
+        }
+
+        protected virtual void OnActivated(EventArgs e)
+        {
+            if (Activated != null) {
+                Activated(this, e);
+            }
+        }
+    }
+}
diff --git a/src/Frontend-GNOME/Views/MessageTextView.cs b/src/Frontend-GNOME/Views/MessageTextView.cs
index 9e9ce89..8d95179 100644
--- a/src/Frontend-GNOME/Views/MessageTextView.cs
+++ b/src/Frontend-GNOME/Views/MessageTextView.cs
@@ -51,6 +51,12 @@ namespace Smuxi.Frontend.Gnome
         private int          _MarkerlineBufferPosition;
         private int          _BufferLines = -1;
 
+        Gtk.TextTag BoldTag { get; set; }
+        Gtk.TextTag ItalicTag { get; set; }
+        Gtk.TextTag UnderlineTag { get; set; }
+        Gtk.TextTag LinkTag { get; set; }
+        Gtk.TextTag EventTag { get; set; }
+
         public event MessageTextViewMessageAddedEventHandler       MessageAdded;
         public event MessageTextViewMessageHighlightedEventHandler MessageHighlighted;
         
@@ -117,6 +123,15 @@ namespace Smuxi.Frontend.Gnome
             }
         }
 
+        Gdk.Color BackgroundColor {
+            get {
+                if (_ThemeSettings.BackgroundColor == null) {
+                    return DefaultAttributes.Appearance.BgColor;
+                }
+                return _ThemeSettings.BackgroundColor.Value;
+            }
+        }
+
         public MessageTextView()
         {
             Trace.Call();
@@ -128,6 +143,16 @@ namespace Smuxi.Frontend.Gnome
             MotionNotifyEvent += OnMotionNotifyEvent;
             PopulatePopup += OnPopulatePopup;
             ExposeEvent += OnExposeEvent;
+            Realized += delegate {
+                CheckStyle();
+            };
+            StyleSet += delegate(object o, Gtk.StyleSetArgs args) {
+                if (!IsRealized) {
+                    // HACK: avoid GTK+ crash in gtk_text_attributes_copy_values()
+                    return;
+                }
+                CheckStyle();
+            };
         }
 
         public void ApplyConfig(UserConfig config)
@@ -160,6 +185,35 @@ namespace Smuxi.Frontend.Gnome
             _BufferLines = (int) config["Interface/Notebook/BufferLines"];
         }
 
+        void CheckStyle()
+        {
+            Trace.Call();
+
+            var bgTextColor = ColorConverter.GetTextColor(BackgroundColor);
+            // get best contrast for the event font color
+            Gdk.Color eventColor = Gdk.Color.Zero;
+            Gdk.Color.Parse("darkgray", ref eventColor);
+            var eventTextColor = TextColorTools.GetBestTextColor(
+                ColorConverter.GetTextColor(eventColor),
+                bgTextColor,
+                TextColorContrast.High
+            );
+            EventTag.ForegroundGdk = ColorConverter.GetGdkColor(
+                eventTextColor
+            );
+
+            // get best contrast for the link font color
+            Gdk.Color linkColor = Gdk.Color.Zero;
+            Gdk.Color.Parse("darkblue", ref linkColor);
+            var linkTextColor = TextColorTools.GetBestTextColor(
+                ColorConverter.GetTextColor(linkColor),
+                bgTextColor
+            );
+            LinkTag.ForegroundGdk = ColorConverter.GetGdkColor(
+                linkTextColor
+            );
+        }
+
         public void Clear()
         {
             Trace.Call();
@@ -184,12 +238,17 @@ namespace Smuxi.Frontend.Gnome
 
             var buffer = Buffer;
             var iter = buffer.EndIter;
+            var startMark = new Gtk.TextMark(null, true);
+            buffer.AddMark(startMark, iter);
 
-            Gdk.Color bgColor = DefaultAttributes.Appearance.BgColor;
-            if (_ThemeSettings.BackgroundColor != null) {
-                bgColor = _ThemeSettings.BackgroundColor.Value;
+            var senderPrefixWidth = GetSenderPrefixWidth(msg);
+            Gtk.TextTag indentTag = null;
+            if (senderPrefixWidth != 0) {
+                indentTag = new Gtk.TextTag(null) {
+                    Indent = -senderPrefixWidth
+                };
+                _MessageTextTagTable.Add(indentTag);
             }
-            TextColor bgTextColor = ColorConverter.GetTextColor(bgColor);
 
             if (_ShowTimestamps) {
                 var msgTimeStamp = msg.TimeStamp.ToLocalTime();
@@ -227,21 +286,11 @@ namespace Smuxi.Frontend.Gnome
 
                 if (timestamp != null) {
                     timestamp = String.Format("{0} ", timestamp);
-                    if (msg.MessageType == MessageType.Event) {
-                        // get best contrast for the event font color
-                        Gtk.TextTag eventTag = _MessageTextTagTable.Lookup("event");
-                        Gdk.Color eventColor = eventTag.ForegroundGdk;
-                        TextColor eventTextColor = TextColorTools.GetBestTextColor(
-                            ColorConverter.GetTextColor(eventColor),
-                            bgTextColor,
-                            TextColorContrast.High
-                        );
-                        eventTag.ForegroundGdk = ColorConverter.GetGdkColor(
-                            eventTextColor
-                        );
-                        buffer.InsertWithTagsByName(ref iter, timestamp, "event");
-                    } else {
-                        buffer.Insert(ref iter, timestamp);
+                    buffer.Insert(ref iter, timestamp);
+
+                    // apply timestamp width to indent tag
+                    if (indentTag != null) {
+                        indentTag.Indent -= GetPangoWidth(timestamp);
                     }
                 }
             }
@@ -256,14 +305,6 @@ namespace Smuxi.Frontend.Gnome
                 // TODO: implement all types
                 if (msgPart is UrlMessagePartModel) {
                     var urlPart = (UrlMessagePartModel) msgPart;
-                    // HACK: the engine should set a color for us!
-                    var linkStyleTag = _MessageTextTagTable.Lookup("link");
-                    var linkColor = ColorConverter.GetTextColor(
-                        linkStyleTag.ForegroundGdk
-                    );
-                    linkColor = TextColorTools.GetBestTextColor(
-                        linkColor, bgTextColor
-                    );
                     var linkText = urlPart.Text ?? urlPart.Url;
 
                     var url = urlPart.Url;
@@ -283,63 +324,71 @@ namespace Smuxi.Frontend.Gnome
                         continue;
                     }
 
+                    var tags = new List<Gtk.TextTag>();
+                    // link URI tag
                     var linkTag = new LinkTag(uri);
-                    linkTag.ForegroundGdk = ColorConverter.GetGdkColor(linkColor);
                     linkTag.TextEvent += OnLinkTagTextEvent;
                     _MessageTextTagTable.Add(linkTag);
-                    buffer.InsertWithTags(ref iter, linkText, linkStyleTag, linkTag);
+                    tags.Add(linkTag);
+
+                    // link style tag
+                    tags.Add(LinkTag);
+
+                    buffer.InsertWithTags(ref iter, linkText, tags.ToArray());
                 } else if (msgPart is TextMessagePartModel) {
+                    var tags = new List<Gtk.TextTag>();
                     TextMessagePartModel fmsgti = (TextMessagePartModel) msgPart;
-                    List<string> tags = new List<string>();
                     if (fmsgti.ForegroundColor != TextColor.None) {
-                        var bg = bgTextColor;
+                        var bg = ColorConverter.GetTextColor(BackgroundColor);
                         if (fmsgti.BackgroundColor != TextColor.None) {
                             bg = fmsgti.BackgroundColor;
                         }
                         TextColor color = TextColorTools.GetBestTextColor(
                             fmsgti.ForegroundColor, bg
                         );
-                        //Console.WriteLine("GetBestTextColor({0}, {1}): {2}",  fmsgti.ForegroundColor, bgTextColor, color);
                         string tagname = GetTextTagName(color, null);
-                        //string tagname = _GetTextTagName(fmsgti.ForegroundColor, null);
-                        tags.Add(tagname);
+                        var tag = _MessageTextTagTable.Lookup(tagname);
+                        tags.Add(tag);
                     }
                     if (fmsgti.BackgroundColor != TextColor.None) {
                         // TODO: get this from ChatView
                         string tagname = GetTextTagName(null, fmsgti.BackgroundColor);
-                        tags.Add(tagname);
+                        var tag = _MessageTextTagTable.Lookup(tagname);
+                        tags.Add(tag);
                     }
                     if (fmsgti.Underline) {
 #if LOG4NET && MSG_DEBUG
                         _Logger.Debug("AddMessage(): fmsgti.Underline is true");
 #endif
-                        tags.Add("underline");
+                        tags.Add(UnderlineTag);
                     }
                     if (fmsgti.Bold) {
 #if LOG4NET && MSG_DEBUG
                         _Logger.Debug("AddMessage(): fmsgti.Bold is true");
 #endif
-                        tags.Add("bold");
+                        tags.Add(BoldTag);
                     }
                     if (fmsgti.Italic) {
 #if LOG4NET && MSG_DEBUG
                         _Logger.Debug("AddMessage(): fmsgti.Italic is true");
 #endif
-                        tags.Add("italic");
-                    }
-                    if (msg.MessageType == MessageType.Event &&
-                        fmsgti.ForegroundColor == TextColor.None) {
-                        // only mark parts that don't have a color set
-                        tags.Add("event");
+                        tags.Add(ItalicTag);
                     }
 
                     if (tags.Count > 0) {
-                        buffer.InsertWithTagsByName(ref iter, fmsgti.Text, tags.ToArray());
+                        buffer.InsertWithTags(ref iter, fmsgti.Text, tags.ToArray());
                     } else {
                         buffer.Insert(ref iter, fmsgti.Text);
                     }
                 }
             }
+            var startIter = buffer.GetIterAtMark(startMark);
+            if (msg.MessageType == MessageType.Event) {
+                buffer.ApplyTag(EventTag, startIter, iter);
+            }
+            if (indentTag != null) {
+                buffer.ApplyTag(indentTag, startIter, iter);
+            }
             if (addLinebreak) {
                 buffer.Insert(ref iter, "\n");
             }
@@ -386,32 +435,39 @@ namespace Smuxi.Frontend.Gnome
             Gtk.TextTagTable ttt = new Gtk.TextTagTable();
             Gtk.TextTag tt;
             Pango.FontDescription fd;
-            
+
+            // WARNING: the insertion order of tags MATTERS!
+            // The attributes of the text tags are applied in the order of
+            // insertion to the text table, and not in which order the tags
+            // applied in the buffer. This is sick IMHO.
             tt = new Gtk.TextTag("bold");
             fd = new Pango.FontDescription();
             fd.Weight = Pango.Weight.Bold;
             tt.FontDesc = fd;
+            BoldTag = tt;
             ttt.Add(tt);
 
             tt = new Gtk.TextTag("italic");
             fd = new Pango.FontDescription();
             fd.Style = Pango.Style.Italic;
             tt.FontDesc = fd;
+            ItalicTag = tt;
             ttt.Add(tt);
             
             tt = new Gtk.TextTag("underline");
             tt.Underline = Pango.Underline.Single;
+            UnderlineTag = tt;
             ttt.Add(tt);
             
+            tt = new Gtk.TextTag("event");
+            tt.Foreground = "darkgray";
+            EventTag = tt;
+            ttt.Add(tt);
+
             tt = new Gtk.TextTag("link");
             tt.Underline = Pango.Underline.Single;
             tt.Foreground = "darkblue";
-            fd = new Pango.FontDescription();
-            tt.FontDesc = fd;
-            ttt.Add(tt);
-
-            tt = new Gtk.TextTag("event");
-            tt.Foreground = "darkgray";
+            LinkTag = tt;
             ttt.Add(tt);
 
             return ttt;
@@ -513,6 +569,9 @@ namespace Smuxi.Frontend.Gnome
 
             Gtk.ImageMenuItem copy_item = new Gtk.ImageMenuItem(Gtk.Stock.Copy, null);
             copy_item.Activated += delegate {
+                if (_ActiveLink == null) {
+                    return;
+                }
                 Gdk.Atom clipboardAtom = Gdk.Atom.Intern("CLIPBOARD", false);
                 Gtk.Clipboard clipboard = Gtk.Clipboard.Get(clipboardAtom);
                 clipboard.Text = _ActiveLink.ToString();
@@ -623,6 +682,7 @@ namespace Smuxi.Frontend.Gnome
                                                              _BufferLines);
                 int offset = end_iter.Offset;
                 Buffer.Delete(ref start_iter, ref end_iter);
+                // TODO: remove unnamed tags from TextTagTable
 
                 // update markerline offset if present
                 if (_MarkerlineBufferPosition != 0) {
@@ -635,6 +695,68 @@ namespace Smuxi.Frontend.Gnome
             }
         }
 
+        int GetSenderPrefixWidth(MessageModel msg)
+        {
+            // HACK: try to obtain the nickname from the message
+            // TODO: extend MessageModel with Origin property
+            var msgText = msg.ToString();
+            var nickMatch = Regex.Match(msgText, "^(<([^ ]+)> )");
+            if (nickMatch.Success) {
+                // HACK: the nick can be bold
+                if (msg.MessageParts.Count >= 3) {
+                    // possibly colored nick, see MessageBuilder.CreateNick()
+                    var prefixPart = msg.MessageParts[0];
+                    var nickPart = msg.MessageParts[1];
+                    var suffixPart = msg.MessageParts[2];
+                    if (prefixPart.ToString() == "<" &&
+                        nickPart is TextMessagePartModel &&
+                        suffixPart.ToString().StartsWith(">")) {
+                        // colored nick
+                        var nickTextPart = (TextMessagePartModel) nickPart;
+                        if (nickTextPart.Bold) {
+                            return GetPangoWidth(
+                                String.Format(
+                                    "{0}<b>{1}</b>{2} ",
+                                    GLib.Markup.EscapeText("<"),
+                                    GLib.Markup.EscapeText(
+                                        nickMatch.Groups[2].Value
+                                    ),
+                                    GLib.Markup.EscapeText(">")
+                                ),
+                                true
+                            );
+                        }
+                    }
+                }
+                return GetPangoWidth(nickMatch.Groups[1].Value, false);
+            } else {
+                var eventMatch = Regex.Match(msgText, "^(-!- )");
+                if (eventMatch.Success && eventMatch.Groups.Count >= 2) {
+                    return GetPangoWidth(eventMatch.Groups[1].Value, false);
+                }
+            }
+            return 0;
+        }
+
+        int GetPangoWidth(string text)
+        {
+            return GetPangoWidth(text, false);
+        }
+
+        int GetPangoWidth(string text, bool isMarkup)
+        {
+            Pango.Layout layout;
+            if (isMarkup) {
+                layout = CreatePangoLayout(null);
+                layout.SetMarkup(text);
+            } else {
+                layout = CreatePangoLayout(text);
+            }
+            int width, heigth;
+            layout.GetPixelSize(out width, out heigth);
+            return width;
+        }
+
         private static string _(string msg)
         {
             return Mono.Unix.Catalog.GetString(msg);
diff --git a/src/Frontend-GNOME/gtk-gui/Smuxi.Frontend.Gnome.JoinWidget.cs b/src/Frontend-GNOME/gtk-gui/Smuxi.Frontend.Gnome.JoinWidget.cs
new file mode 100644
index 0000000..497b322
--- /dev/null
+++ b/src/Frontend-GNOME/gtk-gui/Smuxi.Frontend.Gnome.JoinWidget.cs
@@ -0,0 +1,67 @@
+
+// This file has been generated by the GUI designer. Do not modify.
+namespace Smuxi.Frontend.Gnome
+{
+	public partial class JoinWidget
+	{
+		private global::Gtk.HBox hbox1;
+		private global::Gtk.Entry f_ChatEntry;
+		private global::Gtk.Label label1;
+		private global::Gtk.ComboBox f_NetworkComboBox;
+		private global::Gtk.Button f_JoinButton;
+        
+		protected virtual void Build ()
+		{
+			global::Stetic.Gui.Initialize (this);
+			// Widget Smuxi.Frontend.Gnome.JoinWidget
+			global::Stetic.BinContainer.Attach (this);
+			this.Name = "Smuxi.Frontend.Gnome.JoinWidget";
+			// Container child Smuxi.Frontend.Gnome.JoinWidget.Gtk.Container+ContainerChild
+			this.hbox1 = new global::Gtk.HBox ();
+			this.hbox1.Name = "hbox1";
+			this.hbox1.Spacing = 6;
+			// Container child hbox1.Gtk.Box+BoxChild
+			this.f_ChatEntry = new global::Gtk.Entry ();
+			this.f_ChatEntry.CanFocus = true;
+			this.f_ChatEntry.Name = "f_ChatEntry";
+			this.f_ChatEntry.IsEditable = true;
+			this.f_ChatEntry.InvisibleChar = '•';
+			this.hbox1.Add (this.f_ChatEntry);
+			global::Gtk.Box.BoxChild w1 = ((global::Gtk.Box.BoxChild)(this.hbox1 [this.f_ChatEntry]));
+			w1.Position = 0;
+			// Container child hbox1.Gtk.Box+BoxChild
+			this.label1 = new global::Gtk.Label ();
+			this.label1.Name = "label1";
+			this.label1.LabelProp = "@";
+			this.hbox1.Add (this.label1);
+			global::Gtk.Box.BoxChild w2 = ((global::Gtk.Box.BoxChild)(this.hbox1 [this.label1]));
+			w2.Position = 1;
+			w2.Expand = false;
+			w2.Fill = false;
+			// Container child hbox1.Gtk.Box+BoxChild
+			this.f_NetworkComboBox = global::Gtk.ComboBox.NewText ();
+			this.f_NetworkComboBox.Name = "f_NetworkComboBox";
+			this.hbox1.Add (this.f_NetworkComboBox);
+			global::Gtk.Box.BoxChild w3 = ((global::Gtk.Box.BoxChild)(this.hbox1 [this.f_NetworkComboBox]));
+			w3.Position = 2;
+			w3.Expand = false;
+			w3.Fill = false;
+			// Container child hbox1.Gtk.Box+BoxChild
+			this.f_JoinButton = new global::Gtk.Button ();
+			this.f_JoinButton.CanFocus = true;
+			this.f_JoinButton.Name = "f_JoinButton";
+			this.f_JoinButton.UseUnderline = true;
+			this.f_JoinButton.Label = global::Mono.Unix.Catalog.GetString ("Join Chat");
+			this.hbox1.Add (this.f_JoinButton);
+			global::Gtk.Box.BoxChild w4 = ((global::Gtk.Box.BoxChild)(this.hbox1 [this.f_JoinButton]));
+			w4.Position = 3;
+			w4.Expand = false;
+			w4.Fill = false;
+			this.Add (this.hbox1);
+			if ((this.Child != null)) {
+				this.Child.ShowAll ();
+			}
+			this.Hide ();
+		}
+	}
+}
diff --git a/src/Frontend-GNOME/gtk-gui/gui.stetic b/src/Frontend-GNOME/gtk-gui/gui.stetic
index 763905f..7fb6c30 100644
--- a/src/Frontend-GNOME/gtk-gui/gui.stetic
+++ b/src/Frontend-GNOME/gtk-gui/gui.stetic
@@ -4262,4 +4262,66 @@ Click "Forward" to begin.</property>
       </widget>
     </child>
   </widget>
+  <widget class="Gtk.Bin" id="Smuxi.Frontend.Gnome.JoinWidget" design-size="393 36">
+    <property name="MemberName" />
+    <property name="Visible">False</property>
+    <child>
+      <widget class="Gtk.HBox" id="hbox1">
+        <property name="MemberName" />
+        <property name="Spacing">6</property>
+        <child>
+          <widget class="Gtk.Entry" id="f_ChatEntry">
+            <property name="MemberName" />
+            <property name="CanFocus">True</property>
+            <property name="IsEditable">True</property>
+            <property name="InvisibleChar">•</property>
+          </widget>
+          <packing>
+            <property name="Position">0</property>
+            <property name="AutoSize">True</property>
+          </packing>
+        </child>
+        <child>
+          <widget class="Gtk.Label" id="label1">
+            <property name="MemberName" />
+            <property name="LabelProp">@</property>
+          </widget>
+          <packing>
+            <property name="Position">1</property>
+            <property name="AutoSize">True</property>
+            <property name="Expand">False</property>
+            <property name="Fill">False</property>
+          </packing>
+        </child>
+        <child>
+          <widget class="Gtk.ComboBox" id="f_NetworkComboBox">
+            <property name="MemberName" />
+            <property name="IsTextCombo">True</property>
+            <property name="Items" translatable="yes" />
+          </widget>
+          <packing>
+            <property name="Position">2</property>
+            <property name="AutoSize">True</property>
+            <property name="Expand">False</property>
+            <property name="Fill">False</property>
+          </packing>
+        </child>
+        <child>
+          <widget class="Gtk.Button" id="f_JoinButton">
+            <property name="MemberName" />
+            <property name="CanFocus">True</property>
+            <property name="Type">TextOnly</property>
+            <property name="Label" translatable="yes">Join Chat</property>
+            <property name="UseUnderline">True</property>
+          </widget>
+          <packing>
+            <property name="Position">3</property>
+            <property name="AutoSize">True</property>
+            <property name="Expand">False</property>
+            <property name="Fill">False</property>
+          </packing>
+        </child>
+      </widget>
+    </child>
+  </widget>
 </stetic-interface>
\ No newline at end of file
diff --git a/src/Frontend-GNOME/smuxi-frontend-gnome.exe.config b/src/Frontend-GNOME/smuxi-frontend-gnome.exe.config
index d8a3872..528d6be 100644
--- a/src/Frontend-GNOME/smuxi-frontend-gnome.exe.config
+++ b/src/Frontend-GNOME/smuxi-frontend-gnome.exe.config
@@ -3,6 +3,7 @@
     <configSections>
         <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
     </configSections>
+    <dllmap os="!windows" dll="gtkspell.dll" target="libgtkspell.so.0" />
     <log4net>
         <root>
             <appender-ref ref="ConsoleAppender" />
diff --git a/src/Frontend-STFL/ChatView.cs b/src/Frontend-STFL/ChatView.cs
index 90a1949..74260e7 100644
--- a/src/Frontend-STFL/ChatView.cs
+++ b/src/Frontend-STFL/ChatView.cs
@@ -128,7 +128,12 @@ namespace Smuxi.Frontend.Stfl
 
         protected virtual void Dispose(bool disposing)
         {
-            f_MainWindow.Modify(f_WidgetName, "delete", null);
+            Trace.Call(disposing);
+
+            // do not make STFL calls from the finalizer thread!
+            if (disposing) {
+                f_MainWindow.Modify(f_WidgetName, "delete", null);
+            }
         }
 
         public virtual void Dispose()
diff --git a/src/Frontend-STFL/ChatViewManager.cs b/src/Frontend-STFL/ChatViewManager.cs
index 3f9ff7d..136c8f8 100644
--- a/src/Frontend-STFL/ChatViewManager.cs
+++ b/src/Frontend-STFL/ChatViewManager.cs
@@ -25,6 +25,7 @@ using System.Text;
 using System.Globalization;
 using System.Collections.Generic;
 using Mono.Unix;
+using Stfl;
 using Smuxi.Common;
 using Smuxi.Engine;
 using Smuxi.Frontend;
@@ -64,6 +65,7 @@ namespace Smuxi.Frontend.Stfl
                     _Logger.Debug("set_CurrentChat(): making " + value.ChatModel.ID + " visible");
 #endif
                     f_CurrentChat.IsVisible = true;
+                    UpdateTitle();
                 }
 
                 if (CurrentChatSwitched != null) {
@@ -157,10 +159,48 @@ namespace Smuxi.Frontend.Stfl
             foreach (var chat in f_ChatViewList) {
                 nav.AppendFormat("[{0}] ", chat.ChatModel.Name);
             }
-            nav.Remove(nav.Length - 1, 1);
+            if (nav.Length > 0) {
+                nav.Length--;
+            }
 
             f_MainWindow.NavigationLabel = nav.ToString();
         }
+
+        void UpdateTitle()
+        {
+            var chatView = CurrentChat;
+            if (chatView == null) {
+                return;
+            }
+
+            string title;
+            var chatModel = chatView.ChatModel;
+            string protocolStatus = null;
+            if (chatModel.ProtocolManager != null) {
+                protocolStatus = chatModel.ProtocolManager.ToString();
+            }
+            if (chatModel is SessionChatModel) {
+                title = String.Empty;
+            } else if (chatModel is ProtocolChatModel) {
+                title = protocolStatus;
+            } else {
+                title = String.Format("{0} @ {1}",
+                                      chatModel.Name,
+                                      protocolStatus);
+            }
+            if (!String.IsNullOrEmpty(title)) {
+                title += " - ";
+            }
+            title += "Smuxi";
+
+            f_MainWindow.TitleLabel = title;
+            // HACK: set xterm window title
+            if (StflApi.IsXterm) {
+                NcursesApi.endwin();
+                Console.WriteLine((char) 27 + "]0;{0}" + (char) 7, title);
+                NcursesApi.refresh();
+            }
+        }
     }
 
     public delegate void ChatSwitchedEventHandler(object sender, ChatSwitchedEventArgs e);
diff --git a/src/Frontend-STFL/Entry.cs b/src/Frontend-STFL/Entry.cs
index d597a77..a04e5dc 100644
--- a/src/Frontend-STFL/Entry.cs
+++ b/src/Frontend-STFL/Entry.cs
@@ -180,10 +180,17 @@ namespace Smuxi.Frontend.Stfl
             bool handled = false;
             if (cmd.IsCommand) {
                 switch (cmd.Command.ToLower()) {
+                    case "help":
+                        CommandHelp(cmd);
+                        break;
                     case "window":
                         CommandWindow(cmd);
                         handled = true;
                         break;
+                    case "exit":
+                        Frontend.Quit();
+                        handled = true;
+                        break;
                     case "gc":
 #if LOG4NET
                         _Logger.Debug("GC.Collect()");
@@ -198,6 +205,29 @@ namespace Smuxi.Frontend.Stfl
             return handled;
         }
 
+        void CommandHelp(CommandModel cmd)
+        {
+            var chatView = f_MainWindow.ChatViewManager.GetChat(cmd.Chat);
+            var builder = new MessageBuilder();
+            // TRANSLATOR: this line is used as a label / category for a
+            // list of commands below
+            builder.AppendHeader(_("Frontend Commands"));
+            chatView.AddMessage(builder.ToMessage());
+
+            string[] help = {
+                "help",
+                "window number",
+                "exit",
+            };
+
+            foreach (string line in help) {
+                builder = new MessageBuilder();
+                builder.AppendEventPrefix();
+                builder.AppendText(line);
+                chatView.AddMessage(builder.ToMessage());
+            }
+        }
+
         private void CommandWindow(CommandModel cmd)
         {
             int window;
@@ -304,5 +334,10 @@ namespace Smuxi.Frontend.Stfl
             Text = Text.Substring(0, Position) +
                    Text.Substring(Math.Min(Position + 1, Text.Length));
         }
+
+        static string _(string msg)
+        {
+            return Mono.Unix.Catalog.GetString(msg);
+        }
     }
 }
diff --git a/src/Frontend-STFL/Frontend.cs b/src/Frontend-STFL/Frontend.cs
index 2fd4677..7751506 100644
--- a/src/Frontend-STFL/Frontend.cs
+++ b/src/Frontend-STFL/Frontend.cs
@@ -255,6 +255,7 @@ namespace Smuxi.Frontend.Stfl
             }
             */
 
+            MainWindow.Reset();
             Environment.Exit(0);
         }
         
diff --git a/src/Frontend-STFL/MainWindow.cs b/src/Frontend-STFL/MainWindow.cs
index b489290..009aaea 100644
--- a/src/Frontend-STFL/MainWindow.cs
+++ b/src/Frontend-STFL/MainWindow.cs
@@ -69,11 +69,34 @@ namespace Smuxi.Frontend.Stfl
             }
         }
 
+        public bool ShowTitle {
+            get {
+                return this["title_hbox_display"] == "1";
+            }
+            set {
+                this["title_hbox_display"] = value ? "1" : "0";
+            }
+        }
+
+        public string TitleLabel {
+            get {
+                return this["title_label_text"];
+            }
+            set {
+                this["title_label_text"] = value;
+            }
+        }
+
         public MainWindow() : base(null, "MainWindow.stfl")
         {
             _ChatViewManager = new ChatViewManager(this);
             _Entry = new Entry(this, _ChatViewManager);
             _UI = new StflUI(_ChatViewManager);
+
+            if (StflApi.IsXterm) {
+                ShowTitle = false;
+            }
+
     	    Assembly asm = Assembly.GetExecutingAssembly();
     	    _ChatViewManager.Load(asm);
     	}
diff --git a/src/Frontend-STFL/MainWindow.stfl b/src/Frontend-STFL/MainWindow.stfl
index 5ecc557..a9fdeec 100644
--- a/src/Frontend-STFL/MainWindow.stfl
+++ b/src/Frontend-STFL/MainWindow.stfl
@@ -1,6 +1,13 @@
 vbox
   autobind:0
+  hbox[title_hbox]
+    .display[title_hbox_display]:1
+    .expand:0 .height:1
+    @style_normal:fg=white,bg=blue
+    label[title_label]
+      text[title_label_text]:"Smuxi"
   hbox[menu_hbox]
+    .display:0
     .expand:0 .height:1
     @style_normal:fg=white,bg=blue
     label
diff --git a/src/Frontend-STFL/Makefile.in b/src/Frontend-STFL/Makefile.in
index 902c7a8..9645f2c 100644
--- a/src/Frontend-STFL/Makefile.in
+++ b/src/Frontend-STFL/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.2 from Makefile.am.
+# Makefile.in generated by automake 1.11.5 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -17,6 +17,23 @@
 
 
 VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -91,6 +108,11 @@ RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
 	install-pdf-recursive install-ps-recursive install-recursive \
 	installcheck-recursive installdirs-recursive pdf-recursive \
 	ps-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
 DATA = $(linuxdesktopapplications_DATA) $(linuxpkgconfig_DATA) \
 	$(programfiles_DATA) $(programfilesicons_DATA)
 RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
@@ -130,6 +152,7 @@ am__relativize = \
 ACLOCAL = @ACLOCAL@
 ALL_LINGUAS = @ALL_LINGUAS@
 AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
@@ -189,6 +212,8 @@ GLIB_SHARP_20_LIBS = @GLIB_SHARP_20_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
 GREP = @GREP@
+GTKSPELL_CFLAGS = @GTKSPELL_CFLAGS@
+GTKSPELL_LIBS = @GTKSPELL_LIBS@
 GTK_SHARP_20_CFLAGS = @GTK_SHARP_20_CFLAGS@
 GTK_SHARP_20_LIBS = @GTK_SHARP_20_LIBS@
 INDICATE_SHARP_CFLAGS = @INDICATE_SHARP_CFLAGS@
@@ -203,6 +228,10 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
 INTLTOOL_MERGE = @INTLTOOL_MERGE@
 INTLTOOL_PERL = @INTLTOOL_PERL@
 INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@
+INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@
+INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@
+INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@
 INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
@@ -313,6 +342,8 @@ htmldir = @htmldir@
 includedir = @includedir@
 infodir = @infodir@
 install_sh = @install_sh@
+intltool__v_merge_options_ = @intltool__v_merge_options_@
+intltool__v_merge_options_0 = @intltool__v_merge_options_0@
 libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
@@ -492,6 +523,7 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
 	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
 	esac;
+$(top_srcdir)/Makefile.include:
 
 $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
@@ -505,8 +537,11 @@ smuxi-frontend-stfl: $(top_builddir)/config.status $(srcdir)/smuxi-frontend-stfl
 	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
 install-binSCRIPTS: $(bin_SCRIPTS)
 	@$(NORMAL_INSTALL)
-	test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
 	@list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
@@ -537,8 +572,11 @@ uninstall-binSCRIPTS:
 	dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir)
 install-pkgappSCRIPTS: $(pkgapp_SCRIPTS)
 	@$(NORMAL_INSTALL)
-	test -z "$(pkgappdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgappdir)"
 	@list='$(pkgapp_SCRIPTS)'; test -n "$(pkgappdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(pkgappdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(pkgappdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
@@ -575,8 +613,11 @@ clean-libtool:
 	-rm -rf .libs _libs
 install-linuxdesktopapplicationsDATA: $(linuxdesktopapplications_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(linuxdesktopapplicationsdir)" || $(MKDIR_P) "$(DESTDIR)$(linuxdesktopapplicationsdir)"
 	@list='$(linuxdesktopapplications_DATA)'; test -n "$(linuxdesktopapplicationsdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(linuxdesktopapplicationsdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(linuxdesktopapplicationsdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -593,8 +634,11 @@ uninstall-linuxdesktopapplicationsDATA:
 	dir='$(DESTDIR)$(linuxdesktopapplicationsdir)'; $(am__uninstall_files_from_dir)
 install-linuxpkgconfigDATA: $(linuxpkgconfig_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(linuxpkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(linuxpkgconfigdir)"
 	@list='$(linuxpkgconfig_DATA)'; test -n "$(linuxpkgconfigdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(linuxpkgconfigdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(linuxpkgconfigdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -611,8 +655,11 @@ uninstall-linuxpkgconfigDATA:
 	dir='$(DESTDIR)$(linuxpkgconfigdir)'; $(am__uninstall_files_from_dir)
 install-programfilesDATA: $(programfiles_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(programfilesdir)" || $(MKDIR_P) "$(DESTDIR)$(programfilesdir)"
 	@list='$(programfiles_DATA)'; test -n "$(programfilesdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(programfilesdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(programfilesdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -629,8 +676,11 @@ uninstall-programfilesDATA:
 	dir='$(DESTDIR)$(programfilesdir)'; $(am__uninstall_files_from_dir)
 install-programfilesiconsDATA: $(programfilesicons_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(programfilesiconsdir)" || $(MKDIR_P) "$(DESTDIR)$(programfilesiconsdir)"
 	@list='$(programfilesicons_DATA)'; test -n "$(programfilesiconsdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(programfilesiconsdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(programfilesiconsdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -813,13 +863,10 @@ distdir: $(DISTFILES)
 	done
 	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
 	  if test "$$subdir" = .; then :; else \
-	    test -d "$(distdir)/$$subdir" \
-	    || $(MKDIR_P) "$(distdir)/$$subdir" \
-	    || exit 1; \
-	  fi; \
-	done
-	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
 	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
 	    $(am__relativize); \
 	    new_distdir=$$reldir; \
diff --git a/src/Frontend-STFL/STFL/Form.cs b/src/Frontend-STFL/STFL/Form.cs
index 4b38744..f202d53 100644
--- a/src/Frontend-STFL/STFL/Form.cs
+++ b/src/Frontend-STFL/STFL/Form.cs
@@ -37,15 +37,19 @@ namespace Stfl
     public class Form : IDisposable
     {
         IntPtr f_Handle;
-        
+
+        bool Disposed { get; set; }
+
         public event KeyPressedEventHandler KeyPressed;
         public event EventHandler<EventReceivedEventArgs> EventReceived;
         
         public string this[string name] {
             get {
+                CheckDisposed();
                 return StflApi.stfl_get(f_Handle, name);
             }
             set {
+                CheckDisposed();
                 StflApi.stfl_set(f_Handle, name, value);
             }
         }
@@ -86,6 +90,11 @@ namespace Stfl
 
         protected virtual void Dispose(bool disposing)
         {
+            var disposed = Disposed;
+            if (disposed) {
+                return;
+            }
+
             if (f_Handle != IntPtr.Zero) {
                 StflApi.stfl_free(f_Handle);
             }
@@ -99,6 +108,7 @@ namespace Stfl
 
         public virtual void Run(int timeout)
         {
+            CheckDisposed();
             string @event = StflApi.stfl_run(f_Handle, timeout);
             ProcessEvent(@event);
         }
@@ -110,14 +120,23 @@ namespace Stfl
 
         public void Modify(string name, string mode, string text)
         {
+            CheckDisposed();
             StflApi.stfl_modify(f_Handle, name, mode, text);
         }
 
         public string Dump(string name, string prefix, int focus)
         {
+            CheckDisposed();
             return StflApi.stfl_dump(f_Handle, name, prefix, focus);
         }
 
+        public void Reset()
+        {
+            CheckDisposed();
+            Dispose();
+            StflApi.stfl_reset();
+        }
+
         protected virtual void ProcessEvent(string @event)
         {
             OnEventReceived(new EventReceivedEventArgs(@event));
@@ -135,6 +154,7 @@ namespace Stfl
 
         protected virtual void ProcessKey(string key)
         {
+            CheckDisposed();
             string focus = StflApi.stfl_get_focus(f_Handle);
             OnKeyPressed(new KeyPressedEventArgs(key, focus));
         }
@@ -145,5 +165,13 @@ namespace Stfl
                 KeyPressed(this, e);
             }
         }
+
+        void CheckDisposed()
+        {
+            if (!Disposed) {
+                return;
+            }
+            throw new ObjectDisposedException(GetType().Name);
+        }
     }
 }
diff --git a/src/Frontend-STFL/STFL/Makefile.in b/src/Frontend-STFL/STFL/Makefile.in
index ea6f0ec..9b3e69b 100644
--- a/src/Frontend-STFL/STFL/Makefile.in
+++ b/src/Frontend-STFL/STFL/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.2 from Makefile.am.
+# Makefile.in generated by automake 1.11.5 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -15,6 +15,23 @@
 
 @SET_MAKE@
 VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -46,10 +63,16 @@ CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
 SOURCES =
 DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 ALL_LINGUAS = @ALL_LINGUAS@
 AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
@@ -109,6 +132,8 @@ GLIB_SHARP_20_LIBS = @GLIB_SHARP_20_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
 GREP = @GREP@
+GTKSPELL_CFLAGS = @GTKSPELL_CFLAGS@
+GTKSPELL_LIBS = @GTKSPELL_LIBS@
 GTK_SHARP_20_CFLAGS = @GTK_SHARP_20_CFLAGS@
 GTK_SHARP_20_LIBS = @GTK_SHARP_20_LIBS@
 INDICATE_SHARP_CFLAGS = @INDICATE_SHARP_CFLAGS@
@@ -123,6 +148,10 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
 INTLTOOL_MERGE = @INTLTOOL_MERGE@
 INTLTOOL_PERL = @INTLTOOL_PERL@
 INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@
+INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@
+INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@
+INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@
 INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
@@ -233,6 +262,8 @@ htmldir = @htmldir@
 includedir = @includedir@
 infodir = @infodir@
 install_sh = @install_sh@
+intltool__v_merge_options_ = @intltool__v_merge_options_@
+intltool__v_merge_options_0 = @intltool__v_merge_options_0@
 libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
diff --git a/src/Frontend-STFL/STFL/NcursesApi.cs b/src/Frontend-STFL/STFL/NcursesApi.cs
index 4a9e0f1..65a932d 100644
--- a/src/Frontend-STFL/STFL/NcursesApi.cs
+++ b/src/Frontend-STFL/STFL/NcursesApi.cs
@@ -32,5 +32,11 @@ namespace Stfl
 
         [DllImport("ncurses")]
         public static extern void nocbreak();
+
+        [DllImport("ncurses")]
+        public static extern void endwin();
+
+        [DllImport("ncurses")]
+        public static extern void refresh();
     }
 }
diff --git a/src/Frontend-STFL/STFL/StflApi.cs b/src/Frontend-STFL/STFL/StflApi.cs
index 4522e7c..7ff8b2f 100644
--- a/src/Frontend-STFL/STFL/StflApi.cs
+++ b/src/Frontend-STFL/STFL/StflApi.cs
@@ -33,7 +33,7 @@ namespace Stfl
 #if LOG4NET
         private static readonly log4net.ILog f_Logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
 #endif
-        static bool IsXterm { get; set; }
+        public static bool IsXterm { get; private set; }
         static bool IsUtf8Locale { get; set; }
         static string EscapeLessThanCharacter  { get; set; }
         static string EscapeGreaterThanCharacter { get; set; }
diff --git a/src/Frontend-SWF/Makefile.in b/src/Frontend-SWF/Makefile.in
index d8be434..9657bbe 100644
--- a/src/Frontend-SWF/Makefile.in
+++ b/src/Frontend-SWF/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.2 from Makefile.am.
+# Makefile.in generated by automake 1.11.5 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -17,6 +17,23 @@
 
 
 VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -83,12 +100,18 @@ am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(pkgappdir)" \
 SCRIPTS = $(bin_SCRIPTS) $(pkgapp_SCRIPTS)
 SOURCES =
 DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
 DATA = $(linuxdesktopapplications_DATA) $(linuxpkgconfig_DATA) \
 	$(programfiles_DATA) $(programfilesicons_DATA)
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 ALL_LINGUAS = @ALL_LINGUAS@
 AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
@@ -148,6 +171,8 @@ GLIB_SHARP_20_LIBS = @GLIB_SHARP_20_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
 GREP = @GREP@
+GTKSPELL_CFLAGS = @GTKSPELL_CFLAGS@
+GTKSPELL_LIBS = @GTKSPELL_LIBS@
 GTK_SHARP_20_CFLAGS = @GTK_SHARP_20_CFLAGS@
 GTK_SHARP_20_LIBS = @GTK_SHARP_20_LIBS@
 INDICATE_SHARP_CFLAGS = @INDICATE_SHARP_CFLAGS@
@@ -162,6 +187,10 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
 INTLTOOL_MERGE = @INTLTOOL_MERGE@
 INTLTOOL_PERL = @INTLTOOL_PERL@
 INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@
+INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@
+INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@
+INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@
 INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
@@ -272,6 +301,8 @@ htmldir = @htmldir@
 includedir = @includedir@
 infodir = @infodir@
 install_sh = @install_sh@
+intltool__v_merge_options_ = @intltool__v_merge_options_@
+intltool__v_merge_options_0 = @intltool__v_merge_options_0@
 libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
@@ -465,6 +496,7 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
 	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
 	esac;
+$(top_srcdir)/Makefile.include:
 
 $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
@@ -478,8 +510,11 @@ smuxi-frontend-swf: $(top_builddir)/config.status $(srcdir)/smuxi-frontend-swf.i
 	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
 install-binSCRIPTS: $(bin_SCRIPTS)
 	@$(NORMAL_INSTALL)
-	test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
 	@list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
@@ -510,8 +545,11 @@ uninstall-binSCRIPTS:
 	dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir)
 install-pkgappSCRIPTS: $(pkgapp_SCRIPTS)
 	@$(NORMAL_INSTALL)
-	test -z "$(pkgappdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgappdir)"
 	@list='$(pkgapp_SCRIPTS)'; test -n "$(pkgappdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(pkgappdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(pkgappdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
@@ -548,8 +586,11 @@ clean-libtool:
 	-rm -rf .libs _libs
 install-linuxdesktopapplicationsDATA: $(linuxdesktopapplications_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(linuxdesktopapplicationsdir)" || $(MKDIR_P) "$(DESTDIR)$(linuxdesktopapplicationsdir)"
 	@list='$(linuxdesktopapplications_DATA)'; test -n "$(linuxdesktopapplicationsdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(linuxdesktopapplicationsdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(linuxdesktopapplicationsdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -566,8 +607,11 @@ uninstall-linuxdesktopapplicationsDATA:
 	dir='$(DESTDIR)$(linuxdesktopapplicationsdir)'; $(am__uninstall_files_from_dir)
 install-linuxpkgconfigDATA: $(linuxpkgconfig_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(linuxpkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(linuxpkgconfigdir)"
 	@list='$(linuxpkgconfig_DATA)'; test -n "$(linuxpkgconfigdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(linuxpkgconfigdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(linuxpkgconfigdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -584,8 +628,11 @@ uninstall-linuxpkgconfigDATA:
 	dir='$(DESTDIR)$(linuxpkgconfigdir)'; $(am__uninstall_files_from_dir)
 install-programfilesDATA: $(programfiles_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(programfilesdir)" || $(MKDIR_P) "$(DESTDIR)$(programfilesdir)"
 	@list='$(programfiles_DATA)'; test -n "$(programfilesdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(programfilesdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(programfilesdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -602,8 +649,11 @@ uninstall-programfilesDATA:
 	dir='$(DESTDIR)$(programfilesdir)'; $(am__uninstall_files_from_dir)
 install-programfilesiconsDATA: $(programfilesicons_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(programfilesiconsdir)" || $(MKDIR_P) "$(DESTDIR)$(programfilesiconsdir)"
 	@list='$(programfilesicons_DATA)'; test -n "$(programfilesiconsdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(programfilesiconsdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(programfilesiconsdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
diff --git a/src/Frontend-Test/Makefile.in b/src/Frontend-Test/Makefile.in
index bc10469..252d424 100644
--- a/src/Frontend-Test/Makefile.in
+++ b/src/Frontend-Test/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.2 from Makefile.am.
+# Makefile.in generated by automake 1.11.5 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -17,6 +17,23 @@
 
 
 VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -83,12 +100,18 @@ am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(pkgappdir)" \
 SCRIPTS = $(bin_SCRIPTS) $(pkgapp_SCRIPTS)
 SOURCES =
 DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
 DATA = $(linuxdesktopapplications_DATA) $(linuxpkgconfig_DATA) \
 	$(programfiles_DATA) $(programfilesicons_DATA)
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 ALL_LINGUAS = @ALL_LINGUAS@
 AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
@@ -148,6 +171,8 @@ GLIB_SHARP_20_LIBS = @GLIB_SHARP_20_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
 GREP = @GREP@
+GTKSPELL_CFLAGS = @GTKSPELL_CFLAGS@
+GTKSPELL_LIBS = @GTKSPELL_LIBS@
 GTK_SHARP_20_CFLAGS = @GTK_SHARP_20_CFLAGS@
 GTK_SHARP_20_LIBS = @GTK_SHARP_20_LIBS@
 INDICATE_SHARP_CFLAGS = @INDICATE_SHARP_CFLAGS@
@@ -162,6 +187,10 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
 INTLTOOL_MERGE = @INTLTOOL_MERGE@
 INTLTOOL_PERL = @INTLTOOL_PERL@
 INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@
+INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@
+INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@
+INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@
 INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
@@ -272,6 +301,8 @@ htmldir = @htmldir@
 includedir = @includedir@
 infodir = @infodir@
 install_sh = @install_sh@
+intltool__v_merge_options_ = @intltool__v_merge_options_@
+intltool__v_merge_options_0 = @intltool__v_merge_options_0@
 libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
@@ -439,6 +470,7 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
 	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
 	esac;
+$(top_srcdir)/Makefile.include:
 
 $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
@@ -452,8 +484,11 @@ smuxi-frontend-test: $(top_builddir)/config.status $(srcdir)/smuxi-frontend-test
 	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
 install-binSCRIPTS: $(bin_SCRIPTS)
 	@$(NORMAL_INSTALL)
-	test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
 	@list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
@@ -484,8 +519,11 @@ uninstall-binSCRIPTS:
 	dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir)
 install-pkgappSCRIPTS: $(pkgapp_SCRIPTS)
 	@$(NORMAL_INSTALL)
-	test -z "$(pkgappdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgappdir)"
 	@list='$(pkgapp_SCRIPTS)'; test -n "$(pkgappdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(pkgappdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(pkgappdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
@@ -522,8 +560,11 @@ clean-libtool:
 	-rm -rf .libs _libs
 install-linuxdesktopapplicationsDATA: $(linuxdesktopapplications_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(linuxdesktopapplicationsdir)" || $(MKDIR_P) "$(DESTDIR)$(linuxdesktopapplicationsdir)"
 	@list='$(linuxdesktopapplications_DATA)'; test -n "$(linuxdesktopapplicationsdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(linuxdesktopapplicationsdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(linuxdesktopapplicationsdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -540,8 +581,11 @@ uninstall-linuxdesktopapplicationsDATA:
 	dir='$(DESTDIR)$(linuxdesktopapplicationsdir)'; $(am__uninstall_files_from_dir)
 install-linuxpkgconfigDATA: $(linuxpkgconfig_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(linuxpkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(linuxpkgconfigdir)"
 	@list='$(linuxpkgconfig_DATA)'; test -n "$(linuxpkgconfigdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(linuxpkgconfigdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(linuxpkgconfigdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -558,8 +602,11 @@ uninstall-linuxpkgconfigDATA:
 	dir='$(DESTDIR)$(linuxpkgconfigdir)'; $(am__uninstall_files_from_dir)
 install-programfilesDATA: $(programfiles_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(programfilesdir)" || $(MKDIR_P) "$(DESTDIR)$(programfilesdir)"
 	@list='$(programfiles_DATA)'; test -n "$(programfilesdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(programfilesdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(programfilesdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -576,8 +623,11 @@ uninstall-programfilesDATA:
 	dir='$(DESTDIR)$(programfilesdir)'; $(am__uninstall_files_from_dir)
 install-programfilesiconsDATA: $(programfilesicons_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(programfilesiconsdir)" || $(MKDIR_P) "$(DESTDIR)$(programfilesiconsdir)"
 	@list='$(programfilesicons_DATA)'; test -n "$(programfilesiconsdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(programfilesiconsdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(programfilesiconsdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
diff --git a/src/Frontend/ChatViewManagerBase.cs b/src/Frontend/ChatViewManagerBase.cs
index 45d2fba..3bd5121 100644
--- a/src/Frontend/ChatViewManagerBase.cs
+++ b/src/Frontend/ChatViewManagerBase.cs
@@ -72,9 +72,12 @@ namespace Smuxi.Frontend
         {
             Trace.Call(chat, parameters);
 
+            var protocolManagerType = chat.ProtocolManager == null ?
+                                        null : chat.ProtocolManager.GetType();
+
             // REMOTING CALL 1 + 2
-            return CreateChatView(chat, chat.ChatType,
-                                  chat.ProtocolManager.GetType(), parameters);
+            return CreateChatView(chat, chat.ChatType, protocolManagerType,
+                                  parameters);
         }
 
         protected IChatView CreateChatView(ChatModel chat,
diff --git a/src/Frontend/Makefile.in b/src/Frontend/Makefile.in
index c762296..ae69fac 100644
--- a/src/Frontend/Makefile.in
+++ b/src/Frontend/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.2 from Makefile.am.
+# Makefile.in generated by automake 1.11.5 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -17,6 +17,23 @@
 
 
 VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -83,12 +100,18 @@ am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(pkgappdir)" \
 SCRIPTS = $(bin_SCRIPTS) $(pkgapp_SCRIPTS)
 SOURCES =
 DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
 DATA = $(linuxdesktopapplications_DATA) $(linuxpkgconfig_DATA) \
 	$(programfiles_DATA) $(programfilesicons_DATA)
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 ALL_LINGUAS = @ALL_LINGUAS@
 AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
@@ -148,6 +171,8 @@ GLIB_SHARP_20_LIBS = @GLIB_SHARP_20_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
 GREP = @GREP@
+GTKSPELL_CFLAGS = @GTKSPELL_CFLAGS@
+GTKSPELL_LIBS = @GTKSPELL_LIBS@
 GTK_SHARP_20_CFLAGS = @GTK_SHARP_20_CFLAGS@
 GTK_SHARP_20_LIBS = @GTK_SHARP_20_LIBS@
 INDICATE_SHARP_CFLAGS = @INDICATE_SHARP_CFLAGS@
@@ -162,6 +187,10 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
 INTLTOOL_MERGE = @INTLTOOL_MERGE@
 INTLTOOL_PERL = @INTLTOOL_PERL@
 INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@
+INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@
+INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@
+INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@
 INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
@@ -272,6 +301,8 @@ htmldir = @htmldir@
 includedir = @includedir@
 infodir = @infodir@
 install_sh = @install_sh@
+intltool__v_merge_options_ = @intltool__v_merge_options_@
+intltool__v_merge_options_0 = @intltool__v_merge_options_0@
 libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
@@ -446,6 +477,7 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
 	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
 	esac;
+$(top_srcdir)/Makefile.include:
 
 $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
@@ -459,8 +491,11 @@ smuxi-frontend.pc: $(top_builddir)/config.status $(srcdir)/smuxi-frontend.pc.in
 	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
 install-binSCRIPTS: $(bin_SCRIPTS)
 	@$(NORMAL_INSTALL)
-	test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
 	@list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
@@ -491,8 +526,11 @@ uninstall-binSCRIPTS:
 	dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir)
 install-pkgappSCRIPTS: $(pkgapp_SCRIPTS)
 	@$(NORMAL_INSTALL)
-	test -z "$(pkgappdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgappdir)"
 	@list='$(pkgapp_SCRIPTS)'; test -n "$(pkgappdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(pkgappdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(pkgappdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
@@ -529,8 +567,11 @@ clean-libtool:
 	-rm -rf .libs _libs
 install-linuxdesktopapplicationsDATA: $(linuxdesktopapplications_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(linuxdesktopapplicationsdir)" || $(MKDIR_P) "$(DESTDIR)$(linuxdesktopapplicationsdir)"
 	@list='$(linuxdesktopapplications_DATA)'; test -n "$(linuxdesktopapplicationsdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(linuxdesktopapplicationsdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(linuxdesktopapplicationsdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -547,8 +588,11 @@ uninstall-linuxdesktopapplicationsDATA:
 	dir='$(DESTDIR)$(linuxdesktopapplicationsdir)'; $(am__uninstall_files_from_dir)
 install-linuxpkgconfigDATA: $(linuxpkgconfig_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(linuxpkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(linuxpkgconfigdir)"
 	@list='$(linuxpkgconfig_DATA)'; test -n "$(linuxpkgconfigdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(linuxpkgconfigdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(linuxpkgconfigdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -565,8 +609,11 @@ uninstall-linuxpkgconfigDATA:
 	dir='$(DESTDIR)$(linuxpkgconfigdir)'; $(am__uninstall_files_from_dir)
 install-programfilesDATA: $(programfiles_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(programfilesdir)" || $(MKDIR_P) "$(DESTDIR)$(programfilesdir)"
 	@list='$(programfiles_DATA)'; test -n "$(programfilesdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(programfilesdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(programfilesdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -583,8 +630,11 @@ uninstall-programfilesDATA:
 	dir='$(DESTDIR)$(programfilesdir)'; $(am__uninstall_files_from_dir)
 install-programfilesiconsDATA: $(programfilesicons_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(programfilesiconsdir)" || $(MKDIR_P) "$(DESTDIR)$(programfilesiconsdir)"
 	@list='$(programfilesicons_DATA)'; test -n "$(programfilesiconsdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(programfilesiconsdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(programfilesiconsdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
diff --git a/src/Makefile.in b/src/Makefile.in
index 542bd27..019cd48 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.2 from Makefile.am.
+# Makefile.in generated by automake 1.11.5 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -15,6 +15,23 @@
 
 @SET_MAKE@
 VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -54,6 +71,11 @@ RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
 	install-pdf-recursive install-ps-recursive install-recursive \
 	installcheck-recursive installdirs-recursive pdf-recursive \
 	ps-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
 RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
   distclean-recursive maintainer-clean-recursive
 AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
@@ -94,6 +116,7 @@ am__relativize = \
 ACLOCAL = @ACLOCAL@
 ALL_LINGUAS = @ALL_LINGUAS@
 AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
@@ -153,6 +176,8 @@ GLIB_SHARP_20_LIBS = @GLIB_SHARP_20_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
 GREP = @GREP@
+GTKSPELL_CFLAGS = @GTKSPELL_CFLAGS@
+GTKSPELL_LIBS = @GTKSPELL_LIBS@
 GTK_SHARP_20_CFLAGS = @GTK_SHARP_20_CFLAGS@
 GTK_SHARP_20_LIBS = @GTK_SHARP_20_LIBS@
 INDICATE_SHARP_CFLAGS = @INDICATE_SHARP_CFLAGS@
@@ -167,6 +192,10 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
 INTLTOOL_MERGE = @INTLTOOL_MERGE@
 INTLTOOL_PERL = @INTLTOOL_PERL@
 INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@
+INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@
+INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@
+INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@
 INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
@@ -277,6 +306,8 @@ htmldir = @htmldir@
 includedir = @includedir@
 infodir = @infodir@
 install_sh = @install_sh@
+intltool__v_merge_options_ = @intltool__v_merge_options_@
+intltool__v_merge_options_0 = @intltool__v_merge_options_0@
 libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
@@ -545,13 +576,10 @@ distdir: $(DISTFILES)
 	done
 	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
 	  if test "$$subdir" = .; then :; else \
-	    test -d "$(distdir)/$$subdir" \
-	    || $(MKDIR_P) "$(distdir)/$$subdir" \
-	    || exit 1; \
-	  fi; \
-	done
-	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
 	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
 	    $(am__relativize); \
 	    new_distdir=$$reldir; \
diff --git a/src/Server/Makefile.in b/src/Server/Makefile.in
index 1706af7..cb41b60 100644
--- a/src/Server/Makefile.in
+++ b/src/Server/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.2 from Makefile.am.
+# Makefile.in generated by automake 1.11.5 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -17,6 +17,23 @@
 
 
 VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -85,12 +102,18 @@ am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(pkgappdir)" \
 SCRIPTS = $(bin_SCRIPTS) $(pkgapp_SCRIPTS)
 SOURCES =
 DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
 DATA = $(linuxdesktopapplications_DATA) $(linuxpkgconfig_DATA) \
 	$(programfiles_DATA) $(programfilesicons_DATA)
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 ALL_LINGUAS = @ALL_LINGUAS@
 AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
@@ -150,6 +173,8 @@ GLIB_SHARP_20_LIBS = @GLIB_SHARP_20_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
 GREP = @GREP@
+GTKSPELL_CFLAGS = @GTKSPELL_CFLAGS@
+GTKSPELL_LIBS = @GTKSPELL_LIBS@
 GTK_SHARP_20_CFLAGS = @GTK_SHARP_20_CFLAGS@
 GTK_SHARP_20_LIBS = @GTK_SHARP_20_LIBS@
 INDICATE_SHARP_CFLAGS = @INDICATE_SHARP_CFLAGS@
@@ -164,6 +189,10 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
 INTLTOOL_MERGE = @INTLTOOL_MERGE@
 INTLTOOL_PERL = @INTLTOOL_PERL@
 INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@
+INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@
+INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@
+INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@
 INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
@@ -274,6 +303,8 @@ htmldir = @htmldir@
 includedir = @includedir@
 infodir = @infodir@
 install_sh = @install_sh@
+intltool__v_merge_options_ = @intltool__v_merge_options_@
+intltool__v_merge_options_0 = @intltool__v_merge_options_0@
 libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
@@ -445,6 +476,7 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
 	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
 	esac;
+$(top_srcdir)/Makefile.include:
 
 $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
@@ -458,8 +490,11 @@ smuxi-server: $(top_builddir)/config.status $(srcdir)/smuxi-server.in
 	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
 install-binSCRIPTS: $(bin_SCRIPTS)
 	@$(NORMAL_INSTALL)
-	test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
 	@list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
@@ -490,8 +525,11 @@ uninstall-binSCRIPTS:
 	dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir)
 install-pkgappSCRIPTS: $(pkgapp_SCRIPTS)
 	@$(NORMAL_INSTALL)
-	test -z "$(pkgappdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgappdir)"
 	@list='$(pkgapp_SCRIPTS)'; test -n "$(pkgappdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(pkgappdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(pkgappdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
@@ -528,8 +566,11 @@ clean-libtool:
 	-rm -rf .libs _libs
 install-linuxdesktopapplicationsDATA: $(linuxdesktopapplications_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(linuxdesktopapplicationsdir)" || $(MKDIR_P) "$(DESTDIR)$(linuxdesktopapplicationsdir)"
 	@list='$(linuxdesktopapplications_DATA)'; test -n "$(linuxdesktopapplicationsdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(linuxdesktopapplicationsdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(linuxdesktopapplicationsdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -546,8 +587,11 @@ uninstall-linuxdesktopapplicationsDATA:
 	dir='$(DESTDIR)$(linuxdesktopapplicationsdir)'; $(am__uninstall_files_from_dir)
 install-linuxpkgconfigDATA: $(linuxpkgconfig_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(linuxpkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(linuxpkgconfigdir)"
 	@list='$(linuxpkgconfig_DATA)'; test -n "$(linuxpkgconfigdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(linuxpkgconfigdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(linuxpkgconfigdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -564,8 +608,11 @@ uninstall-linuxpkgconfigDATA:
 	dir='$(DESTDIR)$(linuxpkgconfigdir)'; $(am__uninstall_files_from_dir)
 install-programfilesDATA: $(programfiles_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(programfilesdir)" || $(MKDIR_P) "$(DESTDIR)$(programfilesdir)"
 	@list='$(programfiles_DATA)'; test -n "$(programfilesdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(programfilesdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(programfilesdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -582,8 +629,11 @@ uninstall-programfilesDATA:
 	dir='$(DESTDIR)$(programfilesdir)'; $(am__uninstall_files_from_dir)
 install-programfilesiconsDATA: $(programfilesicons_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(programfilesiconsdir)" || $(MKDIR_P) "$(DESTDIR)$(programfilesiconsdir)"
 	@list='$(programfilesicons_DATA)'; test -n "$(programfilesiconsdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(programfilesiconsdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(programfilesiconsdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \

-- 
smuxi



More information about the Pkg-cli-apps-commits mailing list