[SCM] idjc/master: Imported Upstream version 0.8.16

sramacher at users.alioth.debian.org sramacher at users.alioth.debian.org
Sun May 15 09:16:42 UTC 2016


The following commit has been merged in the master branch:
commit 681baac459107aadd1d02e4d9a67d9b25bc0ac32
Author: Sebastian Ramacher <sramacher at debian.org>
Date:   Sun May 15 11:01:05 2016 +0200

    Imported Upstream version 0.8.16

diff --git a/ChangeLog b/ChangeLog
index 3c1efef..c4df1b9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,41 @@
+* Changes in version 0.8.16 *
+
+VoIP documentation update for Skype IDJC integration.
+
+Copyright year bump.
+
+Clicking play while playing results in the playlist window scrolling to show the current track.
+
+Changed AAC+ support to use libfdk via ffmpeg rather than libaacplus (upstream support is scheduled for removal)
+
+Added a button to permit the user to suspend the adding of tracks. It appears 4 seconds into the process.
+
+Enabled drag and drop for multiple folders of audio.
+
+Fixed Random Hop traceback triggered by an empty opposite playlist.
+
+Added Spanish translation with credit to: Blank Frank <frank at rhizomatica.org>
+
+Fixed translation regression in Playlist Mode.
+
+Added WebM streaming and recording.
+
+Fix for listener stats.
+
+Added TLS server login support.
+
+Libshout fork (libshout-idjc) upgraded to upstream version 2.4.1
+
+Fixed LAME tag ReplayGain metadata collection for newer versions of Mutagen.
+
+Updated avcodec encoder and decoder to silence deprecation warnings.   
+
+Fixed the return value check of call to av_samples_alloc.
+
+Playlist block size and finish time now also appears when using the cue up and manual playlist modes. 
+
+Fix for playlist modes 'Fade Over' and 'Random Hop' so that they work with fade settings other than 'None'
+
 * Changes in version 0.8.15 *
 
 Documentation update for VoIP.
diff --git a/INSTALL b/INSTALL
index 007e939..2099840 100644
--- a/INSTALL
+++ b/INSTALL
@@ -12,8 +12,8 @@ without warranty of any kind.
 Basic Installation
 ==================
 
-   Briefly, the shell commands `./configure; make; make install' should
-configure, build, and install this package.  The following
+   Briefly, the shell command `./configure && make && make install'
+should configure, build, and install this package.  The following
 more-detailed instructions are generic; see the `README' file for
 instructions specific to this package.  Some packages provide this
 `INSTALL' file but do not implement all of the features documented
diff --git a/Makefile.in b/Makefile.in
index 6126cf9..c156db6 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.13.4 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
 
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -16,7 +16,17 @@
 
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
 am__make_running_with_option = \
   case $${target_option-} in \
       ?) ;; \
@@ -81,14 +91,6 @@ build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
 subdir = .
-DIST_COMMON = INSTALL NEWS README AUTHORS ChangeLog \
-	$(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-	$(top_srcdir)/configure $(am__configure_deps) \
-	$(srcdir)/config.h.in $(srcdir)/idjc.in.in \
-	$(srcdir)/idjc.desktop.in.in $(srcdir)/idjc.appdata.xml.in.in \
-	ABOUT-NLS $(dist_noinst_SCRIPTS) $(dist_noinst_DATA) COPYING \
-	compile config.guess config.rpath config.sub depcomp \
-	install-sh missing py-compile ltmain.sh
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
 	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
@@ -100,6 +102,9 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
 	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \
+	$(am__configure_deps) $(dist_noinst_SCRIPTS) \
+	$(dist_noinst_DATA) $(am__DIST_COMMON)
 am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
  configure.lineno config.status.lineno
 mkinstalldirs = $(install_sh) -d
@@ -197,6 +202,11 @@ ETAGS = etags
 CTAGS = ctags
 CSCOPE = cscope
 DIST_SUBDIRS = $(SUBDIRS)
+am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in \
+	$(srcdir)/idjc.appdata.xml.in.in $(srcdir)/idjc.desktop.in.in \
+	$(srcdir)/idjc.in.in ABOUT-NLS AUTHORS COPYING ChangeLog \
+	INSTALL NEWS README compile config.guess config.rpath \
+	config.sub depcomp install-sh ltmain.sh missing py-compile
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 distdir = $(PACKAGE)-$(VERSION)
 top_distdir = $(distdir)
@@ -284,6 +294,7 @@ HAVE_AVUTIL = @HAVE_AVUTIL@
 HAVE_FLAC = @HAVE_FLAC@
 HAVE_OGGFLAC = @HAVE_OGGFLAC@
 HAVE_OPUS = @HAVE_OPUS@
+HAVE_SHOUT_TLS = @HAVE_SHOUT_TLS@
 HAVE_SPEEX = @HAVE_SPEEX@
 HAVE_SWRESAMPLE = @HAVE_SWRESAMPLE@
 HAVE_TWOLAME = @HAVE_TWOLAME@
@@ -475,7 +486,6 @@ $(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -496,8 +506,8 @@ $(ACLOCAL_M4):  $(am__aclocal_m4_deps)
 $(am__aclocal_m4_deps):
 
 config.h: stamp-h1
-	@if test ! -f $@; then rm -f stamp-h1; else :; fi
-	@if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi
+	@test -f $@ || rm -f stamp-h1
+	@test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1
 
 stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
 	@rm -f stamp-h1
@@ -831,10 +841,16 @@ dist-xz: distdir
 	$(am__post_remove_distdir)
 
 dist-tarZ: distdir
+	@echo WARNING: "Support for distribution archives compressed with" \
+		       "legacy program 'compress' is deprecated." >&2
+	@echo WARNING: "It will be removed altogether in Automake 2.0" >&2
 	tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
 	$(am__post_remove_distdir)
 
 dist-shar: distdir
+	@echo WARNING: "Support for shar distribution archives is" \
+	               "deprecated." >&2
+	@echo WARNING: "It will be removed altogether in Automake 2.0" >&2
 	shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
 	$(am__post_remove_distdir)
 
@@ -869,16 +885,17 @@ distcheck: dist
 	esac
 	chmod -R a-w $(distdir)
 	chmod u+w $(distdir)
-	mkdir $(distdir)/_build $(distdir)/_inst
+	mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst
 	chmod a-w $(distdir)
 	test -d $(distdir)/_build || exit 0; \
 	dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
 	  && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
 	  && am__cwd=`pwd` \
-	  && $(am__cd) $(distdir)/_build \
-	  && ../configure --srcdir=.. --prefix="$$dc_install_base" \
+	  && $(am__cd) $(distdir)/_build/sub \
+	  && ../../configure \
 	    $(AM_DISTCHECK_CONFIGURE_FLAGS) \
 	    $(DISTCHECK_CONFIGURE_FLAGS) \
+	    --srcdir=../.. --prefix="$$dc_install_base" \
 	  && $(MAKE) $(AM_MAKEFLAGS) \
 	  && $(MAKE) $(AM_MAKEFLAGS) dvi \
 	  && $(MAKE) $(AM_MAKEFLAGS) check \
@@ -1066,6 +1083,8 @@ uninstall-am: uninstall-nodist_appdataDATA \
 	uninstall-nodist_appmenuDATA uninstall-nodist_binSCRIPTS \
 	uninstall-nodist_docDATA uninstall-nodist_pkgdataDATA
 
+.PRECIOUS: Makefile
+
 
 ${PACKAGE_NAME}: idjc.in
 	@sed -e 's|$${prefix}|${prefix}|g' -e 's|$${pkglibdir}|${pkglibdir}|g' $? >$@
diff --git a/aclocal.m4 b/aclocal.m4
index f91c1ad..4eac860 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -1,6 +1,6 @@
-# generated automatically by aclocal 1.13.4 -*- Autoconf -*-
+# generated automatically by aclocal 1.15 -*- Autoconf -*-
 
-# Copyright (C) 1996-2013 Free Software Foundation, Inc.
+# Copyright (C) 1996-2014 Free Software Foundation, Inc.
 
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -235,7 +235,7 @@ AS_VAR_COPY([$1], [pkg_cv_][$1])
 AS_VAR_IF([$1], [""], [$5], [$4])dnl
 ])# PKG_CHECK_VAR
 
-# Copyright (C) 2002-2013 Free Software Foundation, Inc.
+# Copyright (C) 2002-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -247,10 +247,10 @@ AS_VAR_IF([$1], [""], [$5], [$4])dnl
 # generated from the m4 files accompanying Automake X.Y.
 # (This private macro should not be called outside this file.)
 AC_DEFUN([AM_AUTOMAKE_VERSION],
-[am__api_version='1.13'
+[am__api_version='1.15'
 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.13.4], [],
+m4_if([$1], [1.15], [],
       [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
 ])
 
@@ -266,14 +266,14 @@ 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.13.4])dnl
+[AM_AUTOMAKE_VERSION([1.15])dnl
 m4_ifndef([AC_AUTOCONF_VERSION],
   [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
 _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
 
 # AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-
 
-# Copyright (C) 2001-2013 Free Software Foundation, Inc.
+# Copyright (C) 2001-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -318,15 +318,14 @@ _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
 # configured tree to be moved without reconfiguration.
 
 AC_DEFUN([AM_AUX_DIR_EXPAND],
-[dnl Rely on autoconf to set up CDPATH properly.
-AC_PREREQ([2.50])dnl
-# expand $ac_aux_dir to an absolute path
-am_aux_dir=`cd $ac_aux_dir && pwd`
+[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
+# Expand $ac_aux_dir to an absolute path.
+am_aux_dir=`cd "$ac_aux_dir" && pwd`
 ])
 
 # AM_CONDITIONAL                                            -*- Autoconf -*-
 
-# Copyright (C) 1997-2013 Free Software Foundation, Inc.
+# Copyright (C) 1997-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -357,7 +356,7 @@ AC_CONFIG_COMMANDS_PRE(
 Usually this means the macro was only invoked conditionally.]])
 fi])])
 
-# Copyright (C) 1999-2013 Free Software Foundation, Inc.
+# Copyright (C) 1999-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -548,7 +547,7 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl
 
 # Generate code to set up dependency tracking.              -*- Autoconf -*-
 
-# Copyright (C) 1999-2013 Free Software Foundation, Inc.
+# Copyright (C) 1999-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -624,7 +623,7 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
 
 # Do all the work for Automake.                             -*- Autoconf -*-
 
-# Copyright (C) 1996-2013 Free Software Foundation, Inc.
+# Copyright (C) 1996-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -633,6 +632,12 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
 # This macro actually does too much.  Some checks are only needed if
 # your package does certain things.  But this isn't really a big deal.
 
+dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O.
+m4_define([AC_PROG_CC],
+m4_defn([AC_PROG_CC])
+[_AM_PROG_CC_C_O
+])
+
 # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
 # AM_INIT_AUTOMAKE([OPTIONS])
 # -----------------------------------------------
@@ -708,8 +713,8 @@ AC_REQUIRE([AC_PROG_MKDIR_P])dnl
 # <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
 # <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
 AC_SUBST([mkdir_p], ['$(MKDIR_P)'])
-# We need awk for the "check" target.  The system "awk" is bad on
-# some platforms.
+# We need awk for the "check" target (and possibly the TAP driver).  The
+# system "awk" is bad on some platforms.
 AC_REQUIRE([AC_PROG_AWK])dnl
 AC_REQUIRE([AC_PROG_MAKE_SET])dnl
 AC_REQUIRE([AM_SET_LEADING_DOT])dnl
@@ -741,6 +746,51 @@ dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below.
 AC_CONFIG_COMMANDS_PRE(dnl
 [m4_provide_if([_AM_COMPILER_EXEEXT],
   [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
+
+# POSIX will say in a future version that running "rm -f" with no argument
+# is OK; and we want to be able to make that assumption in our Makefile
+# recipes.  So use an aggressive probe to check that the usage we want is
+# actually supported "in the wild" to an acceptable degree.
+# See automake bug#10828.
+# To make any issue more visible, cause the running configure to be aborted
+# by default if the 'rm' program in use doesn't match our expectations; the
+# user can still override this though.
+if rm -f && rm -fr && rm -rf; then : OK; else
+  cat >&2 <<'END'
+Oops!
+
+Your 'rm' program seems unable to run without file operands specified
+on the command line, even when the '-f' option is present.  This is contrary
+to the behaviour of most rm programs out there, and not conforming with
+the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542>
+
+Please tell bug-automake at gnu.org about your system, including the value
+of your $PATH and any error possibly output before this message.  This
+can help us improve future automake versions.
+
+END
+  if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then
+    echo 'Configuration will proceed anyway, since you have set the' >&2
+    echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2
+    echo >&2
+  else
+    cat >&2 <<'END'
+Aborting the configuration process, to ensure you take notice of the issue.
+
+You can download and install GNU coreutils to get an 'rm' implementation
+that behaves properly: <http://www.gnu.org/software/coreutils/>.
+
+If you want to complete the configuration process using your problematic
+'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
+to "yes", and re-run configure.
+
+END
+    AC_MSG_ERROR([Your 'rm' program is bad, sorry.])
+  fi
+fi
+dnl The trailing newline in this macro's definition is deliberate, for
+dnl backward compatibility and to allow trailing 'dnl'-style comments
+dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841.
 ])
 
 dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion.  Do not
@@ -749,7 +799,6 @@ dnl mangled by Autoconf and run in a shell conditional statement.
 m4_define([_AC_COMPILER_EXEEXT],
 m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
 
-
 # When config.status generates a header, we must update the stamp-h file.
 # This file resides in the same directory as the config header
 # that is generated.  The stamp files are numbered to have different names.
@@ -771,7 +820,7 @@ for _am_header in $config_headers :; do
 done
 echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
 
-# Copyright (C) 2001-2013 Free Software Foundation, Inc.
+# Copyright (C) 2001-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -782,7 +831,7 @@ echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_co
 # Define $install_sh.
 AC_DEFUN([AM_PROG_INSTALL_SH],
 [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
-if test x"${install_sh}" != xset; then
+if test x"${install_sh+set}" != xset; then
   case $am_aux_dir in
   *\ * | *\	*)
     install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
@@ -792,7 +841,7 @@ if test x"${install_sh}" != xset; then
 fi
 AC_SUBST([install_sh])])
 
-# Copyright (C) 2003-2013 Free Software Foundation, Inc.
+# Copyright (C) 2003-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -813,7 +862,7 @@ AC_SUBST([am__leading_dot])])
 
 # Check to see how 'make' treats includes.	            -*- Autoconf -*-
 
-# Copyright (C) 2001-2013 Free Software Foundation, Inc.
+# Copyright (C) 2001-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -861,41 +910,9 @@ AC_MSG_RESULT([$_am_result])
 rm -f confinc confmf
 ])
 
-# Copyright (C) 1999-2013 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# AM_PROG_CC_C_O
-# --------------
-# Like AC_PROG_CC_C_O, but changed for automake.
-AC_DEFUN([AM_PROG_CC_C_O],
-[AC_REQUIRE([AC_PROG_CC_C_O])dnl
-AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
-AC_REQUIRE_AUX_FILE([compile])dnl
-# FIXME: we rely on the cache variable name because
-# there is no other way.
-set dummy $CC
-am_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']`
-eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o
-if test "$am_t" != yes; then
-   # Losing compiler, so override with the script.
-   # FIXME: It is wrong to rewrite CC.
-   # But if we don't then we get into trouble of one sort or another.
-   # A longer-term fix would be to have automake use am__CC in this case,
-   # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
-   CC="$am_aux_dir/compile $CC"
-fi
-dnl Make sure AC_PROG_CC is never called again, or it will override our
-dnl setting of CC.
-m4_define([AC_PROG_CC],
-          [m4_fatal([AC_PROG_CC cannot be called after AM_PROG_CC_C_O])])
-])
-
 # Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-
 
-# Copyright (C) 1997-2013 Free Software Foundation, Inc.
+# Copyright (C) 1997-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -932,7 +949,7 @@ else
 fi
 ])
 
-# Copyright (C) 2003-2013 Free Software Foundation, Inc.
+# Copyright (C) 2003-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -968,7 +985,7 @@ esac
 # Obsolete and "removed" macros, that must however still report explicit
 # error messages when used, to smooth transition.
 #
-# Copyright (C) 1996-2013 Free Software Foundation, Inc.
+# Copyright (C) 1996-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -995,7 +1012,7 @@ AU_DEFUN([fp_C_PROTOTYPES], [AM_C_PROTOTYPES])
 
 # Helper functions for option handling.                     -*- Autoconf -*-
 
-# Copyright (C) 2001-2013 Free Software Foundation, Inc.
+# Copyright (C) 2001-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -1024,7 +1041,54 @@ AC_DEFUN([_AM_SET_OPTIONS],
 AC_DEFUN([_AM_IF_OPTION],
 [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
 
-# Copyright (C) 1999-2013 Free Software Foundation, Inc.
+# Copyright (C) 1999-2014 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_PROG_CC_C_O
+# ---------------
+# Like AC_PROG_CC_C_O, but changed for automake.  We rewrite AC_PROG_CC
+# to automatically call this.
+AC_DEFUN([_AM_PROG_CC_C_O],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([compile])dnl
+AC_LANG_PUSH([C])dnl
+AC_CACHE_CHECK(
+  [whether $CC understands -c and -o together],
+  [am_cv_prog_cc_c_o],
+  [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])])
+  # Make sure it works both with $CC and with simple cc.
+  # Following AC_PROG_CC_C_O, we do the test twice because some
+  # compilers refuse to overwrite an existing .o file with -o,
+  # though they will create one.
+  am_cv_prog_cc_c_o=yes
+  for am_i in 1 2; do
+    if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \
+         && test -f conftest2.$ac_objext; then
+      : OK
+    else
+      am_cv_prog_cc_c_o=no
+      break
+    fi
+  done
+  rm -f core conftest*
+  unset am_i])
+if test "$am_cv_prog_cc_c_o" != yes; then
+   # Losing compiler, so override with the script.
+   # FIXME: It is wrong to rewrite CC.
+   # But if we don't then we get into trouble of one sort or another.
+   # A longer-term fix would be to have automake use am__CC in this case,
+   # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+   CC="$am_aux_dir/compile $CC"
+fi
+AC_LANG_POP([C])])
+
+# For backward compatibility.
+AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])])
+
+# Copyright (C) 1999-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -1259,7 +1323,7 @@ for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[[i]]
 sys.exit(sys.hexversion < minverhex)"
   AS_IF([AM_RUN_LOG([$1 -c "$prog"])], [$3], [$4])])
 
-# Copyright (C) 2001-2013 Free Software Foundation, Inc.
+# Copyright (C) 2001-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -1278,7 +1342,7 @@ AC_DEFUN([AM_RUN_LOG],
 
 # Check to make sure that the build environment is sane.    -*- Autoconf -*-
 
-# Copyright (C) 1996-2013 Free Software Foundation, Inc.
+# Copyright (C) 1996-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -1359,7 +1423,7 @@ AC_CONFIG_COMMANDS_PRE(
 rm -f conftest.file
 ])
 
-# Copyright (C) 2009-2013 Free Software Foundation, Inc.
+# Copyright (C) 2009-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -1419,7 +1483,7 @@ AC_SUBST([AM_BACKSLASH])dnl
 _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
 ])
 
-# Copyright (C) 2001-2013 Free Software Foundation, Inc.
+# Copyright (C) 2001-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -1447,7 +1511,7 @@ fi
 INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
 AC_SUBST([INSTALL_STRIP_PROGRAM])])
 
-# Copyright (C) 2006-2013 Free Software Foundation, Inc.
+# Copyright (C) 2006-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -1466,7 +1530,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
 
 # Check how to create a tarball.                            -*- Autoconf -*-
 
-# Copyright (C) 2004-2013 Free Software Foundation, Inc.
+# Copyright (C) 2004-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
diff --git a/artwork/Makefile.in b/artwork/Makefile.in
index 7c0fadc..8c5dadd 100644
--- a/artwork/Makefile.in
+++ b/artwork/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.13.4 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
 
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -15,7 +15,17 @@
 @SET_MAKE@
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
 am__make_running_with_option = \
   case $${target_option-} in \
       ?) ;; \
@@ -80,8 +90,6 @@ build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
 subdir = artwork
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-	$(dist_pkgdata_DATA)
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
 	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
@@ -93,6 +101,8 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
 	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(dist_pkgdata_DATA) \
+	$(am__DIST_COMMON)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
@@ -146,6 +156,7 @@ am__uninstall_files_from_dir = { \
 am__installdirs = "$(DESTDIR)$(pkgdatadir)" "$(DESTDIR)$(pixmapsdir)"
 DATA = $(dist_pkgdata_DATA) $(nodist_pixmaps_DATA)
 am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
@@ -192,6 +203,7 @@ HAVE_AVUTIL = @HAVE_AVUTIL@
 HAVE_FLAC = @HAVE_FLAC@
 HAVE_OGGFLAC = @HAVE_OGGFLAC@
 HAVE_OPUS = @HAVE_OPUS@
+HAVE_SHOUT_TLS = @HAVE_SHOUT_TLS@
 HAVE_SPEEX = @HAVE_SPEEX@
 HAVE_SWRESAMPLE = @HAVE_SWRESAMPLE@
 HAVE_TWOLAME = @HAVE_TWOLAME@
@@ -369,7 +381,6 @@ $(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu artwork/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu artwork/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -592,6 +603,8 @@ uninstall-am: uninstall-dist_pkgdataDATA uninstall-nodist_pixmapsDATA
 	uninstall-am uninstall-dist_pkgdataDATA \
 	uninstall-nodist_pixmapsDATA
 
+.PRECIOUS: Makefile
+
 
 ${PACKAGE_NAME}.png: icon.png
 	@cp $? $@
diff --git a/c/Makefile.am b/c/Makefile.am
index a77fe0a..c58c07f 100644
--- a/c/Makefile.am
+++ b/c/Makefile.am
@@ -24,7 +24,7 @@ idjc_la_SOURCES = agc.c agc.h audio_feed.c audio_feed.h avcodecdecode.c avcodecd
 			\
 				ogg_opus_dec.c ogg_opus_dec.h vorbistagparse.c vorbistagparse.h live_oggopus_encoder.c					\
 			\
-				live_oggopus_encoder.h
+				live_oggopus_encoder.h live_webm_encoder.c live_webm_encoder.h
 
 idjc_la_CFLAGS = ${GLIB_CFLAGS} ${LIBAVCODEC_CFLAGS} ${LIBAVFORMAT_CFLAGS} ${LIBAVUTIL_CFLAGS} ${LIBFLAC_CFLAGS}		\
 			\
diff --git a/c/Makefile.in b/c/Makefile.in
index ab6a5db..8eab2ba 100644
--- a/c/Makefile.in
+++ b/c/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.13.4 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
 
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -15,7 +15,17 @@
 @SET_MAKE@
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
 am__make_running_with_option = \
   case $${target_option-} in \
       ?) ;; \
@@ -80,8 +90,6 @@ build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
 subdir = c
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-	$(top_srcdir)/depcomp
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
 	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
@@ -93,6 +101,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
 	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
@@ -155,7 +164,7 @@ am_idjc_la_OBJECTS = idjc_la-agc.lo idjc_la-audio_feed.lo \
 	idjc_la-live_mp2_encoder.lo idjc_la-avcodec_encoder.lo \
 	idjc_la-smoothing.lo idjc_la-dyn_mpg123.lo \
 	idjc_la-ogg_opus_dec.lo idjc_la-vorbistagparse.lo \
-	idjc_la-live_oggopus_encoder.lo
+	idjc_la-live_oggopus_encoder.lo idjc_la-live_webm_encoder.lo
 idjc_la_OBJECTS = $(am_idjc_la_OBJECTS)
 AM_V_lt = $(am__v_lt_ at AM_V@)
 am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
@@ -224,6 +233,7 @@ am__define_uniq_tagged_files = \
   done | $(am__uniquify_input)`
 ETAGS = etags
 CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
@@ -270,6 +280,7 @@ HAVE_AVUTIL = @HAVE_AVUTIL@
 HAVE_FLAC = @HAVE_FLAC@
 HAVE_OGGFLAC = @HAVE_OGGFLAC@
 HAVE_OPUS = @HAVE_OPUS@
+HAVE_SHOUT_TLS = @HAVE_SHOUT_TLS@
 HAVE_SPEEX = @HAVE_SPEEX@
 HAVE_SWRESAMPLE = @HAVE_SWRESAMPLE@
 HAVE_TWOLAME = @HAVE_TWOLAME@
@@ -454,7 +465,7 @@ idjc_la_SOURCES = agc.c agc.h audio_feed.c audio_feed.h avcodecdecode.c avcodecd
 			\
 				ogg_opus_dec.c ogg_opus_dec.h vorbistagparse.c vorbistagparse.h live_oggopus_encoder.c					\
 			\
-				live_oggopus_encoder.h
+				live_oggopus_encoder.h live_webm_encoder.c live_webm_encoder.h
 
 idjc_la_CFLAGS = ${GLIB_CFLAGS} ${LIBAVCODEC_CFLAGS} ${LIBAVFORMAT_CFLAGS} ${LIBAVUTIL_CFLAGS} ${LIBFLAC_CFLAGS}		\
 			\
@@ -489,7 +500,6 @@ $(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu c/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu c/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -574,6 +584,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/idjc_la-live_oggflac_encoder.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/idjc_la-live_oggopus_encoder.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/idjc_la-live_oggspeex_encoder.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/idjc_la-live_webm_encoder.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/idjc_la-main.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/idjc_la-mic.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/idjc_la-mixer.Plo at am__quote@
@@ -601,14 +612,14 @@ distclean-compile:
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c $<
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ $<
 
 .c.obj:
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
 
 .c.lo:
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -918,6 +929,13 @@ idjc_la-live_oggopus_encoder.lo: live_oggopus_encoder.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(idjc_la_CFLAGS) $(CFLAGS) -c -o idjc_la-live_oggopus_encoder.lo `test -f 'live_oggopus_encoder.c' || echo '$(srcdir)/'`live_oggopus_encoder.c
 
+idjc_la-live_webm_encoder.lo: live_webm_encoder.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(idjc_la_CFLAGS) $(CFLAGS) -MT idjc_la-live_webm_encoder.lo -MD -MP -MF $(DEPDIR)/idjc_la-live_webm_encoder.Tpo -c -o idjc_la-live_webm_encoder.lo `test -f 'live_webm_encoder.c' || echo '$(srcdir)/'`live_webm_encoder.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/idjc_la-live_webm_encoder.Tpo $(DEPDIR)/idjc_la-live_webm_encoder.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='live_webm_encoder.c' object='idjc_la-live_webm_encoder.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(idjc_la_CFLAGS) $(CFLAGS) -c -o idjc_la-live_webm_encoder.lo `test -f 'live_webm_encoder.c' || echo '$(srcdir)/'`live_webm_encoder.c
+
 mostlyclean-libtool:
 	-rm -f *.lo
 
@@ -1131,6 +1149,8 @@ uninstall-am: uninstall-pkglibLTLIBRARIES
 	pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \
 	uninstall-pkglibLTLIBRARIES
 
+.PRECIOUS: Makefile
+
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/c/avcodec_encoder.c b/c/avcodec_encoder.c
index 1e3fbb9..e58f3fd 100644
--- a/c/avcodec_encoder.c
+++ b/c/avcodec_encoder.c
@@ -28,6 +28,13 @@
 
 #include "avcodec_encoder.h"
 
+#ifndef HAVE_AV_FRAME_ALLOC
+#define av_frame_alloc avcodec_alloc_frame
+#endif
+#ifndef HAVE_AV_FRAME_UNREF
+#define av_frame_unref avcodec_get_frame_defaults
+#endif
+
 #define BYTE_ALIGNMENT (8)
 
 static const struct timespec time_delay = { .tv_nsec = 10 };
@@ -88,9 +95,10 @@ static void live_avcodec_encoder_main(struct encoder *encoder)
         c->sample_rate = encoder->target_samplerate;
         c->channels = encoder->n_channels;
         c->sample_fmt = AV_SAMPLE_FMT_FLT;
-        if (s->pkt_flags & (PF_AAC | PF_AACP2))
+        if (s->pkt_flags & PF_AAC)
             c->profile = FF_PROFILE_AAC_LOW;
-
+        if (s->pkt_flags & PF_AACP2)
+            c->profile = FF_PROFILE_AAC_HE;
         // start the codec preferably with float inputs else signed 16 bit integer inputs
         while (pthread_mutex_trylock(&g.avc_mutex))
             nanosleep(&time_delay, NULL);
@@ -142,12 +150,12 @@ static void live_avcodec_encoder_main(struct encoder *encoder)
 
             // prepare an AVFrame to put that data
             if (!s->decoded_frame) {
-                if (!(s->decoded_frame = avcodec_alloc_frame())) {
+                if (!(s->decoded_frame = av_frame_alloc())) {
                     fprintf(stderr, "avcodec_encoder_main: failed to allocate frame\n");
                     encoder->encoder_state = ES_STOPPING;
                 }
             } else
-                avcodec_get_frame_defaults(s->decoded_frame);
+                av_frame_unref(s->decoded_frame);
             s->decoded_frame->nb_samples = in_samples;
             
             if (id) {
@@ -289,7 +297,7 @@ static AVCodec *aac_codec()
 
 static AVCodec *aacplus_codec()
 {
-    return avcodec_find_encoder_by_name("libaacplus");
+    return avcodec_find_encoder_by_name("libfdk_aac");
 }
 
 int live_avcodec_encoder_init(struct encoder *encoder, struct encoder_vars *ev)
diff --git a/c/avcodecdecode.c b/c/avcodecdecode.c
index 4bc5205..efadfde 100644
--- a/c/avcodecdecode.c
+++ b/c/avcodecdecode.c
@@ -42,6 +42,13 @@
 #define AVCODEC_MAX_AUDIO_FRAME_SIZE 192000
 #endif
 
+#ifndef HAVE_AV_FRAME_ALLOC
+#define av_frame_alloc avcodec_alloc_frame
+#endif
+#ifndef HAVE_AV_FRAME_UNREF
+#define av_frame_unref avcodec_get_frame_defaults
+#endif
+
 extern int dynamic_metadata_form[];
 
 static const struct timespec time_delay = { .tv_nsec = 10 };
@@ -173,13 +180,13 @@ static void avcodecdecode_play(struct xlplayer *xlplayer)
         
         if (!self->frame)
             {
-            if (!(self->frame = avcodec_alloc_frame()))
+            if (!(self->frame = av_frame_alloc()))
                 {
                 fprintf(stderr, "avcodecdecode_play: malloc failure\n");
                 exit(1);
                 }
             else
-                avcodec_get_frame_defaults(self->frame);
+                av_frame_unref(self->frame);
             }
 
         while (pthread_mutex_trylock(&g.avc_mutex))
@@ -245,7 +252,7 @@ static void avcodecdecode_play(struct xlplayer *xlplayer)
         if (self->floatsamples)
             av_freep(&self->floatsamples);
 
-        if (av_samples_alloc(&self->floatsamples, NULL, 2, self->frame->nb_samples, AV_SAMPLE_FMT_FLT, 0))
+        if (av_samples_alloc(&self->floatsamples, NULL, 2, self->frame->nb_samples, AV_SAMPLE_FMT_FLT, 0) < 0)
             {
             fprintf(stderr, "avcodecdecode_play: av_samples_alloc failed\n");
             xlplayer->playmode = PM_EJECTING;
diff --git a/c/encoder.c b/c/encoder.c
index 0472c5f..ba88b61 100644
--- a/c/encoder.c
+++ b/c/encoder.c
@@ -34,6 +34,7 @@
 #include "live_oggflac_encoder.h"
 #include "live_oggspeex_encoder.h"
 #include "live_oggopus_encoder.h"
+#include "live_webm_encoder.h"
 #include "avcodec_encoder.h"
 #include "bsdcompat.h"
 #include "main.h"
@@ -88,6 +89,9 @@ static struct encoder_data_format encoder_lex_format(char *source, char *family,
         
     if (!strcmp(family, "ogg"))
         df.family = ENCODER_FAMILY_OGG;
+
+    if (!strcmp(family, "webm"))
+        df.family = ENCODER_FAMILY_WEBM;
         
     if (!strcmp(codec, "mp3"))
         df.codec = ENCODER_CODEC_MP3;
@@ -567,6 +571,29 @@ int encoder_start(struct threads_info *ti, struct universal_vars *uv, void *othe
     switch (self->data_format.source) {
         case ENCODER_SOURCE_JACK:
             switch (self->data_format.family) {
+
+#if defined(HAVE_AVCODEC) && defined(HAVE_AVFORMAT)
+                case ENCODER_FAMILY_WEBM:
+                    switch (self->data_format.codec) {
+                        case ENCODER_CODEC_VORBIS:
+                            encoder_init = live_webm_encoder_init;
+                            break;
+                        case ENCODER_CODEC_OPUS:
+                            if ((ev->samplerate = realloc(ev->samplerate, 6)))
+                                {
+                                strcpy(ev->samplerate, "48000");
+                                encoder_init = live_webm_encoder_init;
+                                }
+                            else
+                                goto failed;
+                            break;
+                        case ENCODER_CODEC_UNHANDLED:
+                        default:
+                            goto failed;
+                    }
+                    break;
+#endif
+                
                 case ENCODER_FAMILY_MPEG:
                     switch (self->data_format.codec) {
                         case ENCODER_CODEC_MP3:
@@ -588,6 +615,7 @@ int encoder_start(struct threads_info *ti, struct universal_vars *uv, void *othe
                             goto failed;
                         }
                     break;
+
                 case ENCODER_FAMILY_OGG:
                     switch (self->data_format.codec) {
                         case ENCODER_CODEC_VORBIS:
@@ -619,6 +647,7 @@ int encoder_start(struct threads_info *ti, struct universal_vars *uv, void *othe
                             goto failed;
                     }
                     break;
+                    
                 case ENCODER_FAMILY_UNHANDLED:
                 default:
                     break;
diff --git a/c/encoder.h b/c/encoder.h
index b90b54d..3b04dc0 100644
--- a/c/encoder.h
+++ b/c/encoder.h
@@ -30,7 +30,7 @@
 enum jack_dataflow { JD_OFF, JD_ON, JD_FLUSH };
 enum performance_warning { PW_OK, PW_AUDIO_DATA_DROPPED };
 enum encoder_source {ENCODER_SOURCE_UNHANDLED, ENCODER_SOURCE_JACK, ENCODER_SOURCE_FILE};
-enum encoder_family {ENCODER_FAMILY_UNHANDLED, ENCODER_FAMILY_MPEG, ENCODER_FAMILY_OGG};
+enum encoder_family {ENCODER_FAMILY_UNHANDLED, ENCODER_FAMILY_MPEG, ENCODER_FAMILY_OGG, ENCODER_FAMILY_WEBM};
 enum encoder_codec {ENCODER_CODEC_UNHANDLED, ENCODER_CODEC_MP3, ENCODER_CODEC_VORBIS, ENCODER_CODEC_FLAC, ENCODER_CODEC_SPEEX, ENCODER_CODEC_OPUS, ENCODER_CODEC_MP2, ENCODER_CODEC_AAC, ENCODER_CODEC_AACPLUSV2};
 enum encoder_state { ES_STOPPED, ES_STARTING, ES_RUNNING, ES_STOPPING, ES_PAUSED };
 enum packet_flags {     PF_UNSET    = 0x00,
@@ -42,7 +42,8 @@ enum packet_flags {     PF_UNSET    = 0x00,
                                 PF_HEADER   = 0x20,
                                 PF_MP2      = 0x40,
                                 PF_AAC      = 0x80,
-                                PF_AACP2    = 0x100 };
+                                PF_AACP2    = 0x100,
+                                PF_WEBM     = 0x200 };
 
 struct encoder_vars
     {
diff --git a/c/live_webm_encoder.c b/c/live_webm_encoder.c
new file mode 100644
index 0000000..f7ecde9
--- /dev/null
+++ b/c/live_webm_encoder.c
@@ -0,0 +1,476 @@
+/*
+#   live_webm_encoder.c: encode using libavformat
+#   Copyright (C) 2015 Stephen Fairchild (s-fairchild at users.sourceforge.net)
+#
+#   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 in the file entitled COPYING.
+#   If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "../config.h"
+
+#ifdef HAVE_AVCODEC
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <math.h>
+
+#include <libavutil/avassert.h>
+#include <libavutil/channel_layout.h>
+#include <libavutil/opt.h>
+#include <libavutil/mathematics.h>
+#include <libavutil/timestamp.h>
+#include <libavformat/avformat.h>
+#include <libswscale/swscale.h>
+#include <libswresample/swresample.h>
+
+#include "main.h"
+#include "sourceclient.h"
+#include "live_webm_encoder.h"
+
+static const struct timespec time_delay = { .tv_nsec = 10 };
+
+typedef struct WebMState {
+    AVStream *st;
+    int64_t next_pts;
+    int64_t serial_samples;
+    int samples_count;
+    AVFrame *frame;
+    AVFrame *tmp_frame;
+    struct SwrContext *swr_ctx;
+    AVFormatContext *oc;
+    AVIOContext *avio_ctx;
+    enum packet_flags packet_flags;
+} WebMState;
+
+
+static AVCodec *add_stream(WebMState *self,
+                            enum AVCodecID codec_id, int br, int sr, int ch)
+{
+    AVCodec *codec;
+    AVCodecContext *c;
+
+    if (!(codec = avcodec_find_encoder(codec_id))) {
+        fprintf(stderr, "could not find encoder for '%s'\n",
+                                                avcodec_get_name(codec_id));
+        return NULL;
+    }
+    
+    if (codec->type != AVMEDIA_TYPE_AUDIO) {
+        fprintf(stderr, "not an audio codec: %s\n", avcodec_get_name(codec_id));
+        return NULL;
+    }
+
+    if (!(self->st = avformat_new_stream(self->oc, codec))) {
+        fprintf(stderr, "could not allocate stream\n");
+        return NULL;
+    }
+
+    c = self->st->codec;
+    c->sample_fmt  = codec->sample_fmts ?
+                                    codec->sample_fmts[0] : AV_SAMPLE_FMT_FLTP;
+    c->bit_rate    = br;
+    c->sample_rate = sr;
+    c->channels    = ch;
+    c->channel_layout = (ch == 2) ? AV_CH_LAYOUT_STEREO : AV_CH_LAYOUT_MONO;
+    self->st->id = 0;
+    self->st->time_base = (AVRational){ 1, sr };
+
+    if (self->oc->oformat->flags & AVFMT_GLOBALHEADER)
+        c->flags |= AV_CODEC_FLAG_GLOBAL_HEADER;
+        
+    return codec;
+}
+
+
+static AVFrame *alloc_audio_frame(enum AVSampleFormat sample_fmt,
+                    uint64_t channel_layout, int sample_rate, int nb_samples)
+{
+    AVFrame *frame = av_frame_alloc();
+
+    if (!frame) {
+        fprintf(stderr, "error allocating an audio frame\n");
+        return NULL;
+    }
+
+    frame->format = sample_fmt;
+    frame->channel_layout = channel_layout;
+    frame->sample_rate = sample_rate;
+    frame->nb_samples = nb_samples;
+
+    if (nb_samples && av_frame_get_buffer(frame, 0) < 0) {
+        fprintf(stderr, "error allocating an audio buffer\n");
+        av_frame_free(&frame);
+        return NULL;
+    }
+
+    return frame;
+}
+
+
+static int open_stream(WebMState *self, AVCodec *codec)
+{
+    AVCodecContext *c;
+    int nb_samples;
+    int ret;
+    
+    c = self->st->codec;
+
+    while (pthread_mutex_trylock(&g.avc_mutex))
+        nanosleep(&time_delay, NULL);
+    ret = avcodec_open2(c, codec, NULL);
+    pthread_mutex_unlock(&g.avc_mutex);
+
+    if (ret < 0) {
+        fprintf(stderr, "Could not open audio codec: %s\n", av_err2str(ret));
+        return 0;
+    }
+
+    if (c->codec->capabilities & AV_CODEC_CAP_VARIABLE_FRAME_SIZE)
+        nb_samples = 10000;
+    else
+        nb_samples = c->frame_size;
+
+    self->frame     = alloc_audio_frame(c->sample_fmt, c->channel_layout,
+                                       c->sample_rate, nb_samples);
+    self->tmp_frame = alloc_audio_frame(AV_SAMPLE_FMT_FLTP, c->channel_layout,
+                                       c->sample_rate, nb_samples);
+
+    if (!(self->swr_ctx = swr_alloc())) {
+        fprintf(stderr, "Could not allocate resampler context\n");
+        avcodec_close(c);
+        return 0;
+    }
+
+    av_opt_set_int       (self->swr_ctx, "in_channel_count",   c->channels,       0);
+    av_opt_set_int       (self->swr_ctx, "in_sample_rate",     c->sample_rate,    0);
+    av_opt_set_sample_fmt(self->swr_ctx, "in_sample_fmt",      AV_SAMPLE_FMT_FLTP, 0);
+    av_opt_set_int       (self->swr_ctx, "out_channel_count",  c->channels,       0);
+    av_opt_set_int       (self->swr_ctx, "out_sample_rate",    c->sample_rate,    0);
+    av_opt_set_sample_fmt(self->swr_ctx, "out_sample_fmt",     c->sample_fmt,     0);
+
+    if ((ret = swr_init(self->swr_ctx)) < 0) {
+        fprintf(stderr, "Failed to initialize the resampling context\n");
+        swr_free(&self->swr_ctx);
+        avcodec_close(c);
+        return 0;
+    }
+    
+    return 1;
+}
+
+
+static AVFrame *get_audio_frame(struct encoder *encoder)
+{
+    WebMState *self = encoder->encoder_private;
+    AVFrame *frame = self->tmp_frame;
+
+    struct encoder_ip_data *id;
+    id = encoder_get_input_data(encoder, frame->nb_samples, frame->nb_samples, (float **)frame->data);
+    if (id)
+    {
+        encoder_ip_data_free(id);
+        frame->pts = self->next_pts;
+        self->next_pts += frame->nb_samples;
+        self->serial_samples += frame->nb_samples;
+        return frame;
+    }
+
+    return NULL;
+}
+
+
+static int write_audio_frame(struct encoder *encoder, int final)
+{
+    WebMState *self = encoder->encoder_private;
+    AVCodecContext *c;
+    AVPacket pkt = { 0 };
+    AVFrame *frame;
+    int ret;
+    int got_packet;
+    int dst_nb_samples;
+
+    av_init_packet(&pkt);
+    c = self->st->codec;
+    if (final)
+        frame = NULL;
+    else {
+        go_again:
+
+        if (!(frame = get_audio_frame(encoder)))
+            return 0;
+
+        dst_nb_samples = av_rescale_rnd(swr_get_delay(self->swr_ctx, c->sample_rate) + frame->nb_samples,
+                                        c->sample_rate, c->sample_rate, AV_ROUND_UP);
+        av_assert0(dst_nb_samples == frame->nb_samples);
+        if (av_frame_make_writable(self->frame) < 0) {
+            fprintf (stderr, "failed to make av frame writable\n");
+            return -1;
+        }
+
+        if (swr_convert(self->swr_ctx, self->frame->data, dst_nb_samples,
+                    (const uint8_t **)frame->data, frame->nb_samples) < 0) {
+            fprintf(stderr, "error while converting\n");
+            return -1;
+        }
+
+        frame = self->frame;
+        frame->pts = av_rescale_q(self->samples_count, (AVRational){1, c->sample_rate}, c->time_base);
+        self->samples_count += dst_nb_samples;
+    }
+
+    if ((ret = avcodec_encode_audio2(c, &pkt, frame, &got_packet)) < 0) {
+        fprintf(stderr, "error encoding audio frame: %s\n", av_err2str(ret));
+        return -1;
+    }
+
+    if (got_packet && av_write_frame(self->oc, &pkt) < 0) {
+        fprintf(stderr, "error while writing audio frame: %s\n", av_err2str(ret));
+        return -1;
+    }
+
+    if (final)
+        return 1;
+
+    if (!got_packet)
+        goto go_again;
+
+    return 0;
+}
+
+
+static void close_stream(WebMState *self)
+{
+    avcodec_close(self->st->codec);
+    av_frame_free(&self->frame);
+    av_frame_free(&self->tmp_frame);
+    swr_free(&self->swr_ctx);
+}
+
+
+static int write_packet(void *opaque, uint8_t *buf, int buf_size)
+{
+    struct encoder *encoder = opaque;
+    WebMState *self = encoder->encoder_private;
+    struct encoder_op_packet packet;
+
+    packet.header.bit_rate = encoder->bitrate;
+    packet.header.sample_rate = encoder->target_samplerate;
+    packet.header.n_channels = encoder->n_channels;
+    packet.header.flags = PF_WEBM | self->packet_flags;
+    packet.header.data_size = buf_size;
+    packet.header.serial = encoder->oggserial;
+    packet.header.timestamp = encoder->timestamp = self->serial_samples / (double)encoder->target_samplerate;
+    packet.data = buf;
+    encoder_write_packet_all(encoder, &packet);
+    self->packet_flags &= ~PF_INITIAL;
+    return 1;
+}
+
+
+static int write_header(struct encoder *encoder)
+{
+    WebMState *self = encoder->encoder_private;
+    int ret;
+    
+    ++encoder->oggserial;
+    self->serial_samples = 0;
+    self->packet_flags = PF_HEADER | PF_INITIAL;
+    ret = avformat_write_header(self->oc, NULL);
+    self->packet_flags &= ~PF_HEADER;
+    return ret;
+}
+
+
+static int write_trailer(struct encoder *encoder)
+{
+    WebMState *self = encoder->encoder_private;
+    int ret;
+
+    ret = av_write_trailer(self->oc);
+    self->packet_flags = PF_FINAL;
+    write_packet(encoder, NULL, 0);
+    self->packet_flags = 0;
+    return ret;
+}
+    
+
+static int setup(struct encoder *encoder)
+{
+    WebMState *self = encoder->encoder_private;
+    size_t avio_ctx_buffer_size = 4096;
+    AVCodec *codec;
+    uint8_t *avio_ctx_buffer;
+    enum AVCodecID codec_id;
+    
+    switch (encoder->data_format.codec) {
+        case ENCODER_CODEC_VORBIS:
+            codec_id = AV_CODEC_ID_VORBIS;
+            break;
+        case ENCODER_CODEC_OPUS:
+            codec_id = AV_CODEC_ID_OPUS;
+            break;
+        default:
+            goto fail1;
+    }
+    
+    if (!(self->oc = avformat_alloc_context())) {
+        fprintf(stderr, "avformat_alloc_context failed\n");
+        goto fail1;
+    }
+    
+    if (!(self->oc->oformat = av_guess_format("webm", NULL, "video/webm"))) {
+        fprintf(stderr, "format unsupported\n");
+        goto fail2;
+    }
+
+    if (!(avio_ctx_buffer = av_malloc(avio_ctx_buffer_size))) {
+        fprintf(stderr, "av_malloc failed\n");
+        goto fail2;
+    }
+
+    if (!(self->avio_ctx = avio_alloc_context(avio_ctx_buffer,
+            avio_ctx_buffer_size, 1, encoder, NULL, &write_packet, NULL))) {
+        fprintf(stderr, "avio_alloc_context failed\n");
+        goto fail3;
+    }
+
+    self->oc->pb = self->avio_ctx;
+   
+    if (!(codec = add_stream(self, codec_id, encoder->bitrate,
+                        encoder->target_samplerate, encoder->n_channels))) {
+        fprintf(stderr, "failed to add stream\n");
+        goto fail4;
+    }
+
+    if (!open_stream(self, codec)) {
+        fprintf(stderr, "failed to open codec\n");
+        goto fail4;
+    }
+
+    if (encoder->use_metadata) {
+        pthread_mutex_lock(&encoder->metadata_mutex);
+        av_dict_set(&self->oc->metadata, "TITLE", encoder->custom_meta, 0);
+        pthread_mutex_unlock(&encoder->metadata_mutex);
+    }
+
+    if (write_header(encoder) < 0)
+        goto fail5;
+        
+    return SUCCEEDED;
+
+fail5:
+    close_stream(self);
+fail4:
+    av_freep(&self->avio_ctx->buffer);
+    av_freep(&self->avio_ctx);
+    goto fail2;
+fail3:
+    av_freep(&self->avio_ctx->buffer);
+fail2:
+    avformat_free_context(self->oc);
+fail1:
+    return FAILED;
+}
+
+
+static void teardown(WebMState *self)
+{
+    close_stream(self);
+    av_freep(&self->avio_ctx->buffer);
+    av_freep(&self->avio_ctx);
+    avformat_free_context(self->oc);
+    memset(self, '\0', sizeof (WebMState));
+}
+
+
+static void live_webm_encoder_main(struct encoder *encoder)
+{
+    WebMState *self = encoder->encoder_private;
+
+    if (encoder->encoder_state == ES_STARTING)
+    {
+        if (setup(encoder) == FAILED) {
+            goto bailout;
+        }
+        if (encoder->run_request_f)
+            encoder->encoder_state = ES_RUNNING;
+        else
+            encoder->encoder_state = ES_STOPPING;
+        return;
+    }
+    
+    if (encoder->encoder_state == ES_RUNNING) {
+        if (encoder->new_metadata && encoder->use_metadata) {
+            encoder->new_metadata = FALSE;
+            write_trailer(encoder);
+            pthread_mutex_lock(&encoder->metadata_mutex);
+            av_dict_set(&self->oc->metadata, "TITLE", encoder->custom_meta, 0);
+            pthread_mutex_unlock(&encoder->metadata_mutex);
+            write_header(encoder);
+        }
+
+        if (encoder->flush) {
+            encoder->flush = FALSE;
+            write_trailer(encoder);
+            write_header(encoder);
+        }
+        switch (write_audio_frame(encoder, !encoder->run_request_f)) {
+            case 0:
+                break;
+            case -1:
+                fprintf(stderr, "error writing out audio frame\n");
+            default:
+                write_trailer(encoder);
+                encoder->encoder_state = ES_STOPPING;
+        }
+        return;
+    }
+            
+    if (encoder->encoder_state == ES_STOPPING) {
+        teardown(self);
+        encoder->flush = FALSE;
+        if (encoder->run_request_f) {
+            encoder->encoder_state = ES_STARTING;
+            return;
+        }
+    }
+
+bailout:
+    fprintf(stderr, "live_webm_encoder_main: performing cleanup\n");
+    encoder->run_request_f = FALSE;
+    encoder->encoder_state = ES_STOPPED;
+    encoder->run_encoder = NULL;
+    encoder->flush = FALSE;
+    encoder->encoder_private = NULL;
+    free(self);
+    fprintf(stderr, "live_webm_encoder_main: finished cleanup\n");
+}
+
+
+int live_webm_encoder_init(struct encoder *encoder, struct encoder_vars *ev)
+{
+    WebMState *self;
+        
+    if (!(self = calloc(1, sizeof (WebMState)))) {
+        fprintf(stderr, "malloc failure\n");
+        return FAILED;
+    }
+
+    encoder->encoder_private = self;
+    encoder->run_encoder = live_webm_encoder_main;
+    return SUCCEEDED;
+}
+
+#endif /* HAVE_AVCODEC */
diff --git a/c/live_oggopus_encoder.h b/c/live_webm_encoder.h
similarity index 76%
copy from c/live_oggopus_encoder.h
copy to c/live_webm_encoder.h
index ad6c4f8..0779c29 100644
--- a/c/live_oggopus_encoder.h
+++ b/c/live_webm_encoder.h
@@ -1,6 +1,6 @@
 /*
-#   live_oggopus_encoder.c: encode Ogg/Opus format streams
-#   Copyright (C) 2013 Stephen Fairchild (s-fairchild at users.sourceforge.net)
+#   avcodec_encoder.h: encode using libavformat
+#   Copyright (C) 2015 Stephen Fairchild (s-fairchild at users.sourceforge.net)
 #
 #   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
@@ -19,10 +19,10 @@
 
 #include "../config.h"
 
-#include "encoder.h"
+#ifdef HAVE_AVCODEC
 
-#ifdef HAVE_OPUS
+#include "encoder.h"
 
-int live_oggopus_encoder_init(struct encoder *, struct encoder_vars *);
+int live_webm_encoder_init(struct encoder *encoder, struct encoder_vars *ev);
 
-#endif /* HAVE_OPUS */
+#endif /* HAVE_AVCODEC */
diff --git a/c/mixer.c b/c/mixer.c
index ba5e549..763534c 100644
--- a/c/mixer.c
+++ b/c/mixer.c
@@ -1015,13 +1015,27 @@ int mixer_healthcheck()
     return TRUE;
     }
 
+static int fputshex(const char *in, FILE *fp)
+    {
+    static const char * const table = "0123456789abcdef";
+        
+    for(; *in; ++in)
+        {
+        fputc(table[*in >> 4 & 0xF], fp);
+        fputc(table[*in & 0xF], fp);
+        }
+    if (ferror(fp))
+        return EOF;
+    return 0;
+    }
+
 static void jackportread(const char *portname, const char *filter)
     {
     unsigned long flags = 0;
     const char *type = JACK_DEFAULT_AUDIO_TYPE;
     const char **ports, **cons;
     const jack_port_t *port = jack_port_by_name(g.client, portname);
-    int i, j;
+    int i, j, conn;
 
     if (!strcmp(filter, "inputs"))
         flags = JackPortIsInput;
@@ -1044,18 +1058,22 @@ static void jackportread(const char *portname, const char *filter)
         for (i = 0; ports[i]; ++i)
             {
             if (i)
-                fputs(" ", g.out);
+                fputc(' ', g.out);
                 
-            /* connected ports are prefaced with an @ character */
+            /* connected ports are prefaced with an @ character else - */
+            conn = FALSE;
             if (cons)
                 for (j = 0; cons[j]; ++j)
                     if (!(strcmp(cons[j], ports[i])))
                         {
-                        fputc('@', g.out);
+                        conn = TRUE;
                         break;
                         }
-            
-            fputs(ports[i], g.out);
+            fputc(conn ? '@' : '-', g.out);
+
+            /* hex encode to prevent clash with formatting characters.
+             * if jack port names contain spaces "@,\n" it won't break here */
+            fputshex(ports[i], g.out);
             }
 
     fputc('\n', g.out);
diff --git a/c/recorder.c b/c/recorder.c
index bad9c74..2f01479 100644
--- a/c/recorder.c
+++ b/c/recorder.c
@@ -607,7 +607,7 @@ static void *recorder_main(void *args)
                             {
                             if ((packet->header.flags & PF_INITIAL) && self->id3_mode)
                                 recorder_append_metadata2(self, packet);
-                            if (packet->header.flags & (PF_OGG | PF_MP3 | PF_MP2 | PF_AAC | PF_AACP2))
+                            if (packet->header.flags & (PF_WEBM | PF_OGG | PF_MP3 | PF_MP2 | PF_AAC | PF_AACP2))
                                 {
                                 if (packet->header.data_size != fwrite(packet->data, 1, packet->header.data_size, self->fp))
                                     {
@@ -846,7 +846,17 @@ int recorder_start(struct threads_info *ti, struct universal_vars *uv, void *oth
                             break;
                         }
                     break;
-            
+                case ENCODER_FAMILY_WEBM:
+                    switch (df->codec) {
+                        case ENCODER_CODEC_VORBIS:
+                        case ENCODER_CODEC_OPUS:
+                            file_extension = ".webm";
+                            break;
+                        case ENCODER_CODEC_UNHANDLED:
+                        default:
+                            break;
+                        }
+                    break;
                 case ENCODER_FAMILY_UNHANDLED:
                 default:
                     break;
diff --git a/c/sourceclient.c b/c/sourceclient.c
index 616f99d..3d5b769 100644
--- a/c/sourceclient.c
+++ b/c/sourceclient.c
@@ -181,6 +181,10 @@ static struct kvpdict kvpdict[] = {
     { "irc",              &sv.irc, NULL },
     { "aim",              &sv.aim, NULL },
     { "icq",              &sv.icq, NULL },
+    { "tls",              &sv.tls, NULL },
+    { "ca_directory",     &sv.ca_dir, NULL },
+    { "ca_file",          &sv.ca_file, NULL },
+    { "client_cert",      &sv.client_cert, NULL },
     { "make_public",      &sv.make_public, NULL },
     { "record_source",    &rv.record_source, NULL },        /* recorder_vars */
     { "record_filename",  &rv.record_filename, NULL },
diff --git a/c/streamer.c b/c/streamer.c
index 7120c84..33f9448 100644
--- a/c/streamer.c
+++ b/c/streamer.c
@@ -44,6 +44,7 @@ static void *streamer_main(void *args)
     struct encoder_op_packet *packet;
     char buffer[10];
     size_t data_size;
+    unsigned connect_time = 0;
     
     char *s_conv(unsigned long value)
         {
@@ -70,7 +71,7 @@ static void *streamer_main(void *args)
                     case SHOUTERR_BUSY:
                         self->shout_status = shout_get_connected(self->shout);
 
-                        if (self->disconnect_request)
+                        if (self->disconnect_request || ++connect_time > 120)
                             self->stream_mode = SM_DISCONNECTING;
                         break;
                     case SHOUTERR_CONNECTED:
@@ -111,7 +112,7 @@ static void *streamer_main(void *args)
                             /* determine how much audio to hold in the send buffer */
                             self->max_shout_queue = (shout_buffer_seconds * ((br > 1000) ? br / 1000 : br)) << 7;
                             }
-                        if (packet->header.flags & (PF_OGG | PF_MP3 | PF_MP2 | PF_AAC | PF_AACP2))
+                        if (packet->header.flags & (PF_WEBM | PF_OGG | PF_MP3 | PF_MP2 | PF_AAC | PF_AACP2))
                             {
                             if ((packet->header.flags & (PF_HEADER | PF_FINAL)) || shout_queuelen(self->shout) < self->max_shout_queue)
                                 data_size = packet->header.data_size;
@@ -177,6 +178,7 @@ static void *streamer_main(void *args)
                 self->disconnect_request = FALSE;
                 self->disconnect_pending = FALSE;
                 self->stream_mode = SM_DISCONNECTED;
+                connect_time = 0;
                 fprintf(stderr, "streamer_main: disconnection complete\n");
                 break;
             }
@@ -203,7 +205,7 @@ int streamer_connect(struct threads_info *ti, struct universal_vars *uv, void *o
     {
     struct streamer_vars *sv = other;
     struct streamer *self = ti->streamer[uv->tab];
-    int protocol, data_format = -1;
+    int protocol, data_format = -1, tls;
     char channels[2];
     char bitrate[4];
     char samplerate[6];
@@ -233,6 +235,7 @@ int streamer_connect(struct threads_info *ti, struct universal_vars *uv, void *o
             case ENCODER_FAMILY_OGG:
                 data_format = SHOUT_FORMAT_OGG;
                 break;
+
             case ENCODER_FAMILY_MPEG:
                 switch (df->codec) {
                     case ENCODER_CODEC_MP3:
@@ -248,8 +251,20 @@ int streamer_connect(struct threads_info *ti, struct universal_vars *uv, void *o
                     case ENCODER_CODEC_UNHANDLED:
                     default:
                         failed = TRUE;
-                    }
-                    break;
+                }
+                break;
+                
+            case ENCODER_FAMILY_WEBM:
+                switch (df->codec) {
+                    case ENCODER_CODEC_VORBIS:
+                    case ENCODER_CODEC_OPUS:
+                        data_format = SHOUT_FORMAT_WEBMAUDIO;
+                        break;
+                    default:
+                        failed = TRUE;
+                }
+                break;
+                
             case ENCODER_FAMILY_UNHANDLED:
                 failed = TRUE;
             }
@@ -330,48 +345,83 @@ int streamer_connect(struct threads_info *ti, struct universal_vars *uv, void *o
         else
             fprintf(stderr, "user agent is set\n");
         }
-    if (shout_set_name(self->shout, sv->dj_name) != SHOUTERR_SUCCESS)
+    if (shout_set_meta(self->shout, SHOUT_META_NAME, sv->dj_name) != SHOUTERR_SUCCESS)
         {
         sce("stream/dj name");
         goto error;
         }
-    if (shout_set_url(self->shout, sv->listen_url) != SHOUTERR_SUCCESS)
+    if (shout_set_meta(self->shout, SHOUT_META_URL, sv->listen_url) != SHOUTERR_SUCCESS)
         {
         sce("url");
         goto error;
         }
-    if (shout_set_description(self->shout, sv->description) != SHOUTERR_SUCCESS)
+    if (shout_set_meta(self->shout, SHOUT_META_DESCRIPTION, sv->description) != SHOUTERR_SUCCESS)
         {
         sce("description");
         goto error;
         }
-    if (shout_set_genre(self->shout, sv->genre) != SHOUTERR_SUCCESS)
+    if (shout_set_meta(self->shout, SHOUT_META_GENRE, sv->genre) != SHOUTERR_SUCCESS)
         {
         sce("genre");
         goto error;
         }
-
-    if (shout_set_irc(self->shout, sv->irc) != SHOUTERR_SUCCESS)
+    if (shout_set_meta(self->shout, SHOUT_META_IRC, sv->irc) != SHOUTERR_SUCCESS)
         {
         sce("irc");
         goto error;
         }
-    if (shout_set_aim(self->shout, sv->aim) != SHOUTERR_SUCCESS)
+    if (shout_set_meta(self->shout, SHOUT_META_AIM, sv->aim) != SHOUTERR_SUCCESS)
         {
         sce("aim");
         goto error;
         }
-    if (shout_set_icq(self->shout, sv->icq) != SHOUTERR_SUCCESS)
+    if (shout_set_meta(self->shout, SHOUT_META_ICQ, sv->icq) != SHOUTERR_SUCCESS)
         {
         sce("icq");
         goto error;
         }
-
     if (shout_set_public(self->shout, !strcmp(sv->make_public, "True")) != SHOUTERR_SUCCESS)
         {
         sce("make public");
         goto error;
         }
+    #if SHOUT_TLS
+    if (!strcmp("Disabled", sv->tls))
+        tls = SHOUT_TLS_DISABLED;
+    else if (!strcmp("Auto", sv->tls))
+        tls = SHOUT_TLS_AUTO;
+    else if (!strcmp("Auto, no plaintext", sv->tls))
+        tls = SHOUT_TLS_AUTO_NO_PLAIN;
+    else if (!strcmp("RFC2818", sv->tls))
+        tls = SHOUT_TLS_RFC2818;
+    else if (!strcmp("RFC2817", sv->tls))
+        tls = SHOUT_TLS_RFC2817;
+    else
+        {
+        sce("tls option");
+        goto error;
+        }
+    if (shout_set_tls(self->shout, tls) != SHOUTERR_SUCCESS)
+        {
+        sce("tls");
+        goto error;
+        }
+    if (sv->ca_dir[0] && shout_set_ca_directory(self->shout, sv->ca_dir) != SHOUTERR_SUCCESS)
+        {
+        sce("ca directory");
+        goto error;
+        }
+    if (sv->ca_file[0] && shout_set_ca_file(self->shout, sv->ca_file) != SHOUTERR_SUCCESS)
+        {
+        sce("ca file");
+        goto error;
+        }
+    if (sv->client_cert[0] && shout_set_client_certificate(self->shout, sv->client_cert) != SHOUTERR_SUCCESS)
+        {
+        sce("client certificate");
+        goto error;
+        }
+    #endif
         
     snprintf(channels,   sizeof channels  , "%d",  self->encoder_op->encoder->n_channels);
     {
diff --git a/c/streamer.h b/c/streamer.h
index 4f8b18a..a2e964d 100644
--- a/c/streamer.h
+++ b/c/streamer.h
@@ -39,6 +39,10 @@ struct streamer_vars
     char *irc;
     char *aim;
     char *icq;
+    char *tls;
+    char *ca_dir;
+    char *ca_file;
+    char *client_cert;
     char *make_public;
     };
 
diff --git a/compile b/compile
index 531136b..a85b723 100755
--- a/compile
+++ b/compile
@@ -3,7 +3,7 @@
 
 scriptversion=2012-10-14.11; # UTC
 
-# Copyright (C) 1999-2013 Free Software Foundation, Inc.
+# Copyright (C) 1999-2014 Free Software Foundation, Inc.
 # Written by Tom Tromey <tromey at cygnus.com>.
 #
 # This program is free software; you can redistribute it and/or modify
diff --git a/config.guess b/config.guess
index 8a5d3f4..6f790d6 100755
--- a/config.guess
+++ b/config.guess
@@ -2,7 +2,7 @@
 # Attempt to guess a canonical system name.
 #   Copyright 1992-2015 Free Software Foundation, Inc.
 
-timestamp='2015-03-04'
+timestamp='2015-12-14'
 
 # 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
@@ -221,7 +221,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
 		release='-gnu'
 		;;
 	    *)
-		release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+		release=`echo ${UNAME_RELEASE} | sed -e 's/[-_].*//' | cut -d. -f1,2`
 		;;
 	esac
 	# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
@@ -249,6 +249,9 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
     *:MirBSD:*:*)
 	echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
 	exit ;;
+    *:Sortix:*:*)
+	echo ${UNAME_MACHINE}-unknown-sortix
+	exit ;;
     alpha:OSF1:*:*)
 	case $UNAME_RELEASE in
 	*4.0)
@@ -962,6 +965,9 @@ EOF
     ia64:Linux:*:*)
 	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
+    k1om:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit ;;
     m32r*:Linux:*:*)
 	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
@@ -1049,7 +1055,7 @@ EOF
 		X86_64_ABI=x32
 	    fi
 	fi
-	echo x86_64-unknown-linux-gnu${X86_64_ABI}
+	echo ${UNAME_MACHINE}-pc-linux-${LIBC}${X86_64_ABI}
 	exit ;;
     xtensa*:Linux:*:*)
 	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
@@ -1128,7 +1134,7 @@ EOF
 	# uname -m prints for DJGPP always 'pc', but it prints nothing about
 	# the processor, so we play safe by assuming i586.
 	# Note: whatever this is, it MUST be the same as what config.sub
-	# prints for the "djgpp" host, or else GDB configury will decide that
+	# prints for the "djgpp" host, or else GDB configure will decide that
 	# this is a cross-build.
 	echo i586-pc-msdosdjgpp
 	exit ;;
@@ -1398,6 +1404,9 @@ EOF
     x86_64:VMkernel:*:*)
 	echo ${UNAME_MACHINE}-unknown-esx
 	exit ;;
+    amd64:Isilon\ OneFS:*:*)
+	echo x86_64-unknown-onefs
+	exit ;;
 esac
 
 cat >&2 <<EOF
diff --git a/config.h.in b/config.h.in
index 48c0b99..5e670b9 100644
--- a/config.h.in
+++ b/config.h.in
@@ -19,6 +19,12 @@
 /* Set if libavutil was found */
 #undef HAVE_AVUTIL
 
+/* Set if av_frame_alloc function exists */
+#undef HAVE_AV_FRAME_ALLOC
+
+/* Set if av_frame_unref function exists */
+#undef HAVE_AV_FRAME_UNREF
+
 /* Define to 1 if you have the `canonicalize_file_name' function. */
 #undef HAVE_CANONICALIZE_FILE_NAME
 
@@ -140,9 +146,6 @@
 /* Define to the sub-directory where libtool stores uninstalled libraries. */
 #undef LT_OBJDIR
 
-/* Define to 1 if your C compiler doesn't accept -c and -o together. */
-#undef NO_MINUS_C_MINUS_O
-
 /* Name of package */
 #undef PACKAGE
 
diff --git a/config.sub b/config.sub
index 430106a..a16cc4d 100755
--- a/config.sub
+++ b/config.sub
@@ -2,7 +2,7 @@
 # Configuration validation subroutine script.
 #   Copyright 1992-2015 Free Software Foundation, Inc.
 
-timestamp='2015-03-08'
+timestamp='2015-12-14'
 
 # 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
@@ -53,8 +53,7 @@ timestamp='2015-03-08'
 me=`echo "$0" | sed -e 's,.*/,,'`
 
 usage="\
-Usage: $0 [OPTION] CPU-MFR-OPSYS
-       $0 [OPTION] ALIAS
+Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS
 
 Canonicalize a configuration name.
 
@@ -255,6 +254,7 @@ case $basic_machine in
 	| arc | arceb \
 	| arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
 	| avr | avr32 \
+	| ba \
 	| be32 | be64 \
 	| bfin \
 	| c4x | c8051 | clipper \
@@ -305,7 +305,7 @@ case $basic_machine in
 	| riscv32 | riscv64 \
 	| 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 \
+	| sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
 	| sh64 | sh64le \
 	| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
 	| sparcv8 | sparcv9 | sparcv9b | sparcv9v \
@@ -376,6 +376,7 @@ case $basic_machine in
 	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
 	| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
 	| avr-* | avr32-* \
+	| ba-* \
 	| be32-* | be64-* \
 	| bfin-* | bs2000-* \
 	| c[123]* | c30-* | [cjt]90-* | c4x-* \
@@ -428,12 +429,13 @@ case $basic_machine in
 	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
 	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
 	| pyramid-* \
+	| riscv32-* | riscv64-* \
 	| 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-* \
 	| sparclite-* \
-	| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \
+	| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \
 	| tahoe-* \
 	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
 	| tile*-* \
@@ -518,7 +520,7 @@ case $basic_machine in
 		basic_machine=i386-pc
 		os=-aros
 		;;
-        asmjs)
+	asmjs)
 		basic_machine=asmjs-unknown
 		;;
 	aux)
@@ -1394,7 +1396,7 @@ case $os in
 	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
 	      | -sym* | -kopensolaris* | -plan9* \
 	      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
-	      | -aos* | -aros* | -cloudabi* \
+	      | -aos* | -aros* | -cloudabi* | -sortix* \
 	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
 	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
 	      | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
@@ -1414,7 +1416,8 @@ case $os in
 	      | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
 	      | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
 	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
-	      | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* | -tirtos*)
+	      | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \
+	      | -onefs* | -tirtos*)
 	# Remember, each alternative MUST END IN *, to match a version number.
 		;;
 	-qnx*)
diff --git a/configure b/configure
index 955e0d3..fe32cb2 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for idjc 0.8.15.
+# Generated by GNU Autoconf 2.69 for idjc 0.8.16.
 #
 # Report bugs to <http://idjc.sourceforge.net>.
 #
@@ -590,8 +590,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='idjc'
 PACKAGE_TARNAME='idjc'
-PACKAGE_VERSION='0.8.15'
-PACKAGE_STRING='idjc 0.8.15'
+PACKAGE_VERSION='0.8.16'
+PACKAGE_STRING='idjc 0.8.16'
 PACKAGE_BUGREPORT='http://idjc.sourceforge.net'
 PACKAGE_URL=''
 
@@ -639,6 +639,7 @@ LTLIBOBJS
 DYLIB_EXT
 DYN_LDFLAGS
 DYN_LIBS
+HAVE_SHOUT_TLS
 SHOUTIDJC_LIBS
 SHOUTIDJC_CFLAGS
 EXT
@@ -1454,7 +1455,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 idjc 0.8.15 to adapt to many kinds of systems.
+\`configure' configures idjc 0.8.16 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1525,7 +1526,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of idjc 0.8.15:";;
+     short | recursive ) echo "Configuration of idjc 0.8.16:";;
    esac
   cat <<\_ACEOF
 
@@ -1717,7 +1718,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-idjc configure 0.8.15
+idjc configure 0.8.16
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2140,7 +2141,7 @@ 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 idjc $as_me 0.8.15, which was
+It was created by idjc $as_me 0.8.16, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -2489,7 +2490,7 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
-COPYRIGHT_YEAR=2015
+COPYRIGHT_YEAR=2016
 
 ac_aux_dir=
 for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
@@ -2632,7 +2633,7 @@ test -n "$target_alias" &&
   program_prefix=${target_alias}-
 
 
-am__api_version='1.13'
+am__api_version='1.15'
 
 # Find a good install program.  We prefer a C program (faster),
 # so one script is as good as another.  But avoid the broken or
@@ -2804,8 +2805,8 @@ test "$program_suffix" != NONE &&
 ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
 program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
 
-# expand $ac_aux_dir to an absolute path
-am_aux_dir=`cd $ac_aux_dir && pwd`
+# Expand $ac_aux_dir to an absolute path.
+am_aux_dir=`cd "$ac_aux_dir" && pwd`
 
 if test x"${MISSING+set}" != xset; then
   case $am_aux_dir in
@@ -2824,7 +2825,7 @@ else
 $as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;}
 fi
 
-if test x"${install_sh}" != xset; then
+if test x"${install_sh+set}" != xset; then
   case $am_aux_dir in
   *\ * | *\	*)
     install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
@@ -3118,7 +3119,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='idjc'
- VERSION='0.8.15'
+ VERSION='0.8.16'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -3152,8 +3153,8 @@ MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
 # <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
 mkdir_p='$(MKDIR_P)'
 
-# We need awk for the "check" target.  The system "awk" is bad on
-# some platforms.
+# We need awk for the "check" target (and possibly the TAP driver).  The
+# system "awk" is bad on some platforms.
 # 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}'
@@ -3169,6 +3170,48 @@ am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'
 
 
 
+# POSIX will say in a future version that running "rm -f" with no argument
+# is OK; and we want to be able to make that assumption in our Makefile
+# recipes.  So use an aggressive probe to check that the usage we want is
+# actually supported "in the wild" to an acceptable degree.
+# See automake bug#10828.
+# To make any issue more visible, cause the running configure to be aborted
+# by default if the 'rm' program in use doesn't match our expectations; the
+# user can still override this though.
+if rm -f && rm -fr && rm -rf; then : OK; else
+  cat >&2 <<'END'
+Oops!
+
+Your 'rm' program seems unable to run without file operands specified
+on the command line, even when the '-f' option is present.  This is contrary
+to the behaviour of most rm programs out there, and not conforming with
+the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542>
+
+Please tell bug-automake at gnu.org about your system, including the value
+of your $PATH and any error possibly output before this message.  This
+can help us improve future automake versions.
+
+END
+  if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then
+    echo 'Configuration will proceed anyway, since you have set the' >&2
+    echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2
+    echo >&2
+  else
+    cat >&2 <<'END'
+Aborting the configuration process, to ensure you take notice of the issue.
+
+You can download and install GNU coreutils to get an 'rm' implementation
+that behaves properly: <http://www.gnu.org/software/coreutils/>.
+
+If you want to complete the configuration process using your problematic
+'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
+to "yes", and re-run configure.
+
+END
+    as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5
+  fi
+fi
+
 ac_config_headers="$ac_config_headers config.h"
 
 
@@ -4386,6 +4429,65 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5
+$as_echo_n "checking whether $CC understands -c and -o together... " >&6; }
+if ${am_cv_prog_cc_c_o+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+  # Make sure it works both with $CC and with simple cc.
+  # Following AC_PROG_CC_C_O, we do the test twice because some
+  # compilers refuse to overwrite an existing .o file with -o,
+  # though they will create one.
+  am_cv_prog_cc_c_o=yes
+  for am_i in 1 2; do
+    if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5
+   ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } \
+         && test -f conftest2.$ac_objext; then
+      : OK
+    else
+      am_cv_prog_cc_c_o=no
+      break
+    fi
+  done
+  rm -f core conftest*
+  unset am_i
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5
+$as_echo "$am_cv_prog_cc_c_o" >&6; }
+if test "$am_cv_prog_cc_c_o" != yes; then
+   # Losing compiler, so override with the script.
+   # FIXME: It is wrong to rewrite CC.
+   # But if we don't then we get into trouble of one sort or another.
+   # A longer-term fix would be to have automake use am__CC in this case,
+   # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+   CC="$am_aux_dir/compile $CC"
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
 depcc="$CC"   am_compiler_list=
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
@@ -12432,131 +12534,6 @@ CC=$lt_save_CC
 
 
 # Checks for programs.
-if test "x$CC" != xcc; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC and cc understand -c and -o together" >&5
-$as_echo_n "checking whether $CC and cc understand -c and -o together... " >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cc understands -c and -o together" >&5
-$as_echo_n "checking whether cc understands -c and -o together... " >&6; }
-fi
-set dummy $CC; ac_cc=`$as_echo "$2" |
-		      sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`
-if eval \${ac_cv_prog_cc_${ac_cc}_c_o+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-# Make sure it works both with $CC and with simple cc.
-# We do the test twice because some compilers refuse to overwrite an
-# existing .o file with -o, though they will create one.
-ac_try='$CC -c conftest.$ac_ext -o conftest2.$ac_objext >&5'
-rm -f conftest2.*
-if { { case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } &&
-   test -f conftest2.$ac_objext && { { case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; };
-then
-  eval ac_cv_prog_cc_${ac_cc}_c_o=yes
-  if test "x$CC" != xcc; then
-    # Test first that cc exists at all.
-    if { ac_try='cc -c conftest.$ac_ext >&5'
-  { { case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; }; then
-      ac_try='cc -c conftest.$ac_ext -o conftest2.$ac_objext >&5'
-      rm -f conftest2.*
-      if { { case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } &&
-	 test -f conftest2.$ac_objext && { { case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; };
-      then
-	# cc works too.
-	:
-      else
-	# cc exists but doesn't like -o.
-	eval ac_cv_prog_cc_${ac_cc}_c_o=no
-      fi
-    fi
-  fi
-else
-  eval ac_cv_prog_cc_${ac_cc}_c_o=no
-fi
-rm -f core conftest*
-
-fi
-if eval test \$ac_cv_prog_cc_${ac_cc}_c_o = yes; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-
-$as_echo "#define NO_MINUS_C_MINUS_O 1" >>confdefs.h
-
-fi
-
-# FIXME: we rely on the cache variable name because
-# there is no other way.
-set dummy $CC
-am_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`
-eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o
-if test "$am_t" != yes; then
-   # Losing compiler, so override with the script.
-   # FIXME: It is wrong to rewrite CC.
-   # But if we don't then we get into trouble of one sort or another.
-   # A longer-term fix would be to have automake use am__CC in this case,
-   # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
-   CC="$am_aux_dir/compile $CC"
-fi
-
 
 
 # Cause autoconfiguration to look for an external libintl.
@@ -15648,6 +15625,91 @@ $as_echo "#define HAVE_AVUTIL 1" >>confdefs.h
 
             HAVE_AVUTIL=1
 
+            { $as_echo "$as_me:${as_lineno-$LINENO}: checking for av_frame_alloc in -lavutil" >&5
+$as_echo_n "checking for av_frame_alloc in -lavutil... " >&6; }
+if ${ac_cv_lib_avutil_av_frame_alloc+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lavutil  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char av_frame_alloc ();
+int
+main ()
+{
+return av_frame_alloc ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_avutil_av_frame_alloc=yes
+else
+  ac_cv_lib_avutil_av_frame_alloc=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_avutil_av_frame_alloc" >&5
+$as_echo "$ac_cv_lib_avutil_av_frame_alloc" >&6; }
+if test "x$ac_cv_lib_avutil_av_frame_alloc" = xyes; then :
+
+$as_echo "#define HAVE_AV_FRAME_ALLOC 1" >>confdefs.h
+
+fi
+
+            { $as_echo "$as_me:${as_lineno-$LINENO}: checking for av_frame_unref in -lavutil" >&5
+$as_echo_n "checking for av_frame_unref in -lavutil... " >&6; }
+if ${ac_cv_lib_avutil_av_frame_unref+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lavutil  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char av_frame_unref ();
+int
+main ()
+{
+return av_frame_unref ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_avutil_av_frame_unref=yes
+else
+  ac_cv_lib_avutil_av_frame_unref=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_avutil_av_frame_unref" >&5
+$as_echo "$ac_cv_lib_avutil_av_frame_unref" >&6; }
+if test "x$ac_cv_lib_avutil_av_frame_unref" = xyes; then :
+
+$as_echo "#define HAVE_AV_FRAME_UNREF 1" >>confdefs.h
+
+fi
+
+
 fi
 
 
@@ -17249,6 +17311,92 @@ fi
 
 done
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for shout_set_meta in -lshout-idjc" >&5
+$as_echo_n "checking for shout_set_meta in -lshout-idjc... " >&6; }
+if ${ac_cv_lib_shout_idjc_shout_set_meta+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lshout-idjc  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char shout_set_meta ();
+int
+main ()
+{
+return shout_set_meta ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_shout_idjc_shout_set_meta=yes
+else
+  ac_cv_lib_shout_idjc_shout_set_meta=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_shout_idjc_shout_set_meta" >&5
+$as_echo "$ac_cv_lib_shout_idjc_shout_set_meta" >&6; }
+if test "x$ac_cv_lib_shout_idjc_shout_set_meta" = xyes; then :
+  :
+else
+  as_fn_error $? "required function not detected" "$LINENO" 5
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for shout_set_tls in -lshout-idjc" >&5
+$as_echo_n "checking for shout_set_tls in -lshout-idjc... " >&6; }
+if ${ac_cv_lib_shout_idjc_shout_set_tls+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lshout-idjc  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char shout_set_tls ();
+int
+main ()
+{
+return shout_set_tls ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_shout_idjc_shout_set_tls=yes
+else
+  ac_cv_lib_shout_idjc_shout_set_tls=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_shout_idjc_shout_set_tls" >&5
+$as_echo "$ac_cv_lib_shout_idjc_shout_set_tls" >&6; }
+if test "x$ac_cv_lib_shout_idjc_shout_set_tls" = xyes; then :
+  HAVE_SHOUT_TLS=1
+
+else
+  HAVE_SHOUT_TLS=0
+
+fi
+
 
 if test x$DYNAMIC = "x1" ; then
    for ac_func in dlopen
@@ -17858,7 +18006,7 @@ 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 idjc $as_me 0.8.15, which was
+This file was extended by idjc $as_me 0.8.16, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -17924,7 +18072,7 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-idjc config.status 0.8.15
+idjc config.status 0.8.16
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
diff --git a/configure.ac b/configure.ac
index 3002a13..a977637 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2,9 +2,9 @@
 # Process this file with autoconf to produce a configure script.
 
 AC_PREREQ(2.59)
-AC_INIT([idjc], [0.8.15], 
+AC_INIT([idjc], [0.8.16], 
                 [http://idjc.sourceforge.net])
-AC_SUBST(COPYRIGHT_YEAR, [2015])
+AC_SUBST(COPYRIGHT_YEAR, [2016])
 AC_CANONICAL_SYSTEM
 AC_CONFIG_SRCDIR([config.h.in])
 AM_INIT_AUTOMAKE
@@ -81,8 +81,11 @@ if test $makelibav != "no" ; then
                AC_MSG_WARN([IDJC will be built without wma/mp4/ape support])
             fi)
 
-   PKG_CHECK_MODULES([LIBAVUTIL], [libavutil], AC_DEFINE(HAVE_AVUTIL, 1, [Set if libavutil was found])
-            AC_SUBST(HAVE_AVUTIL, 1),
+   PKG_CHECK_MODULES([LIBAVUTIL], [libavutil], [AC_DEFINE(HAVE_AVUTIL, 1, [Set if libavutil was found])
+            AC_SUBST(HAVE_AVUTIL, 1)
+            AC_CHECK_LIB([avutil],[av_frame_alloc], AC_DEFINE(HAVE_AV_FRAME_ALLOC, 1, [Set if av_frame_alloc function exists]))
+            AC_CHECK_LIB([avutil],[av_frame_unref], AC_DEFINE(HAVE_AV_FRAME_UNREF, 1, [Set if av_frame_unref function exists]))
+            ],
             AC_SUBST(HAVE_AVUTIL, 0)
 
             if test $makelibav = "yes" ; then
@@ -287,6 +290,8 @@ AC_SUBST(EXT,[png])
 
 PKG_CHECK_MODULES([SHOUTIDJC], [shout-idjc])
 AC_CHECK_HEADERS([shoutidjc/shout.h])
+AC_CHECK_LIB([shout-idjc], [shout_set_meta], :, AC_MSG_ERROR([required function not detected]))
+AC_CHECK_LIB([shout-idjc], [shout_set_tls], AC_SUBST(HAVE_SHOUT_TLS, 1), AC_SUBST(HAVE_SHOUT_TLS, 0))
 
 if test x$DYNAMIC = "x1" ; then
    AC_CHECK_FUNCS([dlopen], :, AC_CHECK_LIB([dl], [dlopen], AC_SUBST([DYN_LIBS], [-ldl]), AC_MSG_ERROR([Runtime linking functions not found])))
diff --git a/depcomp b/depcomp
index 4ebd5b3..fc98710 100755
--- a/depcomp
+++ b/depcomp
@@ -3,7 +3,7 @@
 
 scriptversion=2013-05-30.07; # UTC
 
-# Copyright (C) 1999-2013 Free Software Foundation, Inc.
+# Copyright (C) 1999-2014 Free Software Foundation, Inc.
 
 # 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
diff --git a/doc/Makefile.in b/doc/Makefile.in
index 576d3ce..a2da4ba 100644
--- a/doc/Makefile.in
+++ b/doc/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.13.4 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
 
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -14,7 +14,17 @@
 
 @SET_MAKE@
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
 am__make_running_with_option = \
   case $${target_option-} in \
       ?) ;; \
@@ -79,7 +89,6 @@ build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
 subdir = doc
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
 	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
@@ -91,6 +100,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
 	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
@@ -115,6 +125,7 @@ am__can_run_installinfo = \
     *) (install-info --version) >/dev/null 2>&1;; \
   esac
 am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
@@ -161,6 +172,7 @@ HAVE_AVUTIL = @HAVE_AVUTIL@
 HAVE_FLAC = @HAVE_FLAC@
 HAVE_OGGFLAC = @HAVE_OGGFLAC@
 HAVE_OPUS = @HAVE_OPUS@
+HAVE_SHOUT_TLS = @HAVE_SHOUT_TLS@
 HAVE_SPEEX = @HAVE_SPEEX@
 HAVE_SWRESAMPLE = @HAVE_SWRESAMPLE@
 HAVE_TWOLAME = @HAVE_TWOLAME@
@@ -336,7 +348,6 @@ $(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu doc/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -511,6 +522,8 @@ uninstall-am:
 	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
 	tags-am uninstall uninstall-am
 
+.PRECIOUS: Makefile
+
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/doc/jingles-window.png b/doc/jingles-window.png
index 367c9d6..1bc2bbd 100644
Binary files a/doc/jingles-window.png and b/doc/jingles-window.png differ
diff --git a/doc/main-window.png b/doc/main-window.png
index 7d5513d..8246a87 100644
Binary files a/doc/main-window.png and b/doc/main-window.png differ
diff --git a/doc/output-window.png b/doc/output-window.png
index 79af685..6218416 100644
Binary files a/doc/output-window.png and b/doc/output-window.png differ
diff --git a/doc/prefs-bindings.png b/doc/prefs-bindings.png
index 6e4b387..d92495d 100644
Binary files a/doc/prefs-bindings.png and b/doc/prefs-bindings.png differ
diff --git a/doc/prefs-channels.png b/doc/prefs-channels.png
index 61badec..4b68bf2 100644
Binary files a/doc/prefs-channels.png and b/doc/prefs-channels.png differ
diff --git a/doc/prefs-general.png b/doc/prefs-general.png
index 7c8543a..e7fbc0e 100644
Binary files a/doc/prefs-general.png and b/doc/prefs-general.png differ
diff --git a/doc/prefs-jack-ports.png b/doc/prefs-jack-ports.png
index 4c51118..ec6c0be 100644
Binary files a/doc/prefs-jack-ports.png and b/doc/prefs-jack-ports.png differ
diff --git a/doc/tutorials_voip.html b/doc/tutorials_voip.html
index 8e51cf6..dbd5d0a 100644
--- a/doc/tutorials_voip.html
+++ b/doc/tutorials_voip.html
@@ -95,59 +95,11 @@ ui('Tutorials: Setting up VoIP', 'tutorials-voip-nav')
 
 <h4>Aims</h4>
 
-<p>In this section I'm going to explain how to set up ALSA and Skype to use the VoIP feature and then explain how
-VoIP works within IDJC. VoIP clients that have explicit support for JACK should present little difficulty in
-connecting to IDJC. For Skype a little more work is required.</p>
-
-<h4>ALSA configuration</h4>
-
-<p>ALSA supports virtual devices called plugins that can form audio pipelines from descriptions in a configuration file.
-With them you can change sample rates, mix audio, apply audio effects, and so on.
-For the purpose of getting sound into IDJC from an ALSA source the following can be specified
-in the appropriate configuration file <i>~/.asoundrc</i> which may need to be created.</p>
-
-<pre title="~/.asoundrc additional contents"># VoIP plugin for the IDJC default profile.
-pcm.idjcvoip {
-   type plug
-   slave.pcm {
-      type jack
-      playback_ports {
-         0 idjc_default:voip_in_l
-         1 idjc_default:voip_in_r
-      }
-      capture_ports {
-         0 idjc_default:voip_out_l
-         1 idjc_default:voip_out_r
-      }
-   }
-}</pre>
-
-<p>For the changes to take effect you need to log out. On logging back into your desktop failure may have occurred
- for the following two reasons.</p>
-
-<ol style="font-size:12px;">
-<li>The ALSA component <i>alsa-plugins</i> is not installed.</li>
-<li>alsa-plugins is installed but not its module for JACK Audio Connection Kit.</li>
-</ol>
-
-<p>Fixing reason 1 seems easy. Just install it using the package manager
-(possibly under the name <i>libasound2-plugins</i>)
-however after doing so there may still be reason 2 to contend with.</p>
-
-<p>A simple test for JACK plugin support.</p>
-<pre title="No problem here.">$ find /usr/lib/alsa-lib | grep jack
-/usr/lib/alsa-lib/libasound_module_pcm_jack.so
-/usr/lib/alsa-lib/libasound_module_pcm_jack.la
-</pre>
-
-<p>If these two files are both missing there is no option but to install unofficial software.
-<a href="ftp://ftp.alsa-project.org/pub/plugins/">Source</a> and
-<a href="http://packages.debian.org/squeeze/libasound2-plugins">binary</a>. This is intended
-as a replacement for the current <i>alsa-plugins</i> package so remove the old version first.</p>
-
-<h4>Skype/Pulseaudio configuration</h4>
-<p>Lots of messing about ever since Skype forced the use of Pulseaudio. Official JACK documentation <a href="http://jackaudio.org/faq/pulseaudio_and_jack.html
-">here</a>. Once you have Pulseaudio ports in JACK they will require connection to the IDJC VoIP JACK ports.</p>
+<p>In this section I'm going to provide a link to explain how to set up PulseAudio and Skype to use the VoIP feature and then explain how
+VoIP works within IDJC.</p>
+
+<h4>Skype/PulseAudio configuration</h4>
+<p><a href="https://we.riseup.net/nikgnomic/ubuntu-studio-qjackctl-and-pulseaudio-for-idjc">External Link</a></p>
 
 <h4>Testing</h4>
 
diff --git a/install-sh b/install-sh
index 377bb86..0b0fdcb 100755
--- a/install-sh
+++ b/install-sh
@@ -1,7 +1,7 @@
 #!/bin/sh
 # install - install a program, script, or datafile
 
-scriptversion=2011-11-20.07; # UTC
+scriptversion=2013-12-25.23; # UTC
 
 # This originates from X11R5 (mit/util/scripts/install.sh), which was
 # later released in X11R6 (xc/config/util/install.sh) with the
@@ -41,19 +41,15 @@ scriptversion=2011-11-20.07; # UTC
 # This script is compatible with the BSD install script, but was written
 # from scratch.
 
+tab='	'
 nl='
 '
-IFS=" ""	$nl"
+IFS=" $tab$nl"
 
-# set DOITPROG to echo to test this script
+# Set DOITPROG to "echo" to test this script.
 
-# Don't use :- since 4.3BSD and earlier shells don't like it.
 doit=${DOITPROG-}
-if test -z "$doit"; then
-  doit_exec=exec
-else
-  doit_exec=$doit
-fi
+doit_exec=${doit:-exec}
 
 # Put in absolute file names if you don't have them in your path;
 # or use environment vars.
@@ -68,17 +64,6 @@ mvprog=${MVPROG-mv}
 rmprog=${RMPROG-rm}
 stripprog=${STRIPPROG-strip}
 
-posix_glob='?'
-initialize_posix_glob='
-  test "$posix_glob" != "?" || {
-    if (set -f) 2>/dev/null; then
-      posix_glob=
-    else
-      posix_glob=:
-    fi
-  }
-'
-
 posix_mkdir=
 
 # Desired mode of installed file.
@@ -97,7 +82,7 @@ dir_arg=
 dst_arg=
 
 copy_on_change=false
-no_target_directory=
+is_target_a_directory=possibly
 
 usage="\
 Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
@@ -137,46 +122,57 @@ while test $# -ne 0; do
     -d) dir_arg=true;;
 
     -g) chgrpcmd="$chgrpprog $2"
-	shift;;
+        shift;;
 
     --help) echo "$usage"; exit $?;;
 
     -m) mode=$2
-	case $mode in
-	  *' '* | *'	'* | *'
-'*	  | *'*'* | *'?'* | *'['*)
-	    echo "$0: invalid mode: $mode" >&2
-	    exit 1;;
-	esac
-	shift;;
+        case $mode in
+          *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*)
+            echo "$0: invalid mode: $mode" >&2
+            exit 1;;
+        esac
+        shift;;
 
     -o) chowncmd="$chownprog $2"
-	shift;;
+        shift;;
 
     -s) stripcmd=$stripprog;;
 
-    -t) dst_arg=$2
-	# Protect names problematic for 'test' and other utilities.
-	case $dst_arg in
-	  -* | [=\(\)!]) dst_arg=./$dst_arg;;
-	esac
-	shift;;
+    -t)
+        is_target_a_directory=always
+        dst_arg=$2
+        # Protect names problematic for 'test' and other utilities.
+        case $dst_arg in
+          -* | [=\(\)!]) dst_arg=./$dst_arg;;
+        esac
+        shift;;
 
-    -T) no_target_directory=true;;
+    -T) is_target_a_directory=never;;
 
     --version) echo "$0 $scriptversion"; exit $?;;
 
-    --)	shift
-	break;;
+    --) shift
+        break;;
 
-    -*)	echo "$0: invalid option: $1" >&2
-	exit 1;;
+    -*) echo "$0: invalid option: $1" >&2
+        exit 1;;
 
     *)  break;;
   esac
   shift
 done
 
+# We allow the use of options -d and -T together, by making -d
+# take the precedence; this is for compatibility with GNU install.
+
+if test -n "$dir_arg"; then
+  if test -n "$dst_arg"; then
+    echo "$0: target directory not allowed when installing a directory." >&2
+    exit 1
+  fi
+fi
+
 if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
   # When -d is used, all remaining arguments are directories to create.
   # When -t is used, the destination is already specified.
@@ -208,6 +204,15 @@ if test $# -eq 0; then
 fi
 
 if test -z "$dir_arg"; then
+  if test $# -gt 1 || test "$is_target_a_directory" = always; then
+    if test ! -d "$dst_arg"; then
+      echo "$0: $dst_arg: Is not a directory." >&2
+      exit 1
+    fi
+  fi
+fi
+
+if test -z "$dir_arg"; then
   do_exit='(exit $ret); exit $ret'
   trap "ret=129; $do_exit" 1
   trap "ret=130; $do_exit" 2
@@ -223,16 +228,16 @@ if test -z "$dir_arg"; then
 
     *[0-7])
       if test -z "$stripcmd"; then
-	u_plus_rw=
+        u_plus_rw=
       else
-	u_plus_rw='% 200'
+        u_plus_rw='% 200'
       fi
       cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
     *)
       if test -z "$stripcmd"; then
-	u_plus_rw=
+        u_plus_rw=
       else
-	u_plus_rw=,u+rw
+        u_plus_rw=,u+rw
       fi
       cp_umask=$mode$u_plus_rw;;
   esac
@@ -269,41 +274,15 @@ do
     # If destination is a directory, append the input filename; won't work
     # if double slashes aren't ignored.
     if test -d "$dst"; then
-      if test -n "$no_target_directory"; then
-	echo "$0: $dst_arg: Is a directory" >&2
-	exit 1
+      if test "$is_target_a_directory" = never; then
+        echo "$0: $dst_arg: Is a directory" >&2
+        exit 1
       fi
       dstdir=$dst
       dst=$dstdir/`basename "$src"`
       dstdir_status=0
     else
-      # Prefer dirname, but fall back on a substitute if dirname fails.
-      dstdir=`
-	(dirname "$dst") 2>/dev/null ||
-	expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	     X"$dst" : 'X\(//\)[^/]' \| \
-	     X"$dst" : 'X\(//\)$' \| \
-	     X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
-	echo X"$dst" |
-	    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-		   s//\1/
-		   q
-		 }
-		 /^X\(\/\/\)[^/].*/{
-		   s//\1/
-		   q
-		 }
-		 /^X\(\/\/\)$/{
-		   s//\1/
-		   q
-		 }
-		 /^X\(\/\).*/{
-		   s//\1/
-		   q
-		 }
-		 s/.*/./; q'
-      `
-
+      dstdir=`dirname "$dst"`
       test -d "$dstdir"
       dstdir_status=$?
     fi
@@ -314,74 +293,74 @@ do
   if test $dstdir_status != 0; then
     case $posix_mkdir in
       '')
-	# Create intermediate dirs using mode 755 as modified by the umask.
-	# This is like FreeBSD 'install' as of 1997-10-28.
-	umask=`umask`
-	case $stripcmd.$umask in
-	  # Optimize common cases.
-	  *[2367][2367]) mkdir_umask=$umask;;
-	  .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
-
-	  *[0-7])
-	    mkdir_umask=`expr $umask + 22 \
-	      - $umask % 100 % 40 + $umask % 20 \
-	      - $umask % 10 % 4 + $umask % 2
-	    `;;
-	  *) mkdir_umask=$umask,go-w;;
-	esac
-
-	# With -d, create the new directory with the user-specified mode.
-	# Otherwise, rely on $mkdir_umask.
-	if test -n "$dir_arg"; then
-	  mkdir_mode=-m$mode
-	else
-	  mkdir_mode=
-	fi
-
-	posix_mkdir=false
-	case $umask in
-	  *[123567][0-7][0-7])
-	    # POSIX mkdir -p sets u+wx bits regardless of umask, which
-	    # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
-	    ;;
-	  *)
-	    tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
-	    trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
-
-	    if (umask $mkdir_umask &&
-		exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
-	    then
-	      if test -z "$dir_arg" || {
-		   # Check for POSIX incompatibilities with -m.
-		   # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
-		   # other-writable bit of parent directory when it shouldn't.
-		   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
-		   ls_ld_tmpdir=`ls -ld "$tmpdir"`
-		   case $ls_ld_tmpdir in
-		     d????-?r-*) different_mode=700;;
-		     d????-?--*) different_mode=755;;
-		     *) false;;
-		   esac &&
-		   $mkdirprog -m$different_mode -p -- "$tmpdir" && {
-		     ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
-		     test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
-		   }
-		 }
-	      then posix_mkdir=:
-	      fi
-	      rmdir "$tmpdir/d" "$tmpdir"
-	    else
-	      # Remove any dirs left behind by ancient mkdir implementations.
-	      rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
-	    fi
-	    trap '' 0;;
-	esac;;
+        # Create intermediate dirs using mode 755 as modified by the umask.
+        # This is like FreeBSD 'install' as of 1997-10-28.
+        umask=`umask`
+        case $stripcmd.$umask in
+          # Optimize common cases.
+          *[2367][2367]) mkdir_umask=$umask;;
+          .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
+
+          *[0-7])
+            mkdir_umask=`expr $umask + 22 \
+              - $umask % 100 % 40 + $umask % 20 \
+              - $umask % 10 % 4 + $umask % 2
+            `;;
+          *) mkdir_umask=$umask,go-w;;
+        esac
+
+        # With -d, create the new directory with the user-specified mode.
+        # Otherwise, rely on $mkdir_umask.
+        if test -n "$dir_arg"; then
+          mkdir_mode=-m$mode
+        else
+          mkdir_mode=
+        fi
+
+        posix_mkdir=false
+        case $umask in
+          *[123567][0-7][0-7])
+            # POSIX mkdir -p sets u+wx bits regardless of umask, which
+            # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
+            ;;
+          *)
+            tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
+            trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
+
+            if (umask $mkdir_umask &&
+                exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
+            then
+              if test -z "$dir_arg" || {
+                   # Check for POSIX incompatibilities with -m.
+                   # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
+                   # other-writable bit of parent directory when it shouldn't.
+                   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
+                   ls_ld_tmpdir=`ls -ld "$tmpdir"`
+                   case $ls_ld_tmpdir in
+                     d????-?r-*) different_mode=700;;
+                     d????-?--*) different_mode=755;;
+                     *) false;;
+                   esac &&
+                   $mkdirprog -m$different_mode -p -- "$tmpdir" && {
+                     ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
+                     test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
+                   }
+                 }
+              then posix_mkdir=:
+              fi
+              rmdir "$tmpdir/d" "$tmpdir"
+            else
+              # Remove any dirs left behind by ancient mkdir implementations.
+              rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
+            fi
+            trap '' 0;;
+        esac;;
     esac
 
     if
       $posix_mkdir && (
-	umask $mkdir_umask &&
-	$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
+        umask $mkdir_umask &&
+        $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
       )
     then :
     else
@@ -391,53 +370,51 @@ do
       # directory the slow way, step by step, checking for races as we go.
 
       case $dstdir in
-	/*) prefix='/';;
-	[-=\(\)!]*) prefix='./';;
-	*)  prefix='';;
+        /*) prefix='/';;
+        [-=\(\)!]*) prefix='./';;
+        *)  prefix='';;
       esac
 
-      eval "$initialize_posix_glob"
-
       oIFS=$IFS
       IFS=/
-      $posix_glob set -f
+      set -f
       set fnord $dstdir
       shift
-      $posix_glob set +f
+      set +f
       IFS=$oIFS
 
       prefixes=
 
       for d
       do
-	test X"$d" = X && continue
-
-	prefix=$prefix$d
-	if test -d "$prefix"; then
-	  prefixes=
-	else
-	  if $posix_mkdir; then
-	    (umask=$mkdir_umask &&
-	     $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
-	    # Don't fail if two instances are running concurrently.
-	    test -d "$prefix" || exit 1
-	  else
-	    case $prefix in
-	      *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
-	      *) qprefix=$prefix;;
-	    esac
-	    prefixes="$prefixes '$qprefix'"
-	  fi
-	fi
-	prefix=$prefix/
+        test X"$d" = X && continue
+
+        prefix=$prefix$d
+        if test -d "$prefix"; then
+          prefixes=
+        else
+          if $posix_mkdir; then
+            (umask=$mkdir_umask &&
+             $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
+            # Don't fail if two instances are running concurrently.
+            test -d "$prefix" || exit 1
+          else
+            case $prefix in
+              *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
+              *) qprefix=$prefix;;
+            esac
+            prefixes="$prefixes '$qprefix'"
+          fi
+        fi
+        prefix=$prefix/
       done
 
       if test -n "$prefixes"; then
-	# Don't fail if two instances are running concurrently.
-	(umask $mkdir_umask &&
-	 eval "\$doit_exec \$mkdirprog $prefixes") ||
-	  test -d "$dstdir" || exit 1
-	obsolete_mkdir_used=true
+        # Don't fail if two instances are running concurrently.
+        (umask $mkdir_umask &&
+         eval "\$doit_exec \$mkdirprog $prefixes") ||
+          test -d "$dstdir" || exit 1
+        obsolete_mkdir_used=true
       fi
     fi
   fi
@@ -472,15 +449,12 @@ do
 
     # If -C, don't bother to copy if it wouldn't change the file.
     if $copy_on_change &&
-       old=`LC_ALL=C ls -dlL "$dst"	2>/dev/null` &&
-       new=`LC_ALL=C ls -dlL "$dsttmp"	2>/dev/null` &&
-
-       eval "$initialize_posix_glob" &&
-       $posix_glob set -f &&
+       old=`LC_ALL=C ls -dlL "$dst"     2>/dev/null` &&
+       new=`LC_ALL=C ls -dlL "$dsttmp"  2>/dev/null` &&
+       set -f &&
        set X $old && old=:$2:$4:$5:$6 &&
        set X $new && new=:$2:$4:$5:$6 &&
-       $posix_glob set +f &&
-
+       set +f &&
        test "$old" = "$new" &&
        $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
     then
@@ -493,24 +467,24 @@ do
       # to itself, or perhaps because mv is so ancient that it does not
       # support -f.
       {
-	# Now remove or move aside any old file at destination location.
-	# We try this two ways since rm can't unlink itself on some
-	# systems and the destination file might be busy for other
-	# reasons.  In this case, the final cleanup might fail but the new
-	# file should still install successfully.
-	{
-	  test ! -f "$dst" ||
-	  $doit $rmcmd -f "$dst" 2>/dev/null ||
-	  { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
-	    { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
-	  } ||
-	  { echo "$0: cannot unlink or rename $dst" >&2
-	    (exit 1); exit 1
-	  }
-	} &&
-
-	# Now rename the file to the real destination.
-	$doit $mvcmd "$dsttmp" "$dst"
+        # Now remove or move aside any old file at destination location.
+        # We try this two ways since rm can't unlink itself on some
+        # systems and the destination file might be busy for other
+        # reasons.  In this case, the final cleanup might fail but the new
+        # file should still install successfully.
+        {
+          test ! -f "$dst" ||
+          $doit $rmcmd -f "$dst" 2>/dev/null ||
+          { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
+            { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
+          } ||
+          { echo "$0: cannot unlink or rename $dst" >&2
+            (exit 1); exit 1
+          }
+        } &&
+
+        # Now rename the file to the real destination.
+        $doit $mvcmd "$dsttmp" "$dst"
       }
     fi || exit 1
 
diff --git a/man/Makefile.in b/man/Makefile.in
index 1be27c2..734ce91 100644
--- a/man/Makefile.in
+++ b/man/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.13.4 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
 
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -15,7 +15,17 @@
 @SET_MAKE@
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
 am__make_running_with_option = \
   case $${target_option-} in \
       ?) ;; \
@@ -80,8 +90,6 @@ build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
 subdir = man
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-	$(dist_noinst_DATA)
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
 	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
@@ -93,6 +101,8 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
 	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(dist_noinst_DATA) \
+	$(am__DIST_COMMON)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
@@ -183,6 +193,7 @@ am__define_uniq_tagged_files = \
 ETAGS = etags
 CTAGS = ctags
 DIST_SUBDIRS = $(SUBDIRS)
+am__DIST_COMMON = $(srcdir)/Makefile.in
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 am__relativize = \
   dir0=`pwd`; \
@@ -254,6 +265,7 @@ HAVE_AVUTIL = @HAVE_AVUTIL@
 HAVE_FLAC = @HAVE_FLAC@
 HAVE_OGGFLAC = @HAVE_OGGFLAC@
 HAVE_OPUS = @HAVE_OPUS@
+HAVE_SHOUT_TLS = @HAVE_SHOUT_TLS@
 HAVE_SPEEX = @HAVE_SPEEX@
 HAVE_SWRESAMPLE = @HAVE_SWRESAMPLE@
 HAVE_TWOLAME = @HAVE_TWOLAME@
@@ -436,7 +448,6 @@ $(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu man/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu man/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -781,6 +792,8 @@ uninstall-man: uninstall-man1
 	tags tags-am uninstall uninstall-am uninstall-man \
 	uninstall-man1
 
+.PRECIOUS: Makefile
+
 
 $(TARGETS) : $(COMMON) Makefile.am
 
diff --git a/man/fr/Makefile.in b/man/fr/Makefile.in
index f7b0f4c..7cfcb47 100644
--- a/man/fr/Makefile.in
+++ b/man/fr/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.13.4 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
 
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -15,7 +15,17 @@
 @SET_MAKE@
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
 am__make_running_with_option = \
   case $${target_option-} in \
       ?) ;; \
@@ -80,8 +90,6 @@ build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
 subdir = man/fr
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-	$(dist_noinst_DATA)
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
 	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
@@ -93,6 +101,8 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
 	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(dist_noinst_DATA) \
+	$(am__DIST_COMMON)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
@@ -166,6 +176,7 @@ am__define_uniq_tagged_files = \
   done | $(am__uniquify_input)`
 ETAGS = etags
 CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
@@ -212,6 +223,7 @@ HAVE_AVUTIL = @HAVE_AVUTIL@
 HAVE_FLAC = @HAVE_FLAC@
 HAVE_OGGFLAC = @HAVE_OGGFLAC@
 HAVE_OPUS = @HAVE_OPUS@
+HAVE_SHOUT_TLS = @HAVE_SHOUT_TLS@
 HAVE_SPEEX = @HAVE_SPEEX@
 HAVE_SWRESAMPLE = @HAVE_SWRESAMPLE@
 HAVE_TWOLAME = @HAVE_TWOLAME@
@@ -393,7 +405,6 @@ $(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu man/fr/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu man/fr/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -664,6 +675,8 @@ uninstall-man: uninstall-man1
 	ps ps-am tags tags-am uninstall uninstall-am uninstall-man \
 	uninstall-man1
 
+.PRECIOUS: Makefile
+
 
 $(TARGETS) : $(COMMON) Makefile.am
 
diff --git a/missing b/missing
index cdea514..f62bbae 100755
--- a/missing
+++ b/missing
@@ -1,9 +1,9 @@
 #! /bin/sh
 # Common wrapper for a few potentially missing GNU programs.
 
-scriptversion=2012-06-26.16; # UTC
+scriptversion=2013-10-28.13; # UTC
 
-# Copyright (C) 1996-2013 Free Software Foundation, Inc.
+# Copyright (C) 1996-2014 Free Software Foundation, Inc.
 # Originally written by Fran,cois Pinard <pinard at iro.umontreal.ca>, 1996.
 
 # This program is free software; you can redistribute it and/or modify
@@ -160,7 +160,7 @@ give_advice ()
       ;;
    autom4te*)
       echo "You might have modified some maintainer files that require"
-      echo "the 'automa4te' program to be rebuilt."
+      echo "the 'autom4te' program to be rebuilt."
       program_details 'autom4te'
       ;;
     bison*|yacc*)
diff --git a/po/LINGUAS b/po/LINGUAS
index ec63475..a72b7bb 100644
--- a/po/LINGUAS
+++ b/po/LINGUAS
@@ -1,2 +1,2 @@
 # Translations are listed here in a space separated list.
-it fr
+it fr es
diff --git a/po/es.gmo b/po/es.gmo
new file mode 100644
index 0000000..298c49f
Binary files /dev/null and b/po/es.gmo differ
diff --git a/po/fr.po b/po/es.po
similarity index 53%
copy from po/fr.po
copy to po/es.po
index 1c1ec47..b3bfdfe 100644
--- a/po/fr.po
+++ b/po/es.po
@@ -1,22 +1,20 @@
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
+# Spanish translations for idjc package.
+# Copyright (C) 2015 Stephen Fairchild
+# This file is distributed under the same license as the idjc package.
+# Blank Frank <frank at rhizomatica.org>, 2015.
 #
-#
-# nicotux, 2013.
-# Stephen Fairchild <signupaddress at bethere.co.uk>, 2013.
 msgid ""
 msgstr ""
-"Project-Id-Version: \n"
+"Project-Id-Version: idjc 0.8.16_development\n"
 "Report-Msgid-Bugs-To: putidjcinthesubjectline at bethere.co.uk\n"
-"POT-Creation-Date: 2015-07-27 07:47+0100\n"
-"PO-Revision-Date: 2013-11-07 16:47+0000\n"
-"Last-Translator: \n"
+"POT-Creation-Date: 2016-04-30 18:46+0100\n"
+"PO-Revision-Date: 2015-12-27 16:27-0600\n"
+"Last-Translator: Blank Frank <frank at rhizomatica.org>\n"
 "Language-Team: English <team at example.com>\n"
-"Language: fr\n"
+"Language: es\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Lokalize 1.5\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
 #: python/prelims/__init__.py:101
@@ -26,14 +24,16 @@ msgid ""
 "the sub-commands for example: \"%(prog)s run --help\" shows the help for the "
 "run command"
 msgstr ""
-"Afficher ce message d'aide et quitter -- plus d'aide est disponible pour "
-"chacune des sous-commandes, par exemple : « %(prog)s run --help » affiche "
-"l'aide concernant la commande run"
+"mostrar este mensaje de ayuda y termina -- ayuda adicional está disponible "
+"en \n"
+"cada uno de los sub-comandos, por ejemplo: \"%(prog)s run --help\" muestra "
+"la ayuda \n"
+"para el comando run"
 
 #. TC: a command line option help string.
 #: python/prelims/__init__.py:108
 msgid "show the version number and exit"
-msgstr "Afficher le numéro de version et quitter"
+msgstr "mostrar el número de versión y salir"
 
 #. TC: a command line option help string.
 #: python/prelims/__init__.py:112
@@ -41,65 +41,65 @@ msgid ""
 "run the main idjc application -- this is the default when no command line "
 "options are specified"
 msgstr ""
-"exécuter l'application idjc principale -- c'est le défaut lorsqu'aucune "
-"option n'est spécifiée"
+"ejecutar la aplicación principal IDJC - este es el valor por defecto cuando "
+"no se especifican las opciones de línea de comandos"
 
 #. TC: do not translate run.
 #: python/prelims/__init__.py:116
 msgid "-- sub-command: run -- launch the idjc application"
-msgstr "-- sous-commande : run -- exécuter l'application idjc"
+msgstr "-- sub-comando: run -- iniciar la aplicación IDJC"
 
 #: python/prelims/__init__.py:121
 msgid "make a new profile"
-msgstr "créer un nouveau profil"
+msgstr "hacer un nuevo perfil"
 
 #. TC: do not translate the word new.
 #: python/prelims/__init__.py:123
 msgid "-- sub-command: new -- make a new profile"
-msgstr "-- sous-commande : new -- créer un nouveau profil"
+msgstr "-- sub-comando: nuevo -- hacer un nuevo perfil"
 
 #. TC: a command line option help string.
 #: python/prelims/__init__.py:127
 msgid "remove profile(s)"
-msgstr "supprimer un/des profil(s)"
+msgstr "eliminar perfil(es)"
 
 #. TC: do not translate the word rm.
 #: python/prelims/__init__.py:129
 msgid "-- sub-command: rm -- remove profile(s)"
-msgstr "-- sous-commande : rm -- supprimer un/des profil(s)"
+msgstr "-- sub-comando: rm -- eliminar el perfil (s)"
 
 #. TC: a command line option help string.
 #: python/prelims/__init__.py:133
 msgid "select which profile is to automatically launch"
-msgstr "Sélection du profil chargé automatiquement"
+msgstr "seleccionar cuál perfil se pone en marcha de forma automática"
 
 #. TC: do not translate the word auto.
 #: python/prelims/__init__.py:136
 msgid "-- sub-command: auto -- mark a profile for auto-launch"
-msgstr "-- sous-commande : auto -- rendre un profil auto-exécutable"
+msgstr "-- sub-comando: auto -- marcar un perfil para auto-lanzamiento"
 
 #: python/prelims/__init__.py:141
 msgid "remove auto-launch"
-msgstr "supprimer le démarrage automatique"
+msgstr "eliminar auto-lanzamiento"
 
 #: python/prelims/__init__.py:142
 msgid "-- sub-command: noauto -- remove auto-launch"
-msgstr "--sous-commande : noauto -- supprimer le démarrage automatique"
+msgstr "-- sub-comando: noauto -- quitar auto-lanzamiento"
 
 #: python/prelims/__init__.py:147
 msgid "list available profiles"
-msgstr "lister les profils disponibles"
+msgstr "lista de perfiles disponibles"
 
 #. TC: do not translate the word ls.
 #: python/prelims/__init__.py:149
 msgid "-- sub-command: ls -- list available profiles"
-msgstr "-- sous-commande : ls -- lister les profils disponibles"
+msgstr "-- sub-comando: ls -- Lista perfiles disponibles"
 
 #: python/prelims/__init__.py:153 python/prelims/__init__.py:206
 #: python/prelims/__init__.py:231 python/prelims/__init__.py:236
 #: python/prelims/__init__.py:241 python/prelims/__init__.py:246
 msgid "show this help message and exit"
-msgstr "Afficher cette aide et quitter"
+msgstr "mostrar este mensaje de ayuda y sale"
 
 #: python/prelims/__init__.py:156
 msgid ""
@@ -107,91 +107,92 @@ msgid ""
 "                profile chooser dialog -- when used with the -p option\n"
 "                the chosen profile is preselected"
 msgstr ""
-"forcer l'apparition/non apparition de la boite\n"
-"            de sélection de profil -- lorsque utilisé avec l'option -p\n"
-"            le profil choisi est pré-sélectionné"
+"forzar la aparición o no aparición del\n"
+"cuadro de diálogo selector de perfil -- cuando se utiliza con la opción -p\n"
+"el perfil elegido es preseleccionada"
 
 #: python/prelims/__init__.py:161
 msgid "profile_choice"
-msgstr "sélection du profil"
+msgstr "profile_choice"
 
 #: python/prelims/__init__.py:162
 msgid ""
 "the profile to use -- overrides the user interface\n"
 "                preferences \"show profile dialog\" option"
 msgstr ""
-"Profil à utiliser -- remplace l'option des préférences de\n"
-"             l'interface utilisateur «afficher le sélecteur de profils»"
+"el perfil de usar -- invalida la opción\n"
+"\"mostrar el diálogo de perfil\" de las preferencias \n"
+"del interfaz de usuario"
 
 #. TC: command line help placeholder.
 #: python/prelims/__init__.py:166
 msgid "server_name"
-msgstr "nom_du_serveur"
+msgstr "server_name"
 
 #: python/prelims/__init__.py:166
 msgid "the named jack sound-server to connect with"
-msgstr "Nom du serveur Jack auquel se connecter"
+msgstr "el sonido-servidor jack nombrado para conectar"
 
 #. TC: command line help placeholder.
 #: python/prelims/__init__.py:170
 msgid "session_details"
-msgstr "Détails de la session"
+msgstr "session_details"
 
 #: python/prelims/__init__.py:171
 msgid ""
 "e.g. 'L1:name' for a named Ladish [L1] session called 'name' -- refer to the "
 "idjc man page for more details"
 msgstr ""
-"ex. : «L1:name» pour une session Ladish [L1] appelée «name» -- voir la page "
-"de manuel d'idjc pour plus de détails"
+"por ejemplo, \"L1: el nombre de una sesión Ladish [L1] llamado \n"
+"'nombre' -- consulte la página de manual IDJC para obtener más detalles"
 
 #: python/prelims/__init__.py:176
 msgid ""
 "At start-up do not make any JACK connections. This option delegates all "
 "control over restored connections to the session handler."
 msgstr ""
-"Ne pas se connecter à JACK au démarrage. Cette option délègue tout le "
-"contrôle des connexions à restaurer au gestionnaire de sessions."
+"Al arranque no se realice ninguna conexión JACK. Esta opción delega todo "
+"control sobre las conexiones restauradas al manejador de sesión."
 
 #: python/prelims/__init__.py:181
 msgid ""
 "No JACK ports will be connected except those listed in the session file."
 msgstr ""
-"Aucun autre port JACK que ceux listés dans le fichier de session ne sera "
-"connecté."
+"Ningúnos puertos JACK se conectarán a excepción de los enumerados en el "
+"archivo de sesión."
 
 #: python/prelims/__init__.py:184
 msgid "user interface settings"
-msgstr "Paramêtres de l'interface utilisateur"
+msgstr "configuración de la interfaz de usuario"
 
 #: python/prelims/__init__.py:187
 msgid "the audio channels to have open at startup"
-msgstr "Canaux audio à ouvrir au démarrage"
+msgstr "los canales de audio para tener abiertas en el arranque"
 
 #: python/prelims/__init__.py:190
 msgid "the voip mode at startup"
-msgstr "Le mode voip au démarrage"
+msgstr "el modo de VoIP en el arranque"
 
 #: python/prelims/__init__.py:196
 msgid "attempt connection with the specified servers"
-msgstr "tenter de se connecter aux serveurs spécifiés"
+msgstr "intentar la conexión con los servidores especificados"
 
 #: python/prelims/__init__.py:199
 msgid ""
 "kick sources on servers -- note that this will be\n"
 "                done before any server connection attempts are made"
 msgstr ""
-"Balancer les sources sur les serveurs -- notez que ceci sera fait\n"
-"                avant que toute tentative de connection ne soit effectuée"
+"patear las fuentes en los servidores -- tenga en cuenta que esto \n"
+"se hace antes de realizar cualquier intento de conexión del servidor"
 
 #: python/prelims/__init__.py:203
 msgid "position the crossfader for the specified player"
-msgstr "position du crossfader pour le lecteur spécifié"
+msgstr "sitúe el crossfader para el reproductor especificado"
 
 #. TC: command line help placeholder.
 #: python/prelims/__init__.py:208 python/prelims/__init__.py:232
 msgid "profile_name"
-msgstr "nom_du_profil"
+msgstr "profile_name"
 
 #: python/prelims/__init__.py:209
 msgid ""
@@ -199,92 +200,94 @@ msgid ""
 "                bus/object/interface name and the JACK client ID --\n"
 "                restrictions therefore apply"
 msgstr ""
-"nouveau nom de profil -- fera partie du nom bus/object/interface \n"
-"            pour dbus ainsi que de l'ID du client JACK --\n"
-"            donc certaines restrictions s'appliquent"
+"nuevo nombre de perfil -- formará parte del nombre \n"
+"del bus/objeto/interfaz de dbus y la ID del cliente de JACK --\n"
+"Por lo tanto, se aplican restricciones"
 
 #: python/prelims/__init__.py:214
 msgid "template_profile"
-msgstr "profil_modèle"
+msgstr "template_profile"
 
 #: python/prelims/__init__.py:215
 msgid "an existing profile to use as a template"
-msgstr "un profil existant à prendre comme modèle"
+msgstr "un perfil existente a utilizar como plantilla"
 
 #: python/prelims/__init__.py:218
 msgid "icon_pathname"
-msgstr "chemin_des_icônes"
+msgstr "icon_pathname"
 
 #: python/prelims/__init__.py:219
 msgid "pathname to an icon -- defaults to idjc logo"
-msgstr "chemin vers une icône -- par défaut, le logo idjc"
+msgstr "ruta de acceso a un icono -- por defecto logo IDJC"
 
 #: python/prelims/__init__.py:223
 msgid "nickname"
-msgstr "pseudo"
+msgstr "apodo"
 
 #: python/prelims/__init__.py:224
 msgid "the alternate profile name to appear in window title bars"
-msgstr "nom alternatif du profil pour la barre de titre de la fenêtre"
+msgstr ""
+"el nombre del perfil alternativo que aparezca en la barra de título de la "
+"ventana"
 
 #: python/prelims/__init__.py:227
 msgid "description_text"
-msgstr "texte_descriptif"
+msgstr "description_text"
 
 #: python/prelims/__init__.py:228
 msgid "a description of the profile"
-msgstr "une description du profil"
+msgstr "una descripción del perfil"
 
 #: python/prelims/__init__.py:233
 msgid "the profile(s) to remove"
-msgstr "le(s) profil(s) à supprimer"
+msgstr "perfil(es) para eliminar"
 
 #: python/prelims/__init__.py:238
 msgid "the profile to make automatic"
-msgstr "Profil à rendre automatique"
+msgstr "el perfil para hacer automática"
 
 #: python/prelims/__init__.py:417
 #, python-format
 msgid "failed to create profile: %s"
-msgstr "Echec de la création du profil : %s"
+msgstr "falló en crear el perfil: %s"
 
 #: python/prelims/__init__.py:424
 #, python-format
 msgid "failed to delete profile: %s"
-msgstr "Echec de la suppression du profil : %s"
+msgstr "falló en eliminar el perfil: %s"
 
 #: python/prelims/__init__.py:431
 #, python-format
 msgid "auto failed: %s"
-msgstr "Echec de auto : %s"
+msgstr "falló auto: %s"
 
 #: python/prelims/__init__.py:438
 #, python-format
 msgid "noauto failed: %s"
-msgstr "Echec de noauto : %s"
+msgstr "falló noauto: %s"
 
 #: python/prelims/__init__.py:447
 #, python-format
 msgid "ls failed: %s"
-msgstr "Echec de ls : %s"
+msgstr "falló ls: %s"
 
 #: python/prelims/__init__.py:466
 msgid "the specified profile name is not valid"
-msgstr "Le nom de profil spécifié n'est pas correct"
+msgstr "el nombre del perfil especificado no es válido"
 
 #: python/prelims/__init__.py:473
 msgid "profile name is bad"
-msgstr "mauvais nom de profil"
+msgstr "nombre del perfil es malo"
 
 #: python/prelims/__init__.py:476 python/prelims/__init__.py:744
 #, python-format
 msgid "profile %s does not exist"
-msgstr "le profil «%s» n'existe pas"
+msgstr "perfil %s no existe"
 
 #: python/prelims/__init__.py:479
 #, python-format
 msgid "profile %s is already running"
-msgstr "le profil «%s» est en cours d'utilisation"
+msgstr "perfil %s ya está funcionando"
 
 #: python/prelims/__init__.py:492
 #, python-format
@@ -293,22 +296,22 @@ msgid ""
 "\n"
 "%s"
 msgstr ""
-"<span weight='bold' size='12000'>Erreur lors de la création du nouveau "
-"profil.</span>\n"
-"\n"
-"%s"
+"\"<span weight='bold' size='12000'>Error al crear un perfil nuevo.</span>\\n"
+"\"\n"
+"\"\\n\"\n"
+"\"%s\""
 
 #: python/prelims/__init__.py:510
 msgid "no profile is set"
-msgstr "aucun profil sélectionné"
+msgstr "sin perfil se ajusta"
 
 #: python/prelims/__init__.py:517
 msgid ""
 "failed to grab bus name -- another session by the same name appears to be "
 "running"
 msgstr ""
-"Echec de l'enregistrement du nom dans dbus -- une autre session utilisant ce "
-"nom semble déjà être en cours"
+"no logró agarrar nombre de bus -- otra sesión con el mismo nombre parece "
+"estar funcionando"
 
 #. TC: text appears in the title bar when in session mode.
 #: python/prelims/__init__.py:590
@@ -319,42 +322,43 @@ msgstr "session={type}:{name}"
 #: python/prelims/__init__.py:630
 #, python-format
 msgid "specified profile is not valid %s"
-msgstr "le profil spécifié n'est pas bon %s"
+msgstr "perfil especificado no es válido %s"
 
 #: python/prelims/__init__.py:633
 #, python-format
 msgid "specified profile does not exist: %s"
-msgstr "le profil spécifié n'existe pas : %s"
+msgstr "perfil especificado no existe: %s"
 
 #: python/prelims/__init__.py:664
 #, python-format
 msgid "unknown session type: %s: must be one of %s"
-msgstr "type de session inconnu : %s : doit être l'un de %s"
+msgstr "desconocido tipo de sesión: %s debe ser uno de %s"
 
 #: python/prelims/__init__.py:677
 #, python-format
 msgid "directory does not exist: %s"
-msgstr "le dossier n'existe pas : %s'"
+msgstr "directorio no existe: %s"
 
 #: python/prelims/__init__.py:708
 #, python-format
 msgid "problem with specified session directory: %s"
-msgstr "problème avec le dossier de session spécifié : %s"
+msgstr "problema con el directorio de sesión %s"
 
 #: python/prelims/__init__.py:781
 #, python-format
 msgid "Profile %s is active."
-msgstr "Le profil %s est actif."
+msgstr "El perfil %s está activo."
 
 #: python/prelims/__init__.py:791
 #, python-brace-format
 msgid "Cannot rename profile {0} to {1}, {1} currently exists."
-msgstr "Impossible de renommer le profil {0} en {1}, {1} existe déjà."
+msgstr ""
+"No se puede cambiar el nombre de perfil {0} a {1}, {1} actualmente existe."
 
 #: python/prelims/__init__.py:795
 #, python-brace-format
 msgid "Error during attempt to rename {0} to {1}."
-msgstr "Erreur lors de la tentative de renommage de {0} en {1}."
+msgstr "Error de intento de cambiar el nombre de {0} a {1}."
 
 #: python/prelims/__init__.py:805
 #, python-brace-format
@@ -363,156 +367,168 @@ msgid ""
 "\n"
 "{1}"
 msgstr ""
-"<span weight='bold' size='12000'>Erreur durant l'édition du profil : {0}.</"
-"span>\n"
+"<span weight='bold' size='12000'>Error al editar el perfil: {0}.</span>\n"
 "\n"
 "{1}"
 
 #: python/prelims/__init__.py:824
 #, python-brace-format
 msgid "could not get a lock on profile {0}: {1}"
-msgstr "impossible d'obtenir le vérouillage du profil {0} : {1}"
+msgstr "no pudo obtener un bloqueo en el perfil de {0}: {1}"
 
 #: python/prelims/__init__.py:829
 msgid "profile does not exist"
-msgstr "le profil n'existe pas"
+msgstr "el perfil no existe"
 
 #: python/prelims/__init__.py:850
 #, python-format
 msgid "the profile '%s' is in use"
-msgstr "le profil «%s» est en cours d'utilisation"
+msgstr "el perfil %s está en uso"
 
 #: python/prelims/__init__.py:872
 #, python-format
 msgid "the profile length is too long (max %d characters)"
-msgstr "la taille du profil est trop importante (max %d caractères)"
+msgstr "la longitud del perfil es demasiado largo (max %d caracteres)"
 
 #: python/prelims/__init__.py:874
 #, python-format
 msgid "The profile length is too long (max %d characters)."
-msgstr "La taille du profil est trop importante (max %d caractères)"
+msgstr "La longitud del perfil es demasiado largo (max %d caracteres)."
 
 #: python/prelims/__init__.py:878
 msgid "the new profile name is not valid"
-msgstr "Le nouveau profil n'est pas bon"
+msgstr "el nuevo nombre de perfil no es válido"
 
 #: python/prelims/__init__.py:879
 msgid "The new profile name is not valid."
-msgstr "Le nouveau nom de profil n'est pas bon."
+msgstr "El nuevo nombre de perfil no es válido."
 
 #: python/prelims/__init__.py:884
 msgid "the chosen profile is currently running"
-msgstr "le profil choisi est en cours d'exécution"
+msgstr "el perfil elegido se está ejecutando actualmente"
 
 #: python/prelims/__init__.py:885
 msgid "The chosen profile is currently running."
-msgstr "Le profil choisi ent en cours d'exécution."
+msgstr "El perfil elegido se está ejecutando actualmente."
 
 #: python/prelims/__init__.py:890
 msgid "temporary directory creation failed"
-msgstr "échec de la création du dossier temporaire"
+msgstr "creación directorio temporal no"
 
 #: python/prelims/__init__.py:891
 msgid "Temporary directory creation failed."
-msgstr "Echec de la création du dossier temporaire."
+msgstr "Creación del directorio temporal falló."
 
 #: python/prelims/__init__.py:897
 #, python-format
 msgid "the specified template '%s' is not valid"
-msgstr "le modèle «%s» n'est pas bon"
+msgstr "la plantilla especificada '%s' no es válido"
 
 #: python/prelims/__init__.py:899
 #, python-format
 msgid "The specified template '%s' is not valid."
-msgstr "Le modèle «%s» n'est pas bon."
+msgstr "La plantilla especificada '%s' no es válido."
 
 #: python/prelims/__init__.py:921
 #, python-format
 msgid "the template profile '%s' does not exist"
-msgstr "Le modèle de profil «%s» n'existe pas"
+msgstr "el perfil de plantilla '%s' no existe"
 
 #: python/prelims/__init__.py:923
 #, python-format
 msgid "The template profile '%s' does not exist."
-msgstr "Le modèle de profil «%s» n'existe pas."
+msgstr "El perfil de la plantilla '%s' no existe."
 
 #: python/prelims/__init__.py:933
 #, python-format
 msgid "could not write file %s"
-msgstr "impossible d'écrire le fichier «%s»"
+msgstr "no pudo escribir el %s"
 
 #: python/prelims/__init__.py:934
 #, python-format
 msgid "Could not write file %s."
-msgstr "Impossible d'écrire le fichier %s."
+msgstr "No se pudo escribir el archivo %s."
 
 #: python/prelims/__init__.py:942
 #, python-format
 msgid "the profile directory '%s' already exists"
-msgstr "le dossier du profil «%s» existe déjà"
+msgstr "el directorio de perfil '%s' ya existe'"
 
 #: python/prelims/__init__.py:944
 #, python-format
 msgid "The profile directory '%s' already exists."
-msgstr "Le dossier du profil «%s» existe déjà."
+msgstr "El directorio de perfil '%s' ya existe'."
 
 #: python/prelims/__init__.py:947
 #, python-format
 msgid "a non directory path exists at: '%s'"
-msgstr "un chemin vers un non-dossier existe à :  «%s»"
+msgstr "existe un camino no directorio en: '%s'"
 
 #: python/prelims/__init__.py:948
 #, python-format
 msgid "A Non directory path exists at: '%s'."
-msgstr "Un chemin vers un non-dossier existe à : «%s»"
+msgstr "Existe una ruta de acceso no directorio en: '%s'."
 
 #: python/prelims/__init__.py:959
 msgid "The default profile"
-msgstr "Profil par défaut"
+msgstr "El perfil predeterminado"
 
 #. TC: data entry dialog window title text. %s = profile name
 #: python/prelims/profiledialog.py:98
 #, python-format
 msgid "Edit profile %s"
-msgstr "Modifier le profil %s"
+msgstr "Editar %s"
 
 #. TC: data entry dialog window title text. %s = profile name
 #: python/prelims/profiledialog.py:101
 #, python-format
 msgid "New profile based upon %s"
-msgstr "Nouveau profil basé sur «%s»"
+msgstr "Nuevo perfil en base %s"
 
 #. TC: data entry dialog window title text.
 #: python/prelims/profiledialog.py:105
 msgid "New profile details"
-msgstr "Détails du nouveau profil"
+msgstr "Nuevos detalles del perfil"
 
-#. TC: profile dialog window title text.
-#: python/prelims/profiledialog.py:243
-msgid "IDJC Profile Manager"
-msgstr "Gestionaire de profils IDJC"
+#. TC: data entry dialog label text.
+#: python/prelims/profiledialog.py:125
+msgid "Profile name"
+msgstr "Nombre de perfil"
 
-#: python/prelims/profiledialog.py:277
-msgid "Profile"
-msgstr "Profil"
+#. TC: data entry dialog label text.
+#: python/prelims/profiledialog.py:127 python/maingui.py:681
+msgid "Icon"
+msgstr "Icono"
 
+#. TC: data entry dialog label text.
 #. TC: column heading. The profile nicknames.
 #. TC: IRC nickname data entry label.
-#: python/prelims/profiledialog.py:285 python/irc.py:452
+#: python/prelims/profiledialog.py:129 python/prelims/profiledialog.py:285
+#: python/irc.py:452
 msgid "Nickname"
-msgstr "Pseudo"
+msgstr "Apodo"
 
+#. TC: data entry dialog label text.
 #. TC: column heading.
 #. TC: Station description.
-#: python/prelims/profiledialog.py:288 python/irc.py:96
-#: python/playergui.py:307 python/sourceclientgui.py:1697
+#: python/prelims/profiledialog.py:131 python/prelims/profiledialog.py:288
+#: python/irc.py:96 python/playergui.py:334 python/sourceclientgui.py:1786
 msgid "Description"
-msgstr "Description"
+msgstr "Descripción"
+
+#. TC: profile dialog window title text.
+#: python/prelims/profiledialog.py:243
+msgid "IDJC Profile Manager"
+msgstr "IDJC Profile Manager"
+
+#: python/prelims/profiledialog.py:277
+msgid "Profile"
+msgstr "Perfil"
 
 #. TC: column heading. The time a particular profile has been running.
 #: python/prelims/profiledialog.py:292
 msgid "Up-time"
-msgstr "Durée d'activité"
+msgstr "Tiempo de actividad"
 
 #: python/prelims/profiledialog.py:306
 msgid "_Auto"
@@ -525,10 +541,9 @@ msgid ""
 "\n"
 "The profile will remain available with initial settings."
 msgstr ""
-"<span weight='bold' size='12000'>Supprimer les données du profil «%s»?</"
-"span>\n"
+"<span weight='bold' size='12000'>Borrar los datos de perfil '%s'?</span>\n"
 "\n"
-"Le profil restera disponible avec les paramêtres initiaux."
+"El perfil se mantendrá disponible con ajustes iniciales."
 
 #: python/prelims/profiledialog.py:369
 #, python-format
@@ -538,10 +553,10 @@ msgid ""
 "\n"
 "The data of deleted profiles cannot be recovered."
 msgstr ""
-"<span weight='bold' size='12000'>Supprimer le profil «%s» et toutes ses "
-"données ?</span>\n"
+"<span weight='bold' size='12000'>Eliminar perfil '%s' y todos sus datos?</"
+"span>\n"
 "\n"
-"Les données du profil supprimé ne peuvent plus être retrouvées."
+"Los datos de los perfiles eliminados no se pueden recuperar."
 
 #. TC: The contents of <> and {} must not be changed.
 #: python/dialogs.py:198
@@ -552,103 +567,101 @@ msgid ""
 "A reconnection attempt will be made in {countdown} seconds.\n"
 "This is attempt number {attempt} of {maxtries}."
 msgstr ""
-"<span weight=\"bold\" size=\"12000\">La connexion au serveur de l'onglet "
-"{servertab} a échouée.</span>\n"
-"Une tentative de reconnexion sera effectuée dans {countdown} secondes.\n"
-"Ceci est la tentative {attempt} sur {maxtries}."
+"<span weight=\"bold\" size=\"12000\">La conexión con el servidor en la "
+"pestaña {servertab} ha fallado.</span>\n"
+"Un intento de reconexión se hará en {countdown} segundos.\n"
+"Este es el intento número {attempt} de {maxtries}."
 
 #: python/dialogs.py:254
 #, python-format
 msgid "This is attempt number %d. There is no retry limit."
-msgstr "Tentative %d. Il n'y a aucune limite d'essais."
+msgstr "Este es el intento número %d No hay límite de reintentos."
 
 #: python/dialogs.py:283
 msgid "_Retry Now"
-msgstr "_Réessayer immédiatement"
+msgstr "_Retry Ahora"
 
-#: python/__init__.py.in.in:101
+#: python/__init__.py.in.in:102
 #, python-format
 msgid "Copyright 2005-%s Stephen Fairchild and others."
-msgstr "Copyright 2005-%s Stephen Fairchild et autres."
+msgstr "Derechos de autor %s Stephen Fairchild y otros."
 
-#: python/__init__.py.in.in:103
+#: python/__init__.py.in.in:104
 msgid "Released under the GNU General Public License V2.0+."
-msgstr "Distribué selon les termes de la Licence Publique Générale GNU, V2.0+"
+msgstr "Publicado bajo la GNU General Public License V2.0+."
 
 #. TC: IRC message subcategory, triggers on new track announcements.
 #: python/irc.py:82
 msgid "Track announce"
-msgstr "Annonce des pistes"
+msgstr "Anunciar pista"
 
 #. TC: IRC message subcategory, triggered by a timer.
 #: python/irc.py:84
 msgid "Timer"
-msgstr "Timer"
+msgstr "Minutero"
 
 #. TC: IRC message subcategory, triggered once when the stream starts.
 #: python/irc.py:86
 msgid "On stream up"
-msgstr "En début de flux"
+msgstr "Al inicio del stream"
 
 #. TC: IRC message subcategory, triggered once at the stream's end.
 #: python/irc.py:88
 msgid "On stream down"
-msgstr "En fin de flux"
+msgstr "Al terminar el stream"
 
 #. TC: IRC message subcategory, triggered once at the stream's end.
 #: python/irc.py:90
-#, fuzzy
 msgid "Operations"
-msgstr "Autres options"
+msgstr "Operaciones"
 
 #. TC: Track artist.
 #: python/irc.py:95 python/mutagentagger.py:375 python/songdb.py:902
-#: python/songdb.py:1290 python/sourceclientgui.py:94
+#: python/songdb.py:1290 python/sourceclientgui.py:99
 msgid "Artist"
-msgstr "Artiste"
+msgstr "Artista"
 
 #: python/irc.py:95 python/mutagentagger.py:375 python/songdb.py:1292
-#: python/sourceclientgui.py:94
+#: python/sourceclientgui.py:99
 msgid "Title"
-msgstr "Titre"
+msgstr "Título"
 
 #: python/irc.py:95 python/mutagentagger.py:376 python/songdb.py:1291
-#: python/sourceclientgui.py:94
+#: python/sourceclientgui.py:99
 msgid "Album"
-msgstr "Album"
+msgstr "Álbum"
 
-#: python/irc.py:95 python/sourceclientgui.py:95
+#: python/irc.py:95 python/sourceclientgui.py:100
 msgid "Song name"
-msgstr "Chanson"
+msgstr "Nombre de la cancion"
 
 #. TC: The DJ or Stream name.
-#: python/irc.py:96 python/sourceclientgui.py:1694
+#: python/irc.py:96 python/sourceclientgui.py:1783
 msgid "DJ name"
-msgstr "Nom du DJ"
+msgstr "Nombre de DJ"
 
-#: python/irc.py:96 python/sourceclientgui.py:1695
+#: python/irc.py:96 python/sourceclientgui.py:1784
 msgid "Listen URL"
-msgstr "URL d'écoute"
+msgstr "URL de Escuchar"
 
 #: python/irc.py:96
-#, fuzzy
 msgid "Source URI"
-msgstr "Source"
+msgstr "URI Fuente"
 
 #. TC: Popup menu item for a GTK text entry widget.
 #: python/irc.py:139
 msgid "Insert Attribute or Colour Code"
-msgstr "Insérer un attribut ou un code couleur"
+msgstr "Inserte Atributo o Código de color"
 
 #. TC: Text formatting style.
 #: python/irc.py:176
 msgid "<b>Bold</b>"
-msgstr "<b>Gras</b>"
+msgstr "<b>Negrita</​b>"
 
 #. TC: Text formatting style.
 #: python/irc.py:178
 msgid "<u>Underline</u>"
-msgstr "<u>Sous-ligné</u>"
+msgstr "<u>Subrayado</u>"
 
 #. TC: Text formatting style.
 #: python/irc.py:180
@@ -657,68 +670,68 @@ msgstr "Normal"
 
 #: python/irc.py:186
 msgid "Colours"
-msgstr "Couleurs"
+msgstr "Colores"
 
 #: python/irc.py:403
 msgid "Optional data entry field for information only."
-msgstr "Champ de donnée optionelle pour information uniquement."
+msgstr "Campo de entrada de datos opcional sólo para información."
 
 #. TC: Tab heading text.
 #: python/irc.py:406
 msgid "IRC server"
-msgstr "Serveur IRC"
+msgstr "Servidor IRC"
 
 #: python/irc.py:418
 msgid "Manual start"
-msgstr "Départ manuel"
+msgstr "Inicio manual"
 
 #: python/irc.py:420
 msgid "Off when restarting IDJC and off initially."
-msgstr "Arrêté au redémarrage de IDJC et Arrêté au départ"
+msgstr "Apagado al reiniciar IDJC y apagado inicialmente."
 
 #. TC: The IRC network e.g. EFnet.
 #: python/irc.py:444
 msgid "Network"
-msgstr "Réseau"
+msgstr "La red"
 
 #. TC: label for hostname entry.
-#: python/irc.py:446 python/sourceclientgui.py:208
+#: python/irc.py:446 python/sourceclientgui.py:270
 msgid "Hostname"
-msgstr "Nom de l'hôte"
+msgstr "Nombre de host"
 
 #. TC: TCP/IP port number label.
 #. TC: TCP port number.
-#: python/irc.py:448 python/sourceclientgui.py:704
+#: python/irc.py:448 python/sourceclientgui.py:785
 msgid "Port"
-msgstr "Port"
+msgstr "Puerto"
 
 #: python/irc.py:449
 msgid "User name"
-msgstr "Nom utilisateur"
+msgstr "Nombre de usuario"
 
-#: python/irc.py:450 python/songdb.py:343 python/sourceclientgui.py:209
+#: python/irc.py:450 python/songdb.py:343 python/sourceclientgui.py:271
 msgid "Password"
-msgstr "Mot de passe"
+msgstr "Contraseña"
 
 #. TC: Second choice of IRC nickname.
 #: python/irc.py:454
 msgid "Second choice"
-msgstr "Second choix"
+msgstr "Segunda elección"
 
 #. TC: Third choice of IRC nickname.
 #: python/irc.py:456
 msgid "Third choice"
-msgstr "Troixième choix"
+msgstr "Tercera elección"
 
 #. TC: The IRC user's 'real' name.
 #: python/irc.py:458
 msgid "Real name"
-msgstr "Nom réel"
+msgstr "Nombre real"
 
 #. TC: The NickServ password.
 #: python/irc.py:460
 msgid "NickServ p/w"
-msgstr "MdP NickServ"
+msgstr "NickServ p/w"
 
 #. TC: Tooltip to IRC 'User name' field.
 #: python/irc.py:465
@@ -726,8 +739,8 @@ msgid ""
 "Ideally set this to something even on servers that allow public anonymous "
 "access."
 msgstr ""
-"Idéalement mettez quelque chose même pour les serveurs permettant l'accès "
-"anonyme ou public."
+"Lo ideal sería que ponga esto en algo aún en los servidores que permiten el "
+"acceso público anónimo."
 
 #. TC: tooltip to all IRC nicknames entry fields.
 #: python/irc.py:475
@@ -737,10 +750,10 @@ msgid ""
 "additional underscore until giving up. This gives IDJC a maximum of nine IRC "
 "nicknames to try."
 msgstr ""
-"Quand un pseudo est déjà utilisé sur le réseau IRC, ces pseudos sont testés "
-"les uns après les autres puis une seconde fois en y ajoutant un sous-"
-"ligné jusqu'à ce la fin. Cela donne à IDJC un maximum de neuf pseudos à "
-"tenter."
+"Cuando un apodo está en uso en la red objetivo de IRC, durante la conexión "
+"estos apodos IRC se reciclan, después dos veces de nuevo después de añadir "
+"un subrayado adicional hasta que darse por vencido. Este IDJC da un máximo "
+"de nueve apodos IRC para probar."
 
 #: python/irc.py:480
 msgid ""
@@ -749,10 +762,11 @@ msgid ""
 "\n"
 "Ideally set this to something."
 msgstr ""
-"Le nom réel à utiliser, sera disponible que la connexion au réseau soit ou "
-"non établie en utilisant le pseudo principal.\n"
+"El verdadero nombre que desea utilizar que estará disponible "
+"independientemente de si la conexión de red se hizo con el apodo principal o "
+"no.\n"
 "\n"
-"Remplissez le par quelque chose."
+"Idealmente establece esto a algo."
 
 #: python/irc.py:483
 msgid ""
@@ -762,11 +776,13 @@ msgid ""
 "The use of the NickServ service requires prior nickname registration on the "
 "network using a regular chat client."
 msgstr ""
-"Si cette valeur est renseignée, tenter la récupération du pseudo IRC si "
-"nécessaire et se connecter grace à NickServ at services.\n"
+"Si este valor se establece se hará un intento para adquirir su primer "
+"elección \n"
+"de apodo IRC (si es necesario) e inicie sesión con NickServ at services. \n"
 "\n"
-"L'utilisation des services NickServ nécessitent qu'un enregistrement "
-"préalable du pseudo ait été effectué avec un client IRC standard."
+"El uso del servicio NickServ requiere registrar antes el apodo en la red "
+"utilizando\n"
+"un cliente regular de chat."
 
 #: python/irc.py:511
 msgid ""
@@ -774,15 +790,15 @@ msgid ""
 "\n"
 "This action will also erase all of its associated messages."
 msgstr ""
-"<span weight='bold' size='12000'>Supprimer ce serveur de façon définitive?</"
+"<span weight='bold' size='12000'>Eliminar permanentemente este servidor?</"
 "span>\n"
 "\n"
-"Cette action effacera aussi tous les messages associés."
+"Este acción también borrará todos sus mensajes asociados."
 
 #. TC: An IRC channel #chan or user name entry box label.
 #: python/irc.py:559
 msgid "Channels/Users"
-msgstr "Canaux/Utilisateurs"
+msgstr "Canales/Usuarios"
 
 #: python/irc.py:563
 msgid ""
@@ -792,16 +808,16 @@ msgid ""
 "Protected channels are included with the form:\n"
 "#channel:keyword."
 msgstr ""
-"Liste séparée par des virgules des canaux et/ou utilisateurs à qui ce "
-"message est destiné.\n"
+"La lista de canales separados por espacios o comas y/o usuarios a los que se "
+"enviará el mensaje.\n"
 "\n"
-"Les canaux protégés sont inclus sous la forme :\n"
-"#canal:motclef"
+"Los canales protegidos se incluyen con la forma:\n"
+"#canal:palabra_clave."
 
 #. TC: Message text to send to an IRC channel. Widget label.
 #: python/irc.py:616
 msgid "Message"
-msgstr "Message"
+msgstr "Mensaje"
 
 #: python/irc.py:620
 msgid ""
@@ -812,23 +828,23 @@ msgid ""
 "\n"
 "The window below displays how the message will appear to users of XChat."
 msgstr ""
-"Le message à envoyer.\n"
+"El mensaje a enviar.\n"
 "\n"
-"Dans la fenêtre de pop-up (clic droit) se trouvent quelques options utiles "
-"pour les métadonnées et le formatage du texte.\n"
+"En la ventana emergente (clic con el ratón derecho) son algunas opciones "
+"útiles para incrustar metadatos y para el formato de texto.\n"
 "\n"
-"La fenêtre ci-dessous affiche comment le message apparaitra aux utilisateurs "
-"de XChat XChat2 ou HexChat."
+"La ventana por abajo muestra cómo aparecerá el mensaje a los usuarios de "
+"XChat."
 
 #. TC: Dialog window title text.
 #: python/irc.py:673
 msgid "IRC track announce"
-msgstr "Annonce de pistes IRC"
+msgstr "Anunciar pista IRC"
 
 #. TC: Spinbutton label for a delay value.
 #: python/irc.py:680
 msgid "Delay"
-msgstr "Délais"
+msgstr "Retrasar"
 
 #. TC: tooltip on a spinbutton widget.
 #: python/irc.py:682
@@ -842,30 +858,29 @@ msgid ""
 "\n"
 "This setting will help synchronise the track change with the message."
 msgstr ""
-"Délais pour ce message.\n"
+"El tiempo de retardo de este mensaje.\n"
 "\n"
-"Typiquement les clients des auditeurs temporisent à peu près 10 secondes de "
-"données audio ce qui signifie qu'il lisent le flux après cette émission et "
-"que sans délais, les messages IRC apparaitraient quelques secondes avant "
-"l'audio.\n"
+"Los clientes de oyente tipicamente amortiguan aproximadamente diez segundos "
+"de datos de audio que significa que están escuchando la misma cantidad de "
+"tiempo detrás de la stream real, por lo tanto, sin un retraso los mensajes "
+"IRC aparecerá al oyente muchos segundos por delante del audio.\n"
 "\n"
-"Ce paramêtre permet de synchroniser les changements de pistes avec le "
-"message."
+"Este ayudará a sincronizar el cambio de pista con el mensaje."
 
 #. TC: Dialog window title text.
 #: python/irc.py:710
 msgid "IRC timed message"
-msgstr "Message IRC temporisé"
+msgstr "Mensaje cronometrado IRC"
 
 #. TC: Spinbutton time offset value label.
 #: python/irc.py:719
 msgid "Offset"
-msgstr "Offset"
+msgstr "Compensar"
 
 #. TC: Spinbutton timed interval duration value label.
 #: python/irc.py:721
 msgid "Interval"
-msgstr "Interval"
+msgstr "Intervalo"
 
 #. TC: spinbutton tooltip
 #: python/irc.py:724
@@ -873,20 +888,21 @@ msgid ""
 "The time offset within the below specified interval at which the message "
 "will be issued."
 msgstr ""
-"Offset de temps dans l'interval spécifié après lequel le message sera envoyé."
+"El tiempo de desplazamiento dentro del intervalo especificado a continuación "
+"en la que se emitió el mensaje."
 
 #: python/irc.py:728
 msgid "The interval in seconds of the timed message."
-msgstr "Interval en secondes des messages temporisés."
+msgstr "El intervalo en segundos del mensaje programado."
 
 #: python/irc.py:967
 msgid "This feature requires the installation of python-irc."
-msgstr "Cette fonctionalité nécessite l'installation de python-irclib"
+msgstr "Esta función requiere la instalación de python-irc."
 
 #. TC: Indicator text: We used a password.
 #: python/irc.py:1058
 msgid "PASSWORD"
-msgstr "MOT DE PASSE"
+msgstr "CONTRASEÑA"
 
 #. TC: Indicator text: We interact with NickServ.
 #: python/irc.py:1061
@@ -896,189 +912,192 @@ msgstr "NICKSERV"
 #. TC: Indicator text: Server connection started manually.
 #: python/irc.py:1064
 msgid "MANUAL"
-msgstr "MANUEL"
+msgstr "MANUAL"
 
 #. TC: Dialog title text.
 #: python/irc.py:1089
 msgid "IRC stream up message"
-msgstr "Messages IRC vers le haut"
+msgstr "Mensaje IRC de stream activo"
 
 #. TC: Dialog title text.
 #: python/irc.py:1091
 msgid "IRC stream down message"
-msgstr "Messages IRC vers le bas"
+msgstr "Mensaje IRC de stream inactivo"
 
 #. TC: Dialog title text.
 #: python/irc.py:1093
 msgid "IRC station operations"
-msgstr ""
+msgstr "Operaciones de la estación de IRC"
 
 #: python/jingles.py:96
 msgid "Stop"
-msgstr "Stopper"
+msgstr "Deténgase"
 
 #. TC: Column heading, whether to play.
-#: python/jingles.py:114 python/playergui.py:299
+#: python/jingles.py:114 python/playergui.py:326
 msgid "Play"
-msgstr "Lire"
+msgstr "Reproducir"
 
-#: python/jingles.py:123 python/sourceclientgui.py:1051
+#: python/jingles.py:123 python/sourceclientgui.py:1132
 msgid "Repeat"
-msgstr "Répéter"
+msgstr "Repetir"
 
 #: python/jingles.py:136
 msgid "Configure"
-msgstr "Configurer"
+msgstr "Configurar"
 
-#: python/jingles.py:327 python/playergui.py:4135
+#: python/jingles.py:327 python/playergui.py:4194
 msgid "Supported media"
-msgstr "Média supportaté"
+msgstr "Medios compatibles"
 
 #: python/jingles.py:334
 #, python-format
 msgid "Effect %d Config"
-msgstr "Config effet %d"
+msgstr "Config Efecto %d"
 
 #: python/jingles.py:349
 msgid "Trigger text"
-msgstr "Texte Trigger"
+msgstr "Texto Disparador"
 
 #: python/jingles.py:350
 msgid "No Name"
-msgstr "Sans nom"
+msgstr "Sin Nombre"
 
 #: python/jingles.py:357
 msgid "Level adjustment (dB)"
-msgstr "Ajustement des niveaux (dB)"
+msgstr "Ajuste de nivel (dB)"
 
 #: python/jingles.py:432
 msgid "Effects volume."
-msgstr "Volume des effets"
+msgstr "Volumen de los efectos."
 
 #: python/jingles.py:439
 msgid "Player headroom that is applied when an effect is playing."
-msgstr "Headroom appliqué au lecteur quand un effet est lu."
+msgstr ""
+"Altura libre del reproductor que se aplica cuando un efecto está "
+"reproduciéndose."
 
 #: python/jingles.py:502
 msgid "Alternative"
-msgstr "Alternatif"
+msgstr "Alternativa"
 
 #: python/jingles.py:503
 msgid "Default"
-msgstr "Défaut"
+msgstr "Predeterminado"
 
 #: python/jingles.py:548
 msgid "Effects"
-msgstr "Effets"
+msgstr "Efectos"
 
 #: python/jingles.py:591
 #, python-format
 msgid "Effects %d"
-msgstr "Effet %d"
+msgstr "Efectos %d"
 
-#: python/jingles.py:599 python/maingui.py:189
+#: python/jingles.py:599 python/maingui.py:190
 msgid "Background Tracks"
-msgstr "Pistes de fond"
+msgstr "Pistas de fondo"
 
 #: python/jingles.py:618
 msgid "Background Tracks volume."
-msgstr "Volume des pistes de fond"
+msgstr "Volumen de las Pistas de Fondo."
 
-#: python/maingui.py:93
+#: python/maingui.py:94
 msgid "Show a JACK freewheel control on the main panel"
-msgstr "Afficher le contrôle rouelibre de JACK en page principale"
+msgstr "Muestra un control de freewheeling de JACK en el panel principal"
 
-#: python/maingui.py:95
+#: python/maingui.py:96
 msgid "Toggle JACK freewheel mode."
-msgstr "Commutateur du mode rouelibre de JACK"
+msgstr "Cambia el modo de freewheel de JACK."
 
-#: python/maingui.py:168
+#: python/maingui.py:169
 msgid "File"
-msgstr "Fichier"
+msgstr "Archivo"
 
-#: python/maingui.py:168 python/preferences.py:1130
+#: python/maingui.py:169 python/preferences.py:1130
 msgid "View"
-msgstr "Voir"
+msgstr "Ver"
 
-#: python/maingui.py:169
+#: python/maingui.py:170
 msgid "JACK Ports"
-msgstr "Ports JACK"
+msgstr "Puertos JACK"
 
-#: python/maingui.py:169
+#: python/maingui.py:170
 msgid "Help"
-msgstr "Aide"
+msgstr "Ayuda"
 
-#: python/maingui.py:171 python/maingui.py:3689
+#: python/maingui.py:172 python/maingui.py:3688
 msgid "Streams"
-msgstr "Flux"
+msgstr "Streams"
 
-#: python/maingui.py:172
+#: python/maingui.py:173
 msgid "Recorders"
-msgstr "Enregistreurs"
+msgstr "Grabadores"
 
-#: python/maingui.py:185 python/maingui.py:224
+#: python/maingui.py:186 python/maingui.py:225
 msgid "Output"
-msgstr "Sortie"
+msgstr "Salida"
 
-#: python/maingui.py:185
+#: python/maingui.py:186
 msgid "Preferences"
-msgstr "Préférences"
+msgstr "Preferencias"
 
-#: python/maingui.py:185
+#: python/maingui.py:186
 msgid "Profiles"
-msgstr "Profiles"
+msgstr "Perfiles"
 
-#: python/maingui.py:188 python/songdb.py:409
+#: python/maingui.py:189 python/songdb.py:409
 msgid "Music Database"
-msgstr "Base de donnée musicale"
+msgstr "Base de datos musical"
 
-#: python/maingui.py:188
+#: python/maingui.py:189
 msgid "Channel Meters"
-msgstr "Canal Mêtres"
+msgstr "Medidores de canal"
 
-#: python/maingui.py:188
+#: python/maingui.py:189
 msgid "Output Meters"
-msgstr "Sortie Mêtres"
+msgstr "Medidores de salida"
 
-#: python/maingui.py:189
+#: python/maingui.py:190
 msgid "Tabbed Area"
-msgstr "Zone tabulée"
+msgstr "Área de pestañas"
 
-#: python/maingui.py:189
+#: python/maingui.py:190
 msgid "Button Bar"
-msgstr "Barre de boutons"
+msgstr "Barra de botones"
 
-#: python/maingui.py:223 python/preferences.py:1485
+#: python/maingui.py:224 python/preferences.py:1485
 msgid "Channels"
-msgstr "Canaux"
+msgstr "Canales"
 
-#: python/maingui.py:223
+#: python/maingui.py:224
 msgid "Players"
-msgstr "Lecteur"
+msgstr "Reproductores"
 
-#: python/maingui.py:224
+#: python/maingui.py:225
 msgid "VoIP"
 msgstr "VoIP"
 
-#: python/maingui.py:224 python/maingui.py:3129
+#: python/maingui.py:225 python/maingui.py:3128
 msgid "DSP"
 msgstr "DSP"
 
-#: python/maingui.py:224
+#: python/maingui.py:225
 msgid "Mix"
-msgstr "Mix"
+msgstr "Mezcla"
 
-#: python/maingui.py:224
+#: python/maingui.py:225
 msgid "Misc"
-msgstr "Divers"
+msgstr "Otra información"
 
-#: python/maingui.py:269
+#: python/maingui.py:270
 msgid "Reset"
-msgstr "RàZ"
+msgstr "Reiniciar"
 
-#: python/maingui.py:272
+#: python/maingui.py:273
 msgid "Reset the JACK port connections to the default settings."
-msgstr "Forcer toutes les connexions aux ports JACK à leur valeurs par défaut."
+msgstr ""
+"Restablecer las conexiones del puerto JACK a la configuración predeterminada."
 
 #: python/maingui.py:277
 msgid ""
@@ -1088,294 +1107,296 @@ msgid ""
 "All currently established connections will be lost\n"
 "and replaced with defaults."
 msgstr ""
-"<span size=\"12000\" weight=\"bold\">RàZ de toutes les connexions aux ports "
-"JACK et remise aux paramêtres par défaut."
+"<span size=\"12000\" weight=\"bold\">Restablecer todas las conexiones del "
+"puerto JACK?</span>\n"
+"\n"
+"Todas las conexiones actualmente establecidas se perderán y serán "
+"reemplazadas por predeterminadas."
 
-#: python/maingui.py:321
+#: python/maingui.py:320
 msgid "No compatible ports available."
-msgstr "Aucun port compatible n'est disponible"
+msgstr "No hay puertos compatibles disponibles."
 
-#: python/maingui.py:364
+#: python/maingui.py:363
 #, python-brace-format
 msgid "{0} profile={1}:{2} settings saved."
-msgstr "{0} profil={1}:{2} paramêtres sauvegardés."
+msgstr "{0} perfil = {1} {2} configuración guardada."
 
-#: python/maingui.py:367
+#: python/maingui.py:366
 #, python-brace-format
 msgid "{0} session={1}:{2} settings saved."
-msgstr "{0} session={1}:{2} paramêtres sauvegardés."
+msgstr "{0} session = {1} {2} configuración guardada."
 
-#: python/maingui.py:671
+#: python/maingui.py:670
 msgid "Text"
-msgstr "Texte"
+msgstr "Texto"
 
-#: python/maingui.py:674
+#: python/maingui.py:673
 msgid "The opener button's text."
-msgstr "Texte des boutons d'ouverture"
+msgstr "El texto del botón de apertura."
 
-#: python/maingui.py:682
-msgid "Icon"
-msgstr "Icône"
-
-#: python/maingui.py:690
+#: python/maingui.py:689
 msgid "The opener button's icon."
-msgstr "L'icône d'ouverture."
+msgstr "Icono del botón de apertura."
 
-#: python/maingui.py:698
+#: python/maingui.py:697
 msgid ""
 "The headroom is the amount by which to reduce player volume when this opener "
 "is active. Note that the actual amount will be the largest value of all the "
 "currently open buttons."
 msgstr ""
-"Le headroom est le taux de réduction en dB appliqué au volume du lecteur "
-"quand ce lanceur est activé. Notez que la valeur utilisée sera la plus "
-"élevée parmis celles des bouttons activés."
+"La altura libre es la cantidad en que se reduce el volumen del reproductor "
+"cuando este primer botón está activo. Tenga en cuenta que la cantidad real "
+"será el valor más grande de todos los botones abiertos actualmente."
 
-#: python/maingui.py:703
+#: python/maingui.py:702
 msgid "The amount of headroom required (dB)"
-msgstr "Le taux de headroom nécessaire (dB)"
+msgstr "La cantidad de altura libre requerido (dB)"
 
-#: python/maingui.py:712
+#: python/maingui.py:711
 msgid "This button will flash as a reminder to close"
-msgstr "Ce bouton clignottera pour rappeler de le fermer"
+msgstr "Este botón parpadeará como un recordatorio para cerrar"
 
-#: python/maingui.py:713
+#: python/maingui.py:712
 msgid ""
 "After a number of seconds where a main player is active this button's status "
 "indicator will start to flash and will continue to do so until the button is "
 "closed or the player stops."
 msgstr ""
-"Un certain laps de temps après que le lecteur principal soit actif, "
-"l'indicateur de status de ce bouton commence à clignotter jusqu'à ce que le "
-"bouton soit fermé ou le lecteur arrêté."
+"Después de un número de segundos que un reproductor principal es activa "
+"indicador de estado de este botón comenzará a parpadear y continuará "
+"haciéndolo hasta que el botón se cierra o el reproductor se detiene."
 
-#: python/maingui.py:721
+#: python/maingui.py:720
 msgid "This button is to be treated as a microphone opener"
-msgstr "Ce bouton doit être utilisé comme ouvreur de micro"
+msgstr "Este botón se va a tratar como un abridor de micrófono"
 
-#: python/maingui.py:723
+#: python/maingui.py:722
 msgid ""
 "The button will be grouped with the other microphone opener buttons. It will "
 "be affected by signals to close microphone buttons. Channels associated with "
 "this button will be mixed differently when using the VoIP modes."
 msgstr ""
-"Le bouton sera regroupé avec les autres ouvreurs de micro. Il sera affecté "
-"par les signaux de fermeture de micro. Les canaux associés à ce bouton "
-"seront mixés différamment lors de l'utilisation des modes VoIP."
+"El botón se agrupa con los otros botones abridor micrófono. Se afectada por "
+"las señales para cerrar botones de micrófono. Canales relacionados con este "
+"botón se mezclarán de manera diferente cuando se utilizan los modos de VoIP."
 
-#: python/maingui.py:732
+#: python/maingui.py:731
 msgid "This button will automatically cancel JACK freewheel mode"
-msgstr ""
+msgstr "Este botón, se cancelará automáticamente el modo de freewheel de JACK"
 
-#: python/maingui.py:734
+#: python/maingui.py:733
 msgid ""
 "This should be set for all buttons that control input from a live sound "
 "source or device."
 msgstr ""
-"Doit être configuré pour chacun des boutons contrôlant l'entrée du son en "
-"direct d'une source ou d'un périphérique."
+"Esto se debe establecer para todos los botones que controlan la entrada de "
+"una fuente de sonido en vivo o dispositivo."
 
-#: python/maingui.py:737
+#: python/maingui.py:736
 msgid "Button Open Triggers"
-msgstr "Bouton Trieurs"
+msgstr "Abrir botón dispara"
 
-#: python/maingui.py:744
+#: python/maingui.py:743
 msgid "Playlist advance button"
-msgstr "Bouton d'avance dans la liste de lecture"
+msgstr "Botón de avance de reproducción"
 
-#: python/maingui.py:745 python/maingui.py:746
+#: python/maingui.py:744 python/maingui.py:745
 #, python-format
 msgid "'%s' control"
-msgstr "contrôle «%s»"
+msgstr "%s de control'"
 
 #. TC: Insert playlist control to stop the player.
-#: python/maingui.py:745 python/playergui.py:4393
+#: python/maingui.py:744 python/playergui.py:4457
 msgid "Player Stop"
-msgstr "Arret lecteur"
+msgstr "Detener Reproductor"
 
 #. TC: Insert playlist control to stop the player.
-#: python/maingui.py:746 python/playergui.py:4400
+#: python/maingui.py:745 python/playergui.py:4464
 msgid "Player Stop 2"
-msgstr "Arret Lecteur 2"
+msgstr "Detener Reproductor 2"
 
-#: python/maingui.py:747
+#: python/maingui.py:746
 msgid "Announcements"
-msgstr "Annonces"
+msgstr "Avisos"
 
-#: python/maingui.py:759
+#: python/maingui.py:758
 msgid "When opened close these other buttons"
-msgstr "Quand il est ouvert, ferme les autres boutons"
+msgstr "Cuando se abre cerrar estos otros botones"
 
-#: python/maingui.py:770
+#: python/maingui.py:769
 msgid "Shell Command"
-msgstr "Commande Shell"
+msgstr "Shell de comandos"
 
-#: python/maingui.py:771
+#: python/maingui.py:770
 msgid ""
 "Mostly useful issuing 'amixer' commands, in particular for setting capture."
 msgstr ""
-"Pratique principalement avec les commandes de «amixer», en particulier pour "
-"configurer la capture."
+"Mayormente útil emitiendo comandos 'amixer' en particular, para el "
+"establecimiento de la captura."
 
-#: python/maingui.py:791
+#: python/maingui.py:790
 msgid "On open"
-msgstr "A l'ouverture"
+msgstr "Al abrir"
 
-#: python/maingui.py:792
+#: python/maingui.py:791
 msgid "On close"
-msgstr "A la fermeture"
+msgstr "Al cierre"
 
-#: python/maingui.py:836
+#: python/maingui.py:835
 msgid "Main Panel Opener Buttons"
-msgstr "Panneau principal des boutons d'ouvreurs"
+msgstr "Panel principal Abridor Botones"
 
-#: python/maingui.py:848
+#: python/maingui.py:847
 msgid "Indicate button numbers and associated channel numbers"
-msgstr "Indique le numéro de boutton et les numéros de canaux associés"
+msgstr "Indique los números de los botones y números de los canales asociados"
 
-#: python/maingui.py:850
+#: python/maingui.py:849
 msgid "A useful feature to have switched on while allocating channel openers."
 msgstr ""
-"Une fonctionalité utile à avoir activée lorsque l'on alloue des ouvreurs de "
-"canaux."
+"Una característica útil de haber encendido mientras se asigna los abridores "
+"de canal."
 
-#: python/maingui.py:856
+#: python/maingui.py:855
 msgid "Status Indicator Appearance"
-msgstr "Apparence de l'indicateur d'état"
+msgstr "Aparencia del Indicador de estado"
 
-#: python/maingui.py:859
+#: python/maingui.py:858
 msgid ""
 "Each opener button has two vertical bars at the side to make the button "
 "state more apparent. These settings control their appearance."
 msgstr ""
-"Chaque bouton d'ouverture possède une barre verticale pour le rendre plus "
-"visible. Ces paramêtre contrôlent cette apparence."
+"Cada botón abridor tiene dos barras verticales en el lado para que el estado "
+"de botón más evidente. Estos ajustes controlan su apariencia."
 
-#: python/maingui.py:868 python/format.py:827
+#: python/maingui.py:867 python/format.py:847
 msgid "Width"
-msgstr "Largeur"
+msgstr "Anchura"
 
-#: python/maingui.py:875
+#: python/maingui.py:874
 msgid "Opened"
-msgstr "Ouvert"
+msgstr "Abierto"
 
-#: python/maingui.py:879 python/preferences.py:503 python/preferences.py:505
+#: python/maingui.py:878 python/preferences.py:503 python/preferences.py:505
 msgid "Closed"
-msgstr "Fermé"
+msgstr "Cerrado"
 
-#: python/maingui.py:884
+#: python/maingui.py:883
 msgid "Remind"
-msgstr "Se rappeler"
+msgstr "Recordar"
 
 #. TC: A placeholder text for when there are no opener buttons.
-#: python/maingui.py:1065
+#: python/maingui.py:1064
 msgid "No Channel Opener Buttons"
-msgstr "Aucun bouton d'ouverture de canal"
+msgstr "No Hay Botones Abridores de Canal"
 
-#: python/maingui.py:1354
+#: python/maingui.py:1353
 msgid ""
 "This indicates the state of the various streams. Flashing means stream "
 "packets are being discarded because of network congestion. Partial red means "
 "the send buffer is partially full indicating difficulty communicating with "
 "the server. Green means everything is okay."
 msgstr ""
-"Indique l'état des différents flux. Clignottant indique que des paquets du "
-"flux sont écartés à cause d'une congestion du réseau. Partiellement rouge "
-"signifie que le tampon d'émission est partiellement plein, indiquant des "
-"difficultés de comunication avec le serveur. Vert indique que tout va bien."
+"Esto indica el estado de las diversas streams. El parpadeante indica que "
+"paquetes del stream están siendo desechados debido a la congestión de la "
+"red. El Rojo significa que el buffer de envío es parcialmente lleno que "
+"indica dificultades para comunicarse con el servidor. El verde significa que "
+"todo está bien."
 
-#: python/maingui.py:1377
+#: python/maingui.py:1376
 msgid "The combined total number of listeners in all server tabs."
-msgstr "Le nombre total d'auditeurs dans tous les onglets de serveurs."
+msgstr "El número total de oyentes en todas las pestañas de servidor."
 
 #. TC: Record as in, to make a recording.
-#: python/maingui.py:1825 python/sourceclientgui.py:2784
+#: python/maingui.py:1824 python/sourceclientgui.py:2874
 msgid "Record"
-msgstr "Enregistrer"
+msgstr "Grabar"
 
-#: python/maingui.py:2647
+#: python/maingui.py:2646
 msgid "Confirmation to quit IDJC is required."
-msgstr "Une confirmation est nécessaire pour quitter IDJC."
+msgstr "Se requiere confirmación para salir IDJC."
 
-#: python/maingui.py:2651
+#: python/maingui.py:2650
 msgid "All active recordings and radio streams will terminate."
-msgstr "Tous les entregistrements et flux radio seront arrêtés."
+msgstr "Todas las grabaciones de activos y flujos de radio terminarán."
 
-#: python/maingui.py:2653
+#: python/maingui.py:2652
 msgid "All of the active radio streams will terminate."
-msgstr "Tous les flux radio en cours seront arrêtés."
+msgstr "Todas las streams de la radio activos terminará."
 
-#: python/maingui.py:2655
+#: python/maingui.py:2654
 msgid "All active recordings will cease."
-msgstr "Tous les enregistrements sen cours seront arrêtés."
+msgstr "Todas las grabaciones activas cesarán."
 
 #. TC: Popup menu item, wipes away the tracks played history text.
-#: python/maingui.py:2921 python/maingui.py:3353
+#: python/maingui.py:2920 python/maingui.py:3352
 msgid "Remove Contents"
-msgstr "Supprimer le contenu"
+msgstr "Eliminar Contenido"
 
-#: python/maingui.py:3076
+#: python/maingui.py:3075
 msgid "Renameable Labels"
-msgstr "Labels renommables"
+msgstr "Etiquetas Renombrables"
 
-#: python/maingui.py:3100
+#: python/maingui.py:3099
 msgid "Main Players"
-msgstr "Lecteur principal"
+msgstr "Reproductores Principales"
 
-#: python/maingui.py:3153
+#: python/maingui.py:3152
 msgid "Mix voice over IP audio to the output stream."
-msgstr "Mixe l'audio VoIP au flux de sortie"
+msgstr "Mezcla de voz sobre IP de audio a la secuencia de salida."
 
-#: python/maingui.py:3166
+#: python/maingui.py:3165
 msgid "Mix voice over IP audio to the DJ only."
-msgstr "Mixe l'audio VoIP uniquement au DJ"
+msgstr "Mezcla de voz sobre IP de audio a sólo el DJ."
 
-#: python/maingui.py:3193
+#: python/maingui.py:3192
 msgid ""
 "This button steps through the active playlist, pausing between tracks. The "
 "active playlist is defined by the placement of the crossfader."
 msgstr ""
-"Ce bouton avance dans la liste de lecture en s'arrêtant entre chaque piste. "
-"La liste de lecture en cours est définie par l'emplacement du crossfader."
+"Este botón pasos a través de la lista de reproducción activa, haciendo una "
+"pausa entre las pistas. La lista de reproducción activa se define por la "
+"colocación del crossfader."
 
-#: python/maingui.py:3238 python/preferences.py:873
+#: python/maingui.py:3237 python/preferences.py:873
 msgid "The volume control shared by both music players."
-msgstr "Le contrôle de volume partagé par les deux lecteurs."
+msgstr "El control de volumen compartido por ambos reproductores de música."
 
-#: python/maingui.py:3249
+#: python/maingui.py:3248
 msgid "The volume control for the right music player."
-msgstr "Le Volume du lecteur de droite."
+msgstr "El control de volumen para el reproductor de música derecha."
 
-#: python/maingui.py:3277
+#: python/maingui.py:3276
 msgid "VoIP level adjustment. 0dB gain is at the mid point."
-msgstr "Ajustement du niveau VoIP. 0dB est le point milieu."
+msgstr "Ajuste del nivel de VoIP. Ganancia de 0 dB está en el punto medio."
 
-#: python/maingui.py:3300
+#: python/maingui.py:3299
 msgid "The stream volume level to send to the voice over IP connection."
-msgstr "Le niveau de volume à envoyer à la connexion VoIP."
+msgstr ""
+"El nivel de volumen stream para enviar a la voz a través de conexión IP."
 
-#: python/maingui.py:3327 python/preferences.py:1413
+#: python/maingui.py:3326 python/preferences.py:1413
 msgid "Tracks Played"
-msgstr "Pistes lues"
+msgstr "Pistas Reproducidas"
 
-#: python/maingui.py:3398 python/maingui.py:3400 python/maingui.py:3424
+#: python/maingui.py:3397 python/maingui.py:3399 python/maingui.py:3423
 msgid "Monitor Mix"
-msgstr "Monitor Mix"
+msgstr "Mezcla de Monitor"
 
-#: python/maingui.py:3407 python/maingui.py:3424 python/playergui.py:4334
+#: python/maingui.py:3406 python/maingui.py:3423 python/playergui.py:4398
 msgid "DJ"
 msgstr "DJ"
 
 #. TC: binding editor, action pane, first row, toplevel menu.
-#: python/maingui.py:3410 python/maingui.py:3424 python/midicontrols.py:155
-#: python/midicontrols.py:1507 python/playergui.py:4326
-#: python/sourceclientgui.py:2792
+#: python/maingui.py:3409 python/maingui.py:3423 python/midicontrols.py:155
+#: python/midicontrols.py:1507 python/playergui.py:4390
+#: python/sourceclientgui.py:2882
 msgid "Stream"
-msgstr "Flux"
+msgstr "Stream"
 
 #. TC: Context {0}, {1}, {2} = Monitor Mix, Stream, DJ
 #. TC: Or whatever they become translated to.
-#: python/maingui.py:3420
+#: python/maingui.py:3419
 #, python-brace-format
 msgid ""
 "In IDJC there are are two audio paths and this '{0}' control toggles between "
@@ -1383,398 +1404,402 @@ msgid ""
 "including the effects of the crossfader. '{0}' needs to be set to '{2}' in "
 "order to make proper use of the VoIP features."
 msgstr ""
-"Dans IDJC il existe deux chemins et le contrôle «{0}» fait passer de l'un à "
-"l'autre. Lorsque «{1}» est actif, vous entendez ce que les auditeurs "
-"entendent effets du crossfader compris. «{0}» doit être positionné sur «{2}» "
-"pour pouvoir utiliser la fonctionalité VoIP"
+"En IDJC existen dos caminos de audio y esta '{0}' control hace alternar "
+"entre ellos. Cuando '{1}' está activo se puede oír lo que los oyentes están "
+"escuchando incluyendo los efectos de crossfader. '{0}' debe ser puesto a "
+"'{2}' con el fin de hacer un uso correcto de las características de VoIP."
 
 #. TC: Dropdown box title text widget.
-#: python/maingui.py:3433 python/maingui.py:3435
+#: python/maingui.py:3432 python/maingui.py:3434
 msgid "Metadata Source"
-msgstr "Source de métadonnées"
+msgstr "Fuente de los Metadatos"
 
 #. TC: The chosen source of track metadata.
-#: python/maingui.py:3441 python/playergui.py:4044
+#: python/maingui.py:3440 python/playergui.py:4103
 msgid "Playlist 1"
-msgstr "Liste de lecture 1"
+msgstr "Lista de Reproducción 1"
 
 #. TC: The chosen source of track metadata.
-#: python/maingui.py:3443 python/playergui.py:4045
+#: python/maingui.py:3442 python/playergui.py:4104
 msgid "Playlist 2"
-msgstr "Liste de lecture 2"
+msgstr "Lista de Reproducción 2"
 
 #. TC: The chosen source of track metadata.
-#: python/maingui.py:3445 python/songdb.py:909 python/songdb.py:1293
+#: python/maingui.py:3444 python/songdb.py:909 python/songdb.py:1293
 msgid "Last Played"
-msgstr "Dernière lue"
+msgstr "Última Reproducido"
 
 #. TC: The chosen source of track metadata.
-#: python/maingui.py:3447 python/maingui.py:3484 python/maingui.py:3486
+#: python/maingui.py:3446 python/maingui.py:3483 python/maingui.py:3485
 msgid "Crossfader"
 msgstr "Crossfader"
 
 #. TC: The chosen source of track metadata. In this case no metadata.
 #. TC: Fade time is zero. No fade, none.
-#: python/maingui.py:3449 python/playergui.py:4309
+#: python/maingui.py:3448 python/playergui.py:4373
 msgid "None"
-msgstr "Aucune"
+msgstr "Ninguna"
 
 #. TC: The chosen source of track metadata. In this case no metadata.
-#: python/maingui.py:3451
+#: python/maingui.py:3450 python/playergui.py:4104
 msgid "Playlist 3"
-msgstr "Liste de lecture 3"
+msgstr "Lista de Reproducción 3"
 
-#: python/maingui.py:3456
+#: python/maingui.py:3455
 msgid "Select the origin for the playing track metadata on the stream."
-msgstr "Sélectionner l'origine pour la piste de métadonnées"
+msgstr ""
+"Seleccione el origen de los metadatos en el stream de la pista en "
+"reproducción."
 
 #. TC: Abbreviation of left.
-#: python/maingui.py:3466 python/maingui.py:3468
+#: python/maingui.py:3465 python/maingui.py:3467
 msgid "L"
-msgstr "G"
+msgstr "L"
 
-#: python/maingui.py:3478
+#: python/maingui.py:3477
 msgid "Move the crossfader fully left."
-msgstr "Déplacer le crossfader totalement à gauche"
+msgstr "Mueva el crossfader totalmente hacia la izquierda."
 
-#: python/maingui.py:3498
+#: python/maingui.py:3497
 msgid "The crossfader."
-msgstr "Le crossfader"
+msgstr "El crossfader."
 
 #. TC: Abbreviation of right.
-#: python/maingui.py:3502 python/maingui.py:3504
+#: python/maingui.py:3501 python/maingui.py:3503
 msgid "R"
-msgstr "D"
+msgstr "R"
 
-#: python/maingui.py:3514
+#: python/maingui.py:3513
 msgid "Move the crossfader fully right."
-msgstr "Déplacer le crossfader totalement à droite"
+msgstr "Mueva el crossfader totalmente a la derecha."
 
 #. TC: Describes a mid point.
-#: python/maingui.py:3523 python/maingui.py:3525
+#: python/maingui.py:3522 python/maingui.py:3524
 msgid "Middle"
-msgstr "Milieu"
+msgstr "Medio"
 
-#: python/maingui.py:3542 python/maingui.py:3549
+#: python/maingui.py:3541 python/maingui.py:3548
 msgid "Move the crossfader to the middle of its range of travel."
-msgstr "Déplacer le crossfader au point milieu de son chemin."
+msgstr "Mueva el crossfader a la mitad de su rango de desplazamiento."
 
 #. TC: The attenuation response curve of the crossfader. User selectable.
-#: python/maingui.py:3554 python/maingui.py:3556
+#: python/maingui.py:3553 python/maingui.py:3555
 msgid "Response"
-msgstr "Réponse"
+msgstr "Respuesta"
 
-#: python/maingui.py:3578
+#: python/maingui.py:3577
 msgid ""
 "This selects the response curve of the crossfader.\n"
 "\n"
 "The mid-point attenuations are -3dB, 0dB, and -22dB respectively."
 msgstr ""
-"Sélectionne le type de courbe de réponse du crossfader.\n"
-"Les atténuations au point milieu sont respectivement -3dB, 0dB et -22dB "
+"Esto selecciona la curva de respuesta del crossfader.\n"
+"\n"
+"Los atenuaciones del punto medio son -3dB, 0dB y -22dB respectivamente."
 
 #. TC: Duration in seconds.
-#: python/maingui.py:3592 python/maingui.py:3594
+#: python/maingui.py:3591 python/maingui.py:3593
 msgid "Time"
-msgstr "Durée"
+msgstr "Hora"
 
-#: python/maingui.py:3611
+#: python/maingui.py:3610
 msgid ""
 "The time in seconds that the crossfader will take to automatically pass "
 "across when the button to the right is clicked."
 msgstr ""
-"Durée en secondes que le crossfader met à passer automatiquement lors d'un "
-"appuis sur le bouton droit."
+"El tiempo en segundos que el crossfader se llevará a pasar automáticamente a "
+"través de cuando se hace clic en el botón a la derecha."
 
 #. TC: The crossfader pass-across button text.
 #. TC: The actual button appears as [<-->] with this text above it.
-#: python/maingui.py:3620 python/maingui.py:3622
+#: python/maingui.py:3619 python/maingui.py:3621
 msgid "Pass"
-msgstr "Passer"
+msgstr "Pasar"
 
-#: python/maingui.py:3635
+#: python/maingui.py:3634
 msgid ""
 "This button causes the crossfader to move to the opposite side at a speed "
 "determined by the speed selector to the left."
 msgstr ""
-"Ce bouton fait passer le crossfader vers le côté opposé à la vitesse "
-"déterminée par le sélecteur de vitesse à gauche."
+"Este botón hace que el crossfader se mueva hacia el lado opuesto a una "
+"velocidad determinada por el selector de velocidad hacia la izquierda."
 
-#: python/maingui.py:3678
+#: python/maingui.py:3677
 msgid "Peak"
-msgstr "Pick"
+msgstr "Pico"
 
-#: python/maingui.py:3681
+#: python/maingui.py:3680
 msgid "A peak hold meter indicating the signal strength of the stream audio."
 msgstr ""
-"Un indicateur de pic temporisé montrant la force du signal du flux audio."
+"Un medidor de retención de pico que indica la intensidad de la señal del "
+"audio stream."
 
 #. TC: This text appears above the stream mix VU meter.
-#: python/maingui.py:3703
+#: python/maingui.py:3702
 msgid "VU"
 msgstr "VU"
 
-#: python/maingui.py:3707
+#: python/maingui.py:3706
 msgid "A VU meter for the stream audio."
-msgstr "Un Vumêtre pour le flux audio."
+msgstr "Un medidor VU para el audio stream."
 
 #. TC: Appears above the mic meters as a label followed by a number.
-#: python/maingui.py:3710
+#: python/maingui.py:3709
 msgid "Ch"
 msgstr "Ch"
 
-#: python/maingui.py:3737
+#: python/maingui.py:3736
 msgid ""
 "A peak hold meter indicating the microphone signal strength and a meter "
 "indicating attenuation levels in the microphone signal processing system. "
 "Green indicates attenuation from the noise gate, yellow from the de-esser, "
 "red from the limiter."
 msgstr ""
-"Un indicateur de pic temporisé montrant la force du signal du micro et un  "
-"autre indiquant le niveau d'atténuation dans le processeur de signal du "
-"micro. Vert indique une attenuation par la noise gate, Jaune par le de-"
-"esseur, Rouge par le limiteur."
+"Un medidor de retención de pico que indica la intensidad de la señal del "
+"micrófono y un medidor que indica los niveles de atenuación en el sistema de "
+"procesamiento de la señal del micrófono. El color verde indica la atenuación "
+"de la puerta de ruido, amarillo del de-esser, rojo del limitador."
 
 #. TC: Control method. Please keep it as Target:Action.
 #: python/midicontrols.py:48
 msgid "Tooltips enable"
-msgstr "Ballons Activer"
+msgstr "Tooltips activar"
 
 #. TC: Control method. Please keep it as Target:Action.
 #: python/midicontrols.py:50
 msgid "DJ-mix monitor"
-msgstr "DJ-Mix Monitoring"
+msgstr "Mezcla-DJ monitor"
 
 #. TC: Control method. Please keep it as Target:Action.
 #: python/midicontrols.py:52
 msgid "Panning load from presets"
-msgstr "Placement chargé depuis la présélection"
+msgstr "Paneo carga de predeterminadas"
 
 #. TC: Control method. Please keep it as Target:Action.
 #: python/midicontrols.py:54
 msgid "Player play/pause"
-msgstr "Lecteur Lecture/pause"
+msgstr "Reproductor reproducir/pausa"
 
 #. TC: Control method. Please keep it as Target:Action.
 #. TC: Playlist control.
-#: python/midicontrols.py:56 python/playergui.py:3798
+#: python/midicontrols.py:56 python/playergui.py:3857
 msgid "Player stop"
-msgstr "Arret lecteur"
+msgstr "Reproductor detener"
 
 #. TC: Control method. Please keep it as Target:Action.
 #: python/midicontrols.py:58
 msgid "Player advance"
-msgstr "Lecteur Avance"
+msgstr "Reproductor avanzar"
 
 #. TC: Control method. Please keep it as Target:Action.
 #: python/midicontrols.py:60
 msgid "Player play previous"
-msgstr "Lecteur Lire précédente"
+msgstr "Reproductor reproducir anterior"
 
 #. TC: Control method. Please keep it as Target:Action.
 #: python/midicontrols.py:62
 msgid "Player play next"
-msgstr "Lecteur Lire suivante"
+msgstr "Reproductor reproducir siguiente"
 
 #. TC: Control method. Please keep it as Target:Action.
 #: python/midicontrols.py:64
 msgid "Player play selected from start"
-msgstr "Lecteur Reprendre au début"
+msgstr "Reproductor reproducir seleccionado desde inicio"
 
 #. TC: Control method. Please keep it as Target:Action.
 #: python/midicontrols.py:66
 msgid "Player select previous"
-msgstr "Lecteur Sélectionner la précédente"
+msgstr "Reproductor seleccionar anterior"
 
 #. TC: Control method. Please keep it as Target:Action.
 #: python/midicontrols.py:68
 msgid "Player select next"
-msgstr "Lecteur Sélectionner la suivante"
+msgstr "Reproductor Seleccione Siguiente"
 
 #. TC: Control method. Please keep it as Target:Action.
 #: python/midicontrols.py:70
 msgid "Player stream output enable"
-msgstr "Lecteur de flux Activer la sortie"
+msgstr "Reproductor activar salida de stream"
 
 #. TC: Control method. Please keep it as Target:Action.
 #: python/midicontrols.py:72
 msgid "Player DJ output enable"
-msgstr "Lecteur DJ Activer la sortie"
+msgstr "Reproductor activar salida DJ"
 
 #. TC: Control method. Please keep it as Target:Action.
 #: python/midicontrols.py:74
 msgid "Player DJ-only switch"
-msgstr "Lecteur Commuter DJ seul"
+msgstr "Reproductor activar solo DJ"
 
 #. TC: Control method. Please keep it as Target:Action.
 #: python/midicontrols.py:76
 msgid "Player set volume"
-msgstr "Lecteur Régler le volume"
+msgstr "Reproductor ajustar volumen"
 
 #. TC: Control method. Please keep it as Target:Action.
 #: python/midicontrols.py:78
 msgid "Player set gain"
-msgstr "Lecteur Régler le gain"
+msgstr "Reproductor ajustar ganancia"
 
 #. TC: Control method. Please keep it as Target:Action.
 #: python/midicontrols.py:80
 msgid "Player set balance"
-msgstr "Lecteur Régler la balance"
+msgstr "Reproductor ajustar balance"
 
 #. TC: Control method. Please keep it as Target:Action.
 #: python/midicontrols.py:82
 msgid "Player set pitchbend"
-msgstr "Lecteur Régler la tonalité"
+msgstr "Reproductor ajustar pitchbend"
 
 #. TC: Control method. Please keep it as Target:Action.
 #: python/midicontrols.py:85
 msgid "Playlist edit tags"
-msgstr "Liste de lecture Editer les tags"
+msgstr "Lista de reproducción editar las etiquetas"
 
 #. TC: Control method. Please keep it as Target:Action.
 #: python/midicontrols.py:87
 msgid "Playlist insert stop"
-msgstr "Liste de lecture Insérer un arret"
+msgstr "Lista de reproducción insertar parada"
 
 #. TC: Control method. Please keep it as Target:Action.
 #: python/midicontrols.py:89
 msgid "Playlist insert stop 2"
-msgstr "Liste de lecture Insérer un arret 2"
+msgstr "Lista de Reproducción 2 insertar parada"
 
 #. TC: Control method. Please keep it as Target:Action.
 #: python/midicontrols.py:91
 msgid "Playlist insert announce"
-msgstr "Liste de lecture Insérer une annonce"
+msgstr "Lista de Reproducción inserto anuncio"
 
 #. TC: Control method. Please keep it as Target:Action.
 #: python/midicontrols.py:93
 msgid "Playlist insert transfer"
-msgstr "Liste de lecture Insérer un transfert"
+msgstr "Lista de reproducción insertar transferencia"
 
 #. TC: Control method. Please keep it as Target:Action.
 #: python/midicontrols.py:95
 msgid "Playlist insert crossfade"
-msgstr "Liste de lecture Insérer un crossfader"
+msgstr "Lista de reproducción insertar crossfade"
 
 #. TC: Control method. Please keep it as Target:Action.
 #: python/midicontrols.py:97
 msgid "Playlist insert pitchunbend"
-msgstr "Liste de lecture Revenir à la tonalité originale"
+msgstr "Lista de reproducción insertar Pitchunbend"
 
 #. TC: Control method. Please keep it as Target:Action.
 #: python/midicontrols.py:99
 msgid "Playlist insert jump to top"
-msgstr "Liste de lecture Insérer un saut en haut"
+msgstr "Lista de Reproducción insertar salto a la parte superior"
 
 #. TC: Control method. Please keep it as Target:Action.
 #: python/midicontrols.py:102
 msgid "Players set crossfade"
-msgstr "Lecteurs Régler le crossfader"
+msgstr "Reproductores ajustar crossfade"
 
 #. TC: Control method. Please keep it as Target:Action.
 #: python/midicontrols.py:104
 msgid "Players pass crossfade"
-msgstr "Lecteurs Effectuer un crossfader"
+msgstr "Reproductores pasan crossfade"
 
 #. TC: Control method. Please keep it as Target:Action.
 #: python/midicontrols.py:106
 msgid "Players set focus"
-msgstr "Lecteur Régler le focus"
+msgstr "Reproductores se enfocan"
 
 #. TC: Control method. Please keep it as Target:Action.
 #: python/midicontrols.py:108
 msgid "Players show pitchbend"
-msgstr "Lecteurs Afficher la tonalité"
+msgstr "Reproductores muestran pitchbend"
 
 #. TC: Control method. Please keep it as Target:Action.
 #: python/midicontrols.py:110
 msgid "Players advance"
-msgstr "Lecteur Avance"
+msgstr "Reproductores avanzan"
 
 #. TC: Control method. Please keep it as Target:Action.
 #: python/midicontrols.py:113
 msgid "Channel output enable"
-msgstr "Canal Activer la sortie"
+msgstr "Salida del canal activar"
 
 #. TC: Control method. Please keep it as Target:Action.
 #: python/midicontrols.py:115
 msgid "Channel set volume"
-msgstr "Canal Régler le volume"
+msgstr "Canal ajustar volumen"
 
 #. TC: Control method. Please keep it as Target:Action.
 #: python/midicontrols.py:117
 msgid "Channel set gain"
-msgstr "Canal Régler le gain"
+msgstr "Canal ajustar ganancia"
 
 #. TC: Control method. Please keep it as Target:Action.
 #: python/midicontrols.py:119
 msgid "Channel set balance"
-msgstr "Canal Régler la balance"
+msgstr "Canal ajustar balance"
 
 #. TC: Control method. Please keep it as Target:Action.
 #: python/midicontrols.py:122
 msgid "VoIP output enable"
-msgstr "VoIP Activer la sortie"
+msgstr "Salida VoIP activar"
 
 #. TC: Control method. Please keep it as Target:Action.
 #: python/midicontrols.py:124
 msgid "VoIP DJ-only switch"
-msgstr "VoIP DJ-Seul Commuter"
+msgstr "VoIP solo DJ activar"
 
 #. TC: Control method. Please keep it as Target:Action.
 #: python/midicontrols.py:126
 msgid "VoIP set volume"
-msgstr "VoIP Régler le volume"
+msgstr "VoIP ajustar volumen"
 
 #. TC: Control method. Please keep it as Target:Action.
 #: python/midicontrols.py:128
 msgid "VoIP set mixback"
-msgstr "VoIP Régler le retour"
+msgstr "VoIP ajustar mezcla"
 
 #. TC: Control method. Please keep it as Target:Action.
 #: python/midicontrols.py:130
 msgid "VoIP set gain"
-msgstr "VoIP Régler le gain"
+msgstr "VoIP ajustar ganancia"
 
 #. TC: Control method. Please keep it as Target:Action.
 #: python/midicontrols.py:132
 msgid "VoIP set balance"
-msgstr "VoIP Régler la balance"
+msgstr "VoIP ajustar balance"
 
 #. TC: Control method. Please keep it as Target:Action.
 #: python/midicontrols.py:135
 msgid "Effect play from start"
-msgstr "Effet Lire depuis le début"
+msgstr "Efecto Reproducir desde inicio"
 
 #. TC: Control method. Please keep it as Target:Action.
 #: python/midicontrols.py:138
 msgid "Effects stop many"
-msgstr "Effets Arrèter plusieurs"
+msgstr "Efectos paran muchos"
 
 #. TC: Control method. Please keep it as Target:Action.
 #: python/midicontrols.py:140
 msgid "Effects set volume"
-msgstr "Effets Régler le volume"
+msgstr "Efectos ajustar volumen"
 
 #. TC: Control method. Please keep it as Target:Action.
 #: python/midicontrols.py:142
 msgid "Effects set headroom"
-msgstr "Effets Régler le headroom"
+msgstr "Efectos ajustar la altura libre"
 
 #. TC: Control method. Please keep it as Target:Action.
 #: python/midicontrols.py:145
 msgid "Stream set connected"
-msgstr "Flux Connecter"
+msgstr "Stream activarar conectado"
 
 #. TC: Control method. Please keep it as Target:Action.
 #: python/midicontrols.py:148
 msgid "Recorder set recording"
-msgstr "Enregistreur Enregistrement"
+msgstr "Grabadora activarar grabando"
 
 #. TC: binding editor, action pane, first row, toplevel menu.
 #: python/midicontrols.py:152 python/midicontrols.py:1493
 msgid "Player"
-msgstr "Lecteur"
+msgstr "Reproductor"
 
 #. TC: binding editor, action pane, first row, toplevel menu.
 #. TC: The midi channel.
@@ -1787,102 +1812,102 @@ msgstr "Canal"
 #: python/midicontrols.py:154 python/preferences.py:599
 #: python/preferences.py:609
 msgid "Effect"
-msgstr "Effet"
+msgstr "Efecto"
 
 #: python/midicontrols.py:156
 msgid "Recorder"
-msgstr "Enregistreur"
+msgstr "Grabadora"
 
 #: python/midicontrols.py:157
 msgid "Setting"
-msgstr "Paramètres"
+msgstr "Ajuste"
 
 #: python/midicontrols.py:161
 msgid "Left player"
-msgstr "Lecteur de gauche"
+msgstr "Reproductor de Izquierda"
 
 #: python/midicontrols.py:162
 msgid "Right player"
-msgstr "Lecteur de droite"
+msgstr "Reproductor de derecha"
 
 #: python/midicontrols.py:163
 msgid "Background player"
-msgstr "Lecteur de fond"
+msgstr "Reproductor de fondo"
 
 #: python/midicontrols.py:164
 msgid "Focused player"
-msgstr "Lecteur actif"
+msgstr "Reproductor Focused"
 
 #: python/midicontrols.py:165
 msgid "Fadered player"
-msgstr "Lecteur affaibli"
+msgstr "Reproductor Fundido"
 
 #: python/midicontrols.py:169
 msgid "Effects bank 1"
-msgstr "Effets Banque 1"
+msgstr "Banco 1 de efectos"
 
 #: python/midicontrols.py:170
 msgid "Effects bank 2"
-msgstr "Effets Banque 2"
+msgstr "Banco 2 de efectos"
 
 #: python/midicontrols.py:171
 msgid "All effects"
-msgstr "Tous les effets"
+msgstr "Todos los efectos"
 
 #. TC: The name of the backspace key.
 #: python/midicontrols.py:405
 msgid "BackSpace"
-msgstr "Retour Arrière"
+msgstr "Retroceso"
 
 #. TC: binding editor, action pane, third row, heading text.
 #: python/midicontrols.py:1469
 msgid "Use value"
-msgstr "Utiliser la valeur"
+msgstr "Usar valor"
 
 #. TC: binding editor, action pane, third row, heading text.
 #: python/midicontrols.py:1471
 msgid "Act if"
-msgstr "Agir si"
+msgstr "Actuar si"
 
 #. TC: binding editor, action pane, third row, heading text.
 #: python/midicontrols.py:1473
 msgid "Set to"
-msgstr "Régler à"
+msgstr "Ajustar a"
 
 #. TC: binding editor, action pane, third row, heading text.
 #: python/midicontrols.py:1475
 msgid "Adjust by"
-msgstr "Ajuster par"
+msgstr "Ajuste por"
 
 #. TC: binding editor, input pane, fourth row, heading text.
 #: python/midicontrols.py:1480 python/midicontrols.py:1484
 msgid "Control"
-msgstr "Contrôle"
+msgstr "Controlar"
 
 #. TC: binding editor, input pane, fourth row, heading text.
 #: python/midicontrols.py:1482
 msgid "Note"
-msgstr "Note"
+msgstr "Nota"
 
 #. TC: binding editor, input pane, fourth row, heading text.
 #: python/midicontrols.py:1486
 msgid "Key"
-msgstr "Touche"
+msgstr "Clave"
 
 #. TC: binding editor, action pane, first row, toplevel menu.
 #: python/midicontrols.py:1491
 msgid "Miscellaneous"
-msgstr "Divers"
+msgstr "Diverso"
 
 #. TC: binding editor, action pane, first row, toplevel menu.
 #: python/midicontrols.py:1495
 msgid "Both players"
-msgstr "Les deux lecteurs"
+msgstr "Ambos reproductores"
 
 #. TC: binding editor, action pane, first row, toplevel menu.
 #: python/midicontrols.py:1497
 msgid "Quick panning"
-msgstr "Panoramique rapide"
+msgstr "Paneo rápido"
 
 #. TC: binding editor, action pane, first row, toplevel menu.
 #: python/midicontrols.py:1501
@@ -1892,68 +1917,68 @@ msgstr "Canal VoIP"
 #. TC: binding editor, action pane, first row, toplevel menu.
 #: python/midicontrols.py:1503
 msgid "Single effect"
-msgstr "Effet unique"
+msgstr "Efecto individual"
 
 #. TC: binding editor, action pane, first row, toplevel menu.
 #: python/midicontrols.py:1505
 msgid "Effects bank"
-msgstr "Banque d'effets"
+msgstr "Banco de efectos"
 
 #. TC: binding editor, action pane, first row, toplevel menu.
 #: python/midicontrols.py:1509
 msgid "Stream recorder"
-msgstr "Enregistreur de flux"
+msgstr "Grabadora de Stream"
 
 #. TC: binding editor, action pane, second row, dropdown text.
 #: python/midicontrols.py:1514
 msgid "Direct fader/held button"
-msgstr "Bouton fader/premuto"
+msgstr "Botón de fader directo/fijo"
 
 #. TC: binding editor, action pane, second row, dropdown text.
 #: python/midicontrols.py:1516
 msgid "One-shot/toggle button"
-msgstr "Bouton One-shot/Commuter"
+msgstr "Botón disparo/conmutación"
 
 #. TC: binding editor, action pane, second row, dropdown text.
 #: python/midicontrols.py:1518
 msgid "Set value"
-msgstr "Régler la valeur"
+msgstr "Ajustar valor"
 
 #. TC: binding editor, action pane, second row, dropdown text.
 #: python/midicontrols.py:1520
 msgid "Alter value"
-msgstr "Modifier la valeur"
+msgstr "Alterar valor"
 
 #. TC: binding editor, input pane, second row, dropdown text.
 #: python/midicontrols.py:1525
 msgid "MIDI control"
-msgstr "Contrôle MIDI"
+msgstr "Control MIDI"
 
 #. TC: binding editor, input pane, second row, dropdown text.
 #: python/midicontrols.py:1527
 msgid "MIDI note"
-msgstr "Note MIDI"
+msgstr "Nota MIDI"
 
 #. TC: binding editor, input pane, second row, dropdown text.
 #: python/midicontrols.py:1529
 msgid "MIDI pitch-wheel"
-msgstr "Tonalité MIDI"
+msgstr "Rueda de tono MIDI"
 
 #. TC: binding editor, input pane, second row, dropdown text.
 #: python/midicontrols.py:1531
 msgid "Keyboard press"
-msgstr "Touché du clavier"
+msgstr "Pulse Teclado"
 
 #. TC: binding editor, input pane, second row, dropdown text.
 #: python/midicontrols.py:1533
 msgid "XChat command"
-msgstr "Commande XChat"
+msgstr "Comando XChat"
 
 #. TC: Dialog window title text.
 #. TC: User is expected to edit a control binding.
 #: python/midicontrols.py:1542
 msgid "Edit control binding"
-msgstr "Editer les contrôleurs"
+msgstr "Editar las vinculaciones de control"
 
 #. TC: After clicking this button the binding editor will be listening
 #. TC: for a key press or midi control surface input.
@@ -1961,42 +1986,42 @@ msgstr "Editer les contrôleurs"
 #: python/midicontrols.py:1557 python/midicontrols.py:1638
 #: python/midicontrols.py:1737
 msgid "Listen for input..."
-msgstr "Ecouter sur l'entrée…"
+msgstr "Esperando la entrada..."
 
 #. TC: The input source.
 #: python/midicontrols.py:1565
 msgid "Source"
-msgstr "Source"
+msgstr "Fuente"
 
 #. TC: The manner in which the input is interpreted.
 #: python/midicontrols.py:1584
 msgid "Interaction"
-msgstr "Interraction"
+msgstr "Interacción"
 
 #. TC: The effect of the control can be directed upon a specific target.
 #. TC: e.g. On target [Left player]
 #: python/midicontrols.py:1590
 msgid "On target"
-msgstr "Destination"
+msgstr "Al objetivo"
 
 #. TC: Checkbutton text.
 #. TC: Use reverse scale and invert the meaning of button presses.
 #: python/midicontrols.py:1598
 msgid "Reversed"
-msgstr "Inversé"
+msgstr "Invertida"
 
 #: python/midicontrols.py:1599
 msgid "Pressed"
-msgstr "Pressé"
+msgstr "Activado"
 
 #: python/midicontrols.py:1601
 msgid "Released"
-msgstr "Relaché"
+msgstr "Liberado"
 
 #. TC: Tree column heading for Inputs e.g. Backspace, F1, S.
 #: python/midicontrols.py:1631 python/midicontrols.py:1992
 msgid "Input"
-msgstr "Entrée"
+msgstr "Entrada"
 
 #: python/midicontrols.py:1635
 #, python-format
@@ -2006,65 +2031,65 @@ msgid ""
 "\n"
 "Input selection can be done manually or with the help of the '%s' option."
 msgstr ""
-"La première moitiée d'une liaison est l'entrée qui arrive sous la forme "
-"d'une pression sur une touche du clavier ou un évènement midi.\n"
+"La primera mitad de la vinculación es la entrada que viene en la forma de la "
+"activación de una tecla del teclado o de un evento desde un dispositivo "
+"MIDI. \n"
 "\n"
-"La sélection peut se faire manuellement ou à l'aide de l'option «%s»."
+"La selección de entrada se puede hacer manualmente o con la ayuda de la "
+"opción '%s'."
 
 #. TC: Tree column heading for actions e.g. Player stop.
 #: python/midicontrols.py:1671 python/midicontrols.py:1677
 #: python/midicontrols.py:2006
 msgid "Action"
-msgstr "Action"
+msgstr "Acción"
 
 #. TC: %s is the translation of 'Action'.
 #: python/midicontrols.py:1676
 #, python-format
 msgid "The '%s' pane determines how the input is handled, and to what effect."
-msgstr ""
-"Le ventail «%s» détermine comment l'entrée est gérée et quels en sont les "
-"effets."
+msgstr "El %s panel' determina cómo se maneja la entrada, y en qué sentido."
 
 #: python/midicontrols.py:1733
 msgid "Listening for input"
-msgstr "Lecture de l'entrée"
+msgstr "Escuchando la entrada"
 
 #. TC: Refers to key modifiers including Ctrl, Alt, Shift, ....
 #: python/midicontrols.py:1754
 msgid "Shifting"
-msgstr "Altération"
+msgstr "Movedizo"
 
 #: python/midicontrols.py:1953
 msgid "Singular control"
-msgstr "Contrôle unique"
+msgstr "Control Singular"
 
 #: python/midicontrols.py:2015
 msgid "Target"
-msgstr "Obiettivo"
+msgstr "Objetivo"
 
 #: python/mutagentagger.py:219
 msgid "title"
-msgstr "titre"
+msgstr "título"
 
 #: python/mutagentagger.py:219
 msgid "artist"
-msgstr "artiste"
+msgstr "artista"
 
 #: python/mutagentagger.py:220
 msgid "album"
-msgstr "album"
+msgstr "álbum"
 
 #: python/mutagentagger.py:220
 msgid "track/total"
-msgstr "piste/total"
+msgstr "pista/total de"
 
 #: python/mutagentagger.py:221
 msgid "genre"
-msgstr "genre"
+msgstr "género"
 
 #: python/mutagentagger.py:221
 msgid "record date"
-msgstr "date d'enregistrement"
+msgstr "fecha de grabación"
 
 #: python/mutagentagger.py:360
 msgid ""
@@ -2077,206 +2102,202 @@ msgid ""
 "\n"
 "For more information visit www.id3.org."
 msgstr ""
-"Ajoutez ICI n'importe quel tag ID3.\n"
-"ex. : TIT2 : Titre alternatif\n"
-"Sera ajouté au TIT2 principal.\n"
+"Añadir cualquier otros marcos de texto ID3 aquí. \n"
+"Por ejemplo TIT2:Título alternativo\n"
+"Este se anexará a la principal etiqueta TIT2.\n"
 "\n"
-"Entrez des champs de texte personalisés comme ceci :\n"
-"TXXX:nimporte=quoi\n"
+"Introduzca marcos de texto definidos por el usuario así:\n"
+"TXXX:foo=bar\n"
 "\n"
-"Pour plus d'information visitez www.id3.org."
+"Para más información, visite www.id3.org."
 
 #. TC: Remaining textual ID3 data is show below this heading.
 #: python/mutagentagger.py:366
 msgid " Additional Text Frames "
-msgstr " Champs texte additionnels "
+msgstr " Marcos Adicionales de Texto "
 
 #. TC: The album track number.
 #: python/mutagentagger.py:376 python/songdb.py:906 python/songdb.py:1295
 msgid "Track"
-msgstr "Piste"
+msgstr "Pista"
 
 #: python/mutagentagger.py:377
 msgid "Genre"
-msgstr "Genre"
+msgstr "Género"
 
 #: python/mutagentagger.py:377
 msgid "Year"
-msgstr "Année"
+msgstr "Año"
 
 #. TC: Window title.
 #: python/mutagentagger.py:688
 msgid "IDJC Tagger"
-msgstr "Taggeur IDJC"
+msgstr "Etiquetador IDJC"
 
 #: python/mutagentagger.py:700 python/mutagentagger.py:704
 #: python/mutagentagger.py:708
 msgid "Filename:"
-msgstr "Nom du fichier :"
+msgstr "Nombre del archivo:"
 
 #: python/mutagentagger.py:777
 msgid "Native"
-msgstr "Natif"
+msgstr "Nativo"
 
 #: python/songdb.py:177
 msgid "Connecting"
-msgstr "Connexion"
+msgstr "Conectando"
 
-# python-format
 #: python/songdb.py:188
 #, python-format
 msgid "Connection failed (try %d)"
-msgstr "Connexion échouée (essayez %d)"
+msgstr "Falló la conexión (intenta %d)"
 
 #: python/songdb.py:199
-#, fuzzy
 msgid "Connected: autocommit mode failed"
-msgstr "Connecté : Echec du mode utf-8"
+msgstr "Conectado: Falló el modo de confirmación automática"
 
 #: python/songdb.py:201
-#, fuzzy
 msgid "Connected: autocommit mode set"
-msgstr "Connecté : Echec du mode utf-8"
+msgstr "Conectado: modo de confirmación automática establecido"
 
 #: python/songdb.py:202
 msgid "Connected"
-msgstr "Connecté"
+msgstr "Conectado"
 
 #: python/songdb.py:210
 msgid "Job dropped"
-msgstr "Tâche abandonnée"
+msgstr "Se cayó el trabajo"
 
 #: python/songdb.py:220 python/songdb.py:431
 msgid "Disconnected"
-msgstr "Disconnecté"
+msgstr "Desconectado"
 
 #: python/songdb.py:233
 msgid "Problem dropping connection"
-msgstr "Problème lors de l'abandon de la tâche"
+msgstr "Problema terminando la conexión"
 
 #: python/songdb.py:235
 msgid "Connection dropped"
-msgstr "Connexion abandonnée"
+msgstr "Conexión cayó"
 
 #: python/songdb.py:326
 msgid "Hostname[:Port]"
-msgstr "Hôte[:Port]"
+msgstr "Nombre de host[:Puerto]"
 
 #: python/songdb.py:331
 msgid "User Name"
-msgstr "Nom utilisateur"
+msgstr "Nombre de usuario"
 
 #: python/songdb.py:334
 msgid "Database"
-msgstr "Base de données"
+msgstr "Base de datos"
 
 #: python/songdb.py:389
 msgid "Prokyon3 or Ampache (song title) Database"
-msgstr "Base de donnée Prokyon3 ou Ampache (titre de chanson)"
+msgstr "Base de datos Prokyon3 o Ampache (título de la canción)"
 
 #: python/songdb.py:390
 msgid ""
 "You can make certain media databases accessible in IDJC for easy drag and "
 "drop into the playlists."
 msgstr ""
-"Vous pouvez rendre certaines bases de données accessibles dans IDJC pour "
-"plusde facilités lors des glisser/déposer dans les listes de lectures"
+"Usted puede hacer ciertas bases de datos de medios de comunicación "
+"accesibles en IDJC fácil de arrastrar y soltar en las listas de reproducción."
 
 #: python/songdb.py:438
 msgid "Module mysql-python (MySQLdb) required"
-msgstr "Module mysql-python (MySQLdb) nécessaire"
+msgstr "Módulo mysql-python (MySQLdb) requerido"
 
 #: python/songdb.py:707 python/songdb.py:723 python/songdb.py:747
 #: python/songdb.py:805
 msgid "<unknown>"
-msgstr "<inconnu>"
+msgstr "<desconocido>"
 
 #: python/songdb.py:741
-#, fuzzy
 msgid "Not Played"
-msgstr "Dernière lue"
+msgstr "No Reproducido"
 
 #: python/songdb.py:878
 msgid "Reload the database."
-msgstr "Recharger la base de données"
+msgstr "Recargar la base de datos."
 
 #: python/songdb.py:883
 msgid "Expand entire tree."
-msgstr "Développer l'arborescence."
+msgstr "Expandir todo árbol."
 
 #: python/songdb.py:884
 msgid "Collapse tree."
-msgstr "Enrouler l'arborescence."
+msgstr "Contraer árbol."
 
 #: python/songdb.py:891
 msgid "Browse"
-msgstr "Parcourrir"
+msgstr "Vistazo"
 
 #. TC: The disk number of the album track.
 #: python/songdb.py:904 python/songdb.py:1294
 msgid "Disk"
-msgstr "Disque"
+msgstr "Disco"
 
 #. TC: Track playback time.
 #. TC: Playback time.
-#: python/songdb.py:908 python/songdb.py:1296 python/playergui.py:313
+#: python/songdb.py:908 python/songdb.py:1296 python/playergui.py:340
 msgid "Duration"
-msgstr "Durée"
+msgstr "Duración"
 
-#: python/songdb.py:910 python/songdb.py:1297 python/format.py:594
-#: python/format.py:615 python/format.py:701 python/format.py:722
-#: python/format.py:857 python/format.py:962 python/format.py:1012
-#: python/format.py:1022
+#: python/songdb.py:910 python/songdb.py:1297 python/format.py:614
+#: python/format.py:635 python/format.py:721 python/format.py:742
+#: python/format.py:877 python/format.py:982 python/format.py:1032
+#: python/format.py:1042 python/format.py:1120 python/format.py:1153
 msgid "Bitrate"
 msgstr "Bitrate"
 
 #: python/songdb.py:911 python/songdb.py:1298
 msgid "Filename"
-msgstr "Nom du fichier"
+msgstr "Nombre del archivo"
 
 #. TC: Directory path to a file.
 #: python/songdb.py:913 python/songdb.py:1299
 msgid "Path"
-msgstr "Répertoire"
+msgstr "Ruta"
 
 #: python/songdb.py:918
 msgid "Artist - Album - Title"
-msgstr "Artiste - Album - Titre"
+msgstr "Artista - Álbum - Título"
 
 #: python/songdb.py:919
 msgid "Album - [Disk] - Title"
-msgstr "Album - [Disque] - Titre"
+msgstr "Álbum - [Disco] - Título"
 
 #: python/songdb.py:939
 msgid "Fetching"
-msgstr "Découverte"
+msgstr "Atractivo"
 
 #: python/songdb.py:1084
 msgid "Tree fetch failed"
-msgstr "Echec de la découverte de l'arborescence"
+msgstr "Fallo en la descarga de árbol"
 
 #: python/songdb.py:1085
 msgid "Fetch Failed!"
-msgstr "Echec de la découverte!"
+msgstr "Fallo de descarga!"
 
 #: python/songdb.py:1098
 msgid "Populating"
-msgstr "Popularité"
+msgstr "Rellenando"
 
 #: python/songdb.py:1224
 #, python-format
 msgid "Disk %d"
-msgstr "Disque %d"
+msgstr "%d"
 
 #. TC: User specified search filter entry box title text.
 #: python/songdb.py:1243
 msgid "Filters"
-msgstr "Filtres"
+msgstr "Filtros"
 
 #. TC: A type of search on any data field matching paritial strings.
 #: python/songdb.py:1255
 msgid "Fuzzy Search"
-msgstr "Recherche floue"
+msgstr "Búsqueda borrosa"
 
 #. TC: WHERE is an SQL keyword.
 #: python/songdb.py:1264
@@ -2285,438 +2306,440 @@ msgstr "WHERE"
 
 #: python/songdb.py:1277
 msgid "Search"
-msgstr "Recherche"
+msgstr "Buscar"
 
 #: python/songdb.py:1514 python/songdb.py:1639
 msgid "Minutes"
-msgstr ""
+msgstr "Minutos"
 
 #: python/songdb.py:1514 python/songdb.py:1639
-#, fuzzy
 msgid "Hours"
-msgstr "Couleurs"
+msgstr "Horas"
 
 #: python/songdb.py:1515 python/songdb.py:1639
 msgid "Days"
-msgstr ""
+msgstr "Días"
 
 #: python/songdb.py:1515 python/songdb.py:1639 python/songdb.py:1709
 #: python/songdb.py:1803
 msgid "Weeks"
-msgstr ""
+msgstr "Semanas"
 
 #: python/songdb.py:1609
 msgid "Catalogs"
-msgstr "Catalogues"
+msgstr "Catálogos"
 
 #: python/songdb.py:1616
 msgid "Name"
-msgstr "Nom"
+msgstr "Nombre"
 
 #: python/songdb.py:1617
 msgid "Catalog Path"
-msgstr "Chemin du Catalogue"
+msgstr "Ruta del Catálogo"
 
 #: python/songdb.py:1618
 msgid "Prepend Path"
-msgstr "Chemin Préfixe"
+msgstr "Anteponer Path"
 
 #: python/songdb.py:1626
-#, fuzzy
 msgid "Last Played Scale"
-msgstr "Dernière lue"
+msgstr "Última Escala Reproducido"
 
 #: python/songdb.py:1658
 msgid "Path Peel"
-msgstr "Chemin supprimable"
+msgstr "Pelar Ruta"
 
 #: python/songdb.py:1737
 msgid "N/A"
-msgstr "S/O"
+msgstr "N/A"
 
 #: python/songdb.py:1918
 msgid "Failed to create FULLTEXT index"
-msgstr "Echec de la création de l'index TEXTE"
+msgstr "No se pudo crear el índice FULLTEXT"
 
 #: python/songdb.py:1922
 msgid "Found existing FULLTEXT index"
-msgstr "Un index TEXTE exite déjà"
+msgstr "Encontrado índice FULLTEXT existente"
 
 #: python/songdb.py:1936 python/songdb.py:1949
 msgid "Unrecognised database"
-msgstr "Base de données non reconnue"
+msgstr "Base de datos no reconocido"
 
 #: python/songdb.py:1944
 msgid "Found Prokyon 3 schema"
-msgstr "Schéma Prokyon 3 trouvé"
+msgstr "Encontrado Prokyon 3 esquema"
+
+#: python/playergui.py:104
+msgid "Click to stop adding tracks!"
+msgstr ""
 
-#: python/playergui.py:236
+#: python/playergui.py:263
 msgid "Cuesheet Playlist"
-msgstr "Liste de lecture cuesheet"
+msgstr "Cuesheet lista de reproducción"
 
 #. TC: Column heading, the track number.
-#: python/playergui.py:302
+#: python/playergui.py:329
 msgid "Trk"
-msgstr "Piste"
+msgstr "Pta"
 
 #. TC: Column heading, the index number.
-#: python/playergui.py:305
+#: python/playergui.py:332
 msgid "Ind"
-msgstr "Index"
+msgstr "Ind"
 
-#: python/playergui.py:414
+#: python/playergui.py:441
 msgid "External Playlist"
-msgstr "Liste de lecture externe"
+msgstr "Lista de reproducción externa"
 
 #. TC: Button text to activate an external playlist.
-#: python/playergui.py:425
+#: python/playergui.py:452
 msgid "Active"
-msgstr "Attivée"
+msgstr "Activo"
 
-#: python/playergui.py:435
+#: python/playergui.py:462
 msgid "Choose a playlist file"
-msgstr "Sélectionner un fichier de liste de lecture"
+msgstr "Elija un archivo de la lista de reproducción"
 
-#: python/playergui.py:440
+#: python/playergui.py:467
 msgid "Choose a media directory"
-msgstr "Sélectionner un dossier de média"
+msgstr "Elija un directorio de los medios de comunicación"
 
-#: python/playergui.py:453
+#: python/playergui.py:480
 msgid "Choose a playlist file."
-msgstr "Sélectionner un fichier de liste de lecture."
+msgstr "Elija un archivo de lista de reproducción."
 
-#: python/playergui.py:455
+#: python/playergui.py:482
 msgid "Choose a folder/directory of music."
-msgstr "Sélectionner un fichier de musique."
+msgstr "Elija una carpeta/directorio de música."
 
-#: python/playergui.py:522
+#: python/playergui.py:549
 msgid "Create a new announcement"
-msgstr "Créer une nouvelle annonce"
+msgstr "Crear un nuevo anuncio"
 
-#: python/playergui.py:525
+#: python/playergui.py:552
 msgid "Modify or Delete this announcement"
-msgstr "Modifier ou supprimer cette annonce"
+msgstr "Modificar o Eliminar este anuncio"
 
 #. TC: Embed a DJ announcement text into the playlist.
-#: python/playergui.py:528 python/playergui.py:4430
+#: python/playergui.py:555 python/playergui.py:4494
 msgid "Announcement"
-msgstr "Annonce"
+msgstr "Anuncio"
 
 #. TC: The time format as minutes and seconds.
-#: python/playergui.py:556
+#: python/playergui.py:583
 msgid "mm:ss"
 msgstr "mm:ss"
 
 #. TC: Alongside the name of the next track.
-#: python/playergui.py:609
+#: python/playergui.py:636
 msgid "Next track"
-msgstr "Piste suivante"
+msgstr "Siguiente pista"
 
-#: python/playergui.py:934
+#: python/playergui.py:961
 msgid "By Extension"
-msgstr "Par extention"
+msgstr "Por extensión"
 
-#: python/playergui.py:934
+#: python/playergui.py:961
 msgid "M3U playlist"
-msgstr "Liste de lecture M3U"
+msgstr "Lista de reproducción M3U"
 
-#: python/playergui.py:934
-#, fuzzy
+#: python/playergui.py:961
 msgid "M3U8 playlist"
-msgstr "Liste de lecture M3U"
+msgstr "lista de reproducción M3U8"
 
-#: python/playergui.py:935
+#: python/playergui.py:962
 msgid "XSPF playlist"
-msgstr "Liste de lecture XSPF"
+msgstr "lista de reproducción XSPF"
 
-#: python/playergui.py:935
+#: python/playergui.py:962
 msgid "PLS playlist"
-msgstr "Liste de lecture PLS"
+msgstr "lista de reproducción PLS"
 
-#: python/playergui.py:1007
+#: python/playergui.py:1034
 #, python-format
 msgid "%d Audio Tracks"
-msgstr "%d pistes audio"
+msgstr "%d Pistas de Audio"
 
 #. TC: Missing metadata text.
-#: python/playergui.py:1017
+#: python/playergui.py:1044
 msgid "Unknown"
-msgstr "Inconnu"
+msgstr "Desconocido"
 
-#: python/playergui.py:1021
+#: python/playergui.py:1048
 msgid "(Cue sheet)"
-msgstr "(Cue Sheet)"
+msgstr "(Hoja Cue)"
 
-#: python/playergui.py:1058
+#: python/playergui.py:1085
 msgid "Bad Tag"
-msgstr "Tag erroné"
+msgstr "Tag Mala"
 
-#: python/playergui.py:1888 python/playergui.py:4268
+#: python/playergui.py:1921 python/playergui.py:4333
 msgid "Manual"
-msgstr "Manuel"
+msgstr "Manual"
 
-#: python/playergui.py:1892 python/playergui.py:4265
+#. TC: playlist modes
+#: python/playergui.py:1925 python/playergui.py:4332
 msgid "Play All"
-msgstr "Tout jouer"
+msgstr "Reproducir Todo"
 
-#: python/playergui.py:1900 python/playergui.py:1909 python/playergui.py:4266
+#: python/playergui.py:1933 python/playergui.py:1942 python/playergui.py:4332
 msgid "Loop All"
-msgstr "Tout boucler"
+msgstr "Repetir Todo"
 
-#: python/playergui.py:1900 python/playergui.py:4269
+#: python/playergui.py:1933 python/playergui.py:4333
 msgid "Cue Up"
-msgstr "Pré-écoute"
+msgstr "Avanzar Hasta"
 
-#: python/playergui.py:1901 python/playergui.py:4273
+#: python/playergui.py:1934 python/playergui.py:4337
 msgid "Fade Over"
-msgstr "Fondu dessus"
+msgstr "Desteñirse"
 
-#: python/playergui.py:1913 python/playergui.py:1984 python/playergui.py:4267
+#: python/playergui.py:1946 python/playergui.py:2021 python/playergui.py:4332
 msgid "Random"
-msgstr "Aléatoire"
+msgstr "Al azar"
 
-#: python/playergui.py:1953 python/playergui.py:4270
+#: python/playergui.py:1990 python/playergui.py:4333
 msgid "External"
-msgstr "Externe"
+msgstr "Externo"
 
-#: python/playergui.py:1965 python/playergui.py:1981 python/playergui.py:4272
+#. TC: yet more playlist modes these ones for the main players only
+#: python/playergui.py:2002 python/playergui.py:2018 python/playergui.py:4337
 msgid "Alternate"
-msgstr "Alternatif"
+msgstr "Alternar"
 
-#: python/playergui.py:1965 python/playergui.py:1983 python/playergui.py:4274
+#: python/playergui.py:2002 python/playergui.py:2020 python/playergui.py:4337
 msgid "Random Hop"
-msgstr "Hop aléatoire"
+msgstr "Salto al Azar"
 
 #. TC: The remaining playlist time.
-#: python/playergui.py:2138 python/playergui.py:2144
+#: python/playergui.py:2176 python/playergui.py:2182
 msgid "Remaining"
-msgstr "Restant"
+msgstr "Restante"
 
 #. TC: The estimated finish time of the playlist.
 #. TC: The estimated finish time of the playlist (ETA).
-#: python/playergui.py:2140 python/playergui.py:2144 python/playergui.py:2158
+#: python/playergui.py:2178 python/playergui.py:2182 python/playergui.py:2196
 msgid "Finish"
-msgstr "Fini"
+msgstr "Termina"
 
 #. TC: The play duration of the block of audio tracks.
-#: python/playergui.py:2145 python/playergui.py:2156
+#: python/playergui.py:2183 python/playergui.py:2194
 msgid "Block size"
-msgstr "Taille de block"
+msgstr "Tamaño de bloque"
 
 #. TC: File dialog title text.
-#: python/playergui.py:2546
+#: python/playergui.py:2584
 msgid "Add music to left playlist"
-msgstr "Ajouter de la musique à la liste de gauche"
+msgstr "Añadir a la lista de reproducción de música a la izquierda"
 
 #. TC: File dialog title text.
-#: python/playergui.py:2549
+#: python/playergui.py:2587
 msgid "Add music to right playlist"
-msgstr "Ajouter de la musique à la liste de droite"
+msgstr "Añadir a la lista de reproducción de música derecha"
 
-#: python/playergui.py:2551
+#: python/playergui.py:2589
 msgid "Add background music"
-msgstr "ajouter une musique de fond"
+msgstr "Añadir música de fondo"
 
 #. TC: File filter text.
-#: python/playergui.py:2563
+#: python/playergui.py:2601
 msgid "Supported Media Formats"
-msgstr "Formats de média supportés"
+msgstr "Formatos Admitidos de los Medios"
 
 #. TC: Expander text "Select File Type (.pls)" for the pls file type.
-#: python/playergui.py:2625
+#: python/playergui.py:2652
 msgid "Select File Type"
-msgstr "Sélectionner le type de fichier"
+msgstr "Seleccione Tipo de archivo"
 
-#: python/playergui.py:3383
+#: python/playergui.py:3442
 msgid "Save left playlist"
-msgstr "Sauvegarder la liste de lecture de gauche"
+msgstr "Guardar lista de reproducción izquierda"
 
-#: python/playergui.py:3385
+#: python/playergui.py:3444
 msgid "Save right playlist"
-msgstr "Sauvegarder la liste de lecture de droite"
+msgstr "Guardar lista de reproducción a la derecha"
 
-#: python/playergui.py:3387
+#: python/playergui.py:3446
 msgid "Save background playlist"
-msgstr "Sauvegarder la liste de lecture de fond"
+msgstr "Guardar lista de reproducción de fondo"
 
-#: python/playergui.py:3405
+#: python/playergui.py:3464
 msgid "File Type"
-msgstr "Type de fichier"
+msgstr "Tipo de archivo"
 
-#: python/playergui.py:3410
+#: python/playergui.py:3469
 msgid "Extension"
-msgstr "Extention"
+msgstr "Extensión"
 
 #. TC: Playlist control.
 #. TC: Insert playlist control to do a ten second fade to the next track.
-#: python/playergui.py:3774 python/playergui.py:4441
+#: python/playergui.py:3833 python/playergui.py:4505
 msgid "Fade 10s"
-msgstr "Fondu 10s"
+msgstr "Desteñirse 10s"
 
 #. TC: Playlist control.
 #. TC: Insert playlist control to do a five second fade to the next track.
-#: python/playergui.py:3780 python/playergui.py:4448
+#: python/playergui.py:3839 python/playergui.py:4512
 msgid "Fade 5s"
-msgstr "Fondu 5s"
+msgstr "Desteñirse 5s"
 
 #. TC: Playlist control.
 #. TC: Insert playlist control to not do a fade to the next track.
-#: python/playergui.py:3785 python/playergui.py:4455
+#: python/playergui.py:3844 python/playergui.py:4519
 msgid "No Fade"
-msgstr "Aucun Fondu"
+msgstr "Sin Desteñirse"
 
 #. TC: Playlist control.
-#: python/playergui.py:3793
+#: python/playergui.py:3852
 msgid ">> Normal Speed <<"
-msgstr ">> Vitesse normale <<"
+msgstr ">> Velocidad normal <<"
 
 #. TC: Playlist control.
-#: python/playergui.py:3803
+#: python/playergui.py:3862
 msgid "Player stop 2"
-msgstr "Arret Lecteur 2"
+msgstr "Parada Reproductor 2"
 
 #. TC: Playlist control.
 #. TC: Insert playlist control to jump to the top of the playlist.
-#: python/playergui.py:3808 python/playergui.py:4407
+#: python/playergui.py:3867 python/playergui.py:4471
 msgid "Jump To Top"
-msgstr "Retour en haut"
+msgstr "Ir al inicio"
 
 #. TC: Playlist control.
-#: python/playergui.py:3813 python/playergui.py:4467
+#: python/playergui.py:3872 python/playergui.py:4531
 msgid "Stop streaming"
-msgstr "Arret du flux"
+msgstr "Detener el streaming"
 
 #. TC: Playlist control.
-#: python/playergui.py:3818 python/playergui.py:4475
+#: python/playergui.py:3877 python/playergui.py:4539
 msgid "Stop recording"
-msgstr "Arret de l'enregistrement"
+msgstr "Para de grabar"
 
-#: python/playergui.py:3851
-#, fuzzy
+#: python/playergui.py:3910
 msgid "Announcement:"
-msgstr "Annonce"
+msgstr "Anuncio:"
 
 #. TC: Playlist control.
-#: python/playergui.py:3857
+#: python/playergui.py:3916
 msgid ">>> Transfer across >>>"
-msgstr ">>> Transfer en face >>>"
+msgstr ">>> Transferencia través >>>"
 
 #. TC: Playlist control.
-#: python/playergui.py:3860
+#: python/playergui.py:3919
 msgid "<<< Transfer across <<<"
-msgstr "<<< Transfer en face <<<"
+msgstr "<<< Transferencia través <<<"
 
 #. TC: Playlist control.
-#: python/playergui.py:3865
+#: python/playergui.py:3924
 msgid ">>> Fade across >>>"
-msgstr ">>> Fondu en face >>>"
+msgstr ">>> Fundido través >>>"
 
 #. TC: Playlist control.
-#: python/playergui.py:3868
+#: python/playergui.py:3927
 msgid "<<< Fade across <<<"
-msgstr "<<< Fondu en face <<<"
+msgstr "<<< Fundido través <<<"
 
 #. TC: Playlist control.
-#: python/playergui.py:3874
+#: python/playergui.py:3933
 msgid "Ignored playlist control"
-msgstr "Contrôle de liste de lecture ignoré"
+msgstr "Control de lista de reproducción Ignorado"
 
-#: python/playergui.py:3942
+#: python/playergui.py:4001
 #, python-brace-format
 msgid "Playing track {0} of {1}"
-msgstr "Lecture piste {0} sur {1}"
+msgstr "Reproducción de la pista {0} de {1}"
 
 #. TC: Previous line: Playing track {0} of {1}
-#: python/playergui.py:3955
+#: python/playergui.py:4014
 #, python-format
 msgid "From the album, %s"
-msgstr "De l'album, %s"
+msgstr "Desde el %s"
 
-#: python/playergui.py:3962
+#: python/playergui.py:4021
 #, python-format
 msgid "Total number of tracks %d"
-msgstr "Nombre de piste total %d"
+msgstr "Número total de pistas %d"
 
-#: python/playergui.py:3966 python/playergui.py:3968
+#: python/playergui.py:4025 python/playergui.py:4027
 #, python-format
 msgid "Total play duration %s"
-msgstr "Durée totale %s"
+msgstr "Duración total de reproducción %s"
 
-#: python/playergui.py:4018
+#: python/playergui.py:4077
 msgid ""
 "Left click toggles between showing the amount of time elapsed or remaining "
 "on the current track being played."
 msgstr ""
-"Clic à gauche pour afficher le temps écoulé ou le temps restant pour la "
-"piste en cours de reproduction."
+"Alterna clic izquierdo entre mostrar la cantidad de tiempo transcurrido o "
+"restante de la pista actual que se está reproduciendo."
 
-#: python/playergui.py:4036
+#: python/playergui.py:4095
 msgid ""
 "This slider acts as both a play progress indicator and as a means for "
 "seeking within the currently playing track."
 msgstr ""
-"Ce curseur agit à la fois comme indicateur de progression et comme "
-"positionneur dans la piste en cours de reproduction."
+"Este deslizador actúa como tanto un indicador de progreso de la reproducción "
+"y como un medio para buscar dentro de la pista que se está reproduciendo."
 
 #. TC: File filter text.
-#: python/playergui.py:4125
+#: python/playergui.py:4184
 msgid "All file types"
-msgstr "Tout type de fichier"
+msgstr "Todos los tipos de archivo"
 
-#: python/playergui.py:4130
-#, fuzzy
+#: python/playergui.py:4189
 msgid "Playlist types"
-msgstr "Liste de lecture 1"
+msgstr "Tipos de reproducción"
 
-#: python/playergui.py:4145
+#: python/playergui.py:4204
 msgid ""
 "'Block size' indicates the amount of time that it will take to play from the "
 "currently selected track to the next stop.\n"
 "'Remaining' is the amount of time until the next stop.\n"
 "'Finish' Is the computed time when the tracks will have finished playing."
 msgstr ""
-"«Taille de block» indique la quantité de temps restant entre la piste en "
-"cours et le prochain arret.\n"
-"«Restant» indique le temps restant avant le prochain arret.\n"
-"«Fin» est le temps calculé lorsque la piste aura fini d'être lue."
+"'Tamaño de Bloque' indica la cantidad de tiempo que se necesita para "
+"reproducir desde la pista seleccionada a la siguiente parada.\n"
+"'Restante' es la cantidad de tiempo hasta la siguiente parada.\n"
+"'Acabado' Es la hora calculado cuando las pistas se terminarán."
 
-#: python/playergui.py:4168
+#: python/playergui.py:4230
 msgid "This adjusts the playback speed anywhere from 25% to 400%."
-msgstr "Ajuste la vitesse de reproduction entre 25% et 400%."
+msgstr ""
+"Ajusta la velocidad de reproducción en cualquier lugar del 25% al ​​400%."
 
-#: python/playergui.py:4182
+#: python/playergui.py:4244
 msgid "This sets the playback speed back to normal."
-msgstr "Remet la vitesse de reproduction à sa valeur normale."
+msgstr "Esta reestablece la velocidad de reproducción a la normalidad."
 
-#: python/playergui.py:4199
+#: python/playergui.py:4261
 msgid "Previous track."
-msgstr "Piste précédente"
+msgstr "Pista anterior."
 
-#: python/playergui.py:4211
+#: python/playergui.py:4273
 msgid "Play."
-msgstr "Lecture"
+msgstr "Reproducir."
 
-#: python/playergui.py:4221
+#: python/playergui.py:4283
 msgid "Pause."
-msgstr "Pause"
+msgstr "Pausa."
 
-#: python/playergui.py:4231
+#: python/playergui.py:4293
 msgid "Stop."
-msgstr "Arret"
+msgstr "Deténgase."
 
-#: python/playergui.py:4241
+#: python/playergui.py:4303
 msgid "Next track."
-msgstr "Piste suivante"
+msgstr "Siguiente pista."
 
-#: python/playergui.py:4253
+#: python/playergui.py:4315
 msgid "Add tracks to the playlist."
-msgstr "Ajouter des pistes à la liste"
+msgstr "Añadir pistas a la lista de reproducción."
 
-#: python/playergui.py:4260 python/preferences.py:71
+#: python/playergui.py:4322 python/preferences.py:71
 msgid "Playlist Mode"
-msgstr "Mode de la liste de lecture"
+msgstr "Modo de reproducción"
 
-#: python/playergui.py:4279
+#: python/playergui.py:4343
 msgid ""
 "This sets the playlist mode which defines player behaviour after a track has "
 "finished playing.\n"
@@ -2748,211 +2771,216 @@ msgid ""
 "\n"
 "'Random Hop' will pick a track at random from the other playlist."
 msgstr ""
-"Configure le mode de la liste de lecture définissant le fonctionnement du "
-"lecteur après qu'une piste ait finie d'être lue.\n"
+"Esto establece el modo de lista de reproducción que define el comportamiento "
+"del reproductor después de que se termina la pista.\n"
+"\n"
+"'Play All' (Reproducir Todo) es el modo más versátil, ya que permite el uso "
+"de elementos de control de lista de reproducción integrables que se puede "
+"acceder mediante el menú contextual del botón derecho en el lista de "
+"reproducción. Cuando ningunos controles de reproducción están presentes las "
+"pistas se reproducen de forma secuencial hasta que se llega al final de la "
+"lista de reproducción, y en ese momento el reproductor se detendrá.\n"
 "\n"
-"«Lire tout» est le mode le plus universel puisqu'il permet l'utilisation des "
-"élements de contrôle disponibles dans le menu contextuel accessible par un "
-"clic droit sur la liste de lecture. Lorsqu'aucun élément de contrôle n'est "
-"présent, les pistes sont lues de manière séquentielles jusqu'à la fin de la "
-"liste de lecture après quoi le lecteur s'arrète.\n"
-" \n"
-"«Boucler» les pistes sont jouées séquentiellement jusquà la fin de la liste "
-"de lecture, après quoi le liste est relue depuis le début.\n"
+"'Loop All' (Repetir Todo) hace que las pistas se reproduzcan en secuencia, "
+"reiniciándose con la primera pista una vez de que se llega al final de la "
+"lista de reproducción. \n"
 "\n"
-"«Aléatoire» rends la liste de lecture infinie, avec les pistes choisies au "
-"hazard.\n"
+"'Random' (Al Azar) hace que las pistas se reproduzcan indefinidamente con "
+"las pistas seleccionadas al azar.\n"
 "\n"
-"«Manuel» le lecteur s'arrête à la fin de chaque piste.\n"
+"'Manual' (Manual) hace que el reproductor se detendrá al final de cada "
+"pista.\n"
 "\n"
-"«Suivante» comme pour «Manuel» mis à part que la piste suivante est "
-"sélectionnée.\n"
+"'Cue Up' (Avanzar Hasta) es similar al manual, excepto que también se "
+"destaca la siguiente pista en la lista de reproducción.\n"
 "\n"
-"«Externe» prend les pistes depuis une autre liste de lecture ou un autre "
-"dossier, l'une après l'autre. Utile pour diffuser de grandes listes de "
-"lecture.\n"
+"'External' (Externo) obtiene sus pistas de una lista de reproducción o "
+"directorio externo una tras una. Útil para cuando se quiere transmitir "
+"listas masivas.\n"
 "\n"
-"«Alternatif» Sélectionne la piste suivante avant de démarrer le lecteur "
-"opposé. Le crossfader est activé.\n"
+"'Alternate' (Alternar) hace que la siguiente pista se alista antes de "
+"comenzar el reproductor contrario. El crossfader se mueve al otro.\n"
 "\n"
-"«Crossfader» Le passage au lecteur opposé est effectué après chaque piste.\n"
+"'Fade Over' (Desteñirse) se crossfade al otro reproductor al final de cada "
+"pista.\n"
 "\n"
-"«Emprun Aléatoire» Prends une piste au hazard dans la liste de lecture "
-"opposée."
+"'Random Hop' (Salto al Azar) recogerá una pista al azar de la otra lista de "
+"reproducción."
 
 #. TC: Fade time heading.
-#: python/playergui.py:4303 python/preferences.py:72
+#: python/playergui.py:4367 python/preferences.py:72
 msgid "Fade"
-msgstr "Fondu"
+msgstr "Desteñirse"
 
-#: python/playergui.py:4315
+#: python/playergui.py:4379
 msgid "This controls the amount of fade between tracks."
-msgstr "Contrôle le taux de fondu entre les pistes."
+msgstr "Esto controla la cantidad de fundido entre las pistas."
 
-#: python/playergui.py:4322
+#: python/playergui.py:4386
 msgid "Audio Feed"
-msgstr "Audio Feed"
+msgstr "Audio RSS"
 
-#: python/playergui.py:4332
+#: python/playergui.py:4396
 msgid "Make output from this player available for streaming."
-msgstr "Rendre la sortie de ce lecteur disponible pour le flux"
+msgstr "Hacer salida de este reproductor disponible para streaming."
 
-#: python/playergui.py:4340
+#: python/playergui.py:4404
 msgid "Make output from this player audible to the DJ."
-msgstr "Rendre la sortie de ce lecteur audible au DJ"
+msgstr "Hacer salida de este reproductor audible para el DJ."
 
-#: python/playergui.py:4342
+#: python/playergui.py:4406
 msgid "Force"
-msgstr "Forcer"
+msgstr "Forzar"
 
-#: python/playergui.py:4348
+#: python/playergui.py:4412
 msgid ""
 "When selected this player will be treated like a main player.\n"
 "It will be affected by microphone ducking and won't mute when a main player "
 "is operating."
 msgstr ""
-"Lorsqu'il est choisi, ce lecteur agis comme le lecteur principal/\n"
-"Il est affecté par l'aténuation par le micro et ne se mute pas lorsque le  "
-"lecteur principal est en fonction."
+"Cuando este reproductor se selecciona, será tratado como un reproductor "
+"principal.\n"
+"Se verá afectada por atenuación del micrófono y no se silencia cuando un "
+"reproductor principal está en funcionamiento."
 
 #. TC: Insert playlist control.
-#: python/playergui.py:4361
+#: python/playergui.py:4425
 msgid "Insert control"
-msgstr "Insérer un contrôle"
+msgstr "Inserte control"
 
 #. TC: The Item submenu.
-#: python/playergui.py:4370
+#: python/playergui.py:4434
 msgid "Item"
-msgstr "Elément"
+msgstr "Ítem"
 
 #. TC: The Playlist submenu.
-#: python/playergui.py:4375
+#: python/playergui.py:4439
 msgid "Playlist"
-msgstr "Liste de lecture"
+msgstr "Lista de reproducción"
 
 #. TC: Insert playlist control to set playback speed to normal.
-#: python/playergui.py:4386
+#: python/playergui.py:4450
 msgid "Normal Speed"
-msgstr "Vitesse normale"
+msgstr "Velocidad normal"
 
 #. TC: Submenu Item. Parent menu is Playlist.
-#: python/playergui.py:4415 python/playergui.py:4569
+#: python/playergui.py:4479 python/playergui.py:4633
 msgid "Transfer"
-msgstr "Transfer"
+msgstr "Transferir"
 
-#: python/playergui.py:4423
+#: python/playergui.py:4487
 msgid "Crossfade"
-msgstr "Crossfader"
+msgstr "Crossfade"
 
 #. TC: Menu item. Opens the metadata tagger on the selected track.
-#: python/playergui.py:4488
+#: python/playergui.py:4552
 msgid "Meta Tag"
-msgstr "Méta Tag"
+msgstr "Meta Tag"
 
 #. TC: Menu Item. Duplicates the selected track in the playlist.
-#: python/playergui.py:4494
+#: python/playergui.py:4558
 msgid "Duplicate"
-msgstr "Dupliquer"
+msgstr "Duplicar"
 
 #. TC: Menu Item. Remove the selected track.
-#: python/playergui.py:4501
+#: python/playergui.py:4565
 msgid "Remove"
-msgstr "Supprimer"
+msgstr "Eliminar"
 
 #. TC: Submenu Item. Parent menu item is Remove.
-#: python/playergui.py:4512
+#: python/playergui.py:4576
 msgid "This"
-msgstr "Ceci"
+msgstr "Esta"
 
 #. TC: Submenu Item. Parent menu item is Remove.
-#: python/playergui.py:4519 python/preferences.py:1237
+#: python/playergui.py:4583 python/preferences.py:1237
 msgid "All"
-msgstr "Tout"
+msgstr "Todos"
 
 #. TC: Submenu Item. Parent menu item is Remove.
-#: python/playergui.py:4526
+#: python/playergui.py:4590
 msgid "From Here"
-msgstr "Depuis ici"
+msgstr "De aquí"
 
 #. TC: Submenu Item. Parent menu item is Remove.
-#: python/playergui.py:4533
+#: python/playergui.py:4597
 msgid "To Here"
-msgstr "Jusqu'ici"
+msgstr "Hacia aqui"
 
 #. TC: Open the file dialog for adding music to the chosen playlist.
-#: python/playergui.py:4546
+#: python/playergui.py:4610
 msgid "Add Music"
-msgstr "Ajouter de la musique"
+msgstr "Añadir Música"
 
 #. TC: Submenu Item. Parent menu is Playlist.
-#: python/playergui.py:4553
+#: python/playergui.py:4617
 msgid "Save"
-msgstr "Sauvegarder"
+msgstr "Guardar"
 
 #. TC: Submenu Item. Parent menu is Playlist.
-#: python/playergui.py:4564
+#: python/playergui.py:4628
 msgid "Copy"
-msgstr "Copier"
+msgstr "Copia"
 
-#: python/playergui.py:4575
+#: python/playergui.py:4639
 msgid "Exchange"
-msgstr "Echanger"
+msgstr "Intercambiar"
 
 #. TC: Submenu Item. Parent menu is Playlist.
-#: python/playergui.py:4582
+#: python/playergui.py:4646
 msgid "Empty"
-msgstr "Vide"
+msgstr "Vacío"
 
 #. TC: Submenu Item. Parent menus are Playlist->Copy.
 #. TC: Submenu Item. Parent menus are Playlist->Transfer.
-#: python/playergui.py:4596 python/playergui.py:4635
+#: python/playergui.py:4660 python/playergui.py:4699
 msgid "Append"
-msgstr "Après"
+msgstr "Añadir"
 
 #. TC: Submenu Item. Parent menus are Playlist->Copy.
 #. TC: Submenu Item. Parent menus are Playlist->Transfer.
-#: python/playergui.py:4603 python/playergui.py:4642
+#: python/playergui.py:4667 python/playergui.py:4706
 msgid "Prepend"
-msgstr "Avant"
+msgstr "Anteponer"
 
 #. TC: Submenu Item. Parent menus are Playlist->Copy.
-#: python/playergui.py:4614
+#: python/playergui.py:4678
 msgid "Append Cursor"
-msgstr "Ajouter après le curseur"
+msgstr "Anexar Cursor"
 
 #. TC: Submenu Item. Parent menus are Playlist->Copy.
-#: python/playergui.py:4621
+#: python/playergui.py:4685
 msgid "Prepend Cursor"
-msgstr "Ajouter avant le curseur"
+msgstr "Anteponer Cursor"
 
 #. TC: Submenu Item. Parent menus are Playlist->Transfer.
-#: python/playergui.py:4653
+#: python/playergui.py:4717
 msgid "Append at Cursor"
-msgstr "Ajouter après au curseur"
+msgstr "Anexar en el Cursor"
 
 #. TC: Submenu Item. Parent menus are Playlist->Transfer.
-#: python/playergui.py:4660
+#: python/playergui.py:4724
 msgid "Prepend at Cursor"
-msgstr "Ajouter avant au curseur"
+msgstr "Anteponer al cursor"
 
 #: python/preferences.py:85
 msgid "Track time elapsed"
-msgstr "Tempo écoulé"
+msgstr "Tiempo transcurrido de la pista"
 
 #: python/preferences.py:87
 msgid "Track time remaining"
-msgstr "Temps restant"
+msgstr "Tiempo de pista restante"
 
 #: python/preferences.py:89
 msgid "Audio to stream"
-msgstr "Audio vers flux"
+msgstr "Audio para transmitir"
 
 #: python/preferences.py:90
 msgid "Audio to DJ"
-msgstr "Audio vers DJ"
+msgstr "Audio para DJ"
 
 #: python/preferences.py:127
-#, python-format
+#, fuzzy, python-format
 msgid ""
 "Stereo panning is the selection of where an audio source sits from left to "
 "right within the stereo mix.\n"
@@ -2966,21 +2994,23 @@ msgid ""
 "Paired channels should be set to 100% left/right unless narrowing of the "
 "stereo field is the intention."
 msgstr ""
-"La panoramique stéréo est une sélection ou une source audio se situe plus ou "
-"moins à gauche ou a droite par rapport au mix stéréo.\n"
+"Estéreo panorámica es la selección de una fuente de audio, donde se "
+"encuentra de izquierda a derecha dentro de la mezcla estéreo.\n"
 "\n"
-"Ce contrôle garde une puissance audio constante sur toute sa plage, en "
-"donnant une atténuation de -3dB sur les deux canaux au point milieu.\n"
+"Este control mantiene la potencia de audio constante en toda su gama de "
+"viajes, dando -3dB de atenuación en ambos canales de audio en el punto "
+"medio. \n"
 "\n"
-"Si vous voulez obtenir 0dB au point milieu ou si vous voulez maintenir la "
-"stéréo de la source, cette fonctionalité doit être désactivée.\n"
+"Si usted requiere 0dB recta por el centro o requiere que una fuente de "
+"estéreo\n"
+"permanecer como estéreo entonces esta función debe ser desactivada\n"
 "\n"
-"L'appairage des canaux doit être laissé à 100% gauche/droite à moins que la "
-"réduction du champ stéréo ne soit votre intention."
+"Los caneles emparejados deben establecerse en 100% a la izquierda/derecha a "
+"menos estrechamiento del campo estéreo es la intención."
 
 #: python/preferences.py:158
 msgid "Presets"
-msgstr "Présélections"
+msgstr "Presets"
 
 #: python/preferences.py:249
 msgid ""
@@ -2991,94 +3021,97 @@ msgid ""
 "\n"
 "Note: preconfiguration of pan preset settings is required."
 msgstr ""
-"Les boutons de présélection de panoramique.\n"
+"Los botones para seleccionar los ajustes preestablecidos del panorámico.\n"
 "\n"
-"Dans une image stéréo en 1 clic le DJ peut se situer à gauche et l'invité à "
-"droite et dès que l'invité part, en 1 click le DJ peut se retrouver de "
-"nouveau  au centre.\n"
+"En la imagen estéreo a un clic el DJ puede ser a la izquierda y un invitado "
+"a la derecha y cuando el huésped se ha ido a un clic el DJ puede estar en el "
+"centro de nuevo.\n"
 "\n"
-"Note : Une préconfiguration des présélections est nécessaire."
+"Nota: Se requiere configuración previa de los ajustes preestablecidos del "
+"panorámico."
 
 #. TC: Microphone mode combobox text.
 #: python/preferences.py:274
 msgid "Deactivated"
-msgstr "Désactivé"
+msgstr "Desactivado"
 
 #. TC: Microphone mode combobox text.
 #: python/preferences.py:276
 msgid "Basic input"
-msgstr "Entrée de base"
+msgstr "Entrada básica"
 
 #. TC: Microphone mode combobox text.
 #: python/preferences.py:278
 msgid "Processed input"
-msgstr "Ingresso elaborato"
+msgstr "Entrada Procesada"
 
 #. TC: Microphone mode combobox text.
 #: python/preferences.py:280
 #, python-format
 msgid "Partnered with channel %s"
-msgstr "Associer au canal %s"
+msgstr "En conjunto con canal %s"
 
 #: python/preferences.py:432
 msgid "A label so you may describe briefly the role of this audio channel."
-msgstr "Un label décrivant brièvement le rôle de ce canal audio."
+msgstr ""
+"Una etiqueta así que usted puede describir brevemente el papel de este canal "
+"de audio."
 
 #: python/preferences.py:464
 msgid "The signal processing mode."
-msgstr "Mode de traitement du signal"
+msgstr "El modo de procesamiento de señales."
 
 #. TC: A frame heading. The channel opener is selected within.
 #: python/preferences.py:468
 msgid "Channel Opener"
-msgstr "Ouvreur de canal"
+msgstr "Abridor de Canal"
 
 #: python/preferences.py:471
 msgid ""
 "This controls the allocation of front panel open/unmute buttons. Having one "
 "button control multiple microphones can save time."
 msgstr ""
-"Contrôle l'allocation des boutons Ouvrir/DéMuter du paneau principal. Avoir "
-"un bouton pour contrôler plusieurs micro peut faire gagner du temps."
+"Esto controla la asignación de botones abiertos / activar el panel frontal. "
+"Tener un control de botón de múltiples micrófonos pueden ahorrar tiempo."
 
 #. TC: Spinbutton label text.
 #: python/preferences.py:478
 msgid "Main Panel Button"
-msgstr "Boutton du paneau principal"
+msgstr "Botón de Panel Principal"
 
 #: python/preferences.py:495
 msgid "This:"
-msgstr "Ceci :"
+msgstr "Esta:"
 
 #: python/preferences.py:504
 msgid "Open"
-msgstr "Ouvrir"
+msgstr "Abierto"
 
 #: python/preferences.py:517
 msgid "Stereo Panning"
-msgstr "Panoramique Stéréo"
+msgstr "Paneo Estéreo"
 
 #. TC: A set of controls that perform audio signal matching.
 #: python/preferences.py:530
 msgid "Signal Matching"
-msgstr "Correspondance de signal"
+msgstr "De coincidencia de señales"
 
 #: python/preferences.py:531
 msgid ""
 "These controls are provided to obtain a decent match between the two "
 "microphones."
 msgstr ""
-"Ces contrôles sont mis à disposition pour obtenir une correction de gain "
-"convenable entre les micros."
+"Estos controles se proporcionan para obtener una pareja decente entre los "
+"dos micrófonos."
 
 #: python/preferences.py:540
 msgid "Relative Gain (dB)"
-msgstr "Gain relatif (dB)"
+msgstr "Ganancia relativa (dB)"
 
 #. TC: Mic audio phase inversion control.
 #: python/preferences.py:545 python/preferences.py:550
 msgid "Invert Signal"
-msgstr "Invercer le signal"
+msgstr "Invertir señal"
 
 #: python/preferences.py:551 python/preferences.py:571
 #: python/preferences.py:667
@@ -3086,12 +3119,13 @@ msgid ""
 "Useful for when microphones are cancelling one another out, producing a "
 "hollow sound."
 msgstr ""
-"Utile lorsque les micros s'annulent mutuellement provoquant un son caverneux."
+"Útil para cuando los micrófonos están cancelando entre sí, produciendo un "
+"sonido hueco."
 
 #. TC: Control whether to mix microphone audio to the DJ mix.
 #: python/preferences.py:554
 msgid "In The DJ's Mix"
-msgstr "Dans le mix du DJ"
+msgstr "En la mezcla del DJ"
 
 #: python/preferences.py:555 python/preferences.py:577
 #: python/preferences.py:677
@@ -3099,29 +3133,30 @@ msgid ""
 "Make the microphone audio audible in the DJ mix. This may not always be "
 "desirable."
 msgstr ""
-"Rendre le micro audio audible dans le mix DJ. Ce n'est pas toujour désiré."
+"Hacer audible el audio del micrófono en la mezcla de DJ. Esto no siempre es "
+"deseable."
 
 #: python/preferences.py:563
 msgid "Basic Controls"
-msgstr "Contrôles de base"
+msgstr "Controles básicos"
 
 #: python/preferences.py:564 python/preferences.py:619
 msgid "Boost/Cut (dB)"
-msgstr "Augmenter/Couper (dB)"
+msgstr "Refuerzo/Corte (dB)"
 
 #: python/preferences.py:585
 msgid "High Pass Filter"
-msgstr "Filtre passe haut"
+msgstr "Filtro de paso alto"
 
 #: python/preferences.py:586 python/preferences.py:601
 #: python/preferences.py:611
 msgid "Cutoff Frequency"
-msgstr "Fréquence de coupure"
+msgstr "Frecuencia de corte"
 
 #. TC: User can set the number of filter stages.
 #: python/preferences.py:590
 msgid "Stages"
-msgstr "Passes"
+msgstr "Etapas"
 
 #: python/preferences.py:593
 msgid ""
@@ -3129,67 +3164,68 @@ msgid ""
 "feature to restrict low frequency sounds such as mains hum. Setting too high "
 "a level will make your voice sound thin."
 msgstr ""
-"La fréquence en Hertz au dessus de laquelle l'audio peut passer à l'étape "
-"suivante. Utilisez cette fonctionalité pour restreindre les basses "
-"fréquencestelles que les humms. En paramêtrant un niveau trop haut, la voix "
-"sonnera aiguë."
+"Frecuencia en Hertz por encima del cual el audio puede pasar a las etapas "
+"posteriores. Utilice esta función para restringir sonidos de baja "
+"frecuencia, tales como platos principales zumbidos. Configuración de un "
+"nivel demasiado alto hará que su voz sonara delgada."
 
 #. TC: this is the treble control. HF = high frequency.
 #: python/preferences.py:598
 msgid "HF Detail"
-msgstr "Détails HF"
+msgstr "Detalle HF"
 
 #: python/preferences.py:605
 msgid "You can use this to boost the amount of treble in the audio."
-msgstr "Vous pouvez l'utiliser pour augmenter le taux d'aiguës dans l'audio."
+msgstr "Usted puede usar esto para aumentar la cantidad de agudos en el audio."
 
 #. TC: this is the bass control. LF = low frequency.
 #: python/preferences.py:608
 msgid "LF Detail"
-msgstr "Détails LF"
+msgstr "Detalle LF"
 
 #: python/preferences.py:615
 msgid "You can use this to boost the amount of bass in the audio."
-msgstr "Vous pouvez l'utiliser pour augmenter le taux de basses dans l'audio."
+msgstr "Usted puede usar esto para aumentar la cantidad de graves en el audio."
 
 #. TC: lookahead brick wall limiter.
 #: python/preferences.py:618
 msgid "Limiter"
-msgstr "Limiteur"
+msgstr "Limitador"
 
 #. TC: this is the peak signal limit.
 #: python/preferences.py:623
 msgid "Upper Limit"
-msgstr "Limite supérieure"
+msgstr "Limite superior"
 
 #: python/preferences.py:625
 msgid ""
 "A look-ahead brick-wall limiter. Audio signals are capped at the upper limit."
 msgstr ""
-"Un limiteur prédictif. Les signaux audio sont bloqués à la limite supérieure."
+"Un limitador \"pared de ladrillo\" de preanálisis. Las señales de audio "
+"tienen un límite en el límite superior."
 
 #: python/preferences.py:628
 msgid "Noise Gate"
-msgstr "Noise Gate"
+msgstr "Puerta de Ruido"
 
 #. TC: noise gate triggers at this level.
 #: python/preferences.py:630
 msgid "Threshold"
-msgstr "Profondeur"
+msgstr "Umbral"
 
 #. TC: negative gain when the noise gate is active.
 #. TC: The de-esser attenuation in ess-detected state.
 #: python/preferences.py:634 python/preferences.py:644
 msgid "Gain"
-msgstr "Gain"
+msgstr "Ganancia"
 
 #: python/preferences.py:636
 msgid ""
 "Reduce the unwanted quietest sounds and background noise which you don't "
 "want your listeners to hear with this."
 msgstr ""
-"Réduit les sons faibles non désirés et le bruit de fond que vous ne désirez "
-"transmettre aux auditeurs."
+"Reducir los sonidos más silenciosos no deseados y el ruido de fondo que "
+"usted no quiere que sus oyentes escuchar con esto."
 
 #: python/preferences.py:639
 msgid "De-esser"
@@ -3198,7 +3234,7 @@ msgstr "De-esser"
 #. TC: Bias has a numeric setting.
 #: python/preferences.py:641
 msgid "Bias"
-msgstr "Bias"
+msgstr "Polarización"
 
 #: python/preferences.py:646
 msgid ""
@@ -3206,22 +3242,22 @@ msgid ""
 "the Bias control will be set low so that the de-esser is off when there is "
 "silence but is set high enough that mouse clicks are detected and suppressed."
 msgstr ""
-"Réduit les sons S, T et P que les micros ont tendance à exagérer. "
-"Idéallement le contrôle du Bias sera mis très bas de façon à ce que le de-"
-"esseur soit inopérant lorsqu'il y a du silence mais suffisament haut pour "
-"que les clics de la souris soient détectés et éliminés."
+"Reducir las S, T y P parece que los micrófonos tienden a exagerar. Lo ideal "
+"sería que el control Bias se establecerá bajo de modo que el de-esser es "
+"cuando hay silencio, pero está lo suficientemente alto que los clics del "
+"ratón son detectados y suprimidos."
 
 #: python/preferences.py:651
 msgid "Ducker"
-msgstr "Atténuateur"
+msgstr "Ducker"
 
 #: python/preferences.py:652
 msgid "Release"
-msgstr "Relâche"
+msgstr "Relajación"
 
 #: python/preferences.py:655
 msgid "Hold"
-msgstr "Maintenu"
+msgstr "Mantener"
 
 #: python/preferences.py:658
 msgid ""
@@ -3229,52 +3265,52 @@ msgid ""
 "speaks. These settings allow you to adjust the timings of that audio "
 "reduction."
 msgstr ""
-"L'aténuateur réduit automatiquement le niveau du lecteur audio lorsque le DJ "
-"parle. Ces paramêtres permettent l'ajustement de la durée de "
-"l'affaiblissement audio."
+"El pisador reduce automáticamente el nivel de reproductor de audio cuando el "
+"DJ habla. Estos ajustes le permiten ajustar los tiempos de que la reducción "
+"de audio."
 
 #: python/preferences.py:662
 msgid "Other options"
-msgstr "Autres options"
+msgstr "Otras opciones"
 
 #: python/preferences.py:669
 msgid "Phase Rotator"
-msgstr "Rotacteur de phase"
+msgstr "Rotador de Fase"
 
 #: python/preferences.py:672
 msgid ""
 "This feature processes the microphone audio so that it sounds more even. The "
 "effect is particularly noticable on male voices."
 msgstr ""
-"Cette fonctionalité traite le micro pour qu'il paraisse plus présent. Cet "
-"effet est plus audible avec les voix mâles."
+"Esta función procesa el audio del micrófono para que suene más uniforme. El "
+"efecto es particularmente notable en las voces masculinas."
 
 #: python/preferences.py:855
 msgid "The volume control for the left music player."
-msgstr "Contrôle de volume du lecteur de gauche."
+msgstr "El control de volumen para el reproductor de música izquierdo."
 
 #. TC: preferences window title.
 #: python/preferences.py:911
 msgid "IDJC Preferences"
-msgstr "Préférences de IDJC"
+msgstr "Preferencias IDJC"
 
 #. TC: The DJ's sound level controller.
 #: python/preferences.py:936
 msgid "DJ Audio Level"
-msgstr "Niveau audio DJ"
+msgstr "DJ de nivel de audio"
 
 #: python/preferences.py:948
 msgid "This adjusts the sound level of the DJ audio."
-msgstr "Ajuste le niveau sonore du canal audio DJ."
+msgstr "Ajusta el nivel de sonido del audio de DJ."
 
 #. TC: The alarm sound level.
 #: python/preferences.py:953
 msgid "Alarm Level"
-msgstr "Niveau de l'alarme"
+msgstr "Nivel de alarma"
 
 #: python/preferences.py:967
 msgid "Music Loudness Compensation"
-msgstr "Compensation Loudness"
+msgstr "Música Sonoridad Compensación"
 
 #: python/preferences.py:965
 #, python-format
@@ -3283,13 +3319,13 @@ msgid ""
 "close to the dj audio level when using the '%s' feature, otherwise a bit "
 "louder."
 msgstr ""
-"Ceci ajuste le niveau du son de l'alarme DJ. Normalement ce doit être aux "
-"alentours du niveau audio du DJ lorsque la fonction «%s» est utilisée, ou "
-"sinon un petit peu plus fort."
+"Ajusta el nivel de sonido de la alarma de DJ. Normalmente esto se debe "
+"establecer cerca del nivel de audio dj cuando se utiliza el %s "
+"característica', de lo contrario un poco más fuerte."
 
 #: python/preferences.py:973
 msgid "Player Resample Quality"
-msgstr "Qualité de rééchantillonnage du lecteur"
+msgstr "Reproductor Volver a muestrear Calidad"
 
 #: python/preferences.py:979
 msgid ""
@@ -3299,116 +3335,116 @@ msgid ""
 "also uses the most CPU (not recommended for systems built before 2006). All "
 "these modes provide adequate sound quality."
 msgstr ""
-"Ajuste la qualité de la méthode de rééchantillonnage audio utilisée lorsque "
-"la fréquence du fichier lu ne corresponds pas à celle nécessaire au serveur "
-"JACK. Les meilleurs modes offrent une meilleur qualité sonore mais consoment "
-"aussi plus de puissance CPU (non recommendé pour les systèmes d'avant 2006). "
-"Tous ces modes donne une qualité correcte."
+"Ajusta la calidad del método de remuestreo de audio utilizado cuando la "
+"frecuencia de muestreo del archivo de música que se está reproduciendo no "
+"coincide con la frecuencia de muestreo del servidor de sonido JACK. Mejor "
+"modo ofrece la mejor calidad de sonido, pero también utiliza más CPU (no "
+"recomendado para los sistemas construidos antes de 2006). Todos estos modos "
+"proporcionan una adecuada calidad de sonido."
 
 #: python/preferences.py:987
 msgid "Best"
-msgstr "Meilleure"
+msgstr "Mejor"
 
-#: python/preferences.py:996 python/format.py:512
+#: python/preferences.py:996 python/format.py:521
 msgid "Medium"
-msgstr "Moyenne"
+msgstr "Mediana"
 
 #: python/preferences.py:1005
 msgid "Fast"
-msgstr "Rapide"
+msgstr "Rápido"
 
 #. TC: the set of features - section heading.
 #: python/preferences.py:1020
 msgid "Feature Set"
-msgstr "Liste de fonctionalités"
+msgstr "Conjunto de características"
 
 #. TC: Start in the full featured user interface mode.
 #: python/preferences.py:1032
 msgid "Start Full"
-msgstr "Démarrer avec tout"
+msgstr "Iniciar llenado"
 
 #: python/preferences.py:1037 python/preferences.py:1045
 msgid "Indicates which mode IDJC will be in when launched."
-msgstr "Indique quel sera le mode de IDJC au démarrage."
+msgstr "Indica que el modo IDJC estará en cuando se inicia."
 
 #. TC: Start in a reduced user interface mode.
 #: python/preferences.py:1040
 msgid "Start Mini"
-msgstr "Démarrer avec le minimum"
+msgstr "Inicio Mini"
 
 #: python/preferences.py:1053
 msgid "Fully Featured"
-msgstr "Toutes les fonctionalités"
+msgstr "Totalmente destacado"
 
 #: python/preferences.py:1058
 msgid "Run in full functionality mode which uses more CPU power."
 msgstr ""
-"Exécuter dans le mode toutes fonctionalités qui utilise plus de puissance "
-"CPU."
+"Ejecutar en modo de funcionalidad completa que utiliza más energía de la CPU."
 
 #: python/preferences.py:1060
 msgid "Basic Streamer"
-msgstr "Streamer de base"
+msgstr "Streamer Básica"
 
 #: python/preferences.py:1064
 msgid ""
 "Run in a reduced functionality mode that lowers the burden on the CPU and "
 "takes up less screen space."
 msgstr ""
-"Exécuter dans le mode fonctionalités réduites qui utilise moins de puissance "
-"CPU et utilise moins d'espace à l'écran."
+"Ejecutar en un modo de funcionalidad reducida que disminuye la carga de la "
+"CPU y ocupa menos espacio en la pantalla."
 
 #: python/preferences.py:1072
 msgid "These settings take effect after restarting"
-msgstr "Ces paramêtres ne prennent effet qu'après un redémarrage."
+msgstr "Estos ajustes tienen efecto después de reiniciar"
 
 #: python/preferences.py:1093
 msgid "Reserve 24 sound effects slots"
-msgstr "Réserver 24 slots d'effets sonores"
+msgstr "Efectos de sonido Reserva 24 ranuras"
 
 #: python/preferences.py:1094
 msgid "Only 12"
-msgstr "Seulement 12"
+msgstr "Sólo 12"
 
 #: python/preferences.py:1106
 msgid "Audio input channels"
-msgstr "Canaux audio en entrée"
+msgstr "Canales de entrada de audio"
 
 #: python/preferences.py:1111
 msgid "Simultaneous stream(s)"
-msgstr "Transmission(ws) simultanée(s)"
+msgstr "Streams simultánea(s)"
 
 #: python/preferences.py:1117
 msgid "Simultaneous recording(s)"
-msgstr "Enregistrement(s) simultané(s)"
+msgstr "Grabación(es) simultánea(s)"
 
 #: python/preferences.py:1171
 msgid "Fill channel meter void space"
-msgstr "Remplir l'espace libre du vu-mêtre du canal"
+msgstr "Llenar canal espacio vacío metros"
 
 #: python/preferences.py:1183
 msgid "Player Loudness Normalisation"
-msgstr "Normalisation du Loudness du lecteur"
+msgstr "Reproductor de sonoridad Normalización"
 
 #: python/preferences.py:1194
 msgid "Indicate which tracks have loudness metadata"
-msgstr "Indique quelles pistes ont une métadonnée de Loudness."
+msgstr "Indique cuales pistas tienen metadatos de volumen"
 
 #: python/preferences.py:1195
 msgid ""
 "Shows a marker in the playlists next to each track. Either a green circle or "
 "a red triangle."
 msgstr ""
-"Affiche un marqueur à côté de chaque piste dans les listes de lecture. Soit "
-"un cercle vert, soit un triangle rouge."
+"Muestra un marcador en las listas al lado de la pista. Cualquiera de un "
+"círculo verde o un triángulo rojo."
 
 #: python/preferences.py:1203
 msgid "Adjust playback volume in dB"
-msgstr "Ajuste le volume de rendu en dB"
+msgstr "Ajuste el volumen de reproducción en dB"
 
 #: python/preferences.py:1204
 msgid "Effective only on newly started tracks."
-msgstr "Effectif uniquement pour les pistes nouvellement jouées."
+msgstr "Efectivo sólo en pistas recién iniciadas."
 
 #: python/preferences.py:1210
 msgid "R128"
@@ -3419,41 +3455,42 @@ msgid ""
 "It may not be desirable to use the default level since it is rather quiet. "
 "This should be set 4 or 5 dB higher than the ReplayGain setting."
 msgstr ""
-"Il peut ne pas être souhaitable d'utiliser le volume par défaut puisqu'il "
-"est plutot bas. Il doit se situer 4 ou 5 dB plus haut que le réglage de Gain "
-"Replay."
+"Puede que no sea conveniente utilizar el nivel predeterminado, ya que es "
+"bastante tranquilo. Esto se debe establecer 4 o 5 dB más alto que el ajuste "
+"ReplayGain."
 
 #: python/preferences.py:1219
 msgid "ReplayGain"
-msgstr "Gain Replay"
+msgstr "ReplayGain"
 
 #: python/preferences.py:1223
 msgid ""
 "It may not be desirable to use the default level since it is rather quiet. "
 "This should be set 4 or 5 dB lower than the R128 setting."
 msgstr ""
-"Il peut ne pas être souhaitable d'utiliser le volume par défaut puisqu'il "
-"est plutot bas. Il doit se situer 4 ou 5 dB plus bas que le réglage du R128."
+"Puede que no sea conveniente utilizar el nivel predeterminado, ya que es "
+"bastante tranquilo. Esto se debe establecer 4 o 5 dB inferior al ajuste R128."
 
 #: python/preferences.py:1228
 msgid "Untagged"
-msgstr "Non taggé"
+msgstr "No etiquetado"
 
 #: python/preferences.py:1232
 msgid ""
 "Set this so that any unmarked tracks are playing at a roughly similar "
 "loudness level as the marked ones."
 msgstr ""
-"Cocher pour que toutes les pistes non taggés soient jouées approximativement "
-"au même volume que celle qui le sont."
+"Establezca esto para que las pistas no marcadas están reproduciendose a un "
+"nivel de intensidad más o menos similar a los marcados."
 
 #: python/preferences.py:1241
 msgid "A master level control for the media players."
-msgstr "Un contrôle maitre pour les Lecteurs."
+msgstr "Un control de nivel maestro para los reproductores multimedia."
 
 #: python/preferences.py:1252
 msgid "Recorder Filename (excluding the file extension)"
-msgstr "Non du fichier d'enregistrement (sans extention)"
+msgstr ""
+"Nombre del Archivo de la Grabadora (excluyendo la extensión del archivo)"
 
 #: python/preferences.py:1253
 msgid ""
@@ -3462,26 +3499,27 @@ msgid ""
 "Users may wish to alter this to make filenames that are compatible with "
 "particular filesystems."
 msgstr ""
-"Les spécifications sont $r pour le numéro d'enregistrement, le reste étant "
-"documenté dans la page de manuel de strftime.\n"
-"Les utilisateurs peuvent modifier ceci pour rendre les noms de fichiers "
-"compatibles avec certains systèmes de fichiers."
+"Los especificadores son $r el número de la grabadora y el resto se documenta "
+"en la página man strftime. \n"
+"Los usuarios que deseen modificar esto para hacer los nombres de archivo que "
+"son compatibles con los sistemas de archivos particulares."
 
 #: python/preferences.py:1270
 msgid "Miscellaneous Features"
-msgstr "Fonctionalités diverses"
+msgstr "Características Misceláneos"
 
 #: python/preferences.py:1279
 msgid "Trim quiet song endings and trailing silence"
-msgstr "Eliminer les silences de début et de fin de pistes"
+msgstr "Recorte terminaciones de canciones tranquilas y posterior silencio"
 
 #: python/preferences.py:1285
 msgid "End tracks containing long passages of silence"
-msgstr "Terminer les pistes contenant de long segments muets"
+msgstr "Pistas finales que contienen largos pasajes de silencio"
 
 #: python/preferences.py:1291
 msgid "Enable the main-player speed/pitch controls"
-msgstr "Activer les contrôles de tonalité/vitesse du lecteur principal"
+msgstr ""
+"Activar los controles de velocidad/tono de los principales reproductores"
 
 #: python/preferences.py:1295
 msgid ""
@@ -3489,25 +3527,25 @@ msgid ""
 "allow the playback speed to be adjusted from 25% to 400% and a normal speed "
 "button."
 msgstr ""
-"Cette option fait apparaitre quelques widgets sous les listes de lecture "
-"pour permettre l'ajustement de la vitesse entre 25 rt 400% ainsi qu'un "
-"bouton vitesse normale."
+"Esta opción hace que algunos widgets adicionales para aparecer debajo de las "
+"listas de reproducción que permiten que la velocidad de reproducción para "
+"ajustarse desde 25% a 400% y un botón de velocidad normal."
 
 #: python/preferences.py:1300
 msgid "Separate left/right player volume faders"
-msgstr "Séparrer les curseurs de volume gauche et droite"
+msgstr "Faders de volumen Reproductor separada izquierda /"
 
 #: python/preferences.py:1304
 msgid ""
 "Select this option to use an independent volume fader for the left and right "
 "music players."
 msgstr ""
-"Choisir cette option pour avoir des boutons de fader indépendants pour les "
-"lecteurs de gauche et de droite."
+"Seleccione esta opción para utilizar un atenuador de volumen independiente "
+"para los reproductores de música izquierdo y derecho."
 
 #: python/preferences.py:1308
 msgid "Enlarge the time elapsed/remaining windows"
-msgstr "Elargir les fenêtres de temps écoulé/restant"
+msgstr "Agrandar el tiempo transcurrido / restante ventanas"
 
 #: python/preferences.py:1312
 msgid ""
@@ -3515,13 +3553,14 @@ msgid ""
 "text that appears in them due to unusual DPI settings or the use of a "
 "different rendering engine. This option serves to fix that."
 msgstr ""
-"Les fenêtres de temps écoulé/restant n'apparaissent parfois pas assez larges "
-"pour contenir tout le texte pour cause de DPI inabituel ou d'un moteur de "
-"rendu différent. Cette option peut remédier à ce défaut."
+"El tiempo transcurrido / restante ventanas a veces no parecen lo "
+"suficientemente grande para el texto que aparece en ellas, por las opciones "
+"de DPI inusuales o el uso de un motor de renderizado diferente. Esta opción "
+"sirve para arreglar eso."
 
 #: python/preferences.py:1318
 msgid "Sound an alarm when the music is due to end"
-msgstr "Jouer une alarme lorsque la musique arrive à sa fin"
+msgstr "Suena una alarma cuando la música se debe poner fin a"
 
 #: python/preferences.py:1321
 msgid ""
@@ -3531,43 +3570,43 @@ msgid ""
 "\n"
 "JACK freewheel mode will also be automatically disengaged."
 msgstr ""
-"Une alarme alerte le DJ lorsque la durée de diffusion restante atteint 9 "
-"secondes. Fonctionne également sur le monitoring mais la tonalité n'est pas "
-"diffusée sur le flux.\n"
+"Un tono de alarma que alerta al DJ que el aire muerto está a sólo nueve "
+"segundos en el futuro. Esto también funciona en el seguimiento de audio "
+"stream, pero el tono de alarma no se envía al stream.\n"
 "\n"
-"Le mode freewheel de JACK est également désengagé automatiquement."
+"El modo freewheel de JACK también se desactivará automáticamente."
 
 #: python/preferences.py:1331
 msgid "Apply dither to 16 bit PCM playback"
-msgstr "Appliquer un adoucissement au rendu 16 bits PCM"
+msgstr "Aplicar tramado a la reproducción PCM de 16 bits"
 
 #: python/preferences.py:1335
 msgid ""
 "This feature maybe improves the sound quality a little when listening on a "
 "24 bit sound card."
 msgstr ""
-"Cette fonctionalité peut augmenter légèrement la qualité lors de l'écoute "
-"sur une carte son 24bit"
+"Esta característica puede que mejora la calidad de sonido un poco cuando se "
+"escucha en una tarjeta de sonido de 24 bits."
 
 #: python/preferences.py:1338
 msgid "Enable tooltips"
-msgstr "Activer les bulles d'aide"
+msgstr "Activar información sobre herramientas"
 
 #: python/preferences.py:1342
 msgid ""
 "This, what you are currently reading, is a tooltip. This feature turns them "
 "on or off."
 msgstr ""
-"Ce que vous lisez actuellement est une bulle d'aide. Cette fonctionalité les "
-"dés/active. "
+"Esto, lo que está leyendo en este momento, es una información sobre "
+"herramientas. Esta característica los convierte en o fuera."
 
 #: python/preferences.py:1361
 msgid "Player Settings At Startup"
-msgstr "Configuration de démarrage du lecteur"
+msgstr "Configuración del reproductor en el arranque"
 
 #: python/preferences.py:1372
 msgid "Restore the previous session"
-msgstr "Restaurer la session précédente"
+msgstr "Restaurar la sesión anterior"
 
 #: python/preferences.py:1377
 msgid ""
@@ -3575,225 +3614,275 @@ msgid ""
 "left. As an alternative you may specify below how you want the various "
 "settings to be when IDJC starts."
 msgstr ""
-"Au démarrage de IDJC la plupart des paramètres de la fenêtre principale "
-"resteront comme vous les aviez laissés. Comme alternative, vous pouvez "
-"spécifier ci-dessous comment ils doivent être initialisés."
+"Al iniciar IDJC la mayoría de los principales parámetros de la ventana será "
+"como quedaron. Como alternativa se puede especificar a continuación cómo "
+"desea que los distintos ajustes que sean cuando IDJC comienza."
 
 #: python/preferences.py:1387
 msgid "Player 1"
-msgstr "Lecteur 1"
+msgstr "Reproductor 1"
 
 #: python/preferences.py:1389
 msgid "Player 2"
-msgstr "Lecteur 2"
+msgstr "Reproductor 2"
 
 #. TC: DJ hears the stream mix.
 #: python/preferences.py:1417
 msgid "Monitor Stream Mix"
-msgstr "Moniteur du stream Mixé"
+msgstr "Monitorear Mezcla del Stream"
 
 #. TC: A heading label for miscellaneous settings.
 #: python/preferences.py:1428
 msgid "General"
-msgstr "Général"
+msgstr "General"
 
 #: python/preferences.py:1478
 msgid "VoIP panning + mono downmix"
-msgstr "Placement VoIP + réduction mono"
+msgstr "Paneo VoIP + downmix mono"
 
 #. TC: Keyboard and MIDI bindings configuration.
 #: python/preferences.py:1492
 msgid "Bindings"
-msgstr "Scorciatoie"
+msgstr "Vinculaciones"
 
 #: python/preferences.py:1540
 msgid "Licence"
-msgstr "Licence"
+msgstr "Licencia"
 
 #: python/preferences.py:1563
 msgid "Contributors"
-msgstr "Collaborateurs"
+msgstr "Colaboradores"
 
 #: python/preferences.py:1570
 msgid "Translators"
-msgstr "Traducteurs"
+msgstr "Traductores"
 
-#: python/preferences.py:1574
+#: python/preferences.py:1575
 msgid "Build Info"
-msgstr ""
+msgstr "Versión de SW"
 
-#: python/preferences.py:1591
+#: python/preferences.py:1592
 msgid "About"
-msgstr "Concernant…"
+msgstr "Acerca de"
+
+#: python/sourceclientgui.py:75
+msgid "Disabled"
+msgstr "Incapacitado"
+
+#: python/sourceclientgui.py:75
+msgid "Auto"
+msgstr "Auto"
+
+#: python/sourceclientgui.py:75
+msgid "Auto, no plaintext"
+msgstr "Auto, ningún texto plano"
 
-#: python/sourceclientgui.py:91
+#: python/sourceclientgui.py:76
+msgid "RFC2818"
+msgstr "RFC2818"
+
+#: python/sourceclientgui.py:76
+msgid "RFC2817"
+msgstr "RFC2817"
+
+#: python/sourceclientgui.py:96
 msgid "Insert Attribute"
-msgstr "Insérer un attribut"
+msgstr "Insertar Atributo"
 
-#: python/sourceclientgui.py:135
+#: python/sourceclientgui.py:140
 msgid "Icecast 2 Master"
-msgstr "Icecast 2 Maitre"
+msgstr "Icecast 2 Maestro"
 
-#: python/sourceclientgui.py:135
+#: python/sourceclientgui.py:140
 msgid "Shoutcast Master"
-msgstr "Shoutcast Maitre"
+msgstr "Shoutcast Maestro"
 
-#: python/sourceclientgui.py:136
+#: python/sourceclientgui.py:141
 msgid "Icecast 2 Stats/Relay"
-msgstr "Icecast 2 Stats/Relais"
+msgstr "Icecast 2 Estadísticas/Relay"
 
-#: python/sourceclientgui.py:136
+#: python/sourceclientgui.py:141
 msgid "Shoutcast Stats/Relay"
-msgstr "Icecast 2 Stats/Relais"
+msgstr "Shoutcast Estadísticas/Relay"
 
-#: python/sourceclientgui.py:139
+#: python/sourceclientgui.py:144
 msgid "Enter new server connection details"
-msgstr "Insérer de nouveaux détails concernant la connexion au serveur"
+msgstr "Introduzca nuevos detalles de la conexión del servidor"
 
-#: python/sourceclientgui.py:158
+#: python/sourceclientgui.py:164
 msgid "Edit existing server connection details"
-msgstr "Editer les détails de la connexion au serveur"
+msgstr "Editar detalles de la conexión de servidor existentes"
 
-#: python/sourceclientgui.py:195
+#. TC: Dialog title bar text.
+#: python/sourceclientgui.py:218
+msgid "Certificate Authority Directory"
+msgstr "Certificate Authority Directorio"
+
+#. TC: Dialog title bar text.
+#: python/sourceclientgui.py:232
+msgid "Certificate Authority File"
+msgstr "Certificate Authority Archivo"
+
+#. TC: Dialog title bar text.
+#: python/sourceclientgui.py:246
+msgid "TLS Client Certificate"
+msgstr "TLS certificado de cliente"
+
+#: python/sourceclientgui.py:257
 msgid "This server is to be scanned for audience figures"
-msgstr "Ce serveur doit être scanné pour les stats d'audience"
+msgstr "Este servidor debe ser escaneada por cifras de audiencia"
 
-#: python/sourceclientgui.py:208
+#: python/sourceclientgui.py:270
 msgid "Server type"
-msgstr "Type de serveur"
+msgstr "Tipo de servidor"
 
-#: python/sourceclientgui.py:208
+#: python/sourceclientgui.py:270
 msgid "Port number"
-msgstr "Numéro du port"
+msgstr "Número de puerto"
 
-#: python/sourceclientgui.py:209
+#: python/sourceclientgui.py:271
 msgid "Mount point"
-msgstr "Point de montage"
+msgstr "punto de montaje"
 
-#: python/sourceclientgui.py:209
+#: python/sourceclientgui.py:271
 msgid "Login name"
-msgstr "Nome utente"
+msgstr "Nombre de inicio de sesión"
+
+#: python/sourceclientgui.py:272
+msgid "TLS"
+msgstr "TLS"
+
+#: python/sourceclientgui.py:272
+msgid "CA directory"
+msgstr "Directorio de CA"
 
-#: python/sourceclientgui.py:475
+#: python/sourceclientgui.py:272
+msgid "CA file"
+msgstr "Archivo de CA"
+
+#: python/sourceclientgui.py:272
+msgid "Client cert"
+msgstr "Cert cliente"
+
+#: python/sourceclientgui.py:556
 msgid "Encoder Format Not Set/Compatible"
-msgstr "Format d'encodage non défini/incompatible"
+msgstr "Formato del Codificador No Configurado/Incompatible"
 
 #. TC: Connection button text when no details have been entered.
-#: python/sourceclientgui.py:478
+#: python/sourceclientgui.py:559
 msgid "No Master Server Configured"
-msgstr "Aucun serveur maitre n'es configuré"
+msgstr "Ningún Maestro servidor configurado"
 
-#: python/sourceclientgui.py:680
+#: python/sourceclientgui.py:761
 msgid ""
 "A table of servers with which to connect. Only one master server can be "
 "added for the purpose of streaming. All other servers will appear below the "
 "master server in the list for the purpose of stats collection which can be "
 "toggled on a per server basis."
 msgstr ""
-"Une table de serveurs auxquels se connecter. Seul le serveur maitre peut "
-"être ajouté dans le but de streaming. Tous les autres serveurs apparaitrons "
-"sous le serveur maitre pour les statistiques, qui peuvent être occultés par "
-"serveurs."
+"Una tabla de servidores con los que se conecte. Sólo un servidor maestro se "
+"puede añadir a los efectos de streaming. Aparecerán todos los demás "
+"servidores de abajo el servidor maestro en la lista con el propósito de la "
+"recolección de estadísticas que pueden activarse en función de cada servidor."
 
-#: python/sourceclientgui.py:696
+#: python/sourceclientgui.py:777
 msgid "Hostname/IP address"
-msgstr "Hôte/Adresse IP"
+msgstr "Nombre de host/dirección IP"
 
 #. TC: Mount point is a technical term in relation to icecast servers.
-#: python/sourceclientgui.py:709
+#: python/sourceclientgui.py:790
 msgid "Mount point       "
-msgstr "Point de montage  "
+msgstr "punto de montaje       "
 
 #. TC: This is the listener count heading.
-#: python/sourceclientgui.py:718
+#: python/sourceclientgui.py:799
 msgid "Listeners"
-msgstr "Auditeurs"
+msgstr "Los oyentes"
 
-#: python/sourceclientgui.py:733
+#: python/sourceclientgui.py:814
 msgid "The sum total of listeners in this server tab."
-msgstr "Nombre total d'auditeurs pour cet onglet serveur"
+msgstr "La suma total de los oyentes en esta ficha servidor."
 
-#: python/sourceclientgui.py:760
+#: python/sourceclientgui.py:841
 msgid "Never"
-msgstr "Jamais"
+msgstr "Nunca"
 
-#: python/sourceclientgui.py:763
+#: python/sourceclientgui.py:844
 msgid "Always"
-msgstr "Toujours"
+msgstr "Siempre"
 
-#: python/sourceclientgui.py:765
+#: python/sourceclientgui.py:846
 msgid "If connected"
-msgstr "Si connecté"
+msgstr "Si está conectado"
 
-#: python/sourceclientgui.py:1021
+#: python/sourceclientgui.py:1102
 msgid "Custom user agent string"
-msgstr "User agent personnalisé"
+msgstr "Cadena de agente de usuario personalizada"
 
-#: python/sourceclientgui.py:1028
+#: python/sourceclientgui.py:1109
 msgid ""
 "Set this on the occasion that the server or its firewall specifically "
 "refuses to allow libshout based clients."
 msgstr ""
-"A configurer au cas ou le serveur ou le pare-feux refuse spécialement "
-"d'autoriser les clients basés sur libshout."
+"Establezca este cuando el servidor o su firewall niega específicamente para "
+"permitir a los clientes basados ​​en libshout."
 
-#: python/sourceclientgui.py:1033
+#: python/sourceclientgui.py:1114
 msgid "If the connection breaks reconnect to the server"
-msgstr "Si la connexion est interrompue, se reconnecter au sserveur"
+msgstr "Si se rompe la conexión vuelva a conectar al servidor"
 
 #. TC: Label for a comma separated list of delay times.
-#: python/sourceclientgui.py:1043
+#: python/sourceclientgui.py:1124
 msgid "Delay times"
-msgstr "Temps de délais"
+msgstr "Los tiempos de retardo"
 
-#: python/sourceclientgui.py:1047
+#: python/sourceclientgui.py:1128
 msgid ""
 "A comma separated list of delays in seconds between reconnection attempts. "
 "Note that bad values or values less than 5 will be interpreted as 5."
 msgstr ""
-"Une liste de délais en secondes, séparés par une virgule, entre les "
-"tentatives de reconnexion. Notez que de mauvaises valeurs ou inférieures à 5 "
-"seront interprétées comme 5."
+"Una lista separada por comas de los retrasos se separó en segundos entre "
+"intentos de reconexión. Tenga en cuenta que los valores de los malos o los "
+"valores inferiores a 5 se interpretará como 5."
 
-#: python/sourceclientgui.py:1053
+#: python/sourceclientgui.py:1134
 msgid "Repeat the sequence of delays indefinitely."
-msgstr "Répéter la saquence de délais indéfiniment."
+msgstr "Repita la secuencia de los retrasos de forma indefinida."
 
 #. TC: User specifies no dialog box to be shown.
-#: python/sourceclientgui.py:1056
+#: python/sourceclientgui.py:1137
 msgid "Quiet"
-msgstr "Muet"
+msgstr "Tranquilo"
 
-#: python/sourceclientgui.py:1058
+#: python/sourceclientgui.py:1139
 msgid "Keep the reconnection dialogue box hidden at all times."
-msgstr "Laisser la boite de reconnexion cachée tout le temps."
+msgstr "Mantenga la caja de diálogo de reconexión oculta en todo momento."
 
-#: python/sourceclientgui.py:1063
+#: python/sourceclientgui.py:1144
 msgid "The contingency plan upon the stream buffer becoming full is..."
-msgstr "Le plan d'action lorsque le tampon de streaming est plein est…"
+msgstr "El plan de contingencia en el búfer de la secuencia se llene es ..."
 
-#: python/sourceclientgui.py:1072
+#: python/sourceclientgui.py:1153
 msgid "Discard audio data for as long as needed."
-msgstr "Laisser tomber les données audio pour la durée nécessaire."
+msgstr "Descartar datos de audio durante el tiempo que sea necesario."
 
-#: python/sourceclientgui.py:1074
+#: python/sourceclientgui.py:1155
 msgid "Assume the connection is beyond saving and reconnect."
-msgstr ""
-"Assumer que la connexion est interrompue, se déconnecter et se reconnecter."
+msgstr "Asumir la conexión está más allá de ahorro y la reconexión."
 
-#: python/sourceclientgui.py:1357 python/format.py:1140
+#: python/sourceclientgui.py:1442 python/format.py:1227
 msgid "Shoutcast"
-msgstr "Shoucast"
+msgstr "Shoutcast"
 
-#: python/sourceclientgui.py:1394
+#: python/sourceclientgui.py:1483
 msgid "[Metadata suppressed]"
-msgstr "[Métadonnée supprimmée]"
+msgstr "[Metadatos suprimidos]"
 
-#: python/sourceclientgui.py:1473
+#: python/sourceclientgui.py:1562
 msgid "Individual Controls"
-msgstr "Contrôles individuels"
+msgstr "Controles individuales"
 
-#: python/sourceclientgui.py:1487
+#: python/sourceclientgui.py:1576
 msgid ""
 "Connect to or disconnect from the radio server. If the button does not stay "
 "in, the connection failed for some reason.\n"
@@ -3806,114 +3895,120 @@ msgid ""
 "configuration section below and must be capable of handling the chosen "
 "streaming format."
 msgstr ""
-"Se connecter ou se déconnecter du serveur radio. Si le bouton ne reste pas "
-"enclanché, la connexion a échouée pour une raison quelconque.\n"
+"Conectarse o desconectarse del servidor de radio. Si el botón no se queda "
+"activado, la conexión falla por alguna razón.\n"
+"\n"
+"Si el botón está en gris, significa la configuración dentro de las secciones "
+"de 'Conexiones' y 'Formato' son incompatibles entre sí o son incompletos.\n"
 "\n"
-"Si le bouton est grisé, cela indique que les paramêtres dans les sections "
-"«Connexion» et «Formats» sont soit incompatibles soit erronnées.\n"
-"Pour pouvoir fonctionner, un serveur maitre doit être spécifié et doit être "
-"capable de sélectionner le format du flux."
+"Para poder transmitir se necesita especificar un servidor maestro necesita "
+"ser especificadoen la sección de configuración de abajo y debe ser capaz de "
+"manejar el formato de streaming elegido."
 
 #. TC: Kick whoever is on the server.
-#: python/sourceclientgui.py:1504
+#: python/sourceclientgui.py:1593
 msgid "Kick Source"
-msgstr "Kick Source"
+msgstr "Patear Fuente"
 
-#: python/sourceclientgui.py:1506
+#: python/sourceclientgui.py:1595
 msgid ""
 "This will disconnect whoever is currently using the server, freeing it up "
 "for personal use."
 msgstr ""
-"Déconnectera tous ceux qui utilisent le serveurs, le libérant ainsi pour une "
-"utilisation privée."
+"Esto desconectará el que está utilizando actualmente el servidor, "
+"liberándola para uso personal."
 
-#: python/sourceclientgui.py:1516
+#: python/sourceclientgui.py:1605
 msgid "Timer:"
-msgstr "Timer :"
+msgstr "Minutero:"
 
-#: python/sourceclientgui.py:1520
+#: python/sourceclientgui.py:1609
 msgid "From"
-msgstr "Depuis"
+msgstr "De"
 
-#: python/sourceclientgui.py:1521
+#: python/sourceclientgui.py:1610
 msgid ""
 "Automatically connect to the server at a specific time in 24 hour format, "
 "midnight being 00:00"
 msgstr ""
-"Se connecter à une heure spécifique au format 24 heures, minuit étant 00:00"
+"Conectar automáticamente al servidor en un momento específico en el formato "
+"de 24 horas, siendo la media noche 00:00"
 
-#: python/sourceclientgui.py:1526
+#: python/sourceclientgui.py:1615
 msgid "Kick"
-msgstr ""
+msgstr "Patada"
 
-#: python/sourceclientgui.py:1528
+#: python/sourceclientgui.py:1617
 msgid "Disconnect whoever is using the server just before start time."
-msgstr "Déconnecter tous ceux qui utilisent le serveur avant de démarrer."
+msgstr ""
+"Desconecte el que está utilizando el servidor justo antes de la hora de "
+"inicio."
 
-#: python/sourceclientgui.py:1537
+#: python/sourceclientgui.py:1626
 msgid "To"
-msgstr ""
+msgstr "A"
 
-#: python/sourceclientgui.py:1538
+#: python/sourceclientgui.py:1627
 msgid ""
 "Automatically disconnect from the server at a specific time in 24 hour "
 "format."
 msgstr ""
-"Se déconnecter automatiquement à une heure spécifique au format 24 heures"
+"Desconectar automáticamente del servidor en un momento específico en el "
+"formato de 24 horas."
 
-#: python/sourceclientgui.py:1541
+#: python/sourceclientgui.py:1630
 msgid "Fade out"
-msgstr "Fondu"
+msgstr "Desaparecer"
 
-#: python/sourceclientgui.py:1543
+#: python/sourceclientgui.py:1632
 msgid "Fade audio before disconnecting."
-msgstr "Fondu audio avant la déconnexion."
+msgstr "Fundido de audio antes de desconectar."
 
-#: python/sourceclientgui.py:1557
+#: python/sourceclientgui.py:1646
 msgid "At connect:"
-msgstr "A la connection :"
+msgstr "En conexión:"
 
 #. TC: [x] Start player (*) 1 ( ) 2
-#: python/sourceclientgui.py:1561
+#: python/sourceclientgui.py:1650
 msgid "Start player"
-msgstr "Démarrer le lecteur"
+msgstr "Comience reproductor"
 
-#: python/sourceclientgui.py:1566
+#: python/sourceclientgui.py:1655
 msgid ""
 "Have one of the players start automatically when a radio server connection "
 "is successfully made."
 msgstr ""
-"Pour avoir l'un des lecteurs qui démarre automatiquement lorsque la "
-"connexion au serveur radio a réussie."
+"Hacer uno de los reproductores comienzar automáticamente cuando una conexión "
+"de servidor de radio se hace con éxito."
 
 #. TC: [x] Start recorder (*) 1 ( ) 2
-#: python/sourceclientgui.py:1574
+#: python/sourceclientgui.py:1663
 msgid "Start recorder"
-msgstr "Démarrer l'enregistreur"
+msgstr "Comience grabador"
 
-#: python/sourceclientgui.py:1581
+#: python/sourceclientgui.py:1670
 msgid ""
 "Have a recorder start automatically when a radio server connection is "
 "successfully made."
 msgstr ""
-"Pour démarrer automatiquement un enregistreur lorsqu'une connexion au "
-"serveur radio est établie."
+"Tener una grabadora inicia automáticamente cuando una conexión con el "
+"servidor de radio se hace con éxito."
 
-#: python/sourceclientgui.py:1586 python/format.py:521 python/format.py:532
-#: python/format.py:542
+#: python/sourceclientgui.py:1675 python/format.py:530 python/format.py:541
+#: python/format.py:552 python/format.py:562
 msgid "Metadata"
-msgstr "Métadonnées"
+msgstr "Metadatos"
 
-#: python/sourceclientgui.py:1596
+#: python/sourceclientgui.py:1685
 msgid "Format String"
-msgstr "Chaine de format"
+msgstr "Cadena de formato"
 
 #. TC: Label for the metadata fallback value.
-#: python/sourceclientgui.py:1598
+#: python/sourceclientgui.py:1687
 msgid "Fallback"
-msgstr "Fallback"
+msgstr "Retroceder"
 
-#: python/sourceclientgui.py:1612
+#: python/sourceclientgui.py:1701
 msgid ""
 "You can enter text to accompany the stream here and can specify placemarkers "
 "%r %t %l %s for the artist, title, album, and songname respectively, or "
@@ -3926,354 +4021,356 @@ msgid ""
 "When blank, Ogg streams will use the standard Vorbis tags and mp3 will use "
 "%s."
 msgstr ""
-"Vous pouvez entrer un texte pour accompagner le flux et y spécifier des "
-"emplacements pour les noms d'artiste, de titre, d'album et de chanson, %r %t "
-"%l %s, ou laisser ce champ vide pour utiliser les métadonnées par défaut.\n"
+"Puede introducir texto para acompañar el stream aquí y puede especificar "
+"marcadores %r %t %l %s para el artista, título, álbum, y nombre de la "
+"canción respectivamente, o deje este campo de texto en blanco para usar los "
+"metadatos predeterminados.\n"
 "\n"
-"Le nom de la chanson (%s) est dérivé du nom de fichier en cas d'absence ou "
-"d'insuffisance de métadonnées, alors que les autres emplacements utiliseront "
-"le texte de remplacement à droite.\n"
+"Songname (%s) se deriva del nombre de archivo en la ausencia de metadatos "
+"suficientes, mientras que los otros MARCADORES usarán el texto de repliegue "
+"hacia la derecha.\n"
 "\n"
-"Lorsque ce champ est vide, les flux Ogg utiliseront les tags standards "
-"vorbis et les mp3 utiliseront %s."
+"Cuando en blanco, los streams Ogg usarán las etiquetas Vorbis estándar y mp3 "
+"utilizará %s."
 
-#: python/sourceclientgui.py:1620
+#: python/sourceclientgui.py:1709
 msgid ""
 "The fallback text to use when %r %t %l metadata is unavailable. See the "
 "format string to the left."
 msgstr ""
-"Texte de remplacement lorsque les métadonnées %r %t %l ne sont pas "
-"disponibles. voir Chaine de format à gauche."
+"El texto de reserva para utilizar cuando% r% t% l metadatos no está "
+"disponible. Ver la cadena de formato a la izquierda."
 
-#: python/sourceclientgui.py:1622
+#: python/sourceclientgui.py:1711
 msgid ""
 "Metadata normally updates only on song title changes but you can force an "
 "immediate update here."
 msgstr ""
-"Les métadonnées se mettent à jour lorsque le titre change mais vous pouvez "
-"aussi forcer leur mise à jour immédiate ici."
+"Los metadatos se actualizan normalmente sólo en los cambios de título de la "
+"canción, pero se puede forzar una actualización inmediata aquí."
 
-#: python/sourceclientgui.py:1641
+#: python/sourceclientgui.py:1730
 msgid "Configuration"
-msgstr "Configuration"
+msgstr "Configuración"
 
-#: python/sourceclientgui.py:1642
+#: python/sourceclientgui.py:1731
 msgid "The controls for configuring a stream."
-msgstr "Les contrôles pour configurer un flux."
+msgstr "Los controles para la configuración de un stream."
 
-#: python/sourceclientgui.py:1650
+#: python/sourceclientgui.py:1739
 msgid "Connection"
-msgstr "Connexion"
+msgstr "Conexión"
 
-#: python/sourceclientgui.py:1655
+#: python/sourceclientgui.py:1744
 msgid "Format"
-msgstr "Format"
+msgstr "Formato"
 
 #. TC: Tab heading. User can enter information about the stream here.
-#: python/sourceclientgui.py:1664
+#: python/sourceclientgui.py:1753
 msgid "Stream Info"
-msgstr "Informations sur le flux"
+msgstr "Información del Stream"
 
-#: python/sourceclientgui.py:1669
+#: python/sourceclientgui.py:1758
 msgid ""
 "Enter your DJ name or station name here. Typically this information will be "
 "displayed by listener clients."
 msgstr ""
-"Saisissez le nom du DJ ou de la station. Typiquement cette information sera "
-"affichée par les clients des Auditeurs."
+"Introduzca su nombre de DJ o el nombre de la estación de aquí. Normalmente "
+"esta información se mostrará por los clientes de los radioescuchas."
 
-#: python/sourceclientgui.py:1672
+#: python/sourceclientgui.py:1761
 msgid ""
 "The URL of your radio station. This and the rest of the information below is "
 "intended for display on a radio station listings website."
 msgstr ""
-"L'URL de votre station. Ceci ainsi que les informations suivantes sont "
-"destinées à l'affichage sur un site listant les stations."
+"La URL de su estación de radio. Esta y el resto de la información a "
+"continuación está destinado para su visualización en un sitio web listados "
+"de emisoras de radio."
 
-#: python/sourceclientgui.py:1677
+#: python/sourceclientgui.py:1766
 msgid "A description of your radio station."
-msgstr "Description de votre station."
+msgstr "Una descripción de su estación de radio."
 
-#: python/sourceclientgui.py:1682
+#: python/sourceclientgui.py:1771
 msgid "The musical genres you are likely to play."
-msgstr "Genres musicaux offerts."
+msgstr "Los géneros musicales que son propensos a reproducir."
 
-#: python/sourceclientgui.py:1685
+#: python/sourceclientgui.py:1774
 msgid "Make Public"
-msgstr "Rendre publique"
+msgstr "Hacer público"
 
-#: python/sourceclientgui.py:1686
+#: python/sourceclientgui.py:1775
 msgid ""
 "Publish your radio station on a listings website. The website in question "
 "will depend on how the server to which you connect is configured."
 msgstr ""
-"Publier votre station sur le site de liste. Le site en question dépends de "
-"la configuration du serveur auquel vous vous connectez."
+"Publica tu estación de radio en un sitio web de anuncios. El sitio web en "
+"cuestión dependerá de cómo esté configurado el servidor al que se conecta."
 
-#: python/sourceclientgui.py:1698
+#: python/sourceclientgui.py:1787
 msgid "Genre(s)"
-msgstr "Genere(s)"
+msgstr "Género (s)"
 
-#: python/sourceclientgui.py:1709
+#: python/sourceclientgui.py:1798
 msgid "Master server admin password"
-msgstr "Mot de passe administrateur principal"
+msgstr "Maestro de administración del servidor contraseña"
 
-#: python/sourceclientgui.py:1714
+#: python/sourceclientgui.py:1803
 msgid ""
 "This is for kick and stats on Shoutcast master servers that have an "
 "administrator password. For those that don't leave this blank (the source "
 "password is sufficient for those)."
 msgstr ""
-"Pour kick et stats des serveyurs maitres Soutcast ayant un mot de passe "
-"d'administration. Pour ceux n'en possédant pas, laissez vide (le mot de "
-"passe de la source est suffisant pour eux)"
+"Esto es para patear y estadísticas de servidores maestros Shoutcast que "
+"tienen una contraseña de administrador. Para aquellos que no dejen este "
+"espacio en blanco (la contraseña de la fuente es suficiente para aquellos)."
 
-#: python/sourceclientgui.py:1723
+#: python/sourceclientgui.py:1812
 msgid "Contact Details"
-msgstr "Détails de contact"
+msgstr "Detalles de contacto"
 
-#: python/sourceclientgui.py:1727
+#: python/sourceclientgui.py:1816
 msgid "Internet Relay Chat connection info goes here."
-msgstr "Les informations d'IRC viennent ici"
+msgstr "Internet Relay Chat en información de conexión va aquí."
 
-#: python/sourceclientgui.py:1730
+#: python/sourceclientgui.py:1819
 msgid "Connection info for AOL instant messenger goes here."
-msgstr "Informations de connexion au messager AOL viennent ici."
+msgstr "Información de la conexión para AOL Instant Messenger va aquí."
 
-#: python/sourceclientgui.py:1733
+#: python/sourceclientgui.py:1822
 msgid "ICQ instant messenger connection info goes here."
-msgstr "Les informations concernant le messager ICQ viennent ici."
+msgstr "ICQ información de conexión de mensajería instantánea va aquí."
 
-#: python/sourceclientgui.py:1736
+#: python/sourceclientgui.py:1825
 msgid "IRC"
 msgstr "IRC"
 
-#: python/sourceclientgui.py:1737
+#: python/sourceclientgui.py:1826
 msgid "AIM"
 msgstr "AIM"
 
-#: python/sourceclientgui.py:1738
+#: python/sourceclientgui.py:1827
 msgid "ICQ"
 msgstr "ICQ"
 
-#: python/sourceclientgui.py:1748
+#: python/sourceclientgui.py:1837
 msgid "Use ISO-8859-1 encoding for fixed metadata"
-msgstr ""
+msgstr "Usar codificación ISO-8859-1 para los metadatos fijo"
 
-#: python/sourceclientgui.py:1750
+#: python/sourceclientgui.py:1839
 msgid "Enable this if sending to a Shoutcast V1 server."
-msgstr ""
+msgstr "Habilite esta si van a enviar a un servidor Shoutcast V1."
 
-#: python/sourceclientgui.py:1754
+#: python/sourceclientgui.py:1843
 msgid "Extra Shoutcast"
-msgstr "Extra Shoutcast"
+msgstr "Shoutcast extra"
 
-#: python/sourceclientgui.py:1759
+#: python/sourceclientgui.py:1848
 msgid "Troubleshooting"
-msgstr "Résolution des problèmes"
+msgstr "Solución de problemas"
 
-#: python/sourceclientgui.py:1890
+#: python/sourceclientgui.py:1979
 msgid "Stop recording."
-msgstr "Arrêter l'enregistrement"
+msgstr "Para de grabar."
 
-#: python/sourceclientgui.py:1892
+#: python/sourceclientgui.py:1981
 msgid ""
 "Start recording.\n"
 "\n"
 "If this button is greyed out it could mean either the encoder settings are "
 "not valid or write permission is not granted on the selected folder."
 msgstr ""
-"Démarrer l'enregistrement\n"
+"Inicie la grabación.\n"
 "\n"
-"Si le bouton est grisé, cela signifie soit que les paramêtres d'encodage ne "
-"sont pas corrects ou que les permissions d'écriture ne sont pas obtenues "
-"pour le dossier de destination."
+"Si este botón aparece en gris podría significar o que la configuración del "
+"codificador no es válido o que el permiso de escribir no se concede en la "
+"carpeta seleccionada."
 
-#: python/sourceclientgui.py:1897
+#: python/sourceclientgui.py:1986
 msgid "Pause recording."
-msgstr "Enregistrement en pause"
+msgstr "Pausa de grabación."
 
-#: python/sourceclientgui.py:1934
+#: python/sourceclientgui.py:2023
 msgid "Recording time elapsed."
-msgstr "Temps d'enregistement écoulé."
+msgstr "El tiempo de grabación transcurrido."
 
 #. TC: Dialog title bar text.
-#: python/sourceclientgui.py:1988
+#: python/sourceclientgui.py:2077
 msgid "Select the folder to record to"
-msgstr "Sélection du dossier pour l'enregistrement"
+msgstr "Seleccione la carpeta para grabar"
 
-#: python/sourceclientgui.py:1999
+#: python/sourceclientgui.py:2088
 msgid ""
 "Choose which stream to record or the 24 bit FLAC option. If the stream isn't "
 "already running the encoder will be started automatically using whatever "
 "settings are currently configured."
 msgstr ""
-"Sélection du flux à enregistrer ou l'option 24 bits FLAC. Si le flux n'est "
-"pas en cours de lecture, l'encodage commencera automatiquement quels que "
-"soient les paramêtres actuellement configurés."
+"Elija el stream para grabar o la opción FLAC de 24 bits. Si el stream no "
+"está en ejecución se iniciará el codificador automáticamente con los ajustes "
+"que están configurados actualmente."
 
-#: python/sourceclientgui.py:2003
+#: python/sourceclientgui.py:2092
 msgid ""
 "Choose which directory you want to save to. All file names will be in a "
 "timestamp format and have either an oga, mp3, or flac file extension. "
 "Important: you need to select a directory to which you have adequate write "
 "permission."
 msgstr ""
-"Sélection du dossier des sauvegardes Tous les noms de fichiers seront dans "
-"le format timestamp et auront soit oga mp3 ou flac comme extention. "
-"Important : vous devez sélectionner un dossier avec les permissions en "
-"écriture adéquates."
+"Elija qué directorio que desea guardar. Todos los nombres de los archivos "
+"estarán en formato de hora y disponen de un Oga, mp3, o extensión de archivo "
+"flac. Importante: Es necesario seleccionar un directorio en el que usted "
+"tiene el permiso adecuado de escritura."
 
-#: python/sourceclientgui.py:2110
+#: python/sourceclientgui.py:2199
 msgid "Perform operations on multiple servers in unison."
-msgstr "Effecter des opérations simultanément sur plusieurs serveurs."
+msgstr "Realizar operaciones en varios servidores al unisono."
 
-#: python/sourceclientgui.py:2122
+#: python/sourceclientgui.py:2211
 msgid "Connect"
-msgstr "Connecter"
+msgstr "Conectar"
 
-#: python/sourceclientgui.py:2139
+#: python/sourceclientgui.py:2228
 msgid "Disconnect"
-msgstr "Déconnecter"
+msgstr "Desconectar"
 
-#: python/sourceclientgui.py:2147
+#: python/sourceclientgui.py:2236
 msgid "Kick Sources"
-msgstr "Kick Sources"
+msgstr "Patear Fuentes"
 
-#: python/sourceclientgui.py:2156
+#: python/sourceclientgui.py:2245
 msgid "Metadata:"
-msgstr "Metadonnées :"
+msgstr "Metadatos:"
 
-#: python/sourceclientgui.py:2186
+#: python/sourceclientgui.py:2275
 msgid "Group Controls"
-msgstr "Contrôles de groupe"
+msgstr "Controles de grupo"
 
-#: python/sourceclientgui.py:2692
+#: python/sourceclientgui.py:2782
 msgid "Recording Facility Unavailable"
-msgstr "Fonctionalités d'enregistrement non disponibles"
+msgstr "Facilidad de grabación disponible"
 
-#: python/sourceclientgui.py:2695
+#: python/sourceclientgui.py:2785
 msgid "No Recorders Are Correctly Configured"
-msgstr "Aucun enregistreur configuré correctement"
+msgstr "No hay Grabadores que están configurados correctamente"
 
 #. TC: Recorder menu format string.
-#: python/sourceclientgui.py:2708
+#: python/sourceclientgui.py:2798
 #, python-brace-format
 msgid "{numericid} [{source}] > [{directory}]"
 msgstr "{numericid} [{source}] > [{directory}]"
 
-#: python/sourceclientgui.py:2710
+#: python/sourceclientgui.py:2800
 msgid "Misconfigured"
-msgstr "Mal configuré"
+msgstr "Mal configurado"
 
-#: python/sourceclientgui.py:2731
+#: python/sourceclientgui.py:2821
 msgid "Streaming Facility Unavailable"
-msgstr "Fonctionalités de flux non disponibles"
+msgstr "Fondo para Streaming No Disponible"
 
-#: python/sourceclientgui.py:2733
+#: python/sourceclientgui.py:2823
 msgid "No Streams Are Currently Configured"
-msgstr "Aucun flux actuellement configuré"
+msgstr "No hay streams configurados actualmente"
 
-#: python/sourceclientgui.py:2736
+#: python/sourceclientgui.py:2826
 msgid "Group Connect"
-msgstr "Connexion de groupe"
+msgstr "Group Connect"
 
-#: python/sourceclientgui.py:2742
+#: python/sourceclientgui.py:2832
 msgid "Group Disconnect"
-msgstr "Déconnetion de groupe"
+msgstr "Desconecte Grupo"
 
 #. TC: Window title bar text.
-#: python/sourceclientgui.py:2773
+#: python/sourceclientgui.py:2863
 msgid "IDJC Output"
-msgstr "Sortie IDJC"
+msgstr "Salida IDJC"
 
-#: python/sourceclientgui.py:2789
+#: python/sourceclientgui.py:2879
 msgid ""
 "Each one of these tabs represents a separate stream recorder. The LED "
 "indicator colours represent the following: Clear=Stopped Yellow=Paused "
 "Red=Recording."
 msgstr ""
-"Chacun de ces onglets représente un enregistreur de flux. La couleur de la "
-"LED indique : Eteinte=Arret Jaune=Pause Rouge=Enregistrement."
+"Cada una de estas pestañas representa una grabadora de stream distinta. Los "
+"colores indicador LED representan lo siguiente: Transparente=Detenido "
+"Amarillo=En pausa Rojo=Grabando."
 
-#: python/sourceclientgui.py:2797
+#: python/sourceclientgui.py:2887
 msgid ""
 "Each one of these tabs represents a separate radio streamer. The LED "
 "indicator colours represent the following: Clear=No connection "
 "Yellow=Awaiting authentication. Green=Connected. Flashing=Packet loss due to "
 "a bad connection."
 msgstr ""
-"Chacun de ces onglets représente une radio séparée. La couleur de la LED "
-"indique : Eteinte=Aucune connexion Jaune=En attente d'autentification. "
-"Verte=Connecté. Clignottante=Perte de paquet du à une mauvaise connexion."
+"Cada una de estas pestañas representa una streamer de radio independiente. "
+"Los colores indicador LED representan lo siguiente: Borrar = No hay conexión "
+"Amarillo = En espera de la autenticación. = Verdes conectados. Intermitente "
+"= pérdida de paquetes debido a una mala conexión."
 
-#: python/sourceclientgui.py:2815
+#: python/sourceclientgui.py:2905
 msgid " Stream "
-msgstr " Flux "
+msgstr "Stream"
 
-#: python/sourceclientgui.py:2850
+#: python/sourceclientgui.py:2940
 msgid ""
 "<span weight=\"bold\" size=\"12000\">A connection to a radio server has "
 "failed.</span>\n"
 "\n"
 "Reconnection will not be attempted."
 msgstr ""
-"<span weight=\"bold\" size=\"12000\">Une connexion à un serveur radio a "
-"échouée.</span>\n"
+"<span weight=\"bold\" size=\"12000\">Una conexión a un servidor de radio ha "
+"fallado.</span>\n"
 "\n"
-"Aucune tentative de reconnexion ne sera faite."
+"Reconnection no se intentará."
 
-#: python/sourceclientgui.py:2855
+#: python/sourceclientgui.py:2945
 msgid ""
 "<span weight=\"bold\" size=\"12000\">A scheduled stream disconnection has "
 "occurred.</span>"
 msgstr ""
-"<span weight=\"bold\" size=\"12000\">Une déconnexion pré-programmée du flux "
-"s'est produite.</span>"
+"<span weight=\"bold\" size=\"12000\">Se ha producido un flujo de desconexión "
+"programada.</span>"
 
 #: python/format.py:419
 msgid "Right click for suggested values."
-msgstr ""
+msgstr "Haga clic derecho para los valores sugeridos."
 
-#: python/format.py:438
-#, fuzzy
+#: python/format.py:439
 msgid "Suggested Values"
-msgstr "Régler la valeur"
+msgstr "Los valores sugeridos"
 
-#: python/format.py:494
-#, fuzzy
+#: python/format.py:503
 msgid "Pregain"
-msgstr "Lecteur Régler le gain"
+msgstr "PreGain"
 
-#: python/format.py:495 python/format.py:913
+#: python/format.py:504 python/format.py:933
 msgid "0 dB"
-msgstr ""
+msgstr "0 dB"
 
-#: python/format.py:496 python/format.py:914
+#: python/format.py:505 python/format.py:934
 msgid "-0.5 dB"
-msgstr ""
+msgstr "-0,5 DB"
 
-#: python/format.py:497 python/format.py:915
+#: python/format.py:506 python/format.py:935
 msgid "-1.0 dB"
-msgstr ""
+msgstr "-1,0 DB"
 
-#: python/format.py:498 python/format.py:916
+#: python/format.py:507 python/format.py:936
 msgid "-1.5 dB"
-msgstr ""
+msgstr "-1,5 DB"
 
-#: python/format.py:499 python/format.py:917
+#: python/format.py:508 python/format.py:937
 msgid "-2.0 dB"
-msgstr ""
+msgstr "-2,0 DB"
 
-#: python/format.py:500 python/format.py:918
+#: python/format.py:509 python/format.py:938
 msgid "-2.5 dB"
-msgstr ""
+msgstr "-2,5 DB"
 
-#: python/format.py:501 python/format.py:919
+#: python/format.py:510 python/format.py:939
 msgid "-3.0 dB"
-msgstr ""
+msgstr "-3,0 DB"
 
-#: python/format.py:502
+#: python/format.py:511
 msgid ""
 "A blanket gain reduction to promote audio quality when using long "
 "established lossy audio codecs like mp3 with loud audio material.\n"
@@ -4281,609 +4378,498 @@ msgid ""
 "ReplayGain makes this feature generally unnecessary and the correct setting "
 "in that case is 0 dB."
 msgstr ""
+"Una reducción de ganancia generalizada para promover la calidad de audio al "
+"utilizar los códecs de audio con pérdida de antiguo establecidos como mp3 "
+"con material de audio muy fuerte.\n"
+"\n"
+"ReplayGain hace esta función generalmente innecesario y la configuración "
+"correcta en este caso es de 0 dB."
 
-#: python/format.py:510
-#, fuzzy
+#: python/format.py:519
 msgid "Resample Quality"
-msgstr "Qualité de rééchantillonnage du lecteur"
+msgstr "Volver a muestrear Calidad"
 
-#: python/format.py:511
+#: python/format.py:520
 msgid "Highest"
-msgstr "La plus élevée"
+msgstr "Mayor"
 
-#: python/format.py:513
+#: python/format.py:522
 msgid "Lowest"
-msgstr "La plus basse"
+msgstr "Menor"
 
-#: python/format.py:514
+#: python/format.py:523
 msgid ""
 "All of these settings will provide adequate audio quality. The highest "
 "setting will preserve more of the original audio bandwidth at the expense of "
 "many CPU cycles."
 msgstr ""
+"Todos estos ajustes proporcionarán una calidad de audio adecuado. El ajuste "
+"más alto preservará más del ancho de banda de audio original a expensas de "
+"muchos ciclos de CPU."
 
-#: python/format.py:522 python/format.py:533 python/format.py:543
-#, fuzzy
+#: python/format.py:531 python/format.py:553 python/format.py:563
 msgid "Suppressed"
-msgstr "Pressé"
+msgstr "Suprimida"
 
-#: python/format.py:523 python/format.py:534
+#: python/format.py:532 python/format.py:554
 msgid "UTF-8"
-msgstr ""
+msgstr "UTF-8"
 
-#: python/format.py:524
+#: python/format.py:533
 msgid "Latin1 *"
-msgstr ""
+msgstr "Latin1 *"
 
-#: python/format.py:525
+#: python/format.py:534
 msgid ""
 "This affects the stream metadata only. Recordings will use UTF-8 for their "
 "metadata."
 msgstr ""
+"Esto sólo afecta a los metadatos stream. Grabaciones usarán UTF-8 para sus "
+"metadatos."
 
-#: python/format.py:535
+#: python/format.py:542
+msgid "Unsupported"
+msgstr "No compatible"
+
+#: python/format.py:543 python/format.py:555
 msgid ""
 "Choose whether the stream will carry dynamic metadata. In the case of Ogg "
 "streams this is important as a great many players can't handle chained Ogg "
 "streams which result from the metadata updates."
 msgstr ""
+"Elija si la stream llevará metadatos dinámico. En el caso de transmisión de "
+"Ogg esto es importante como un gran número de reproductores no pueden "
+"manejar streams Ogg encadenados que resultan de los cambios de metadatos."
 
-#: python/format.py:544
+#: python/format.py:564
 msgid "Latin1"
-msgstr ""
+msgstr "Latin1"
 
-#: python/format.py:545
+#: python/format.py:565
 msgid "Choose whether to send metadata. Recordings will use UTF-8 metadata."
 msgstr ""
+"Seleccione si desea enviar los metadatos. Grabaciones usarán UTF-8 de "
+"metadatos."
 
-#: python/format.py:561 python/format.py:572 python/format.py:583
-#: python/format.py:690 python/format.py:818 python/format.py:888
-#: python/format.py:897 python/format.py:971 python/format.py:994
-#: python/format.py:1003
+#: python/format.py:581 python/format.py:592 python/format.py:603
+#: python/format.py:710 python/format.py:838 python/format.py:908
+#: python/format.py:917 python/format.py:991 python/format.py:1014
+#: python/format.py:1023 python/format.py:1141 python/format.py:1163
 msgid "Mode"
-msgstr ""
+msgstr "Modo"
 
-#: python/format.py:562 python/format.py:573 python/format.py:584
-#: python/format.py:691 python/format.py:819 python/format.py:889
-#: python/format.py:898 python/format.py:972 python/format.py:995
-#: python/format.py:1004
+#: python/format.py:582 python/format.py:593 python/format.py:604
+#: python/format.py:711 python/format.py:839 python/format.py:909
+#: python/format.py:918 python/format.py:992 python/format.py:1015
+#: python/format.py:1024 python/format.py:1142 python/format.py:1164
 msgid "Mono"
-msgstr ""
+msgstr "Mono"
 
-#: python/format.py:563 python/format.py:574 python/format.py:585
-#: python/format.py:692 python/format.py:820 python/format.py:890
-#: python/format.py:899 python/format.py:973 python/format.py:996
-#: python/format.py:1005
-#, fuzzy
+#: python/format.py:583 python/format.py:594 python/format.py:605
+#: python/format.py:712 python/format.py:840 python/format.py:910
+#: python/format.py:919 python/format.py:993 python/format.py:1016
+#: python/format.py:1025 python/format.py:1143 python/format.py:1165
 msgid "Stereo"
-msgstr "Panoramique Stéréo"
+msgstr "Estéreo"
 
-#: python/format.py:564 python/format.py:575 python/format.py:586
-#: python/format.py:693
+#: python/format.py:584 python/format.py:595 python/format.py:606
+#: python/format.py:713
 msgid "Joint Stereo"
-msgstr ""
+msgstr "Estéreo conjunto"
 
-#: python/format.py:565
+#: python/format.py:585
 msgid "Joint Stereo is a good choice on streams with low bitrates."
-msgstr ""
+msgstr "Joint Stereo es una buena opción en streams con bitrates bajos."
 
-#: python/format.py:576
+#: python/format.py:596
 msgid "Due to the high bitrate selected, this codec will only support stereo."
 msgstr ""
+"Debido a la alta tasa de bits seleccionado, este códec sólo apoyará estéreo."
 
-#: python/format.py:587
+#: python/format.py:607
 msgid "Due to the low bitrate selected, this codec will only support mono."
 msgstr ""
+"Debido a la baja tasa de bits seleccionado, este códec sólo apoyará mono."
 
-#: python/format.py:636 python/format.py:646 python/format.py:743
-#: python/format.py:753 python/format.py:763 python/format.py:869
-#: python/format.py:879 python/format.py:1032 python/format.py:1052
+#: python/format.py:656 python/format.py:666 python/format.py:763
+#: python/format.py:773 python/format.py:783 python/format.py:889
+#: python/format.py:899 python/format.py:1052 python/format.py:1072
+#: python/format.py:1132
 msgid "Samplerate"
-msgstr ""
+msgstr "Samplerate"
 
 #. TC: Abbreviation of the word, standard.
-#: python/format.py:657 python/format.py:774
+#: python/format.py:677 python/format.py:794
 msgid "Std."
-msgstr ""
+msgstr "Std."
 
 #. TC: v stands for version.
-#: python/format.py:659 python/format.py:776
+#: python/format.py:679 python/format.py:796
 msgid "V 1"
-msgstr ""
+msgstr "V 1"
 
 #. TC: v stands for version.
-#: python/format.py:661 python/format.py:778
+#: python/format.py:681 python/format.py:798
 msgid "V 2"
-msgstr ""
+msgstr "V 2"
 
-#: python/format.py:662
+#: python/format.py:682
 msgid ""
 "MPEG2 introduced lower samplerate options and corresponding lower bitrates. "
 "Choose 2 if those are required."
 msgstr ""
+"MPEG2 introdujo opciones samplerate más bajos y las correspondientes tasas "
+"de bits más bajas. Elija 2 si los que son obligatorios."
 
-#: python/format.py:669 python/format.py:797
+#: python/format.py:689 python/format.py:817
 msgid "Quality"
-msgstr ""
+msgstr "Calidad"
 
-#: python/format.py:670
+#: python/format.py:690
 msgid "0 most"
-msgstr ""
+msgstr "0 más"
 
 #. TC: * means is the recommended setting.
-#: python/format.py:673
+#: python/format.py:693
 msgid "2 *"
-msgstr ""
+msgstr "2 *"
 
-#: python/format.py:675
+#: python/format.py:695
 msgid "Higher quality costs more in terms of CPU cycles."
-msgstr ""
+msgstr "Mayor calidad cuesta más en términos de ciclos de CPU."
 
-#: python/format.py:694
+#: python/format.py:714
 msgid "Joint Stereo is a good choice on streams with low bitrates"
-msgstr ""
+msgstr "Joint Stereo es una buena opción en streams con bitrates bajos"
 
 #. TC: v stands for version.
-#: python/format.py:780
+#: python/format.py:800
 msgid "V 2.5"
-msgstr ""
+msgstr "V 2.5"
 
-#: python/format.py:787
+#: python/format.py:807
 msgid "Complexity"
-msgstr ""
+msgstr "Complejidad"
 
-#: python/format.py:790
+#: python/format.py:810
 msgid "A quality setting that affects how heavily the CPU is used."
 msgstr ""
+"Un ajuste de calidad que afecta en gran medida de cómo se utiliza la CPU."
 
-#: python/format.py:800
+#: python/format.py:820
 msgid "The higher this setting, the higher the bitrate."
-msgstr ""
+msgstr "Cuanto mayor sea este valor, mayor será la tasa de bits."
 
-#: python/format.py:807
+#: python/format.py:827
 msgid "Bandwidth"
-msgstr ""
+msgstr "Ancho de banda"
 
-#: python/format.py:808
+#: python/format.py:828
 msgid "Ultrawide"
-msgstr ""
+msgstr "Ultrawide"
 
-#: python/format.py:809
+#: python/format.py:829
 msgid "Wide"
-msgstr ""
+msgstr "Amplio"
 
-#: python/format.py:810
+#: python/format.py:830
 msgid "Narrow"
-msgstr ""
+msgstr "Angostas"
 
-#: python/format.py:811
+#: python/format.py:831
 msgid "Essentially a samplerate setting."
-msgstr ""
+msgstr "Esencialmente una configuración de muestreo."
 
-#: python/format.py:828
+#: python/format.py:848
 msgid "24 bit"
-msgstr ""
+msgstr "24 bits"
 
-#: python/format.py:829
+#: python/format.py:849
 msgid "20 bit"
-msgstr ""
+msgstr "20 bit"
 
-#: python/format.py:830
+#: python/format.py:850
 msgid "16 bit"
-msgstr ""
+msgstr "16 bit"
 
-#: python/format.py:831
+#: python/format.py:851
 msgid ""
 "24 bit records with the highest level of detail. If file size is a concern "
 "maybe FLAC is not the right codec."
 msgstr ""
+"24 registros de bits con el más alto nivel de detalle. Si el tamaño del "
+"archivo es una preocupación tal vez FLAC no es el codec correcto."
 
-#: python/format.py:838 python/format.py:927
+#: python/format.py:858 python/format.py:947
 msgid "Variability"
-msgstr ""
+msgstr "Variabilidad"
 
-#: python/format.py:839
+#: python/format.py:859
 msgid "Constant"
-msgstr ""
+msgstr "Constante"
 
-#: python/format.py:840
+#: python/format.py:860
 msgid "±10%"
-msgstr ""
+msgstr "± 10%"
 
-#: python/format.py:841
+#: python/format.py:861
 msgid "±20%"
-msgstr ""
+msgstr "± 20%"
 
-#: python/format.py:842
+#: python/format.py:862
 msgid "±30%"
-msgstr ""
+msgstr "± 30%"
 
-#: python/format.py:843
+#: python/format.py:863
 msgid "±40%"
-msgstr ""
+msgstr "± 40%"
 
-#: python/format.py:844
+#: python/format.py:864
 msgid "±50%"
-msgstr ""
+msgstr "± 50%"
 
-#: python/format.py:845
-#, fuzzy
+#: python/format.py:865
 msgid "This control is for enabling variable bitrate on Vorbis streams."
-msgstr "Les contrôles pour configurer un flux."
+msgstr ""
+"Este control es para permitir el bitrate variable sobre streams Vorbis."
 
-#: python/format.py:906
-#, fuzzy
+#: python/format.py:926
 msgid "Postgain"
-msgstr "VoIP Régler le gain"
+msgstr "PostGain"
 
-#: python/format.py:907
+#: python/format.py:927
 msgid "3.0 dB"
-msgstr ""
+msgstr "3,0 dB"
 
-#: python/format.py:908
+#: python/format.py:928
 msgid "2.5 dB"
-msgstr ""
+msgstr "2,5 dB"
 
-#: python/format.py:909
+#: python/format.py:929
 msgid "2.0 dB"
-msgstr ""
+msgstr "2,0 dB"
 
-#: python/format.py:910
+#: python/format.py:930
 msgid "1.5 dB"
-msgstr ""
+msgstr "1,5 dB"
 
-#: python/format.py:911
+#: python/format.py:931
 msgid "1.0 dB"
-msgstr ""
+msgstr "1,0 dB"
 
-#: python/format.py:912
+#: python/format.py:932
 msgid "0.5 dB"
-msgstr ""
+msgstr "0,5 dB"
 
-#: python/format.py:920
+#: python/format.py:940
 msgid "A gain adjustment for the player to apply."
-msgstr ""
+msgstr "Un ajuste de ganancia para el reproductor de aplicar."
 
-#: python/format.py:928
+#: python/format.py:948
 msgid "CBR *"
-msgstr ""
+msgstr "CBR *"
 
-#: python/format.py:929
+#: python/format.py:949
 msgid "CVBR"
-msgstr ""
+msgstr "CVBR"
 
-#: python/format.py:930
+#: python/format.py:950
 msgid "VBR"
-msgstr ""
+msgstr "VBR"
 
-#: python/format.py:931
+#: python/format.py:951
 msgid ""
 "Bitrate variability. Actual VBR operation may require a higher frame size."
 msgstr ""
+"Variabilidad bitrate. Operación real VBR puede requerir un tamaño de marco "
+"superior."
 
-#: python/format.py:938
+#: python/format.py:958
 msgid "Frame Size"
-msgstr ""
+msgstr "Tamaño del marco"
 
-#: python/format.py:939
+#: python/format.py:959
 msgid "60 ms"
-msgstr ""
+msgstr "60 ms"
 
-#: python/format.py:940
+#: python/format.py:960
 msgid "40 ms"
-msgstr ""
+msgstr "40 ms"
 
-#: python/format.py:941
+#: python/format.py:961
 msgid "20 ms"
-msgstr ""
+msgstr "20 ms"
 
-#: python/format.py:942
+#: python/format.py:962
 msgid "A higher frame size may sound better on very low bitrates."
-msgstr ""
+msgstr "Un tamaño de cuadro más alta puede sonar mejor en bitrates muy bajos."
 
-#: python/format.py:949
+#: python/format.py:969
 msgid "CPU"
-msgstr ""
+msgstr "UPC"
 
-#: python/format.py:952
+#: python/format.py:972
 msgid "The encoder complexity setting which affects CPU load."
 msgstr ""
+"El ajuste de la complejidad del codificador que afecta a la carga de la CPU."
 
-#: python/format.py:980 python/format.py:1083
+#: python/format.py:1000 python/format.py:1103 python/format.py:1172
 msgid "Codec"
-msgstr ""
+msgstr "Codec"
 
-#: python/format.py:981
+#: python/format.py:1001 python/format.py:1174
 msgid "Vorbis"
-msgstr ""
+msgstr "Vorbis"
 
-#: python/format.py:982
+#: python/format.py:1002
 msgid "FLAC"
-msgstr ""
+msgstr "FLAC"
 
-#: python/format.py:983
+#: python/format.py:1003
 msgid "Speex"
-msgstr ""
+msgstr "Speex"
 
-#: python/format.py:984
+#: python/format.py:1004 python/format.py:1173
 msgid "Opus"
-msgstr ""
+msgstr "Opus"
 
-#: python/format.py:987
+#: python/format.py:1007
 msgid "Codecs of the Ogg container."
-msgstr ""
+msgstr "Codecs del contenedor Ogg."
 
-#: python/format.py:1033
+#: python/format.py:1053
 msgid "96000 Hz"
-msgstr ""
+msgstr "96000 Hz"
 
-#: python/format.py:1034
+#: python/format.py:1054
 msgid "88200 Hz"
-msgstr ""
+msgstr "88200 Hz"
 
-#: python/format.py:1035
+#: python/format.py:1055
 msgid "64000 Hz"
-msgstr ""
+msgstr "64000 Hz"
 
-#: python/format.py:1036 python/format.py:1053
+#: python/format.py:1056 python/format.py:1073
 msgid "48000 Hz"
-msgstr ""
+msgstr "48000 Hz"
 
-#: python/format.py:1037 python/format.py:1054
+#: python/format.py:1057 python/format.py:1074
 msgid "44100 Hz"
-msgstr ""
+msgstr "44100 Hz"
 
-#: python/format.py:1038
+#: python/format.py:1058
 msgid "32000 Hz"
-msgstr ""
+msgstr "32000 Hz"
 
-#: python/format.py:1039
+#: python/format.py:1059
 msgid "24000 Hz"
-msgstr ""
+msgstr "24000 Hz"
 
-#: python/format.py:1040
+#: python/format.py:1060
 msgid "22050 Hz"
-msgstr ""
+msgstr "22050 Hz"
 
-#: python/format.py:1041
+#: python/format.py:1061
 msgid "16000 Hz"
-msgstr ""
+msgstr "16000 Hz"
 
-#: python/format.py:1042
+#: python/format.py:1062
 msgid "12000 Hz"
-msgstr ""
+msgstr "12000 Hz"
 
-#: python/format.py:1043
+#: python/format.py:1063
 msgid "11025 Hz"
-msgstr ""
+msgstr "11025 Hz"
 
-#: python/format.py:1044
+#: python/format.py:1064
 msgid "8000 Hz"
-msgstr ""
+msgstr "8000 Hz"
 
-#: python/format.py:1045
+#: python/format.py:1065
 msgid "7350 Hz"
-msgstr ""
+msgstr "7350 Hz"
 
-#: python/format.py:1067
+#: python/format.py:1087
 msgid "The MP2 option requires IDJC be rebuilt against libtwolame."
-msgstr ""
+msgstr "La opción MP2 requiere IDJC ser reconstruido contra libtwolame."
 
-#: python/format.py:1070
+#: python/format.py:1090
 msgid "Enable the MP3 option by installing libmp3lame."
-msgstr ""
+msgstr "Active la opción MP3 instalando libmp3lame."
 
-#: python/format.py:1073
+#: python/format.py:1093
 msgid "The AAC options require IDJC be rebuilt against libav libraries."
 msgstr ""
+"Las opciones AAC requieren IDJC ser reconstruido contra bibliotecas libav."
 
-#: python/format.py:1076
+#: python/format.py:1096
 msgid ""
 "Specific AAC support not present in libavcodec. More info: idjc.sourceforge."
 "net."
 msgstr ""
+"Apoyo AAC específica no está presente en libavcodec. Más información: idjc."
+"sourceforge.net."
 
-#: python/format.py:1078
+#: python/format.py:1098
 msgid ""
 "Specific AAC+ support not present in libavcodec. More info: idjc.sourceforge."
 "net."
 msgstr ""
+"AAC + específico de apoyo no está presente en libavcodec. Más información: "
+"idjc.sourceforge.net."
 
-#: python/format.py:1081
+#: python/format.py:1101
 msgid "Codecs of the MPEG family."
-msgstr ""
+msgstr "Codecs de la familia MPEG."
 
-#: python/format.py:1084
+#: python/format.py:1104
 msgid "MP2"
-msgstr ""
+msgstr "MP2"
 
-#: python/format.py:1085
+#: python/format.py:1105
 msgid "MP3"
-msgstr ""
+msgstr "MP3"
 
-#: python/format.py:1086
+#: python/format.py:1106
 msgid "AAC"
-msgstr ""
+msgstr "AAC"
 
-#: python/format.py:1087
+#: python/format.py:1107
 msgid "AAC+ v2"
-msgstr ""
+msgstr "AAC+ v2"
 
 #. TC: Codec family e.g. Xiph/Ogg, MPEG etc.
-#: python/format.py:1099
+#: python/format.py:1185
 msgid "Family"
-msgstr ""
+msgstr "Familia"
+
+#: python/format.py:1186
+msgid "WebM"
+msgstr "WebM"
 
 #. TC: Xiph.org Ogg container format.
-#: python/format.py:1101
+#: python/format.py:1188
 msgid "Xiph/Ogg"
-msgstr ""
+msgstr "Xiph/Ogg"
 
-#: python/format.py:1102
+#: python/format.py:1189
 msgid "MPEG"
-msgstr ""
+msgstr "MPEG"
 
-#: python/format.py:1103
+#: python/format.py:1190
 msgid "Codecs have been grouped by standards body and or container format."
 msgstr ""
+"Codecs han sido agrupados por organismo de normalización y o formato "
+"contenedor."
 
-#: python/format.py:1128
+#: python/format.py:1215
 msgid "Capabilities"
-msgstr ""
+msgstr "Capacidades"
 
-#: python/format.py:1140
-#, fuzzy
+#: python/format.py:1227
 msgid "Icecast"
-msgstr "Icecast 2 Maitre"
+msgstr "Icecast"
 
-#: python/format.py:1140
-#, fuzzy
+#: python/format.py:1227
 msgid "Recordable"
-msgstr "Enregistreur"
-
-#~ msgid "Playlist types (*.m3u, *.xspf, *.pls)"
-#~ msgstr "Type de listes de lecture (*.m3u, *.xspf, *.pls)"
-
-#~ msgid "File Path Modify"
-#~ msgstr "Modifier le chemin"
-
-#~ msgid ""
-#~ "The number of characters to strip from the left hand side of media file "
-#~ "paths."
-#~ msgstr ""
-#~ "Nombre de caractères à supprimer de la partie gauche des chemins vers "
-#~ "lesfichiers média."
-
-#~ msgid "The characters to prefix to the media file paths."
-#~ msgstr "Caractères à ajouter devant les chemins vers les fichiers média."
-
-#~ msgid "Connection timer:"
-#~ msgstr "Timer de connexion :"
-
-#~ msgid "Begin"
-#~ msgstr "Début"
-
-#~ msgid "With kick"
-#~ msgstr "Avec kick"
-
-#~ msgid "End"
-#~ msgstr "Fin"
-
-#~ msgid "SSL"
-#~ msgstr "SSL"
-
-#~ msgid ""
-#~ "Connect to the server using the SSL security protocol.\n"
-#~ "\n"
-#~ "This feature is typically offered on different ports than the standard "
-#~ "connection method and is widespread but not universally available."
-#~ msgstr ""
-#~ "Se connecter azu serveur en utilisant le protocol de sécurité SSL.\n"
-#~ "\n"
-#~ "Cette fonctionalité est courrament offerte sur un port différent de celui "
-#~ "utilisé par la méthode standard et est, souvent mais pas toujours, "
-#~ "disponible."
-
-#~ msgid "Released under the GNU General Public License V2.0 or later."
-#~ msgstr ""
-#~ "Distribué selon les termes de la GNU General Public License V2.0 ou "
-#~ "suivantes."
-
-#~ msgid "Copyright 2005-2012 Stephen Fairchild and others."
-#~ msgstr "Copyright 2005-2012 Stephen Fairchild et autres."
-
-#~ msgid "Media Players"
-#~ msgstr "Lecteur média"
-
-#~ msgid "MIDI"
-#~ msgstr "MIDI"
-
-#~ msgid "Left Player"
-#~ msgstr "Lecteur de gauche"
-
-#~ msgid "Right Player"
-#~ msgstr "Lecteur de droite"
-
-#~ msgid "Background"
-#~ msgstr "En fond"
-
-#~ msgid "Select which Deck is responsible for the metadata on the stream."
-#~ msgstr "Sélection de la platine responsable des métadonnées du flux."
-
-#~ msgid "Jingles"
-#~ msgstr "Jingles"
-
-#~ msgid "Effects stop all"
-#~ msgstr "Effets Tout arrêter"
-
-#~ msgid "Background tracks set volume"
-#~ msgstr "Pistes en fond Régler le volume"
-
-#~ msgid "Jingles players"
-#~ msgstr "Lecteur de jingles"
-
-#~ msgid ""
-#~ "When selected the output from this player doesn't mute whenever either of "
-#~ "the main players are active."
-#~ msgstr ""
-#~ "Sélectionné, la sortie de ce lecteur ne se coupe pas quel que soit le "
-#~ "lecteur actif."
-
-#~ msgid ""
-#~ "Stereo panning is the selection of where an audio source sits from left "
-#~ "to right within the stereo mix.\n"
-#~ "\n"
-#~ "This control maintains constant audio power throughout its range of "
-#~ "travel, giving -3dB attenuation in both audio channels at the half way "
-#~ "point.\n"
-#~ "\n"
-#~ "If you require 0dB straight down the middle then this feature should be "
-#~ "turned off."
-#~ msgstr ""
-#~ "Le placement stéréo est la position ou se situe une source audio, de "
-#~ "gauche à droite, dans le mix stéréo.\n"
-#~ "\n"
-#~ "Ce contrôle concerve la puissance audio sur toute sa plage de "
-#~ "fonctionnement, donnant une atténuation de -3dB au point central.\n"
-#~ "\n"
-#~ "Si vous avez besoin de concerver 0dB au point central, désactivez cette "
-#~ "fonctionalité."
-
-#~ msgid "Meters"
-#~ msgstr "Indicateurs"
-
-#~ msgid "Indicate which tracks have ReplayGain values"
-#~ msgstr "Indique quelles pistes possèdent des valeurs de Gain Replay"
-
-#~ msgid "Show a marker in the playlists next to each track."
-#~ msgstr ""
-#~ "Montre un marqueur dans le texte de la liste de lecture après châque piste"
-
-#~ msgid "Adjust playback volume"
-#~ msgstr "Ajuste le volume de reproduction"
-
-#~ msgid "Unmarked tracks assumed gain value"
-#~ msgstr "Décocher les pistes sans valeur de gain"
-
-#~ msgid ""
-#~ "Set this to the typical track gain values you would expect for the "
-#~ "programme material you are currently playing. For pop and rock music "
-#~ "(especially modern studio recordings) this should be about a -8 or -9 and "
-#~ "classical music around zero."
-#~ msgstr ""
-#~ "Configurer la valeur de gain typique que vous désirez pour le matériel en "
-#~ "cours de lecture. Pour la musique Pop et Rock (surtout isssues des studio "
-#~ "modernes) cela devrait se situer entre -8 ou -9 et pour le classique aux "
-#~ "alentours de zéro."
-
-#~ msgid "Further gain adjustment"
-#~ msgstr "Ajustement progressif du gain"
-
-#~ msgid ""
-#~ "For material that is generally loud it is recommended to set this between "
-#~ "4 and 8 dB however going too high will result in a loss of dynamic range. "
-#~ "The Str Peak meter is a useful guide for getting this right."
-#~ msgstr ""
-#~ "Pour les matériaux généralement forts, il est conseillé d'utiliser entre "
-#~ "4 et  8dB, toutefois une valeur trop élevée entraine une perte de "
-#~ "dynamique. Le Picmêtre est utile pour trouver la bonne valeur."
+msgstr "Grabable"
diff --git a/po/fr.gmo b/po/fr.gmo
index fe64361..5976c50 100644
Binary files a/po/fr.gmo and b/po/fr.gmo differ
diff --git a/po/fr.po b/po/fr.po
index 1c1ec47..a0acb1f 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: putidjcinthesubjectline at bethere.co.uk\n"
-"POT-Creation-Date: 2015-07-27 07:47+0100\n"
+"POT-Creation-Date: 2016-04-30 18:46+0100\n"
 "PO-Revision-Date: 2013-11-07 16:47+0000\n"
 "Last-Translator: \n"
 "Language-Team: English <team at example.com>\n"
@@ -487,28 +487,42 @@ msgstr "Nouveau profil basé sur «%s»"
 msgid "New profile details"
 msgstr "Détails du nouveau profil"
 
-#. TC: profile dialog window title text.
-#: python/prelims/profiledialog.py:243
-msgid "IDJC Profile Manager"
-msgstr "Gestionaire de profils IDJC"
+#. TC: data entry dialog label text.
+#: python/prelims/profiledialog.py:125
+#, fuzzy
+msgid "Profile name"
+msgstr "nom_du_profil"
 
-#: python/prelims/profiledialog.py:277
-msgid "Profile"
-msgstr "Profil"
+#. TC: data entry dialog label text.
+#: python/prelims/profiledialog.py:127 python/maingui.py:681
+msgid "Icon"
+msgstr "Icône"
 
+#. TC: data entry dialog label text.
 #. TC: column heading. The profile nicknames.
 #. TC: IRC nickname data entry label.
-#: python/prelims/profiledialog.py:285 python/irc.py:452
+#: python/prelims/profiledialog.py:129 python/prelims/profiledialog.py:285
+#: python/irc.py:452
 msgid "Nickname"
 msgstr "Pseudo"
 
+#. TC: data entry dialog label text.
 #. TC: column heading.
 #. TC: Station description.
-#: python/prelims/profiledialog.py:288 python/irc.py:96
-#: python/playergui.py:307 python/sourceclientgui.py:1697
+#: python/prelims/profiledialog.py:131 python/prelims/profiledialog.py:288
+#: python/irc.py:96 python/playergui.py:334 python/sourceclientgui.py:1786
 msgid "Description"
 msgstr "Description"
 
+#. TC: profile dialog window title text.
+#: python/prelims/profiledialog.py:243
+msgid "IDJC Profile Manager"
+msgstr "Gestionaire de profils IDJC"
+
+#: python/prelims/profiledialog.py:277
+msgid "Profile"
+msgstr "Profil"
+
 #. TC: column heading. The time a particular profile has been running.
 #: python/prelims/profiledialog.py:292
 msgid "Up-time"
@@ -566,12 +580,12 @@ msgstr "Tentative %d. Il n'y a aucune limite d'essais."
 msgid "_Retry Now"
 msgstr "_Réessayer immédiatement"
 
-#: python/__init__.py.in.in:101
+#: python/__init__.py.in.in:102
 #, python-format
 msgid "Copyright 2005-%s Stephen Fairchild and others."
 msgstr "Copyright 2005-%s Stephen Fairchild et autres."
 
-#: python/__init__.py.in.in:103
+#: python/__init__.py.in.in:104
 msgid "Released under the GNU General Public License V2.0+."
 msgstr "Distribué selon les termes de la Licence Publique Générale GNU, V2.0+"
 
@@ -603,30 +617,30 @@ msgstr "Autres options"
 
 #. TC: Track artist.
 #: python/irc.py:95 python/mutagentagger.py:375 python/songdb.py:902
-#: python/songdb.py:1290 python/sourceclientgui.py:94
+#: python/songdb.py:1290 python/sourceclientgui.py:99
 msgid "Artist"
 msgstr "Artiste"
 
 #: python/irc.py:95 python/mutagentagger.py:375 python/songdb.py:1292
-#: python/sourceclientgui.py:94
+#: python/sourceclientgui.py:99
 msgid "Title"
 msgstr "Titre"
 
 #: python/irc.py:95 python/mutagentagger.py:376 python/songdb.py:1291
-#: python/sourceclientgui.py:94
+#: python/sourceclientgui.py:99
 msgid "Album"
 msgstr "Album"
 
-#: python/irc.py:95 python/sourceclientgui.py:95
+#: python/irc.py:95 python/sourceclientgui.py:100
 msgid "Song name"
 msgstr "Chanson"
 
 #. TC: The DJ or Stream name.
-#: python/irc.py:96 python/sourceclientgui.py:1694
+#: python/irc.py:96 python/sourceclientgui.py:1783
 msgid "DJ name"
 msgstr "Nom du DJ"
 
-#: python/irc.py:96 python/sourceclientgui.py:1695
+#: python/irc.py:96 python/sourceclientgui.py:1784
 msgid "Listen URL"
 msgstr "URL d'écoute"
 
@@ -682,13 +696,13 @@ msgid "Network"
 msgstr "Réseau"
 
 #. TC: label for hostname entry.
-#: python/irc.py:446 python/sourceclientgui.py:208
+#: python/irc.py:446 python/sourceclientgui.py:270
 msgid "Hostname"
 msgstr "Nom de l'hôte"
 
 #. TC: TCP/IP port number label.
 #. TC: TCP port number.
-#: python/irc.py:448 python/sourceclientgui.py:704
+#: python/irc.py:448 python/sourceclientgui.py:785
 msgid "Port"
 msgstr "Port"
 
@@ -696,7 +710,7 @@ msgstr "Port"
 msgid "User name"
 msgstr "Nom utilisateur"
 
-#: python/irc.py:450 python/songdb.py:343 python/sourceclientgui.py:209
+#: python/irc.py:450 python/songdb.py:343 python/sourceclientgui.py:271
 msgid "Password"
 msgstr "Mot de passe"
 
@@ -918,11 +932,11 @@ msgid "Stop"
 msgstr "Stopper"
 
 #. TC: Column heading, whether to play.
-#: python/jingles.py:114 python/playergui.py:299
+#: python/jingles.py:114 python/playergui.py:326
 msgid "Play"
 msgstr "Lire"
 
-#: python/jingles.py:123 python/sourceclientgui.py:1051
+#: python/jingles.py:123 python/sourceclientgui.py:1132
 msgid "Repeat"
 msgstr "Répéter"
 
@@ -930,7 +944,7 @@ msgstr "Répéter"
 msgid "Configure"
 msgstr "Configurer"
 
-#: python/jingles.py:327 python/playergui.py:4135
+#: python/jingles.py:327 python/playergui.py:4194
 msgid "Supported media"
 msgstr "Média supportaté"
 
@@ -976,7 +990,7 @@ msgstr "Effets"
 msgid "Effects %d"
 msgstr "Effet %d"
 
-#: python/jingles.py:599 python/maingui.py:189
+#: python/jingles.py:599 python/maingui.py:190
 msgid "Background Tracks"
 msgstr "Pistes de fond"
 
@@ -984,99 +998,99 @@ msgstr "Pistes de fond"
 msgid "Background Tracks volume."
 msgstr "Volume des pistes de fond"
 
-#: python/maingui.py:93
+#: python/maingui.py:94
 msgid "Show a JACK freewheel control on the main panel"
 msgstr "Afficher le contrôle rouelibre de JACK en page principale"
 
-#: python/maingui.py:95
+#: python/maingui.py:96
 msgid "Toggle JACK freewheel mode."
 msgstr "Commutateur du mode rouelibre de JACK"
 
-#: python/maingui.py:168
+#: python/maingui.py:169
 msgid "File"
 msgstr "Fichier"
 
-#: python/maingui.py:168 python/preferences.py:1130
+#: python/maingui.py:169 python/preferences.py:1130
 msgid "View"
 msgstr "Voir"
 
-#: python/maingui.py:169
+#: python/maingui.py:170
 msgid "JACK Ports"
 msgstr "Ports JACK"
 
-#: python/maingui.py:169
+#: python/maingui.py:170
 msgid "Help"
 msgstr "Aide"
 
-#: python/maingui.py:171 python/maingui.py:3689
+#: python/maingui.py:172 python/maingui.py:3688
 msgid "Streams"
 msgstr "Flux"
 
-#: python/maingui.py:172
+#: python/maingui.py:173
 msgid "Recorders"
 msgstr "Enregistreurs"
 
-#: python/maingui.py:185 python/maingui.py:224
+#: python/maingui.py:186 python/maingui.py:225
 msgid "Output"
 msgstr "Sortie"
 
-#: python/maingui.py:185
+#: python/maingui.py:186
 msgid "Preferences"
 msgstr "Préférences"
 
-#: python/maingui.py:185
+#: python/maingui.py:186
 msgid "Profiles"
 msgstr "Profiles"
 
-#: python/maingui.py:188 python/songdb.py:409
+#: python/maingui.py:189 python/songdb.py:409
 msgid "Music Database"
 msgstr "Base de donnée musicale"
 
-#: python/maingui.py:188
+#: python/maingui.py:189
 msgid "Channel Meters"
 msgstr "Canal Mêtres"
 
-#: python/maingui.py:188
+#: python/maingui.py:189
 msgid "Output Meters"
 msgstr "Sortie Mêtres"
 
-#: python/maingui.py:189
+#: python/maingui.py:190
 msgid "Tabbed Area"
 msgstr "Zone tabulée"
 
-#: python/maingui.py:189
+#: python/maingui.py:190
 msgid "Button Bar"
 msgstr "Barre de boutons"
 
-#: python/maingui.py:223 python/preferences.py:1485
+#: python/maingui.py:224 python/preferences.py:1485
 msgid "Channels"
 msgstr "Canaux"
 
-#: python/maingui.py:223
+#: python/maingui.py:224
 msgid "Players"
 msgstr "Lecteur"
 
-#: python/maingui.py:224
+#: python/maingui.py:225
 msgid "VoIP"
 msgstr "VoIP"
 
-#: python/maingui.py:224 python/maingui.py:3129
+#: python/maingui.py:225 python/maingui.py:3128
 msgid "DSP"
 msgstr "DSP"
 
-#: python/maingui.py:224
+#: python/maingui.py:225
 msgid "Mix"
 msgstr "Mix"
 
-#: python/maingui.py:224
+#: python/maingui.py:225
 msgid "Misc"
 msgstr "Divers"
 
-#: python/maingui.py:269
+#: python/maingui.py:270
 msgid "Reset"
 msgstr "RàZ"
 
-#: python/maingui.py:272
+#: python/maingui.py:273
 msgid "Reset the JACK port connections to the default settings."
 msgstr "Forcer toutes les connexions aux ports JACK à leur valeurs par défaut."
 
@@ -1091,37 +1105,33 @@ msgstr ""
 "<span size=\"12000\" weight=\"bold\">RàZ de toutes les connexions aux ports "
 "JACK et remise aux paramêtres par défaut."
 
-#: python/maingui.py:321
+#: python/maingui.py:320
 msgid "No compatible ports available."
 msgstr "Aucun port compatible n'est disponible"
 
-#: python/maingui.py:364
+#: python/maingui.py:363
 #, python-brace-format
 msgid "{0} profile={1}:{2} settings saved."
 msgstr "{0} profil={1}:{2} paramêtres sauvegardés."
 
-#: python/maingui.py:367
+#: python/maingui.py:366
 #, python-brace-format
 msgid "{0} session={1}:{2} settings saved."
 msgstr "{0} session={1}:{2} paramêtres sauvegardés."
 
-#: python/maingui.py:671
+#: python/maingui.py:670
 msgid "Text"
 msgstr "Texte"
 
-#: python/maingui.py:674
+#: python/maingui.py:673
 msgid "The opener button's text."
 msgstr "Texte des boutons d'ouverture"
 
-#: python/maingui.py:682
-msgid "Icon"
-msgstr "Icône"
-
-#: python/maingui.py:690
+#: python/maingui.py:689
 msgid "The opener button's icon."
 msgstr "L'icône d'ouverture."
 
-#: python/maingui.py:698
+#: python/maingui.py:697
 msgid ""
 "The headroom is the amount by which to reduce player volume when this opener "
 "is active. Note that the actual amount will be the largest value of all the "
@@ -1131,15 +1141,15 @@ msgstr ""
 "quand ce lanceur est activé. Notez que la valeur utilisée sera la plus "
 "élevée parmis celles des bouttons activés."
 
-#: python/maingui.py:703
+#: python/maingui.py:702
 msgid "The amount of headroom required (dB)"
 msgstr "Le taux de headroom nécessaire (dB)"
 
-#: python/maingui.py:712
+#: python/maingui.py:711
 msgid "This button will flash as a reminder to close"
 msgstr "Ce bouton clignottera pour rappeler de le fermer"
 
-#: python/maingui.py:713
+#: python/maingui.py:712
 msgid ""
 "After a number of seconds where a main player is active this button's status "
 "indicator will start to flash and will continue to do so until the button is "
@@ -1149,11 +1159,11 @@ msgstr ""
 "l'indicateur de status de ce bouton commence à clignotter jusqu'à ce que le "
 "bouton soit fermé ou le lecteur arrêté."
 
-#: python/maingui.py:721
+#: python/maingui.py:720
 msgid "This button is to be treated as a microphone opener"
 msgstr "Ce bouton doit être utilisé comme ouvreur de micro"
 
-#: python/maingui.py:723
+#: python/maingui.py:722
 msgid ""
 "The button will be grouped with the other microphone opener buttons. It will "
 "be affected by signals to close microphone buttons. Channels associated with "
@@ -1163,11 +1173,11 @@ msgstr ""
 "par les signaux de fermeture de micro. Les canaux associés à ce bouton "
 "seront mixés différamment lors de l'utilisation des modes VoIP."
 
-#: python/maingui.py:732
+#: python/maingui.py:731
 msgid "This button will automatically cancel JACK freewheel mode"
 msgstr ""
 
-#: python/maingui.py:734
+#: python/maingui.py:733
 msgid ""
 "This should be set for all buttons that control input from a live sound "
 "source or device."
@@ -1175,75 +1185,75 @@ msgstr ""
 "Doit être configuré pour chacun des boutons contrôlant l'entrée du son en "
 "direct d'une source ou d'un périphérique."
 
-#: python/maingui.py:737
+#: python/maingui.py:736
 msgid "Button Open Triggers"
 msgstr "Bouton Trieurs"
 
-#: python/maingui.py:744
+#: python/maingui.py:743
 msgid "Playlist advance button"
 msgstr "Bouton d'avance dans la liste de lecture"
 
-#: python/maingui.py:745 python/maingui.py:746
+#: python/maingui.py:744 python/maingui.py:745
 #, python-format
 msgid "'%s' control"
 msgstr "contrôle «%s»"
 
 #. TC: Insert playlist control to stop the player.
-#: python/maingui.py:745 python/playergui.py:4393
+#: python/maingui.py:744 python/playergui.py:4457
 msgid "Player Stop"
 msgstr "Arret lecteur"
 
 #. TC: Insert playlist control to stop the player.
-#: python/maingui.py:746 python/playergui.py:4400
+#: python/maingui.py:745 python/playergui.py:4464
 msgid "Player Stop 2"
 msgstr "Arret Lecteur 2"
 
-#: python/maingui.py:747
+#: python/maingui.py:746
 msgid "Announcements"
 msgstr "Annonces"
 
-#: python/maingui.py:759
+#: python/maingui.py:758
 msgid "When opened close these other buttons"
 msgstr "Quand il est ouvert, ferme les autres boutons"
 
-#: python/maingui.py:770
+#: python/maingui.py:769
 msgid "Shell Command"
 msgstr "Commande Shell"
 
-#: python/maingui.py:771
+#: python/maingui.py:770
 msgid ""
 "Mostly useful issuing 'amixer' commands, in particular for setting capture."
 msgstr ""
 "Pratique principalement avec les commandes de «amixer», en particulier pour "
 "configurer la capture."
 
-#: python/maingui.py:791
+#: python/maingui.py:790
 msgid "On open"
 msgstr "A l'ouverture"
 
-#: python/maingui.py:792
+#: python/maingui.py:791
 msgid "On close"
 msgstr "A la fermeture"
 
-#: python/maingui.py:836
+#: python/maingui.py:835
 msgid "Main Panel Opener Buttons"
 msgstr "Panneau principal des boutons d'ouvreurs"
 
-#: python/maingui.py:848
+#: python/maingui.py:847
 msgid "Indicate button numbers and associated channel numbers"
 msgstr "Indique le numéro de boutton et les numéros de canaux associés"
 
-#: python/maingui.py:850
+#: python/maingui.py:849
 msgid "A useful feature to have switched on while allocating channel openers."
 msgstr ""
 "Une fonctionalité utile à avoir activée lorsque l'on alloue des ouvreurs de "
 "canaux."
 
-#: python/maingui.py:856
+#: python/maingui.py:855
 msgid "Status Indicator Appearance"
 msgstr "Apparence de l'indicateur d'état"
 
-#: python/maingui.py:859
+#: python/maingui.py:858
 msgid ""
 "Each opener button has two vertical bars at the side to make the button "
 "state more apparent. These settings control their appearance."
@@ -1251,28 +1261,28 @@ msgstr ""
 "Chaque bouton d'ouverture possède une barre verticale pour le rendre plus "
 "visible. Ces paramêtre contrôlent cette apparence."
 
-#: python/maingui.py:868 python/format.py:827
+#: python/maingui.py:867 python/format.py:847
 msgid "Width"
 msgstr "Largeur"
 
-#: python/maingui.py:875
+#: python/maingui.py:874
 msgid "Opened"
 msgstr "Ouvert"
 
-#: python/maingui.py:879 python/preferences.py:503 python/preferences.py:505
+#: python/maingui.py:878 python/preferences.py:503 python/preferences.py:505
 msgid "Closed"
 msgstr "Fermé"
 
-#: python/maingui.py:884
+#: python/maingui.py:883
 msgid "Remind"
 msgstr "Se rappeler"
 
 #. TC: A placeholder text for when there are no opener buttons.
-#: python/maingui.py:1065
+#: python/maingui.py:1064
 msgid "No Channel Opener Buttons"
 msgstr "Aucun bouton d'ouverture de canal"
 
-#: python/maingui.py:1354
+#: python/maingui.py:1353
 msgid ""
 "This indicates the state of the various streams. Flashing means stream "
 "packets are being discarded because of network congestion. Partial red means "
@@ -1284,53 +1294,53 @@ msgstr ""
 "signifie que le tampon d'émission est partiellement plein, indiquant des "
 "difficultés de comunication avec le serveur. Vert indique que tout va bien."
 
-#: python/maingui.py:1377
+#: python/maingui.py:1376
 msgid "The combined total number of listeners in all server tabs."
 msgstr "Le nombre total d'auditeurs dans tous les onglets de serveurs."
 
 #. TC: Record as in, to make a recording.
-#: python/maingui.py:1825 python/sourceclientgui.py:2784
+#: python/maingui.py:1824 python/sourceclientgui.py:2874
 msgid "Record"
 msgstr "Enregistrer"
 
-#: python/maingui.py:2647
+#: python/maingui.py:2646
 msgid "Confirmation to quit IDJC is required."
 msgstr "Une confirmation est nécessaire pour quitter IDJC."
 
-#: python/maingui.py:2651
+#: python/maingui.py:2650
 msgid "All active recordings and radio streams will terminate."
 msgstr "Tous les entregistrements et flux radio seront arrêtés."
 
-#: python/maingui.py:2653
+#: python/maingui.py:2652
 msgid "All of the active radio streams will terminate."
 msgstr "Tous les flux radio en cours seront arrêtés."
 
-#: python/maingui.py:2655
+#: python/maingui.py:2654
 msgid "All active recordings will cease."
 msgstr "Tous les enregistrements sen cours seront arrêtés."
 
 #. TC: Popup menu item, wipes away the tracks played history text.
-#: python/maingui.py:2921 python/maingui.py:3353
+#: python/maingui.py:2920 python/maingui.py:3352
 msgid "Remove Contents"
 msgstr "Supprimer le contenu"
 
-#: python/maingui.py:3076
+#: python/maingui.py:3075
 msgid "Renameable Labels"
 msgstr "Labels renommables"
 
-#: python/maingui.py:3100
+#: python/maingui.py:3099
 msgid "Main Players"
 msgstr "Lecteur principal"
 
-#: python/maingui.py:3153
+#: python/maingui.py:3152
 msgid "Mix voice over IP audio to the output stream."
 msgstr "Mixe l'audio VoIP au flux de sortie"
 
-#: python/maingui.py:3166
+#: python/maingui.py:3165
 msgid "Mix voice over IP audio to the DJ only."
 msgstr "Mixe l'audio VoIP uniquement au DJ"
 
-#: python/maingui.py:3193
+#: python/maingui.py:3192
 msgid ""
 "This button steps through the active playlist, pausing between tracks. The "
 "active playlist is defined by the placement of the crossfader."
@@ -1338,44 +1348,44 @@ msgstr ""
 "Ce bouton avance dans la liste de lecture en s'arrêtant entre chaque piste. "
 "La liste de lecture en cours est définie par l'emplacement du crossfader."
 
-#: python/maingui.py:3238 python/preferences.py:873
+#: python/maingui.py:3237 python/preferences.py:873
 msgid "The volume control shared by both music players."
 msgstr "Le contrôle de volume partagé par les deux lecteurs."
 
-#: python/maingui.py:3249
+#: python/maingui.py:3248
 msgid "The volume control for the right music player."
 msgstr "Le Volume du lecteur de droite."
 
-#: python/maingui.py:3277
+#: python/maingui.py:3276
 msgid "VoIP level adjustment. 0dB gain is at the mid point."
 msgstr "Ajustement du niveau VoIP. 0dB est le point milieu."
 
-#: python/maingui.py:3300
+#: python/maingui.py:3299
 msgid "The stream volume level to send to the voice over IP connection."
 msgstr "Le niveau de volume à envoyer à la connexion VoIP."
 
-#: python/maingui.py:3327 python/preferences.py:1413
+#: python/maingui.py:3326 python/preferences.py:1413
 msgid "Tracks Played"
 msgstr "Pistes lues"
 
-#: python/maingui.py:3398 python/maingui.py:3400 python/maingui.py:3424
+#: python/maingui.py:3397 python/maingui.py:3399 python/maingui.py:3423
 msgid "Monitor Mix"
 msgstr "Monitor Mix"
 
-#: python/maingui.py:3407 python/maingui.py:3424 python/playergui.py:4334
+#: python/maingui.py:3406 python/maingui.py:3423 python/playergui.py:4398
 msgid "DJ"
 msgstr "DJ"
 
 #. TC: binding editor, action pane, first row, toplevel menu.
-#: python/maingui.py:3410 python/maingui.py:3424 python/midicontrols.py:155
-#: python/midicontrols.py:1507 python/playergui.py:4326
-#: python/sourceclientgui.py:2792
+#: python/maingui.py:3409 python/maingui.py:3423 python/midicontrols.py:155
+#: python/midicontrols.py:1507 python/playergui.py:4390
+#: python/sourceclientgui.py:2882
 msgid "Stream"
 msgstr "Flux"
 
 #. TC: Context {0}, {1}, {2} = Monitor Mix, Stream, DJ
 #. TC: Or whatever they become translated to.
-#: python/maingui.py:3420
+#: python/maingui.py:3419
 #, python-brace-format
 msgid ""
 "In IDJC there are are two audio paths and this '{0}' control toggles between "
@@ -1389,82 +1399,82 @@ msgstr ""
 "pour pouvoir utiliser la fonctionalité VoIP"
 
 #. TC: Dropdown box title text widget.
-#: python/maingui.py:3433 python/maingui.py:3435
+#: python/maingui.py:3432 python/maingui.py:3434
 msgid "Metadata Source"
 msgstr "Source de métadonnées"
 
 #. TC: The chosen source of track metadata.
-#: python/maingui.py:3441 python/playergui.py:4044
+#: python/maingui.py:3440 python/playergui.py:4103
 msgid "Playlist 1"
 msgstr "Liste de lecture 1"
 
 #. TC: The chosen source of track metadata.
-#: python/maingui.py:3443 python/playergui.py:4045
+#: python/maingui.py:3442 python/playergui.py:4104
 msgid "Playlist 2"
 msgstr "Liste de lecture 2"
 
 #. TC: The chosen source of track metadata.
-#: python/maingui.py:3445 python/songdb.py:909 python/songdb.py:1293
+#: python/maingui.py:3444 python/songdb.py:909 python/songdb.py:1293
 msgid "Last Played"
 msgstr "Dernière lue"
 
 #. TC: The chosen source of track metadata.
-#: python/maingui.py:3447 python/maingui.py:3484 python/maingui.py:3486
+#: python/maingui.py:3446 python/maingui.py:3483 python/maingui.py:3485
 msgid "Crossfader"
 msgstr "Crossfader"
 
 #. TC: The chosen source of track metadata. In this case no metadata.
 #. TC: Fade time is zero. No fade, none.
-#: python/maingui.py:3449 python/playergui.py:4309
+#: python/maingui.py:3448 python/playergui.py:4373
 msgid "None"
 msgstr "Aucune"
 
 #. TC: The chosen source of track metadata. In this case no metadata.
-#: python/maingui.py:3451
+#: python/maingui.py:3450 python/playergui.py:4104
 msgid "Playlist 3"
 msgstr "Liste de lecture 3"
 
-#: python/maingui.py:3456
+#: python/maingui.py:3455
 msgid "Select the origin for the playing track metadata on the stream."
 msgstr "Sélectionner l'origine pour la piste de métadonnées"
 
 #. TC: Abbreviation of left.
-#: python/maingui.py:3466 python/maingui.py:3468
+#: python/maingui.py:3465 python/maingui.py:3467
 msgid "L"
 msgstr "G"
 
-#: python/maingui.py:3478
+#: python/maingui.py:3477
 msgid "Move the crossfader fully left."
 msgstr "Déplacer le crossfader totalement à gauche"
 
-#: python/maingui.py:3498
+#: python/maingui.py:3497
 msgid "The crossfader."
 msgstr "Le crossfader"
 
 #. TC: Abbreviation of right.
-#: python/maingui.py:3502 python/maingui.py:3504
+#: python/maingui.py:3501 python/maingui.py:3503
 msgid "R"
 msgstr "D"
 
-#: python/maingui.py:3514
+#: python/maingui.py:3513
 msgid "Move the crossfader fully right."
 msgstr "Déplacer le crossfader totalement à droite"
 
 #. TC: Describes a mid point.
-#: python/maingui.py:3523 python/maingui.py:3525
+#: python/maingui.py:3522 python/maingui.py:3524
 msgid "Middle"
 msgstr "Milieu"
 
-#: python/maingui.py:3542 python/maingui.py:3549
+#: python/maingui.py:3541 python/maingui.py:3548
 msgid "Move the crossfader to the middle of its range of travel."
 msgstr "Déplacer le crossfader au point milieu de son chemin."
 
 #. TC: The attenuation response curve of the crossfader. User selectable.
-#: python/maingui.py:3554 python/maingui.py:3556
+#: python/maingui.py:3553 python/maingui.py:3555
 msgid "Response"
 msgstr "Réponse"
 
-#: python/maingui.py:3578
+#: python/maingui.py:3577
 msgid ""
 "This selects the response curve of the crossfader.\n"
 "\n"
@@ -1474,11 +1484,11 @@ msgstr ""
 "Les atténuations au point milieu sont respectivement -3dB, 0dB et -22dB "
 
 #. TC: Duration in seconds.
-#: python/maingui.py:3592 python/maingui.py:3594
+#: python/maingui.py:3591 python/maingui.py:3593
 msgid "Time"
 msgstr "Durée"
 
-#: python/maingui.py:3611
+#: python/maingui.py:3610
 msgid ""
 "The time in seconds that the crossfader will take to automatically pass "
 "across when the button to the right is clicked."
@@ -1488,11 +1498,11 @@ msgstr ""
 
 #. TC: The crossfader pass-across button text.
 #. TC: The actual button appears as [<-->] with this text above it.
-#: python/maingui.py:3620 python/maingui.py:3622
+#: python/maingui.py:3619 python/maingui.py:3621
 msgid "Pass"
 msgstr "Passer"
 
-#: python/maingui.py:3635
+#: python/maingui.py:3634
 msgid ""
 "This button causes the crossfader to move to the opposite side at a speed "
 "determined by the speed selector to the left."
@@ -1500,30 +1510,30 @@ msgstr ""
 "Ce bouton fait passer le crossfader vers le côté opposé à la vitesse "
 "déterminée par le sélecteur de vitesse à gauche."
 
-#: python/maingui.py:3678
+#: python/maingui.py:3677
 msgid "Peak"
 msgstr "Pick"
 
-#: python/maingui.py:3681
+#: python/maingui.py:3680
 msgid "A peak hold meter indicating the signal strength of the stream audio."
 msgstr ""
 "Un indicateur de pic temporisé montrant la force du signal du flux audio."
 
 #. TC: This text appears above the stream mix VU meter.
-#: python/maingui.py:3703
+#: python/maingui.py:3702
 msgid "VU"
 msgstr "VU"
 
-#: python/maingui.py:3707
+#: python/maingui.py:3706
 msgid "A VU meter for the stream audio."
 msgstr "Un Vumêtre pour le flux audio."
 
 #. TC: Appears above the mic meters as a label followed by a number.
-#: python/maingui.py:3710
+#: python/maingui.py:3709
 msgid "Ch"
 msgstr "Ch"
 
-#: python/maingui.py:3737
+#: python/maingui.py:3736
 msgid ""
 "A peak hold meter indicating the microphone signal strength and a meter "
 "indicating attenuation levels in the microphone signal processing system. "
@@ -1557,7 +1567,7 @@ msgstr "Lecteur Lecture/pause"
 
 #. TC: Control method. Please keep it as Target:Action.
 #. TC: Playlist control.
-#: python/midicontrols.py:56 python/playergui.py:3798
+#: python/midicontrols.py:56 python/playergui.py:3857
 msgid "Player stop"
 msgstr "Arret lecteur"
 
@@ -2219,14 +2229,14 @@ msgstr "Disque"
 
 #. TC: Track playback time.
 #. TC: Playback time.
-#: python/songdb.py:908 python/songdb.py:1296 python/playergui.py:313
+#: python/songdb.py:908 python/songdb.py:1296 python/playergui.py:340
 msgid "Duration"
 msgstr "Durée"
 
-#: python/songdb.py:910 python/songdb.py:1297 python/format.py:594
-#: python/format.py:615 python/format.py:701 python/format.py:722
-#: python/format.py:857 python/format.py:962 python/format.py:1012
-#: python/format.py:1022
+#: python/songdb.py:910 python/songdb.py:1297 python/format.py:614
+#: python/format.py:635 python/format.py:721 python/format.py:742
+#: python/format.py:877 python/format.py:982 python/format.py:1032
+#: python/format.py:1042 python/format.py:1120 python/format.py:1153
 msgid "Bitrate"
 msgstr "Bitrate"
 
@@ -2350,299 +2360,305 @@ msgstr "Base de données non reconnue"
 msgid "Found Prokyon 3 schema"
 msgstr "Schéma Prokyon 3 trouvé"
 
-#: python/playergui.py:236
+#: python/playergui.py:104
+msgid "Click to stop adding tracks!"
+msgstr ""
+
+#: python/playergui.py:263
 msgid "Cuesheet Playlist"
 msgstr "Liste de lecture cuesheet"
 
 #. TC: Column heading, the track number.
-#: python/playergui.py:302
+#: python/playergui.py:329
 msgid "Trk"
 msgstr "Piste"
 
 #. TC: Column heading, the index number.
-#: python/playergui.py:305
+#: python/playergui.py:332
 msgid "Ind"
 msgstr "Index"
 
-#: python/playergui.py:414
+#: python/playergui.py:441
 msgid "External Playlist"
 msgstr "Liste de lecture externe"
 
 #. TC: Button text to activate an external playlist.
-#: python/playergui.py:425
+#: python/playergui.py:452
 msgid "Active"
 msgstr "Attivée"
 
-#: python/playergui.py:435
+#: python/playergui.py:462
 msgid "Choose a playlist file"
 msgstr "Sélectionner un fichier de liste de lecture"
 
-#: python/playergui.py:440
+#: python/playergui.py:467
 msgid "Choose a media directory"
 msgstr "Sélectionner un dossier de média"
 
-#: python/playergui.py:453
+#: python/playergui.py:480
 msgid "Choose a playlist file."
 msgstr "Sélectionner un fichier de liste de lecture."
 
-#: python/playergui.py:455
+#: python/playergui.py:482
 msgid "Choose a folder/directory of music."
 msgstr "Sélectionner un fichier de musique."
 
-#: python/playergui.py:522
+#: python/playergui.py:549
 msgid "Create a new announcement"
 msgstr "Créer une nouvelle annonce"
 
-#: python/playergui.py:525
+#: python/playergui.py:552
 msgid "Modify or Delete this announcement"
 msgstr "Modifier ou supprimer cette annonce"
 
 #. TC: Embed a DJ announcement text into the playlist.
-#: python/playergui.py:528 python/playergui.py:4430
+#: python/playergui.py:555 python/playergui.py:4494
 msgid "Announcement"
 msgstr "Annonce"
 
 #. TC: The time format as minutes and seconds.
-#: python/playergui.py:556
+#: python/playergui.py:583
 msgid "mm:ss"
 msgstr "mm:ss"
 
 #. TC: Alongside the name of the next track.
-#: python/playergui.py:609
+#: python/playergui.py:636
 msgid "Next track"
 msgstr "Piste suivante"
 
-#: python/playergui.py:934
+#: python/playergui.py:961
 msgid "By Extension"
 msgstr "Par extention"
 
-#: python/playergui.py:934
+#: python/playergui.py:961
 msgid "M3U playlist"
 msgstr "Liste de lecture M3U"
 
-#: python/playergui.py:934
+#: python/playergui.py:961
 #, fuzzy
 msgid "M3U8 playlist"
 msgstr "Liste de lecture M3U"
 
-#: python/playergui.py:935
+#: python/playergui.py:962
 msgid "XSPF playlist"
 msgstr "Liste de lecture XSPF"
 
-#: python/playergui.py:935
+#: python/playergui.py:962
 msgid "PLS playlist"
 msgstr "Liste de lecture PLS"
 
-#: python/playergui.py:1007
+#: python/playergui.py:1034
 #, python-format
 msgid "%d Audio Tracks"
 msgstr "%d pistes audio"
 
 #. TC: Missing metadata text.
-#: python/playergui.py:1017
+#: python/playergui.py:1044
 msgid "Unknown"
 msgstr "Inconnu"
 
-#: python/playergui.py:1021
+#: python/playergui.py:1048
 msgid "(Cue sheet)"
 msgstr "(Cue Sheet)"
 
-#: python/playergui.py:1058
+#: python/playergui.py:1085
 msgid "Bad Tag"
 msgstr "Tag erroné"
 
-#: python/playergui.py:1888 python/playergui.py:4268
+#: python/playergui.py:1921 python/playergui.py:4333
 msgid "Manual"
 msgstr "Manuel"
 
-#: python/playergui.py:1892 python/playergui.py:4265
+#. TC: playlist modes
+#: python/playergui.py:1925 python/playergui.py:4332
 msgid "Play All"
 msgstr "Tout jouer"
 
-#: python/playergui.py:1900 python/playergui.py:1909 python/playergui.py:4266
+#: python/playergui.py:1933 python/playergui.py:1942 python/playergui.py:4332
 msgid "Loop All"
 msgstr "Tout boucler"
 
-#: python/playergui.py:1900 python/playergui.py:4269
+#: python/playergui.py:1933 python/playergui.py:4333
 msgid "Cue Up"
 msgstr "Pré-écoute"
 
-#: python/playergui.py:1901 python/playergui.py:4273
+#: python/playergui.py:1934 python/playergui.py:4337
 msgid "Fade Over"
 msgstr "Fondu dessus"
 
-#: python/playergui.py:1913 python/playergui.py:1984 python/playergui.py:4267
+#: python/playergui.py:1946 python/playergui.py:2021 python/playergui.py:4332
 msgid "Random"
 msgstr "Aléatoire"
 
-#: python/playergui.py:1953 python/playergui.py:4270
+#: python/playergui.py:1990 python/playergui.py:4333
 msgid "External"
 msgstr "Externe"
 
-#: python/playergui.py:1965 python/playergui.py:1981 python/playergui.py:4272
+#. TC: yet more playlist modes these ones for the main players only
+#: python/playergui.py:2002 python/playergui.py:2018 python/playergui.py:4337
 msgid "Alternate"
 msgstr "Alternatif"
 
-#: python/playergui.py:1965 python/playergui.py:1983 python/playergui.py:4274
+#: python/playergui.py:2002 python/playergui.py:2020 python/playergui.py:4337
 msgid "Random Hop"
 msgstr "Hop aléatoire"
 
 #. TC: The remaining playlist time.
-#: python/playergui.py:2138 python/playergui.py:2144
+#: python/playergui.py:2176 python/playergui.py:2182
 msgid "Remaining"
 msgstr "Restant"
 
 #. TC: The estimated finish time of the playlist.
 #. TC: The estimated finish time of the playlist (ETA).
-#: python/playergui.py:2140 python/playergui.py:2144 python/playergui.py:2158
+#: python/playergui.py:2178 python/playergui.py:2182 python/playergui.py:2196
 msgid "Finish"
 msgstr "Fini"
 
 #. TC: The play duration of the block of audio tracks.
-#: python/playergui.py:2145 python/playergui.py:2156
+#: python/playergui.py:2183 python/playergui.py:2194
 msgid "Block size"
 msgstr "Taille de block"
 
 #. TC: File dialog title text.
-#: python/playergui.py:2546
+#: python/playergui.py:2584
 msgid "Add music to left playlist"
 msgstr "Ajouter de la musique à la liste de gauche"
 
 #. TC: File dialog title text.
-#: python/playergui.py:2549
+#: python/playergui.py:2587
 msgid "Add music to right playlist"
 msgstr "Ajouter de la musique à la liste de droite"
 
-#: python/playergui.py:2551
+#: python/playergui.py:2589
 msgid "Add background music"
 msgstr "ajouter une musique de fond"
 
 #. TC: File filter text.
-#: python/playergui.py:2563
+#: python/playergui.py:2601
 msgid "Supported Media Formats"
 msgstr "Formats de média supportés"
 
 #. TC: Expander text "Select File Type (.pls)" for the pls file type.
-#: python/playergui.py:2625
+#: python/playergui.py:2652
 msgid "Select File Type"
 msgstr "Sélectionner le type de fichier"
 
-#: python/playergui.py:3383
+#: python/playergui.py:3442
 msgid "Save left playlist"
 msgstr "Sauvegarder la liste de lecture de gauche"
 
-#: python/playergui.py:3385
+#: python/playergui.py:3444
 msgid "Save right playlist"
 msgstr "Sauvegarder la liste de lecture de droite"
 
-#: python/playergui.py:3387
+#: python/playergui.py:3446
 msgid "Save background playlist"
 msgstr "Sauvegarder la liste de lecture de fond"
 
-#: python/playergui.py:3405
+#: python/playergui.py:3464
 msgid "File Type"
 msgstr "Type de fichier"
 
-#: python/playergui.py:3410
+#: python/playergui.py:3469
 msgid "Extension"
 msgstr "Extention"
 
 #. TC: Playlist control.
 #. TC: Insert playlist control to do a ten second fade to the next track.
-#: python/playergui.py:3774 python/playergui.py:4441
+#: python/playergui.py:3833 python/playergui.py:4505
 msgid "Fade 10s"
 msgstr "Fondu 10s"
 
 #. TC: Playlist control.
 #. TC: Insert playlist control to do a five second fade to the next track.
-#: python/playergui.py:3780 python/playergui.py:4448
+#: python/playergui.py:3839 python/playergui.py:4512
 msgid "Fade 5s"
 msgstr "Fondu 5s"
 
 #. TC: Playlist control.
 #. TC: Insert playlist control to not do a fade to the next track.
-#: python/playergui.py:3785 python/playergui.py:4455
+#: python/playergui.py:3844 python/playergui.py:4519
 msgid "No Fade"
 msgstr "Aucun Fondu"
 
 #. TC: Playlist control.
-#: python/playergui.py:3793
+#: python/playergui.py:3852
 msgid ">> Normal Speed <<"
 msgstr ">> Vitesse normale <<"
 
 #. TC: Playlist control.
-#: python/playergui.py:3803
+#: python/playergui.py:3862
 msgid "Player stop 2"
 msgstr "Arret Lecteur 2"
 
 #. TC: Playlist control.
 #. TC: Insert playlist control to jump to the top of the playlist.
-#: python/playergui.py:3808 python/playergui.py:4407
+#: python/playergui.py:3867 python/playergui.py:4471
 msgid "Jump To Top"
 msgstr "Retour en haut"
 
 #. TC: Playlist control.
-#: python/playergui.py:3813 python/playergui.py:4467
+#: python/playergui.py:3872 python/playergui.py:4531
 msgid "Stop streaming"
 msgstr "Arret du flux"
 
 #. TC: Playlist control.
-#: python/playergui.py:3818 python/playergui.py:4475
+#: python/playergui.py:3877 python/playergui.py:4539
 msgid "Stop recording"
 msgstr "Arret de l'enregistrement"
 
-#: python/playergui.py:3851
+#: python/playergui.py:3910
 #, fuzzy
 msgid "Announcement:"
 msgstr "Annonce"
 
 #. TC: Playlist control.
-#: python/playergui.py:3857
+#: python/playergui.py:3916
 msgid ">>> Transfer across >>>"
 msgstr ">>> Transfer en face >>>"
 
 #. TC: Playlist control.
-#: python/playergui.py:3860
+#: python/playergui.py:3919
 msgid "<<< Transfer across <<<"
 msgstr "<<< Transfer en face <<<"
 
 #. TC: Playlist control.
-#: python/playergui.py:3865
+#: python/playergui.py:3924
 msgid ">>> Fade across >>>"
 msgstr ">>> Fondu en face >>>"
 
 #. TC: Playlist control.
-#: python/playergui.py:3868
+#: python/playergui.py:3927
 msgid "<<< Fade across <<<"
 msgstr "<<< Fondu en face <<<"
 
 #. TC: Playlist control.
-#: python/playergui.py:3874
+#: python/playergui.py:3933
 msgid "Ignored playlist control"
 msgstr "Contrôle de liste de lecture ignoré"
 
-#: python/playergui.py:3942
+#: python/playergui.py:4001
 #, python-brace-format
 msgid "Playing track {0} of {1}"
 msgstr "Lecture piste {0} sur {1}"
 
 #. TC: Previous line: Playing track {0} of {1}
-#: python/playergui.py:3955
+#: python/playergui.py:4014
 #, python-format
 msgid "From the album, %s"
 msgstr "De l'album, %s"
 
-#: python/playergui.py:3962
+#: python/playergui.py:4021
 #, python-format
 msgid "Total number of tracks %d"
 msgstr "Nombre de piste total %d"
 
-#: python/playergui.py:3966 python/playergui.py:3968
+#: python/playergui.py:4025 python/playergui.py:4027
 #, python-format
 msgid "Total play duration %s"
 msgstr "Durée totale %s"
 
-#: python/playergui.py:4018
+#: python/playergui.py:4077
 msgid ""
 "Left click toggles between showing the amount of time elapsed or remaining "
 "on the current track being played."
@@ -2650,7 +2666,7 @@ msgstr ""
 "Clic à gauche pour afficher le temps écoulé ou le temps restant pour la "
 "piste en cours de reproduction."
 
-#: python/playergui.py:4036
+#: python/playergui.py:4095
 msgid ""
 "This slider acts as both a play progress indicator and as a means for "
 "seeking within the currently playing track."
@@ -2659,16 +2675,16 @@ msgstr ""
 "positionneur dans la piste en cours de reproduction."
 
 #. TC: File filter text.
-#: python/playergui.py:4125
+#: python/playergui.py:4184
 msgid "All file types"
 msgstr "Tout type de fichier"
 
-#: python/playergui.py:4130
+#: python/playergui.py:4189
 #, fuzzy
 msgid "Playlist types"
 msgstr "Liste de lecture 1"
 
-#: python/playergui.py:4145
+#: python/playergui.py:4204
 msgid ""
 "'Block size' indicates the amount of time that it will take to play from the "
 "currently selected track to the next stop.\n"
@@ -2680,43 +2696,43 @@ msgstr ""
 "«Restant» indique le temps restant avant le prochain arret.\n"
 "«Fin» est le temps calculé lorsque la piste aura fini d'être lue."
 
-#: python/playergui.py:4168
+#: python/playergui.py:4230
 msgid "This adjusts the playback speed anywhere from 25% to 400%."
 msgstr "Ajuste la vitesse de reproduction entre 25% et 400%."
 
-#: python/playergui.py:4182
+#: python/playergui.py:4244
 msgid "This sets the playback speed back to normal."
 msgstr "Remet la vitesse de reproduction à sa valeur normale."
 
-#: python/playergui.py:4199
+#: python/playergui.py:4261
 msgid "Previous track."
 msgstr "Piste précédente"
 
-#: python/playergui.py:4211
+#: python/playergui.py:4273
 msgid "Play."
 msgstr "Lecture"
 
-#: python/playergui.py:4221
+#: python/playergui.py:4283
 msgid "Pause."
 msgstr "Pause"
 
-#: python/playergui.py:4231
+#: python/playergui.py:4293
 msgid "Stop."
 msgstr "Arret"
 
-#: python/playergui.py:4241
+#: python/playergui.py:4303
 msgid "Next track."
 msgstr "Piste suivante"
 
-#: python/playergui.py:4253
+#: python/playergui.py:4315
 msgid "Add tracks to the playlist."
 msgstr "Ajouter des pistes à la liste"
 
-#: python/playergui.py:4260 python/preferences.py:71
+#: python/playergui.py:4322 python/preferences.py:71
 msgid "Playlist Mode"
 msgstr "Mode de la liste de lecture"
 
-#: python/playergui.py:4279
+#: python/playergui.py:4343
 msgid ""
 "This sets the playlist mode which defines player behaviour after a track has "
 "finished playing.\n"
@@ -2781,31 +2797,31 @@ msgstr ""
 "opposée."
 
 #. TC: Fade time heading.
-#: python/playergui.py:4303 python/preferences.py:72
+#: python/playergui.py:4367 python/preferences.py:72
 msgid "Fade"
 msgstr "Fondu"
 
-#: python/playergui.py:4315
+#: python/playergui.py:4379
 msgid "This controls the amount of fade between tracks."
 msgstr "Contrôle le taux de fondu entre les pistes."
 
-#: python/playergui.py:4322
+#: python/playergui.py:4386
 msgid "Audio Feed"
 msgstr "Audio Feed"
 
-#: python/playergui.py:4332
+#: python/playergui.py:4396
 msgid "Make output from this player available for streaming."
 msgstr "Rendre la sortie de ce lecteur disponible pour le flux"
 
-#: python/playergui.py:4340
+#: python/playergui.py:4404
 msgid "Make output from this player audible to the DJ."
 msgstr "Rendre la sortie de ce lecteur audible au DJ"
 
-#: python/playergui.py:4342
+#: python/playergui.py:4406
 msgid "Force"
 msgstr "Forcer"
 
-#: python/playergui.py:4348
+#: python/playergui.py:4412
 msgid ""
 "When selected this player will be treated like a main player.\n"
 "It will be affected by microphone ducking and won't mute when a main player "
@@ -2816,122 +2832,122 @@ msgstr ""
 "lecteur principal est en fonction."
 
 #. TC: Insert playlist control.
-#: python/playergui.py:4361
+#: python/playergui.py:4425
 msgid "Insert control"
 msgstr "Insérer un contrôle"
 
 #. TC: The Item submenu.
-#: python/playergui.py:4370
+#: python/playergui.py:4434
 msgid "Item"
 msgstr "Elément"
 
 #. TC: The Playlist submenu.
-#: python/playergui.py:4375
+#: python/playergui.py:4439
 msgid "Playlist"
 msgstr "Liste de lecture"
 
 #. TC: Insert playlist control to set playback speed to normal.
-#: python/playergui.py:4386
+#: python/playergui.py:4450
 msgid "Normal Speed"
 msgstr "Vitesse normale"
 
 #. TC: Submenu Item. Parent menu is Playlist.
-#: python/playergui.py:4415 python/playergui.py:4569
+#: python/playergui.py:4479 python/playergui.py:4633
 msgid "Transfer"
 msgstr "Transfer"
 
-#: python/playergui.py:4423
+#: python/playergui.py:4487
 msgid "Crossfade"
 msgstr "Crossfader"
 
 #. TC: Menu item. Opens the metadata tagger on the selected track.
-#: python/playergui.py:4488
+#: python/playergui.py:4552
 msgid "Meta Tag"
 msgstr "Méta Tag"
 
 #. TC: Menu Item. Duplicates the selected track in the playlist.
-#: python/playergui.py:4494
+#: python/playergui.py:4558
 msgid "Duplicate"
 msgstr "Dupliquer"
 
 #. TC: Menu Item. Remove the selected track.
-#: python/playergui.py:4501
+#: python/playergui.py:4565
 msgid "Remove"
 msgstr "Supprimer"
 
 #. TC: Submenu Item. Parent menu item is Remove.
-#: python/playergui.py:4512
+#: python/playergui.py:4576
 msgid "This"
 msgstr "Ceci"
 
 #. TC: Submenu Item. Parent menu item is Remove.
-#: python/playergui.py:4519 python/preferences.py:1237
+#: python/playergui.py:4583 python/preferences.py:1237
 msgid "All"
 msgstr "Tout"
 
 #. TC: Submenu Item. Parent menu item is Remove.
-#: python/playergui.py:4526
+#: python/playergui.py:4590
 msgid "From Here"
 msgstr "Depuis ici"
 
 #. TC: Submenu Item. Parent menu item is Remove.
-#: python/playergui.py:4533
+#: python/playergui.py:4597
 msgid "To Here"
 msgstr "Jusqu'ici"
 
 #. TC: Open the file dialog for adding music to the chosen playlist.
-#: python/playergui.py:4546
+#: python/playergui.py:4610
 msgid "Add Music"
 msgstr "Ajouter de la musique"
 
 #. TC: Submenu Item. Parent menu is Playlist.
-#: python/playergui.py:4553
+#: python/playergui.py:4617
 msgid "Save"
 msgstr "Sauvegarder"
 
 #. TC: Submenu Item. Parent menu is Playlist.
-#: python/playergui.py:4564
+#: python/playergui.py:4628
 msgid "Copy"
 msgstr "Copier"
 
-#: python/playergui.py:4575
+#: python/playergui.py:4639
 msgid "Exchange"
 msgstr "Echanger"
 
 #. TC: Submenu Item. Parent menu is Playlist.
-#: python/playergui.py:4582
+#: python/playergui.py:4646
 msgid "Empty"
 msgstr "Vide"
 
 #. TC: Submenu Item. Parent menus are Playlist->Copy.
 #. TC: Submenu Item. Parent menus are Playlist->Transfer.
-#: python/playergui.py:4596 python/playergui.py:4635
+#: python/playergui.py:4660 python/playergui.py:4699
 msgid "Append"
 msgstr "Après"
 
 #. TC: Submenu Item. Parent menus are Playlist->Copy.
 #. TC: Submenu Item. Parent menus are Playlist->Transfer.
-#: python/playergui.py:4603 python/playergui.py:4642
+#: python/playergui.py:4667 python/playergui.py:4706
 msgid "Prepend"
 msgstr "Avant"
 
 #. TC: Submenu Item. Parent menus are Playlist->Copy.
-#: python/playergui.py:4614
+#: python/playergui.py:4678
 msgid "Append Cursor"
 msgstr "Ajouter après le curseur"
 
 #. TC: Submenu Item. Parent menus are Playlist->Copy.
-#: python/playergui.py:4621
+#: python/playergui.py:4685
 msgid "Prepend Cursor"
 msgstr "Ajouter avant le curseur"
 
 #. TC: Submenu Item. Parent menus are Playlist->Transfer.
-#: python/playergui.py:4653
+#: python/playergui.py:4717
 msgid "Append at Cursor"
 msgstr "Ajouter après au curseur"
 
 #. TC: Submenu Item. Parent menus are Playlist->Transfer.
-#: python/playergui.py:4660
+#: python/playergui.py:4724
 msgid "Prepend at Cursor"
 msgstr "Ajouter avant au curseur"
 
@@ -3309,7 +3325,7 @@ msgstr ""
 msgid "Best"
 msgstr "Meilleure"
 
-#: python/preferences.py:996 python/format.py:512
+#: python/preferences.py:996 python/format.py:521
 msgid "Medium"
 msgstr "Moyenne"
 
@@ -3618,72 +3634,125 @@ msgstr "Collaborateurs"
 msgid "Translators"
 msgstr "Traducteurs"
 
-#: python/preferences.py:1574
+#: python/preferences.py:1575
 msgid "Build Info"
 msgstr ""
 
-#: python/preferences.py:1591
+#: python/preferences.py:1592
 msgid "About"
 msgstr "Concernant…"
 
-#: python/sourceclientgui.py:91
+#: python/sourceclientgui.py:75
+msgid "Disabled"
+msgstr ""
+
+#: python/sourceclientgui.py:75
+#, fuzzy
+msgid "Auto"
+msgstr "_Auto"
+
+#: python/sourceclientgui.py:75
+msgid "Auto, no plaintext"
+msgstr ""
+
+#: python/sourceclientgui.py:76
+msgid "RFC2818"
+msgstr ""
+
+#: python/sourceclientgui.py:76
+msgid "RFC2817"
+msgstr ""
+
+#: python/sourceclientgui.py:96
 msgid "Insert Attribute"
 msgstr "Insérer un attribut"
 
-#: python/sourceclientgui.py:135
+#: python/sourceclientgui.py:140
 msgid "Icecast 2 Master"
 msgstr "Icecast 2 Maitre"
 
-#: python/sourceclientgui.py:135
+#: python/sourceclientgui.py:140
 msgid "Shoutcast Master"
 msgstr "Shoutcast Maitre"
 
-#: python/sourceclientgui.py:136
+#: python/sourceclientgui.py:141
 msgid "Icecast 2 Stats/Relay"
 msgstr "Icecast 2 Stats/Relais"
 
-#: python/sourceclientgui.py:136
+#: python/sourceclientgui.py:141
 msgid "Shoutcast Stats/Relay"
 msgstr "Icecast 2 Stats/Relais"
 
-#: python/sourceclientgui.py:139
+#: python/sourceclientgui.py:144
 msgid "Enter new server connection details"
 msgstr "Insérer de nouveaux détails concernant la connexion au serveur"
 
-#: python/sourceclientgui.py:158
+#: python/sourceclientgui.py:164
 msgid "Edit existing server connection details"
 msgstr "Editer les détails de la connexion au serveur"
 
-#: python/sourceclientgui.py:195
+#. TC: Dialog title bar text.
+#: python/sourceclientgui.py:218
+msgid "Certificate Authority Directory"
+msgstr ""
+
+#. TC: Dialog title bar text.
+#: python/sourceclientgui.py:232
+msgid "Certificate Authority File"
+msgstr ""
+
+#. TC: Dialog title bar text.
+#: python/sourceclientgui.py:246
+msgid "TLS Client Certificate"
+msgstr ""
+
+#: python/sourceclientgui.py:257
 msgid "This server is to be scanned for audience figures"
 msgstr "Ce serveur doit être scanné pour les stats d'audience"
 
-#: python/sourceclientgui.py:208
+#: python/sourceclientgui.py:270
 msgid "Server type"
 msgstr "Type de serveur"
 
-#: python/sourceclientgui.py:208
+#: python/sourceclientgui.py:270
 msgid "Port number"
 msgstr "Numéro du port"
 
-#: python/sourceclientgui.py:209
+#: python/sourceclientgui.py:271
 msgid "Mount point"
 msgstr "Point de montage"
 
-#: python/sourceclientgui.py:209
+#: python/sourceclientgui.py:271
 msgid "Login name"
 msgstr "Nome utente"
 
-#: python/sourceclientgui.py:475
+#: python/sourceclientgui.py:272
+msgid "TLS"
+msgstr ""
+
+#: python/sourceclientgui.py:272
+#, fuzzy
+msgid "CA directory"
+msgstr "Sélectionner un dossier de média"
+
+#: python/sourceclientgui.py:272
+msgid "CA file"
+msgstr ""
+
+#: python/sourceclientgui.py:272
+msgid "Client cert"
+msgstr ""
+
+#: python/sourceclientgui.py:556
 msgid "Encoder Format Not Set/Compatible"
 msgstr "Format d'encodage non défini/incompatible"
 
 #. TC: Connection button text when no details have been entered.
-#: python/sourceclientgui.py:478
+#: python/sourceclientgui.py:559
 msgid "No Master Server Configured"
 msgstr "Aucun serveur maitre n'es configuré"
 
-#: python/sourceclientgui.py:680
+#: python/sourceclientgui.py:761
 msgid ""
 "A table of servers with which to connect. Only one master server can be "
 "added for the purpose of streaming. All other servers will appear below the "
@@ -3695,41 +3764,41 @@ msgstr ""
 "sous le serveur maitre pour les statistiques, qui peuvent être occultés par "
 "serveurs."
 
-#: python/sourceclientgui.py:696
+#: python/sourceclientgui.py:777
 msgid "Hostname/IP address"
 msgstr "Hôte/Adresse IP"
 
 #. TC: Mount point is a technical term in relation to icecast servers.
-#: python/sourceclientgui.py:709
+#: python/sourceclientgui.py:790
 msgid "Mount point       "
 msgstr "Point de montage  "
 
 #. TC: This is the listener count heading.
-#: python/sourceclientgui.py:718
+#: python/sourceclientgui.py:799
 msgid "Listeners"
 msgstr "Auditeurs"
 
-#: python/sourceclientgui.py:733
+#: python/sourceclientgui.py:814
 msgid "The sum total of listeners in this server tab."
 msgstr "Nombre total d'auditeurs pour cet onglet serveur"
 
-#: python/sourceclientgui.py:760
+#: python/sourceclientgui.py:841
 msgid "Never"
 msgstr "Jamais"
 
-#: python/sourceclientgui.py:763
+#: python/sourceclientgui.py:844
 msgid "Always"
 msgstr "Toujours"
 
-#: python/sourceclientgui.py:765
+#: python/sourceclientgui.py:846
 msgid "If connected"
 msgstr "Si connecté"
 
-#: python/sourceclientgui.py:1021
+#: python/sourceclientgui.py:1102
 msgid "Custom user agent string"
 msgstr "User agent personnalisé"
 
-#: python/sourceclientgui.py:1028
+#: python/sourceclientgui.py:1109
 msgid ""
 "Set this on the occasion that the server or its firewall specifically "
 "refuses to allow libshout based clients."
@@ -3737,16 +3806,16 @@ msgstr ""
 "A configurer au cas ou le serveur ou le pare-feux refuse spécialement "
 "d'autoriser les clients basés sur libshout."
 
-#: python/sourceclientgui.py:1033
+#: python/sourceclientgui.py:1114
 msgid "If the connection breaks reconnect to the server"
 msgstr "Si la connexion est interrompue, se reconnecter au sserveur"
 
 #. TC: Label for a comma separated list of delay times.
-#: python/sourceclientgui.py:1043
+#: python/sourceclientgui.py:1124
 msgid "Delay times"
 msgstr "Temps de délais"
 
-#: python/sourceclientgui.py:1047
+#: python/sourceclientgui.py:1128
 msgid ""
 "A comma separated list of delays in seconds between reconnection attempts. "
 "Note that bad values or values less than 5 will be interpreted as 5."
@@ -3755,45 +3824,45 @@ msgstr ""
 "tentatives de reconnexion. Notez que de mauvaises valeurs ou inférieures à 5 "
 "seront interprétées comme 5."
 
-#: python/sourceclientgui.py:1053
+#: python/sourceclientgui.py:1134
 msgid "Repeat the sequence of delays indefinitely."
 msgstr "Répéter la saquence de délais indéfiniment."
 
 #. TC: User specifies no dialog box to be shown.
-#: python/sourceclientgui.py:1056
+#: python/sourceclientgui.py:1137
 msgid "Quiet"
 msgstr "Muet"
 
-#: python/sourceclientgui.py:1058
+#: python/sourceclientgui.py:1139
 msgid "Keep the reconnection dialogue box hidden at all times."
 msgstr "Laisser la boite de reconnexion cachée tout le temps."
 
-#: python/sourceclientgui.py:1063
+#: python/sourceclientgui.py:1144
 msgid "The contingency plan upon the stream buffer becoming full is..."
 msgstr "Le plan d'action lorsque le tampon de streaming est plein est…"
 
-#: python/sourceclientgui.py:1072
+#: python/sourceclientgui.py:1153
 msgid "Discard audio data for as long as needed."
 msgstr "Laisser tomber les données audio pour la durée nécessaire."
 
-#: python/sourceclientgui.py:1074
+#: python/sourceclientgui.py:1155
 msgid "Assume the connection is beyond saving and reconnect."
 msgstr ""
 "Assumer que la connexion est interrompue, se déconnecter et se reconnecter."
 
-#: python/sourceclientgui.py:1357 python/format.py:1140
+#: python/sourceclientgui.py:1442 python/format.py:1227
 msgid "Shoutcast"
 msgstr "Shoucast"
 
-#: python/sourceclientgui.py:1394
+#: python/sourceclientgui.py:1483
 msgid "[Metadata suppressed]"
 msgstr "[Métadonnée supprimmée]"
 
-#: python/sourceclientgui.py:1473
+#: python/sourceclientgui.py:1562
 msgid "Individual Controls"
 msgstr "Contrôles individuels"
 
-#: python/sourceclientgui.py:1487
+#: python/sourceclientgui.py:1576
 msgid ""
 "Connect to or disconnect from the radio server. If the button does not stay "
 "in, the connection failed for some reason.\n"
@@ -3815,11 +3884,11 @@ msgstr ""
 "capable de sélectionner le format du flux."
 
 #. TC: Kick whoever is on the server.
-#: python/sourceclientgui.py:1504
+#: python/sourceclientgui.py:1593
 msgid "Kick Source"
 msgstr "Kick Source"
 
-#: python/sourceclientgui.py:1506
+#: python/sourceclientgui.py:1595
 msgid ""
 "This will disconnect whoever is currently using the server, freeing it up "
 "for personal use."
@@ -3827,58 +3896,58 @@ msgstr ""
 "Déconnectera tous ceux qui utilisent le serveurs, le libérant ainsi pour une "
 "utilisation privée."
 
-#: python/sourceclientgui.py:1516
+#: python/sourceclientgui.py:1605
 msgid "Timer:"
 msgstr "Timer :"
 
-#: python/sourceclientgui.py:1520
+#: python/sourceclientgui.py:1609
 msgid "From"
 msgstr "Depuis"
 
-#: python/sourceclientgui.py:1521
+#: python/sourceclientgui.py:1610
 msgid ""
 "Automatically connect to the server at a specific time in 24 hour format, "
 "midnight being 00:00"
 msgstr ""
 "Se connecter à une heure spécifique au format 24 heures, minuit étant 00:00"
 
-#: python/sourceclientgui.py:1526
+#: python/sourceclientgui.py:1615
 msgid "Kick"
 msgstr ""
 
-#: python/sourceclientgui.py:1528
+#: python/sourceclientgui.py:1617
 msgid "Disconnect whoever is using the server just before start time."
 msgstr "Déconnecter tous ceux qui utilisent le serveur avant de démarrer."
 
-#: python/sourceclientgui.py:1537
+#: python/sourceclientgui.py:1626
 msgid "To"
 msgstr ""
 
-#: python/sourceclientgui.py:1538
+#: python/sourceclientgui.py:1627
 msgid ""
 "Automatically disconnect from the server at a specific time in 24 hour "
 "format."
 msgstr ""
 "Se déconnecter automatiquement à une heure spécifique au format 24 heures"
 
-#: python/sourceclientgui.py:1541
+#: python/sourceclientgui.py:1630
 msgid "Fade out"
 msgstr "Fondu"
 
-#: python/sourceclientgui.py:1543
+#: python/sourceclientgui.py:1632
 msgid "Fade audio before disconnecting."
 msgstr "Fondu audio avant la déconnexion."
 
-#: python/sourceclientgui.py:1557
+#: python/sourceclientgui.py:1646
 msgid "At connect:"
 msgstr "A la connection :"
 
 #. TC: [x] Start player (*) 1 ( ) 2
-#: python/sourceclientgui.py:1561
+#: python/sourceclientgui.py:1650
 msgid "Start player"
 msgstr "Démarrer le lecteur"
 
-#: python/sourceclientgui.py:1566
+#: python/sourceclientgui.py:1655
 msgid ""
 "Have one of the players start automatically when a radio server connection "
 "is successfully made."
@@ -3887,11 +3956,11 @@ msgstr ""
 "connexion au serveur radio a réussie."
 
 #. TC: [x] Start recorder (*) 1 ( ) 2
-#: python/sourceclientgui.py:1574
+#: python/sourceclientgui.py:1663
 msgid "Start recorder"
 msgstr "Démarrer l'enregistreur"
 
-#: python/sourceclientgui.py:1581
+#: python/sourceclientgui.py:1670
 msgid ""
 "Have a recorder start automatically when a radio server connection is "
 "successfully made."
@@ -3899,21 +3968,21 @@ msgstr ""
 "Pour démarrer automatiquement un enregistreur lorsqu'une connexion au "
 "serveur radio est établie."
 
-#: python/sourceclientgui.py:1586 python/format.py:521 python/format.py:532
-#: python/format.py:542
+#: python/sourceclientgui.py:1675 python/format.py:530 python/format.py:541
+#: python/format.py:552 python/format.py:562
 msgid "Metadata"
 msgstr "Métadonnées"
 
-#: python/sourceclientgui.py:1596
+#: python/sourceclientgui.py:1685
 msgid "Format String"
 msgstr "Chaine de format"
 
 #. TC: Label for the metadata fallback value.
-#: python/sourceclientgui.py:1598
+#: python/sourceclientgui.py:1687
 msgid "Fallback"
 msgstr "Fallback"
 
-#: python/sourceclientgui.py:1612
+#: python/sourceclientgui.py:1701
 msgid ""
 "You can enter text to accompany the stream here and can specify placemarkers "
 "%r %t %l %s for the artist, title, album, and songname respectively, or "
@@ -3937,7 +4006,7 @@ msgstr ""
 "Lorsque ce champ est vide, les flux Ogg utiliseront les tags standards "
 "vorbis et les mp3 utiliseront %s."
 
-#: python/sourceclientgui.py:1620
+#: python/sourceclientgui.py:1709
 msgid ""
 "The fallback text to use when %r %t %l metadata is unavailable. See the "
 "format string to the left."
@@ -3945,7 +4014,7 @@ msgstr ""
 "Texte de remplacement lorsque les métadonnées %r %t %l ne sont pas "
 "disponibles. voir Chaine de format à gauche."
 
-#: python/sourceclientgui.py:1622
+#: python/sourceclientgui.py:1711
 msgid ""
 "Metadata normally updates only on song title changes but you can force an "
 "immediate update here."
@@ -3953,28 +4022,28 @@ msgstr ""
 "Les métadonnées se mettent à jour lorsque le titre change mais vous pouvez "
 "aussi forcer leur mise à jour immédiate ici."
 
-#: python/sourceclientgui.py:1641
+#: python/sourceclientgui.py:1730
 msgid "Configuration"
 msgstr "Configuration"
 
-#: python/sourceclientgui.py:1642
+#: python/sourceclientgui.py:1731
 msgid "The controls for configuring a stream."
 msgstr "Les contrôles pour configurer un flux."
 
-#: python/sourceclientgui.py:1650
+#: python/sourceclientgui.py:1739
 msgid "Connection"
 msgstr "Connexion"
 
-#: python/sourceclientgui.py:1655
+#: python/sourceclientgui.py:1744
 msgid "Format"
 msgstr "Format"
 
 #. TC: Tab heading. User can enter information about the stream here.
-#: python/sourceclientgui.py:1664
+#: python/sourceclientgui.py:1753
 msgid "Stream Info"
 msgstr "Informations sur le flux"
 
-#: python/sourceclientgui.py:1669
+#: python/sourceclientgui.py:1758
 msgid ""
 "Enter your DJ name or station name here. Typically this information will be "
 "displayed by listener clients."
@@ -3982,7 +4051,7 @@ msgstr ""
 "Saisissez le nom du DJ ou de la station. Typiquement cette information sera "
 "affichée par les clients des Auditeurs."
 
-#: python/sourceclientgui.py:1672
+#: python/sourceclientgui.py:1761
 msgid ""
 "The URL of your radio station. This and the rest of the information below is "
 "intended for display on a radio station listings website."
@@ -3990,19 +4059,19 @@ msgstr ""
 "L'URL de votre station. Ceci ainsi que les informations suivantes sont "
 "destinées à l'affichage sur un site listant les stations."
 
-#: python/sourceclientgui.py:1677
+#: python/sourceclientgui.py:1766
 msgid "A description of your radio station."
 msgstr "Description de votre station."
 
-#: python/sourceclientgui.py:1682
+#: python/sourceclientgui.py:1771
 msgid "The musical genres you are likely to play."
 msgstr "Genres musicaux offerts."
 
-#: python/sourceclientgui.py:1685
+#: python/sourceclientgui.py:1774
 msgid "Make Public"
 msgstr "Rendre publique"
 
-#: python/sourceclientgui.py:1686
+#: python/sourceclientgui.py:1775
 msgid ""
 "Publish your radio station on a listings website. The website in question "
 "will depend on how the server to which you connect is configured."
@@ -4010,15 +4079,15 @@ msgstr ""
 "Publier votre station sur le site de liste. Le site en question dépends de "
 "la configuration du serveur auquel vous vous connectez."
 
-#: python/sourceclientgui.py:1698
+#: python/sourceclientgui.py:1787
 msgid "Genre(s)"
 msgstr "Genere(s)"
 
-#: python/sourceclientgui.py:1709
+#: python/sourceclientgui.py:1798
 msgid "Master server admin password"
 msgstr "Mot de passe administrateur principal"
 
-#: python/sourceclientgui.py:1714
+#: python/sourceclientgui.py:1803
 msgid ""
 "This is for kick and stats on Shoutcast master servers that have an "
 "administrator password. For those that don't leave this blank (the source "
@@ -4028,55 +4097,55 @@ msgstr ""
 "d'administration. Pour ceux n'en possédant pas, laissez vide (le mot de "
 "passe de la source est suffisant pour eux)"
 
-#: python/sourceclientgui.py:1723
+#: python/sourceclientgui.py:1812
 msgid "Contact Details"
 msgstr "Détails de contact"
 
-#: python/sourceclientgui.py:1727
+#: python/sourceclientgui.py:1816
 msgid "Internet Relay Chat connection info goes here."
 msgstr "Les informations d'IRC viennent ici"
 
-#: python/sourceclientgui.py:1730
+#: python/sourceclientgui.py:1819
 msgid "Connection info for AOL instant messenger goes here."
 msgstr "Informations de connexion au messager AOL viennent ici."
 
-#: python/sourceclientgui.py:1733
+#: python/sourceclientgui.py:1822
 msgid "ICQ instant messenger connection info goes here."
 msgstr "Les informations concernant le messager ICQ viennent ici."
 
-#: python/sourceclientgui.py:1736
+#: python/sourceclientgui.py:1825
 msgid "IRC"
 msgstr "IRC"
 
-#: python/sourceclientgui.py:1737
+#: python/sourceclientgui.py:1826
 msgid "AIM"
 msgstr "AIM"
 
-#: python/sourceclientgui.py:1738
+#: python/sourceclientgui.py:1827
 msgid "ICQ"
 msgstr "ICQ"
 
-#: python/sourceclientgui.py:1748
+#: python/sourceclientgui.py:1837
 msgid "Use ISO-8859-1 encoding for fixed metadata"
 msgstr ""
 
-#: python/sourceclientgui.py:1750
+#: python/sourceclientgui.py:1839
 msgid "Enable this if sending to a Shoutcast V1 server."
 msgstr ""
 
-#: python/sourceclientgui.py:1754
+#: python/sourceclientgui.py:1843
 msgid "Extra Shoutcast"
 msgstr "Extra Shoutcast"
 
-#: python/sourceclientgui.py:1759
+#: python/sourceclientgui.py:1848
 msgid "Troubleshooting"
 msgstr "Résolution des problèmes"
 
-#: python/sourceclientgui.py:1890
+#: python/sourceclientgui.py:1979
 msgid "Stop recording."
 msgstr "Arrêter l'enregistrement"
 
-#: python/sourceclientgui.py:1892
+#: python/sourceclientgui.py:1981
 msgid ""
 "Start recording.\n"
 "\n"
@@ -4089,20 +4158,20 @@ msgstr ""
 "sont pas corrects ou que les permissions d'écriture ne sont pas obtenues "
 "pour le dossier de destination."
 
-#: python/sourceclientgui.py:1897
+#: python/sourceclientgui.py:1986
 msgid "Pause recording."
 msgstr "Enregistrement en pause"
 
-#: python/sourceclientgui.py:1934
+#: python/sourceclientgui.py:2023
 msgid "Recording time elapsed."
 msgstr "Temps d'enregistement écoulé."
 
 #. TC: Dialog title bar text.
-#: python/sourceclientgui.py:1988
+#: python/sourceclientgui.py:2077
 msgid "Select the folder to record to"
 msgstr "Sélection du dossier pour l'enregistrement"
 
-#: python/sourceclientgui.py:1999
+#: python/sourceclientgui.py:2088
 msgid ""
 "Choose which stream to record or the 24 bit FLAC option. If the stream isn't "
 "already running the encoder will be started automatically using whatever "
@@ -4112,7 +4181,7 @@ msgstr ""
 "pas en cours de lecture, l'encodage commencera automatiquement quels que "
 "soient les paramêtres actuellement configurés."
 
-#: python/sourceclientgui.py:2003
+#: python/sourceclientgui.py:2092
 msgid ""
 "Choose which directory you want to save to. All file names will be in a "
 "timestamp format and have either an oga, mp3, or flac file extension. "
@@ -4124,70 +4193,70 @@ msgstr ""
 "Important : vous devez sélectionner un dossier avec les permissions en "
 "écriture adéquates."
 
-#: python/sourceclientgui.py:2110
+#: python/sourceclientgui.py:2199
 msgid "Perform operations on multiple servers in unison."
 msgstr "Effecter des opérations simultanément sur plusieurs serveurs."
 
-#: python/sourceclientgui.py:2122
+#: python/sourceclientgui.py:2211
 msgid "Connect"
 msgstr "Connecter"
 
-#: python/sourceclientgui.py:2139
+#: python/sourceclientgui.py:2228
 msgid "Disconnect"
 msgstr "Déconnecter"
 
-#: python/sourceclientgui.py:2147
+#: python/sourceclientgui.py:2236
 msgid "Kick Sources"
 msgstr "Kick Sources"
 
-#: python/sourceclientgui.py:2156
+#: python/sourceclientgui.py:2245
 msgid "Metadata:"
 msgstr "Metadonnées :"
 
-#: python/sourceclientgui.py:2186
+#: python/sourceclientgui.py:2275
 msgid "Group Controls"
 msgstr "Contrôles de groupe"
 
-#: python/sourceclientgui.py:2692
+#: python/sourceclientgui.py:2782
 msgid "Recording Facility Unavailable"
 msgstr "Fonctionalités d'enregistrement non disponibles"
 
-#: python/sourceclientgui.py:2695
+#: python/sourceclientgui.py:2785
 msgid "No Recorders Are Correctly Configured"
 msgstr "Aucun enregistreur configuré correctement"
 
 #. TC: Recorder menu format string.
-#: python/sourceclientgui.py:2708
+#: python/sourceclientgui.py:2798
 #, python-brace-format
 msgid "{numericid} [{source}] > [{directory}]"
 msgstr "{numericid} [{source}] > [{directory}]"
 
-#: python/sourceclientgui.py:2710
+#: python/sourceclientgui.py:2800
 msgid "Misconfigured"
 msgstr "Mal configuré"
 
-#: python/sourceclientgui.py:2731
+#: python/sourceclientgui.py:2821
 msgid "Streaming Facility Unavailable"
 msgstr "Fonctionalités de flux non disponibles"
 
-#: python/sourceclientgui.py:2733
+#: python/sourceclientgui.py:2823
 msgid "No Streams Are Currently Configured"
 msgstr "Aucun flux actuellement configuré"
 
-#: python/sourceclientgui.py:2736
+#: python/sourceclientgui.py:2826
 msgid "Group Connect"
 msgstr "Connexion de groupe"
 
-#: python/sourceclientgui.py:2742
+#: python/sourceclientgui.py:2832
 msgid "Group Disconnect"
 msgstr "Déconnetion de groupe"
 
 #. TC: Window title bar text.
-#: python/sourceclientgui.py:2773
+#: python/sourceclientgui.py:2863
 msgid "IDJC Output"
 msgstr "Sortie IDJC"
 
-#: python/sourceclientgui.py:2789
+#: python/sourceclientgui.py:2879
 msgid ""
 "Each one of these tabs represents a separate stream recorder. The LED "
 "indicator colours represent the following: Clear=Stopped Yellow=Paused "
@@ -4196,7 +4265,7 @@ msgstr ""
 "Chacun de ces onglets représente un enregistreur de flux. La couleur de la "
 "LED indique : Eteinte=Arret Jaune=Pause Rouge=Enregistrement."
 
-#: python/sourceclientgui.py:2797
+#: python/sourceclientgui.py:2887
 msgid ""
 "Each one of these tabs represents a separate radio streamer. The LED "
 "indicator colours represent the following: Clear=No connection "
@@ -4207,11 +4276,11 @@ msgstr ""
 "indique : Eteinte=Aucune connexion Jaune=En attente d'autentification. "
 "Verte=Connecté. Clignottante=Perte de paquet du à une mauvaise connexion."
 
-#: python/sourceclientgui.py:2815
+#: python/sourceclientgui.py:2905
 msgid " Stream "
 msgstr " Flux "
 
-#: python/sourceclientgui.py:2850
+#: python/sourceclientgui.py:2940
 msgid ""
 "<span weight=\"bold\" size=\"12000\">A connection to a radio server has "
 "failed.</span>\n"
@@ -4223,7 +4292,7 @@ msgstr ""
 "\n"
 "Aucune tentative de reconnexion ne sera faite."
 
-#: python/sourceclientgui.py:2855
+#: python/sourceclientgui.py:2945
 msgid ""
 "<span weight=\"bold\" size=\"12000\">A scheduled stream disconnection has "
 "occurred.</span>"
@@ -4235,45 +4304,45 @@ msgstr ""
 msgid "Right click for suggested values."
 msgstr ""
 
-#: python/format.py:438
+#: python/format.py:439
 #, fuzzy
 msgid "Suggested Values"
 msgstr "Régler la valeur"
 
-#: python/format.py:494
+#: python/format.py:503
 #, fuzzy
 msgid "Pregain"
 msgstr "Lecteur Régler le gain"
 
-#: python/format.py:495 python/format.py:913
+#: python/format.py:504 python/format.py:933
 msgid "0 dB"
 msgstr ""
 
-#: python/format.py:496 python/format.py:914
+#: python/format.py:505 python/format.py:934
 msgid "-0.5 dB"
 msgstr ""
 
-#: python/format.py:497 python/format.py:915
+#: python/format.py:506 python/format.py:935
 msgid "-1.0 dB"
 msgstr ""
 
-#: python/format.py:498 python/format.py:916
+#: python/format.py:507 python/format.py:936
 msgid "-1.5 dB"
 msgstr ""
 
-#: python/format.py:499 python/format.py:917
+#: python/format.py:508 python/format.py:937
 msgid "-2.0 dB"
 msgstr ""
 
-#: python/format.py:500 python/format.py:918
+#: python/format.py:509 python/format.py:938
 msgid "-2.5 dB"
 msgstr ""
 
-#: python/format.py:501 python/format.py:919
+#: python/format.py:510 python/format.py:939
 msgid "-3.0 dB"
 msgstr ""
 
-#: python/format.py:502
+#: python/format.py:511
 msgid ""
 "A blanket gain reduction to promote audio quality when using long "
 "established lossy audio codecs like mp3 with loud audio material.\n"
@@ -4282,461 +4351,471 @@ msgid ""
 "in that case is 0 dB."
 msgstr ""
 
-#: python/format.py:510
+#: python/format.py:519
 #, fuzzy
 msgid "Resample Quality"
 msgstr "Qualité de rééchantillonnage du lecteur"
 
-#: python/format.py:511
+#: python/format.py:520
 msgid "Highest"
 msgstr "La plus élevée"
 
-#: python/format.py:513
+#: python/format.py:522
 msgid "Lowest"
 msgstr "La plus basse"
 
-#: python/format.py:514
+#: python/format.py:523
 msgid ""
 "All of these settings will provide adequate audio quality. The highest "
 "setting will preserve more of the original audio bandwidth at the expense of "
 "many CPU cycles."
 msgstr ""
 
-#: python/format.py:522 python/format.py:533 python/format.py:543
+#: python/format.py:531 python/format.py:553 python/format.py:563
 #, fuzzy
 msgid "Suppressed"
 msgstr "Pressé"
 
-#: python/format.py:523 python/format.py:534
+#: python/format.py:532 python/format.py:554
 msgid "UTF-8"
 msgstr ""
 
-#: python/format.py:524
+#: python/format.py:533
 msgid "Latin1 *"
 msgstr ""
 
-#: python/format.py:525
+#: python/format.py:534
 msgid ""
 "This affects the stream metadata only. Recordings will use UTF-8 for their "
 "metadata."
 msgstr ""
 
-#: python/format.py:535
+#: python/format.py:542
+#, fuzzy
+msgid "Unsupported"
+msgstr "Média supportaté"
+
+#: python/format.py:543 python/format.py:555
 msgid ""
 "Choose whether the stream will carry dynamic metadata. In the case of Ogg "
 "streams this is important as a great many players can't handle chained Ogg "
 "streams which result from the metadata updates."
 msgstr ""
 
-#: python/format.py:544
+#: python/format.py:564
 msgid "Latin1"
 msgstr ""
 
-#: python/format.py:545
+#: python/format.py:565
 msgid "Choose whether to send metadata. Recordings will use UTF-8 metadata."
 msgstr ""
 
-#: python/format.py:561 python/format.py:572 python/format.py:583
-#: python/format.py:690 python/format.py:818 python/format.py:888
-#: python/format.py:897 python/format.py:971 python/format.py:994
-#: python/format.py:1003
+#: python/format.py:581 python/format.py:592 python/format.py:603
+#: python/format.py:710 python/format.py:838 python/format.py:908
+#: python/format.py:917 python/format.py:991 python/format.py:1014
+#: python/format.py:1023 python/format.py:1141 python/format.py:1163
 msgid "Mode"
 msgstr ""
 
-#: python/format.py:562 python/format.py:573 python/format.py:584
-#: python/format.py:691 python/format.py:819 python/format.py:889
-#: python/format.py:898 python/format.py:972 python/format.py:995
-#: python/format.py:1004
+#: python/format.py:582 python/format.py:593 python/format.py:604
+#: python/format.py:711 python/format.py:839 python/format.py:909
+#: python/format.py:918 python/format.py:992 python/format.py:1015
+#: python/format.py:1024 python/format.py:1142 python/format.py:1164
 msgid "Mono"
 msgstr ""
 
-#: python/format.py:563 python/format.py:574 python/format.py:585
-#: python/format.py:692 python/format.py:820 python/format.py:890
-#: python/format.py:899 python/format.py:973 python/format.py:996
-#: python/format.py:1005
+#: python/format.py:583 python/format.py:594 python/format.py:605
+#: python/format.py:712 python/format.py:840 python/format.py:910
+#: python/format.py:919 python/format.py:993 python/format.py:1016
+#: python/format.py:1025 python/format.py:1143 python/format.py:1165
 #, fuzzy
 msgid "Stereo"
 msgstr "Panoramique Stéréo"
 
-#: python/format.py:564 python/format.py:575 python/format.py:586
-#: python/format.py:693
+#: python/format.py:584 python/format.py:595 python/format.py:606
+#: python/format.py:713
 msgid "Joint Stereo"
 msgstr ""
 
-#: python/format.py:565
+#: python/format.py:585
 msgid "Joint Stereo is a good choice on streams with low bitrates."
 msgstr ""
 
-#: python/format.py:576
+#: python/format.py:596
 msgid "Due to the high bitrate selected, this codec will only support stereo."
 msgstr ""
 
-#: python/format.py:587
+#: python/format.py:607
 msgid "Due to the low bitrate selected, this codec will only support mono."
 msgstr ""
 
-#: python/format.py:636 python/format.py:646 python/format.py:743
-#: python/format.py:753 python/format.py:763 python/format.py:869
-#: python/format.py:879 python/format.py:1032 python/format.py:1052
+#: python/format.py:656 python/format.py:666 python/format.py:763
+#: python/format.py:773 python/format.py:783 python/format.py:889
+#: python/format.py:899 python/format.py:1052 python/format.py:1072
+#: python/format.py:1132
 msgid "Samplerate"
 msgstr ""
 
 #. TC: Abbreviation of the word, standard.
-#: python/format.py:657 python/format.py:774
+#: python/format.py:677 python/format.py:794
 msgid "Std."
 msgstr ""
 
 #. TC: v stands for version.
-#: python/format.py:659 python/format.py:776
+#: python/format.py:679 python/format.py:796
 msgid "V 1"
 msgstr ""
 
 #. TC: v stands for version.
-#: python/format.py:661 python/format.py:778
+#: python/format.py:681 python/format.py:798
 msgid "V 2"
 msgstr ""
 
-#: python/format.py:662
+#: python/format.py:682
 msgid ""
 "MPEG2 introduced lower samplerate options and corresponding lower bitrates. "
 "Choose 2 if those are required."
 msgstr ""
 
-#: python/format.py:669 python/format.py:797
+#: python/format.py:689 python/format.py:817
 msgid "Quality"
 msgstr ""
 
-#: python/format.py:670
+#: python/format.py:690
 msgid "0 most"
 msgstr ""
 
 #. TC: * means is the recommended setting.
-#: python/format.py:673
+#: python/format.py:693
 msgid "2 *"
 msgstr ""
 
-#: python/format.py:675
+#: python/format.py:695
 msgid "Higher quality costs more in terms of CPU cycles."
 msgstr ""
 
-#: python/format.py:694
+#: python/format.py:714
 msgid "Joint Stereo is a good choice on streams with low bitrates"
 msgstr ""
 
 #. TC: v stands for version.
-#: python/format.py:780
+#: python/format.py:800
 msgid "V 2.5"
 msgstr ""
 
-#: python/format.py:787
+#: python/format.py:807
 msgid "Complexity"
 msgstr ""
 
-#: python/format.py:790
+#: python/format.py:810
 msgid "A quality setting that affects how heavily the CPU is used."
 msgstr ""
 
-#: python/format.py:800
+#: python/format.py:820
 msgid "The higher this setting, the higher the bitrate."
 msgstr ""
 
-#: python/format.py:807
+#: python/format.py:827
 msgid "Bandwidth"
 msgstr ""
 
-#: python/format.py:808
+#: python/format.py:828
 msgid "Ultrawide"
 msgstr ""
 
-#: python/format.py:809
+#: python/format.py:829
 msgid "Wide"
 msgstr ""
 
-#: python/format.py:810
+#: python/format.py:830
 msgid "Narrow"
 msgstr ""
 
-#: python/format.py:811
+#: python/format.py:831
 msgid "Essentially a samplerate setting."
 msgstr ""
 
-#: python/format.py:828
+#: python/format.py:848
 msgid "24 bit"
 msgstr ""
 
-#: python/format.py:829
+#: python/format.py:849
 msgid "20 bit"
 msgstr ""
 
-#: python/format.py:830
+#: python/format.py:850
 msgid "16 bit"
 msgstr ""
 
-#: python/format.py:831
+#: python/format.py:851
 msgid ""
 "24 bit records with the highest level of detail. If file size is a concern "
 "maybe FLAC is not the right codec."
 msgstr ""
 
-#: python/format.py:838 python/format.py:927
+#: python/format.py:858 python/format.py:947
 msgid "Variability"
 msgstr ""
 
-#: python/format.py:839
+#: python/format.py:859
 msgid "Constant"
 msgstr ""
 
-#: python/format.py:840
+#: python/format.py:860
 msgid "±10%"
 msgstr ""
 
-#: python/format.py:841
+#: python/format.py:861
 msgid "±20%"
 msgstr ""
 
-#: python/format.py:842
+#: python/format.py:862
 msgid "±30%"
 msgstr ""
 
-#: python/format.py:843
+#: python/format.py:863
 msgid "±40%"
 msgstr ""
 
-#: python/format.py:844
+#: python/format.py:864
 msgid "±50%"
 msgstr ""
 
-#: python/format.py:845
+#: python/format.py:865
 #, fuzzy
 msgid "This control is for enabling variable bitrate on Vorbis streams."
 msgstr "Les contrôles pour configurer un flux."
 
-#: python/format.py:906
+#: python/format.py:926
 #, fuzzy
 msgid "Postgain"
 msgstr "VoIP Régler le gain"
 
-#: python/format.py:907
+#: python/format.py:927
 msgid "3.0 dB"
 msgstr ""
 
-#: python/format.py:908
+#: python/format.py:928
 msgid "2.5 dB"
 msgstr ""
 
-#: python/format.py:909
+#: python/format.py:929
 msgid "2.0 dB"
 msgstr ""
 
-#: python/format.py:910
+#: python/format.py:930
 msgid "1.5 dB"
 msgstr ""
 
-#: python/format.py:911
+#: python/format.py:931
 msgid "1.0 dB"
 msgstr ""
 
-#: python/format.py:912
+#: python/format.py:932
 msgid "0.5 dB"
 msgstr ""
 
-#: python/format.py:920
+#: python/format.py:940
 msgid "A gain adjustment for the player to apply."
 msgstr ""
 
-#: python/format.py:928
+#: python/format.py:948
 msgid "CBR *"
 msgstr ""
 
-#: python/format.py:929
+#: python/format.py:949
 msgid "CVBR"
 msgstr ""
 
-#: python/format.py:930
+#: python/format.py:950
 msgid "VBR"
 msgstr ""
 
-#: python/format.py:931
+#: python/format.py:951
 msgid ""
 "Bitrate variability. Actual VBR operation may require a higher frame size."
 msgstr ""
 
-#: python/format.py:938
+#: python/format.py:958
 msgid "Frame Size"
 msgstr ""
 
-#: python/format.py:939
+#: python/format.py:959
 msgid "60 ms"
 msgstr ""
 
-#: python/format.py:940
+#: python/format.py:960
 msgid "40 ms"
 msgstr ""
 
-#: python/format.py:941
+#: python/format.py:961
 msgid "20 ms"
 msgstr ""
 
-#: python/format.py:942
+#: python/format.py:962
 msgid "A higher frame size may sound better on very low bitrates."
 msgstr ""
 
-#: python/format.py:949
+#: python/format.py:969
 msgid "CPU"
 msgstr ""
 
-#: python/format.py:952
+#: python/format.py:972
 msgid "The encoder complexity setting which affects CPU load."
 msgstr ""
 
-#: python/format.py:980 python/format.py:1083
+#: python/format.py:1000 python/format.py:1103 python/format.py:1172
 msgid "Codec"
 msgstr ""
 
-#: python/format.py:981
+#: python/format.py:1001 python/format.py:1174
 msgid "Vorbis"
 msgstr ""
 
-#: python/format.py:982
+#: python/format.py:1002
 msgid "FLAC"
 msgstr ""
 
-#: python/format.py:983
+#: python/format.py:1003
 msgid "Speex"
 msgstr ""
 
-#: python/format.py:984
+#: python/format.py:1004 python/format.py:1173
 msgid "Opus"
 msgstr ""
 
-#: python/format.py:987
+#: python/format.py:1007
 msgid "Codecs of the Ogg container."
 msgstr ""
 
-#: python/format.py:1033
+#: python/format.py:1053
 msgid "96000 Hz"
 msgstr ""
 
-#: python/format.py:1034
+#: python/format.py:1054
 msgid "88200 Hz"
 msgstr ""
 
-#: python/format.py:1035
+#: python/format.py:1055
 msgid "64000 Hz"
 msgstr ""
 
-#: python/format.py:1036 python/format.py:1053
+#: python/format.py:1056 python/format.py:1073
 msgid "48000 Hz"
 msgstr ""
 
-#: python/format.py:1037 python/format.py:1054
+#: python/format.py:1057 python/format.py:1074
 msgid "44100 Hz"
 msgstr ""
 
-#: python/format.py:1038
+#: python/format.py:1058
 msgid "32000 Hz"
 msgstr ""
 
-#: python/format.py:1039
+#: python/format.py:1059
 msgid "24000 Hz"
 msgstr ""
 
-#: python/format.py:1040
+#: python/format.py:1060
 msgid "22050 Hz"
 msgstr ""
 
-#: python/format.py:1041
+#: python/format.py:1061
 msgid "16000 Hz"
 msgstr ""
 
-#: python/format.py:1042
+#: python/format.py:1062
 msgid "12000 Hz"
 msgstr ""
 
-#: python/format.py:1043
+#: python/format.py:1063
 msgid "11025 Hz"
 msgstr ""
 
-#: python/format.py:1044
+#: python/format.py:1064
 msgid "8000 Hz"
 msgstr ""
 
-#: python/format.py:1045
+#: python/format.py:1065
 msgid "7350 Hz"
 msgstr ""
 
-#: python/format.py:1067
+#: python/format.py:1087
 msgid "The MP2 option requires IDJC be rebuilt against libtwolame."
 msgstr ""
 
-#: python/format.py:1070
+#: python/format.py:1090
 msgid "Enable the MP3 option by installing libmp3lame."
 msgstr ""
 
-#: python/format.py:1073
+#: python/format.py:1093
 msgid "The AAC options require IDJC be rebuilt against libav libraries."
 msgstr ""
 
-#: python/format.py:1076
+#: python/format.py:1096
 msgid ""
 "Specific AAC support not present in libavcodec. More info: idjc.sourceforge."
 "net."
 msgstr ""
 
-#: python/format.py:1078
+#: python/format.py:1098
 msgid ""
 "Specific AAC+ support not present in libavcodec. More info: idjc.sourceforge."
 "net."
 msgstr ""
 
-#: python/format.py:1081
+#: python/format.py:1101
 msgid "Codecs of the MPEG family."
 msgstr ""
 
-#: python/format.py:1084
+#: python/format.py:1104
 msgid "MP2"
 msgstr ""
 
-#: python/format.py:1085
+#: python/format.py:1105
 msgid "MP3"
 msgstr ""
 
-#: python/format.py:1086
+#: python/format.py:1106
 msgid "AAC"
 msgstr ""
 
-#: python/format.py:1087
+#: python/format.py:1107
 msgid "AAC+ v2"
 msgstr ""
 
 #. TC: Codec family e.g. Xiph/Ogg, MPEG etc.
-#: python/format.py:1099
+#: python/format.py:1185
 msgid "Family"
 msgstr ""
 
+#: python/format.py:1186
+msgid "WebM"
+msgstr ""
+
 #. TC: Xiph.org Ogg container format.
-#: python/format.py:1101
+#: python/format.py:1188
 msgid "Xiph/Ogg"
 msgstr ""
 
-#: python/format.py:1102
+#: python/format.py:1189
 msgid "MPEG"
 msgstr ""
 
-#: python/format.py:1103
+#: python/format.py:1190
 msgid "Codecs have been grouped by standards body and or container format."
 msgstr ""
 
-#: python/format.py:1128
+#: python/format.py:1215
 msgid "Capabilities"
 msgstr ""
 
-#: python/format.py:1140
+#: python/format.py:1227
 #, fuzzy
 msgid "Icecast"
 msgstr "Icecast 2 Maitre"
 
-#: python/format.py:1140
+#: python/format.py:1227
 #, fuzzy
 msgid "Recordable"
 msgstr "Enregistreur"
diff --git a/po/idjc.pot b/po/idjc.pot
index a266f64..f1991f3 100644
--- a/po/idjc.pot
+++ b/po/idjc.pot
@@ -6,9 +6,9 @@
 #, fuzzy
 msgid ""
 msgstr ""
-"Project-Id-Version: idjc 0.8.15\n"
+"Project-Id-Version: idjc 0.8.16\n"
 "Report-Msgid-Bugs-To: putidjcinthesubjectline at bethere.co.uk\n"
-"POT-Creation-Date: 2015-07-27 07:47+0100\n"
+"POT-Creation-Date: 2016-04-30 18:46+0100\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
@@ -454,28 +454,41 @@ msgstr ""
 msgid "New profile details"
 msgstr ""
 
-#. TC: profile dialog window title text.
-#: python/prelims/profiledialog.py:243
-msgid "IDJC Profile Manager"
+#. TC: data entry dialog label text.
+#: python/prelims/profiledialog.py:125
+msgid "Profile name"
 msgstr ""
 
-#: python/prelims/profiledialog.py:277
-msgid "Profile"
+#. TC: data entry dialog label text.
+#: python/prelims/profiledialog.py:127 python/maingui.py:681
+msgid "Icon"
 msgstr ""
 
+#. TC: data entry dialog label text.
 #. TC: column heading. The profile nicknames.
 #. TC: IRC nickname data entry label.
-#: python/prelims/profiledialog.py:285 python/irc.py:452
+#: python/prelims/profiledialog.py:129 python/prelims/profiledialog.py:285
+#: python/irc.py:452
 msgid "Nickname"
 msgstr ""
 
+#. TC: data entry dialog label text.
 #. TC: column heading.
 #. TC: Station description.
-#: python/prelims/profiledialog.py:288 python/irc.py:96
-#: python/playergui.py:307 python/sourceclientgui.py:1697
+#: python/prelims/profiledialog.py:131 python/prelims/profiledialog.py:288
+#: python/irc.py:96 python/playergui.py:334 python/sourceclientgui.py:1786
 msgid "Description"
 msgstr ""
 
+#. TC: profile dialog window title text.
+#: python/prelims/profiledialog.py:243
+msgid "IDJC Profile Manager"
+msgstr ""
+
+#: python/prelims/profiledialog.py:277
+msgid "Profile"
+msgstr ""
+
 #. TC: column heading. The time a particular profile has been running.
 #: python/prelims/profiledialog.py:292
 msgid "Up-time"
@@ -521,12 +534,12 @@ msgstr ""
 msgid "_Retry Now"
 msgstr ""
 
-#: python/__init__.py.in.in:101
+#: python/__init__.py.in.in:102
 #, python-format
 msgid "Copyright 2005-%s Stephen Fairchild and others."
 msgstr ""
 
-#: python/__init__.py.in.in:103
+#: python/__init__.py.in.in:104
 msgid "Released under the GNU General Public License V2.0+."
 msgstr ""
 
@@ -557,30 +570,30 @@ msgstr ""
 
 #. TC: Track artist.
 #: python/irc.py:95 python/mutagentagger.py:375 python/songdb.py:902
-#: python/songdb.py:1290 python/sourceclientgui.py:94
+#: python/songdb.py:1290 python/sourceclientgui.py:99
 msgid "Artist"
 msgstr ""
 
 #: python/irc.py:95 python/mutagentagger.py:375 python/songdb.py:1292
-#: python/sourceclientgui.py:94
+#: python/sourceclientgui.py:99
 msgid "Title"
 msgstr ""
 
 #: python/irc.py:95 python/mutagentagger.py:376 python/songdb.py:1291
-#: python/sourceclientgui.py:94
+#: python/sourceclientgui.py:99
 msgid "Album"
 msgstr ""
 
-#: python/irc.py:95 python/sourceclientgui.py:95
+#: python/irc.py:95 python/sourceclientgui.py:100
 msgid "Song name"
 msgstr ""
 
 #. TC: The DJ or Stream name.
-#: python/irc.py:96 python/sourceclientgui.py:1694
+#: python/irc.py:96 python/sourceclientgui.py:1783
 msgid "DJ name"
 msgstr ""
 
-#: python/irc.py:96 python/sourceclientgui.py:1695
+#: python/irc.py:96 python/sourceclientgui.py:1784
 msgid "Listen URL"
 msgstr ""
 
@@ -635,13 +648,13 @@ msgid "Network"
 msgstr ""
 
 #. TC: label for hostname entry.
-#: python/irc.py:446 python/sourceclientgui.py:208
+#: python/irc.py:446 python/sourceclientgui.py:270
 msgid "Hostname"
 msgstr ""
 
 #. TC: TCP/IP port number label.
 #. TC: TCP port number.
-#: python/irc.py:448 python/sourceclientgui.py:704
+#: python/irc.py:448 python/sourceclientgui.py:785
 msgid "Port"
 msgstr ""
 
@@ -649,7 +662,7 @@ msgstr ""
 msgid "User name"
 msgstr ""
 
-#: python/irc.py:450 python/songdb.py:343 python/sourceclientgui.py:209
+#: python/irc.py:450 python/songdb.py:343 python/sourceclientgui.py:271
 msgid "Password"
 msgstr ""
 
@@ -830,11 +843,11 @@ msgid "Stop"
 msgstr ""
 
 #. TC: Column heading, whether to play.
-#: python/jingles.py:114 python/playergui.py:299
+#: python/jingles.py:114 python/playergui.py:326
 msgid "Play"
 msgstr ""
 
-#: python/jingles.py:123 python/sourceclientgui.py:1051
+#: python/jingles.py:123 python/sourceclientgui.py:1132
 msgid "Repeat"
 msgstr ""
 
@@ -842,7 +855,7 @@ msgstr ""
 msgid "Configure"
 msgstr ""
 
-#: python/jingles.py:327 python/playergui.py:4135
+#: python/jingles.py:327 python/playergui.py:4194
 msgid "Supported media"
 msgstr ""
 
@@ -888,7 +901,7 @@ msgstr ""
 msgid "Effects %d"
 msgstr ""
 
-#: python/jingles.py:599 python/maingui.py:189
+#: python/jingles.py:599 python/maingui.py:190
 msgid "Background Tracks"
 msgstr ""
 
@@ -896,99 +909,99 @@ msgstr ""
 msgid "Background Tracks volume."
 msgstr ""
 
-#: python/maingui.py:93
+#: python/maingui.py:94
 msgid "Show a JACK freewheel control on the main panel"
 msgstr ""
 
-#: python/maingui.py:95
+#: python/maingui.py:96
 msgid "Toggle JACK freewheel mode."
 msgstr ""
 
-#: python/maingui.py:168
+#: python/maingui.py:169
 msgid "File"
 msgstr ""
 
-#: python/maingui.py:168 python/preferences.py:1130
+#: python/maingui.py:169 python/preferences.py:1130
 msgid "View"
 msgstr ""
 
-#: python/maingui.py:169
+#: python/maingui.py:170
 msgid "JACK Ports"
 msgstr ""
 
-#: python/maingui.py:169
+#: python/maingui.py:170
 msgid "Help"
 msgstr ""
 
-#: python/maingui.py:171 python/maingui.py:3689
+#: python/maingui.py:172 python/maingui.py:3688
 msgid "Streams"
 msgstr ""
 
-#: python/maingui.py:172
+#: python/maingui.py:173
 msgid "Recorders"
 msgstr ""
 
-#: python/maingui.py:185 python/maingui.py:224
+#: python/maingui.py:186 python/maingui.py:225
 msgid "Output"
 msgstr ""
 
-#: python/maingui.py:185
+#: python/maingui.py:186
 msgid "Preferences"
 msgstr ""
 
-#: python/maingui.py:185
+#: python/maingui.py:186
 msgid "Profiles"
 msgstr ""
 
-#: python/maingui.py:188 python/songdb.py:409
+#: python/maingui.py:189 python/songdb.py:409
 msgid "Music Database"
 msgstr ""
 
-#: python/maingui.py:188
+#: python/maingui.py:189
 msgid "Channel Meters"
 msgstr ""
 
-#: python/maingui.py:188
+#: python/maingui.py:189
 msgid "Output Meters"
 msgstr ""
 
-#: python/maingui.py:189
+#: python/maingui.py:190
 msgid "Tabbed Area"
 msgstr ""
 
-#: python/maingui.py:189
+#: python/maingui.py:190
 msgid "Button Bar"
 msgstr ""
 
-#: python/maingui.py:223 python/preferences.py:1485
+#: python/maingui.py:224 python/preferences.py:1485
 msgid "Channels"
 msgstr ""
 
-#: python/maingui.py:223
+#: python/maingui.py:224
 msgid "Players"
 msgstr ""
 
-#: python/maingui.py:224
+#: python/maingui.py:225
 msgid "VoIP"
 msgstr ""
 
-#: python/maingui.py:224 python/maingui.py:3129
+#: python/maingui.py:225 python/maingui.py:3128
 msgid "DSP"
 msgstr ""
 
-#: python/maingui.py:224
+#: python/maingui.py:225
 msgid "Mix"
 msgstr ""
 
-#: python/maingui.py:224
+#: python/maingui.py:225
 msgid "Misc"
 msgstr ""
 
-#: python/maingui.py:269
+#: python/maingui.py:270
 msgid "Reset"
 msgstr ""
 
-#: python/maingui.py:272
+#: python/maingui.py:273
 msgid "Reset the JACK port connections to the default settings."
 msgstr ""
 
@@ -1001,171 +1014,167 @@ msgid ""
 "and replaced with defaults."
 msgstr ""
 
-#: python/maingui.py:321
+#: python/maingui.py:320
 msgid "No compatible ports available."
 msgstr ""
 
-#: python/maingui.py:364
+#: python/maingui.py:363
 #, python-brace-format
 msgid "{0} profile={1}:{2} settings saved."
 msgstr ""
 
-#: python/maingui.py:367
+#: python/maingui.py:366
 #, python-brace-format
 msgid "{0} session={1}:{2} settings saved."
 msgstr ""
 
-#: python/maingui.py:671
+#: python/maingui.py:670
 msgid "Text"
 msgstr ""
 
-#: python/maingui.py:674
+#: python/maingui.py:673
 msgid "The opener button's text."
 msgstr ""
 
-#: python/maingui.py:682
-msgid "Icon"
-msgstr ""
-
-#: python/maingui.py:690
+#: python/maingui.py:689
 msgid "The opener button's icon."
 msgstr ""
 
-#: python/maingui.py:698
+#: python/maingui.py:697
 msgid ""
 "The headroom is the amount by which to reduce player volume when this opener "
 "is active. Note that the actual amount will be the largest value of all the "
 "currently open buttons."
 msgstr ""
 
-#: python/maingui.py:703
+#: python/maingui.py:702
 msgid "The amount of headroom required (dB)"
 msgstr ""
 
-#: python/maingui.py:712
+#: python/maingui.py:711
 msgid "This button will flash as a reminder to close"
 msgstr ""
 
-#: python/maingui.py:713
+#: python/maingui.py:712
 msgid ""
 "After a number of seconds where a main player is active this button's status "
 "indicator will start to flash and will continue to do so until the button is "
 "closed or the player stops."
 msgstr ""
 
-#: python/maingui.py:721
+#: python/maingui.py:720
 msgid "This button is to be treated as a microphone opener"
 msgstr ""
 
-#: python/maingui.py:723
+#: python/maingui.py:722
 msgid ""
 "The button will be grouped with the other microphone opener buttons. It will "
 "be affected by signals to close microphone buttons. Channels associated with "
 "this button will be mixed differently when using the VoIP modes."
 msgstr ""
 
-#: python/maingui.py:732
+#: python/maingui.py:731
 msgid "This button will automatically cancel JACK freewheel mode"
 msgstr ""
 
-#: python/maingui.py:734
+#: python/maingui.py:733
 msgid ""
 "This should be set for all buttons that control input from a live sound "
 "source or device."
 msgstr ""
 
-#: python/maingui.py:737
+#: python/maingui.py:736
 msgid "Button Open Triggers"
 msgstr ""
 
-#: python/maingui.py:744
+#: python/maingui.py:743
 msgid "Playlist advance button"
 msgstr ""
 
-#: python/maingui.py:745 python/maingui.py:746
+#: python/maingui.py:744 python/maingui.py:745
 #, python-format
 msgid "'%s' control"
 msgstr ""
 
 #. TC: Insert playlist control to stop the player.
-#: python/maingui.py:745 python/playergui.py:4393
+#: python/maingui.py:744 python/playergui.py:4457
 msgid "Player Stop"
 msgstr ""
 
 #. TC: Insert playlist control to stop the player.
-#: python/maingui.py:746 python/playergui.py:4400
+#: python/maingui.py:745 python/playergui.py:4464
 msgid "Player Stop 2"
 msgstr ""
 
-#: python/maingui.py:747
+#: python/maingui.py:746
 msgid "Announcements"
 msgstr ""
 
-#: python/maingui.py:759
+#: python/maingui.py:758
 msgid "When opened close these other buttons"
 msgstr ""
 
-#: python/maingui.py:770
+#: python/maingui.py:769
 msgid "Shell Command"
 msgstr ""
 
-#: python/maingui.py:771
+#: python/maingui.py:770
 msgid ""
 "Mostly useful issuing 'amixer' commands, in particular for setting capture."
 msgstr ""
 
-#: python/maingui.py:791
+#: python/maingui.py:790
 msgid "On open"
 msgstr ""
 
-#: python/maingui.py:792
+#: python/maingui.py:791
 msgid "On close"
 msgstr ""
 
-#: python/maingui.py:836
+#: python/maingui.py:835
 msgid "Main Panel Opener Buttons"
 msgstr ""
 
-#: python/maingui.py:848
+#: python/maingui.py:847
 msgid "Indicate button numbers and associated channel numbers"
 msgstr ""
 
-#: python/maingui.py:850
+#: python/maingui.py:849
 msgid "A useful feature to have switched on while allocating channel openers."
 msgstr ""
 
-#: python/maingui.py:856
+#: python/maingui.py:855
 msgid "Status Indicator Appearance"
 msgstr ""
 
-#: python/maingui.py:859
+#: python/maingui.py:858
 msgid ""
 "Each opener button has two vertical bars at the side to make the button "
 "state more apparent. These settings control their appearance."
 msgstr ""
 
-#: python/maingui.py:868 python/format.py:827
+#: python/maingui.py:867 python/format.py:847
 msgid "Width"
 msgstr ""
 
-#: python/maingui.py:875
+#: python/maingui.py:874
 msgid "Opened"
 msgstr ""
 
-#: python/maingui.py:879 python/preferences.py:503 python/preferences.py:505
+#: python/maingui.py:878 python/preferences.py:503 python/preferences.py:505
 msgid "Closed"
 msgstr ""
 
-#: python/maingui.py:884
+#: python/maingui.py:883
 msgid "Remind"
 msgstr ""
 
 #. TC: A placeholder text for when there are no opener buttons.
-#: python/maingui.py:1065
+#: python/maingui.py:1064
 msgid "No Channel Opener Buttons"
 msgstr ""
 
-#: python/maingui.py:1354
+#: python/maingui.py:1353
 msgid ""
 "This indicates the state of the various streams. Flashing means stream "
 "packets are being discarded because of network congestion. Partial red means "
@@ -1173,96 +1182,96 @@ msgid ""
 "the server. Green means everything is okay."
 msgstr ""
 
-#: python/maingui.py:1377
+#: python/maingui.py:1376
 msgid "The combined total number of listeners in all server tabs."
 msgstr ""
 
 #. TC: Record as in, to make a recording.
-#: python/maingui.py:1825 python/sourceclientgui.py:2784
+#: python/maingui.py:1824 python/sourceclientgui.py:2874
 msgid "Record"
 msgstr ""
 
-#: python/maingui.py:2647
+#: python/maingui.py:2646
 msgid "Confirmation to quit IDJC is required."
 msgstr ""
 
-#: python/maingui.py:2651
+#: python/maingui.py:2650
 msgid "All active recordings and radio streams will terminate."
 msgstr ""
 
-#: python/maingui.py:2653
+#: python/maingui.py:2652
 msgid "All of the active radio streams will terminate."
 msgstr ""
 
-#: python/maingui.py:2655
+#: python/maingui.py:2654
 msgid "All active recordings will cease."
 msgstr ""
 
 #. TC: Popup menu item, wipes away the tracks played history text.
-#: python/maingui.py:2921 python/maingui.py:3353
+#: python/maingui.py:2920 python/maingui.py:3352
 msgid "Remove Contents"
 msgstr ""
 
-#: python/maingui.py:3076
+#: python/maingui.py:3075
 msgid "Renameable Labels"
 msgstr ""
 
-#: python/maingui.py:3100
+#: python/maingui.py:3099
 msgid "Main Players"
 msgstr ""
 
-#: python/maingui.py:3153
+#: python/maingui.py:3152
 msgid "Mix voice over IP audio to the output stream."
 msgstr ""
 
-#: python/maingui.py:3166
+#: python/maingui.py:3165
 msgid "Mix voice over IP audio to the DJ only."
 msgstr ""
 
-#: python/maingui.py:3193
+#: python/maingui.py:3192
 msgid ""
 "This button steps through the active playlist, pausing between tracks. The "
 "active playlist is defined by the placement of the crossfader."
 msgstr ""
 
-#: python/maingui.py:3238 python/preferences.py:873
+#: python/maingui.py:3237 python/preferences.py:873
 msgid "The volume control shared by both music players."
 msgstr ""
 
-#: python/maingui.py:3249
+#: python/maingui.py:3248
 msgid "The volume control for the right music player."
 msgstr ""
 
-#: python/maingui.py:3277
+#: python/maingui.py:3276
 msgid "VoIP level adjustment. 0dB gain is at the mid point."
 msgstr ""
 
-#: python/maingui.py:3300
+#: python/maingui.py:3299
 msgid "The stream volume level to send to the voice over IP connection."
 msgstr ""
 
-#: python/maingui.py:3327 python/preferences.py:1413
+#: python/maingui.py:3326 python/preferences.py:1413
 msgid "Tracks Played"
 msgstr ""
 
-#: python/maingui.py:3398 python/maingui.py:3400 python/maingui.py:3424
+#: python/maingui.py:3397 python/maingui.py:3399 python/maingui.py:3423
 msgid "Monitor Mix"
 msgstr ""
 
-#: python/maingui.py:3407 python/maingui.py:3424 python/playergui.py:4334
+#: python/maingui.py:3406 python/maingui.py:3423 python/playergui.py:4398
 msgid "DJ"
 msgstr ""
 
 #. TC: binding editor, action pane, first row, toplevel menu.
-#: python/maingui.py:3410 python/maingui.py:3424 python/midicontrols.py:155
-#: python/midicontrols.py:1507 python/playergui.py:4326
-#: python/sourceclientgui.py:2792
+#: python/maingui.py:3409 python/maingui.py:3423 python/midicontrols.py:155
+#: python/midicontrols.py:1507 python/playergui.py:4390
+#: python/sourceclientgui.py:2882
 msgid "Stream"
 msgstr ""
 
 #. TC: Context {0}, {1}, {2} = Monitor Mix, Stream, DJ
 #. TC: Or whatever they become translated to.
-#: python/maingui.py:3420
+#: python/maingui.py:3419
 #, python-brace-format
 msgid ""
 "In IDJC there are are two audio paths and this '{0}' control toggles between "
@@ -1272,82 +1281,82 @@ msgid ""
 msgstr ""
 
 #. TC: Dropdown box title text widget.
-#: python/maingui.py:3433 python/maingui.py:3435
+#: python/maingui.py:3432 python/maingui.py:3434
 msgid "Metadata Source"
 msgstr ""
 
 #. TC: The chosen source of track metadata.
-#: python/maingui.py:3441 python/playergui.py:4044
+#: python/maingui.py:3440 python/playergui.py:4103
 msgid "Playlist 1"
 msgstr ""
 
 #. TC: The chosen source of track metadata.
-#: python/maingui.py:3443 python/playergui.py:4045
+#: python/maingui.py:3442 python/playergui.py:4104
 msgid "Playlist 2"
 msgstr ""
 
 #. TC: The chosen source of track metadata.
-#: python/maingui.py:3445 python/songdb.py:909 python/songdb.py:1293
+#: python/maingui.py:3444 python/songdb.py:909 python/songdb.py:1293
 msgid "Last Played"
 msgstr ""
 
 #. TC: The chosen source of track metadata.
-#: python/maingui.py:3447 python/maingui.py:3484 python/maingui.py:3486
+#: python/maingui.py:3446 python/maingui.py:3483 python/maingui.py:3485
 msgid "Crossfader"
 msgstr ""
 
 #. TC: The chosen source of track metadata. In this case no metadata.
 #. TC: Fade time is zero. No fade, none.
-#: python/maingui.py:3449 python/playergui.py:4309
+#: python/maingui.py:3448 python/playergui.py:4373
 msgid "None"
 msgstr ""
 
 #. TC: The chosen source of track metadata. In this case no metadata.
-#: python/maingui.py:3451
+#: python/maingui.py:3450 python/playergui.py:4104
 msgid "Playlist 3"
 msgstr ""
 
-#: python/maingui.py:3456
+#: python/maingui.py:3455
 msgid "Select the origin for the playing track metadata on the stream."
 msgstr ""
 
 #. TC: Abbreviation of left.
-#: python/maingui.py:3466 python/maingui.py:3468
+#: python/maingui.py:3465 python/maingui.py:3467
 msgid "L"
 msgstr ""
 
-#: python/maingui.py:3478
+#: python/maingui.py:3477
 msgid "Move the crossfader fully left."
 msgstr ""
 
-#: python/maingui.py:3498
+#: python/maingui.py:3497
 msgid "The crossfader."
 msgstr ""
 
 #. TC: Abbreviation of right.
-#: python/maingui.py:3502 python/maingui.py:3504
+#: python/maingui.py:3501 python/maingui.py:3503
 msgid "R"
 msgstr ""
 
-#: python/maingui.py:3514
+#: python/maingui.py:3513
 msgid "Move the crossfader fully right."
 msgstr ""
 
 #. TC: Describes a mid point.
-#: python/maingui.py:3523 python/maingui.py:3525
+#: python/maingui.py:3522 python/maingui.py:3524
 msgid "Middle"
 msgstr ""
 
-#: python/maingui.py:3542 python/maingui.py:3549
+#: python/maingui.py:3541 python/maingui.py:3548
 msgid "Move the crossfader to the middle of its range of travel."
 msgstr ""
 
 #. TC: The attenuation response curve of the crossfader. User selectable.
-#: python/maingui.py:3554 python/maingui.py:3556
+#: python/maingui.py:3553 python/maingui.py:3555
 msgid "Response"
 msgstr ""
 
-#: python/maingui.py:3578
+#: python/maingui.py:3577
 msgid ""
 "This selects the response curve of the crossfader.\n"
 "\n"
@@ -1355,11 +1364,11 @@ msgid ""
 msgstr ""
 
 #. TC: Duration in seconds.
-#: python/maingui.py:3592 python/maingui.py:3594
+#: python/maingui.py:3591 python/maingui.py:3593
 msgid "Time"
 msgstr ""
 
-#: python/maingui.py:3611
+#: python/maingui.py:3610
 msgid ""
 "The time in seconds that the crossfader will take to automatically pass "
 "across when the button to the right is clicked."
@@ -1367,39 +1376,39 @@ msgstr ""
 
 #. TC: The crossfader pass-across button text.
 #. TC: The actual button appears as [<-->] with this text above it.
-#: python/maingui.py:3620 python/maingui.py:3622
+#: python/maingui.py:3619 python/maingui.py:3621
 msgid "Pass"
 msgstr ""
 
-#: python/maingui.py:3635
+#: python/maingui.py:3634
 msgid ""
 "This button causes the crossfader to move to the opposite side at a speed "
 "determined by the speed selector to the left."
 msgstr ""
 
-#: python/maingui.py:3678
+#: python/maingui.py:3677
 msgid "Peak"
 msgstr ""
 
-#: python/maingui.py:3681
+#: python/maingui.py:3680
 msgid "A peak hold meter indicating the signal strength of the stream audio."
 msgstr ""
 
 #. TC: This text appears above the stream mix VU meter.
-#: python/maingui.py:3703
+#: python/maingui.py:3702
 msgid "VU"
 msgstr ""
 
-#: python/maingui.py:3707
+#: python/maingui.py:3706
 msgid "A VU meter for the stream audio."
 msgstr ""
 
 #. TC: Appears above the mic meters as a label followed by a number.
-#: python/maingui.py:3710
+#: python/maingui.py:3709
 msgid "Ch"
 msgstr ""
 
-#: python/maingui.py:3737
+#: python/maingui.py:3736
 msgid ""
 "A peak hold meter indicating the microphone signal strength and a meter "
 "indicating attenuation levels in the microphone signal processing system. "
@@ -1429,7 +1438,7 @@ msgstr ""
 
 #. TC: Control method. Please keep it as Target:Action.
 #. TC: Playlist control.
-#: python/midicontrols.py:56 python/playergui.py:3798
+#: python/midicontrols.py:56 python/playergui.py:3857
 msgid "Player stop"
 msgstr ""
 
@@ -2071,14 +2080,14 @@ msgstr ""
 
 #. TC: Track playback time.
 #. TC: Playback time.
-#: python/songdb.py:908 python/songdb.py:1296 python/playergui.py:313
+#: python/songdb.py:908 python/songdb.py:1296 python/playergui.py:340
 msgid "Duration"
 msgstr ""
 
-#: python/songdb.py:910 python/songdb.py:1297 python/format.py:594
-#: python/format.py:615 python/format.py:701 python/format.py:722
-#: python/format.py:857 python/format.py:962 python/format.py:1012
-#: python/format.py:1022
+#: python/songdb.py:910 python/songdb.py:1297 python/format.py:614
+#: python/format.py:635 python/format.py:721 python/format.py:742
+#: python/format.py:877 python/format.py:982 python/format.py:1032
+#: python/format.py:1042 python/format.py:1120 python/format.py:1153
 msgid "Bitrate"
 msgstr ""
 
@@ -2200,318 +2209,324 @@ msgstr ""
 msgid "Found Prokyon 3 schema"
 msgstr ""
 
-#: python/playergui.py:236
+#: python/playergui.py:104
+msgid "Click to stop adding tracks!"
+msgstr ""
+
+#: python/playergui.py:263
 msgid "Cuesheet Playlist"
 msgstr ""
 
 #. TC: Column heading, the track number.
-#: python/playergui.py:302
+#: python/playergui.py:329
 msgid "Trk"
 msgstr ""
 
 #. TC: Column heading, the index number.
-#: python/playergui.py:305
+#: python/playergui.py:332
 msgid "Ind"
 msgstr ""
 
-#: python/playergui.py:414
+#: python/playergui.py:441
 msgid "External Playlist"
 msgstr ""
 
 #. TC: Button text to activate an external playlist.
-#: python/playergui.py:425
+#: python/playergui.py:452
 msgid "Active"
 msgstr ""
 
-#: python/playergui.py:435
+#: python/playergui.py:462
 msgid "Choose a playlist file"
 msgstr ""
 
-#: python/playergui.py:440
+#: python/playergui.py:467
 msgid "Choose a media directory"
 msgstr ""
 
-#: python/playergui.py:453
+#: python/playergui.py:480
 msgid "Choose a playlist file."
 msgstr ""
 
-#: python/playergui.py:455
+#: python/playergui.py:482
 msgid "Choose a folder/directory of music."
 msgstr ""
 
-#: python/playergui.py:522
+#: python/playergui.py:549
 msgid "Create a new announcement"
 msgstr ""
 
-#: python/playergui.py:525
+#: python/playergui.py:552
 msgid "Modify or Delete this announcement"
 msgstr ""
 
 #. TC: Embed a DJ announcement text into the playlist.
-#: python/playergui.py:528 python/playergui.py:4430
+#: python/playergui.py:555 python/playergui.py:4494
 msgid "Announcement"
 msgstr ""
 
 #. TC: The time format as minutes and seconds.
-#: python/playergui.py:556
+#: python/playergui.py:583
 msgid "mm:ss"
 msgstr ""
 
 #. TC: Alongside the name of the next track.
-#: python/playergui.py:609
+#: python/playergui.py:636
 msgid "Next track"
 msgstr ""
 
-#: python/playergui.py:934
+#: python/playergui.py:961
 msgid "By Extension"
 msgstr ""
 
-#: python/playergui.py:934
+#: python/playergui.py:961
 msgid "M3U playlist"
 msgstr ""
 
-#: python/playergui.py:934
+#: python/playergui.py:961
 msgid "M3U8 playlist"
 msgstr ""
 
-#: python/playergui.py:935
+#: python/playergui.py:962
 msgid "XSPF playlist"
 msgstr ""
 
-#: python/playergui.py:935
+#: python/playergui.py:962
 msgid "PLS playlist"
 msgstr ""
 
-#: python/playergui.py:1007
+#: python/playergui.py:1034
 #, python-format
 msgid "%d Audio Tracks"
 msgstr ""
 
 #. TC: Missing metadata text.
-#: python/playergui.py:1017
+#: python/playergui.py:1044
 msgid "Unknown"
 msgstr ""
 
-#: python/playergui.py:1021
+#: python/playergui.py:1048
 msgid "(Cue sheet)"
 msgstr ""
 
-#: python/playergui.py:1058
+#: python/playergui.py:1085
 msgid "Bad Tag"
 msgstr ""
 
-#: python/playergui.py:1888 python/playergui.py:4268
+#: python/playergui.py:1921 python/playergui.py:4333
 msgid "Manual"
 msgstr ""
 
-#: python/playergui.py:1892 python/playergui.py:4265
+#. TC: playlist modes
+#: python/playergui.py:1925 python/playergui.py:4332
 msgid "Play All"
 msgstr ""
 
-#: python/playergui.py:1900 python/playergui.py:1909 python/playergui.py:4266
+#: python/playergui.py:1933 python/playergui.py:1942 python/playergui.py:4332
 msgid "Loop All"
 msgstr ""
 
-#: python/playergui.py:1900 python/playergui.py:4269
+#: python/playergui.py:1933 python/playergui.py:4333
 msgid "Cue Up"
 msgstr ""
 
-#: python/playergui.py:1901 python/playergui.py:4273
+#: python/playergui.py:1934 python/playergui.py:4337
 msgid "Fade Over"
 msgstr ""
 
-#: python/playergui.py:1913 python/playergui.py:1984 python/playergui.py:4267
+#: python/playergui.py:1946 python/playergui.py:2021 python/playergui.py:4332
 msgid "Random"
 msgstr ""
 
-#: python/playergui.py:1953 python/playergui.py:4270
+#: python/playergui.py:1990 python/playergui.py:4333
 msgid "External"
 msgstr ""
 
-#: python/playergui.py:1965 python/playergui.py:1981 python/playergui.py:4272
+#. TC: yet more playlist modes these ones for the main players only
+#: python/playergui.py:2002 python/playergui.py:2018 python/playergui.py:4337
 msgid "Alternate"
 msgstr ""
 
-#: python/playergui.py:1965 python/playergui.py:1983 python/playergui.py:4274
+#: python/playergui.py:2002 python/playergui.py:2020 python/playergui.py:4337
 msgid "Random Hop"
 msgstr ""
 
 #. TC: The remaining playlist time.
-#: python/playergui.py:2138 python/playergui.py:2144
+#: python/playergui.py:2176 python/playergui.py:2182
 msgid "Remaining"
 msgstr ""
 
 #. TC: The estimated finish time of the playlist.
 #. TC: The estimated finish time of the playlist (ETA).
-#: python/playergui.py:2140 python/playergui.py:2144 python/playergui.py:2158
+#: python/playergui.py:2178 python/playergui.py:2182 python/playergui.py:2196
 msgid "Finish"
 msgstr ""
 
 #. TC: The play duration of the block of audio tracks.
-#: python/playergui.py:2145 python/playergui.py:2156
+#: python/playergui.py:2183 python/playergui.py:2194
 msgid "Block size"
 msgstr ""
 
 #. TC: File dialog title text.
-#: python/playergui.py:2546
+#: python/playergui.py:2584
 msgid "Add music to left playlist"
 msgstr ""
 
 #. TC: File dialog title text.
-#: python/playergui.py:2549
+#: python/playergui.py:2587
 msgid "Add music to right playlist"
 msgstr ""
 
-#: python/playergui.py:2551
+#: python/playergui.py:2589
 msgid "Add background music"
 msgstr ""
 
 #. TC: File filter text.
-#: python/playergui.py:2563
+#: python/playergui.py:2601
 msgid "Supported Media Formats"
 msgstr ""
 
 #. TC: Expander text "Select File Type (.pls)" for the pls file type.
-#: python/playergui.py:2625
+#: python/playergui.py:2652
 msgid "Select File Type"
 msgstr ""
 
-#: python/playergui.py:3383
+#: python/playergui.py:3442
 msgid "Save left playlist"
 msgstr ""
 
-#: python/playergui.py:3385
+#: python/playergui.py:3444
 msgid "Save right playlist"
 msgstr ""
 
-#: python/playergui.py:3387
+#: python/playergui.py:3446
 msgid "Save background playlist"
 msgstr ""
 
-#: python/playergui.py:3405
+#: python/playergui.py:3464
 msgid "File Type"
 msgstr ""
 
-#: python/playergui.py:3410
+#: python/playergui.py:3469
 msgid "Extension"
 msgstr ""
 
 #. TC: Playlist control.
 #. TC: Insert playlist control to do a ten second fade to the next track.
-#: python/playergui.py:3774 python/playergui.py:4441
+#: python/playergui.py:3833 python/playergui.py:4505
 msgid "Fade 10s"
 msgstr ""
 
 #. TC: Playlist control.
 #. TC: Insert playlist control to do a five second fade to the next track.
-#: python/playergui.py:3780 python/playergui.py:4448
+#: python/playergui.py:3839 python/playergui.py:4512
 msgid "Fade 5s"
 msgstr ""
 
 #. TC: Playlist control.
 #. TC: Insert playlist control to not do a fade to the next track.
-#: python/playergui.py:3785 python/playergui.py:4455
+#: python/playergui.py:3844 python/playergui.py:4519
 msgid "No Fade"
 msgstr ""
 
 #. TC: Playlist control.
-#: python/playergui.py:3793
+#: python/playergui.py:3852
 msgid ">> Normal Speed <<"
 msgstr ""
 
 #. TC: Playlist control.
-#: python/playergui.py:3803
+#: python/playergui.py:3862
 msgid "Player stop 2"
 msgstr ""
 
 #. TC: Playlist control.
 #. TC: Insert playlist control to jump to the top of the playlist.
-#: python/playergui.py:3808 python/playergui.py:4407
+#: python/playergui.py:3867 python/playergui.py:4471
 msgid "Jump To Top"
 msgstr ""
 
 #. TC: Playlist control.
-#: python/playergui.py:3813 python/playergui.py:4467
+#: python/playergui.py:3872 python/playergui.py:4531
 msgid "Stop streaming"
 msgstr ""
 
 #. TC: Playlist control.
-#: python/playergui.py:3818 python/playergui.py:4475
+#: python/playergui.py:3877 python/playergui.py:4539
 msgid "Stop recording"
 msgstr ""
 
-#: python/playergui.py:3851
+#: python/playergui.py:3910
 msgid "Announcement:"
 msgstr ""
 
 #. TC: Playlist control.
-#: python/playergui.py:3857
+#: python/playergui.py:3916
 msgid ">>> Transfer across >>>"
 msgstr ""
 
 #. TC: Playlist control.
-#: python/playergui.py:3860
+#: python/playergui.py:3919
 msgid "<<< Transfer across <<<"
 msgstr ""
 
 #. TC: Playlist control.
-#: python/playergui.py:3865
+#: python/playergui.py:3924
 msgid ">>> Fade across >>>"
 msgstr ""
 
 #. TC: Playlist control.
-#: python/playergui.py:3868
+#: python/playergui.py:3927
 msgid "<<< Fade across <<<"
 msgstr ""
 
 #. TC: Playlist control.
-#: python/playergui.py:3874
+#: python/playergui.py:3933
 msgid "Ignored playlist control"
 msgstr ""
 
-#: python/playergui.py:3942
+#: python/playergui.py:4001
 #, python-brace-format
 msgid "Playing track {0} of {1}"
 msgstr ""
 
 #. TC: Previous line: Playing track {0} of {1}
-#: python/playergui.py:3955
+#: python/playergui.py:4014
 #, python-format
 msgid "From the album, %s"
 msgstr ""
 
-#: python/playergui.py:3962
+#: python/playergui.py:4021
 #, python-format
 msgid "Total number of tracks %d"
 msgstr ""
 
-#: python/playergui.py:3966 python/playergui.py:3968
+#: python/playergui.py:4025 python/playergui.py:4027
 #, python-format
 msgid "Total play duration %s"
 msgstr ""
 
-#: python/playergui.py:4018
+#: python/playergui.py:4077
 msgid ""
 "Left click toggles between showing the amount of time elapsed or remaining "
 "on the current track being played."
 msgstr ""
 
-#: python/playergui.py:4036
+#: python/playergui.py:4095
 msgid ""
 "This slider acts as both a play progress indicator and as a means for "
 "seeking within the currently playing track."
 msgstr ""
 
 #. TC: File filter text.
-#: python/playergui.py:4125
+#: python/playergui.py:4184
 msgid "All file types"
 msgstr ""
 
-#: python/playergui.py:4130
+#: python/playergui.py:4189
 msgid "Playlist types"
 msgstr ""
 
-#: python/playergui.py:4145
+#: python/playergui.py:4204
 msgid ""
 "'Block size' indicates the amount of time that it will take to play from the "
 "currently selected track to the next stop.\n"
@@ -2519,43 +2534,43 @@ msgid ""
 "'Finish' Is the computed time when the tracks will have finished playing."
 msgstr ""
 
-#: python/playergui.py:4168
+#: python/playergui.py:4230
 msgid "This adjusts the playback speed anywhere from 25% to 400%."
 msgstr ""
 
-#: python/playergui.py:4182
+#: python/playergui.py:4244
 msgid "This sets the playback speed back to normal."
 msgstr ""
 
-#: python/playergui.py:4199
+#: python/playergui.py:4261
 msgid "Previous track."
 msgstr ""
 
-#: python/playergui.py:4211
+#: python/playergui.py:4273
 msgid "Play."
 msgstr ""
 
-#: python/playergui.py:4221
+#: python/playergui.py:4283
 msgid "Pause."
 msgstr ""
 
-#: python/playergui.py:4231
+#: python/playergui.py:4293
 msgid "Stop."
 msgstr ""
 
-#: python/playergui.py:4241
+#: python/playergui.py:4303
 msgid "Next track."
 msgstr ""
 
-#: python/playergui.py:4253
+#: python/playergui.py:4315
 msgid "Add tracks to the playlist."
 msgstr ""
 
-#: python/playergui.py:4260 python/preferences.py:71
+#: python/playergui.py:4322 python/preferences.py:71
 msgid "Playlist Mode"
 msgstr ""
 
-#: python/playergui.py:4279
+#: python/playergui.py:4343
 msgid ""
 "This sets the playlist mode which defines player behaviour after a track has "
 "finished playing.\n"
@@ -2589,31 +2604,31 @@ msgid ""
 msgstr ""
 
 #. TC: Fade time heading.
-#: python/playergui.py:4303 python/preferences.py:72
+#: python/playergui.py:4367 python/preferences.py:72
 msgid "Fade"
 msgstr ""
 
-#: python/playergui.py:4315
+#: python/playergui.py:4379
 msgid "This controls the amount of fade between tracks."
 msgstr ""
 
-#: python/playergui.py:4322
+#: python/playergui.py:4386
 msgid "Audio Feed"
 msgstr ""
 
-#: python/playergui.py:4332
+#: python/playergui.py:4396
 msgid "Make output from this player available for streaming."
 msgstr ""
 
-#: python/playergui.py:4340
+#: python/playergui.py:4404
 msgid "Make output from this player audible to the DJ."
 msgstr ""
 
-#: python/playergui.py:4342
+#: python/playergui.py:4406
 msgid "Force"
 msgstr ""
 
-#: python/playergui.py:4348
+#: python/playergui.py:4412
 msgid ""
 "When selected this player will be treated like a main player.\n"
 "It will be affected by microphone ducking and won't mute when a main player "
@@ -2621,122 +2636,122 @@ msgid ""
 msgstr ""
 
 #. TC: Insert playlist control.
-#: python/playergui.py:4361
+#: python/playergui.py:4425
 msgid "Insert control"
 msgstr ""
 
 #. TC: The Item submenu.
-#: python/playergui.py:4370
+#: python/playergui.py:4434
 msgid "Item"
 msgstr ""
 
 #. TC: The Playlist submenu.
-#: python/playergui.py:4375
+#: python/playergui.py:4439
 msgid "Playlist"
 msgstr ""
 
 #. TC: Insert playlist control to set playback speed to normal.
-#: python/playergui.py:4386
+#: python/playergui.py:4450
 msgid "Normal Speed"
 msgstr ""
 
 #. TC: Submenu Item. Parent menu is Playlist.
-#: python/playergui.py:4415 python/playergui.py:4569
+#: python/playergui.py:4479 python/playergui.py:4633
 msgid "Transfer"
 msgstr ""
 
-#: python/playergui.py:4423
+#: python/playergui.py:4487
 msgid "Crossfade"
 msgstr ""
 
 #. TC: Menu item. Opens the metadata tagger on the selected track.
-#: python/playergui.py:4488
+#: python/playergui.py:4552
 msgid "Meta Tag"
 msgstr ""
 
 #. TC: Menu Item. Duplicates the selected track in the playlist.
-#: python/playergui.py:4494
+#: python/playergui.py:4558
 msgid "Duplicate"
 msgstr ""
 
 #. TC: Menu Item. Remove the selected track.
-#: python/playergui.py:4501
+#: python/playergui.py:4565
 msgid "Remove"
 msgstr ""
 
 #. TC: Submenu Item. Parent menu item is Remove.
-#: python/playergui.py:4512
+#: python/playergui.py:4576
 msgid "This"
 msgstr ""
 
 #. TC: Submenu Item. Parent menu item is Remove.
-#: python/playergui.py:4519 python/preferences.py:1237
+#: python/playergui.py:4583 python/preferences.py:1237
 msgid "All"
 msgstr ""
 
 #. TC: Submenu Item. Parent menu item is Remove.
-#: python/playergui.py:4526
+#: python/playergui.py:4590
 msgid "From Here"
 msgstr ""
 
 #. TC: Submenu Item. Parent menu item is Remove.
-#: python/playergui.py:4533
+#: python/playergui.py:4597
 msgid "To Here"
 msgstr ""
 
 #. TC: Open the file dialog for adding music to the chosen playlist.
-#: python/playergui.py:4546
+#: python/playergui.py:4610
 msgid "Add Music"
 msgstr ""
 
 #. TC: Submenu Item. Parent menu is Playlist.
-#: python/playergui.py:4553
+#: python/playergui.py:4617
 msgid "Save"
 msgstr ""
 
 #. TC: Submenu Item. Parent menu is Playlist.
-#: python/playergui.py:4564
+#: python/playergui.py:4628
 msgid "Copy"
 msgstr ""
 
-#: python/playergui.py:4575
+#: python/playergui.py:4639
 msgid "Exchange"
 msgstr ""
 
 #. TC: Submenu Item. Parent menu is Playlist.
-#: python/playergui.py:4582
+#: python/playergui.py:4646
 msgid "Empty"
 msgstr ""
 
 #. TC: Submenu Item. Parent menus are Playlist->Copy.
 #. TC: Submenu Item. Parent menus are Playlist->Transfer.
-#: python/playergui.py:4596 python/playergui.py:4635
+#: python/playergui.py:4660 python/playergui.py:4699
 msgid "Append"
 msgstr ""
 
 #. TC: Submenu Item. Parent menus are Playlist->Copy.
 #. TC: Submenu Item. Parent menus are Playlist->Transfer.
-#: python/playergui.py:4603 python/playergui.py:4642
+#: python/playergui.py:4667 python/playergui.py:4706
 msgid "Prepend"
 msgstr ""
 
 #. TC: Submenu Item. Parent menus are Playlist->Copy.
-#: python/playergui.py:4614
+#: python/playergui.py:4678
 msgid "Append Cursor"
 msgstr ""
 
 #. TC: Submenu Item. Parent menus are Playlist->Copy.
-#: python/playergui.py:4621
+#: python/playergui.py:4685
 msgid "Prepend Cursor"
 msgstr ""
 
 #. TC: Submenu Item. Parent menus are Playlist->Transfer.
-#: python/playergui.py:4653
+#: python/playergui.py:4717
 msgid "Append at Cursor"
 msgstr ""
 
 #. TC: Submenu Item. Parent menus are Playlist->Transfer.
-#: python/playergui.py:4660
+#: python/playergui.py:4724
 msgid "Prepend at Cursor"
 msgstr ""
 
@@ -3066,7 +3081,7 @@ msgstr ""
 msgid "Best"
 msgstr ""
 
-#: python/preferences.py:996 python/format.py:512
+#: python/preferences.py:996 python/format.py:521
 msgid "Medium"
 msgstr ""
 
@@ -3338,72 +3353,123 @@ msgstr ""
 msgid "Translators"
 msgstr ""
 
-#: python/preferences.py:1574
+#: python/preferences.py:1575
 msgid "Build Info"
 msgstr ""
 
-#: python/preferences.py:1591
+#: python/preferences.py:1592
 msgid "About"
 msgstr ""
 
-#: python/sourceclientgui.py:91
+#: python/sourceclientgui.py:75
+msgid "Disabled"
+msgstr ""
+
+#: python/sourceclientgui.py:75
+msgid "Auto"
+msgstr ""
+
+#: python/sourceclientgui.py:75
+msgid "Auto, no plaintext"
+msgstr ""
+
+#: python/sourceclientgui.py:76
+msgid "RFC2818"
+msgstr ""
+
+#: python/sourceclientgui.py:76
+msgid "RFC2817"
+msgstr ""
+
+#: python/sourceclientgui.py:96
 msgid "Insert Attribute"
 msgstr ""
 
-#: python/sourceclientgui.py:135
+#: python/sourceclientgui.py:140
 msgid "Icecast 2 Master"
 msgstr ""
 
-#: python/sourceclientgui.py:135
+#: python/sourceclientgui.py:140
 msgid "Shoutcast Master"
 msgstr ""
 
-#: python/sourceclientgui.py:136
+#: python/sourceclientgui.py:141
 msgid "Icecast 2 Stats/Relay"
 msgstr ""
 
-#: python/sourceclientgui.py:136
+#: python/sourceclientgui.py:141
 msgid "Shoutcast Stats/Relay"
 msgstr ""
 
-#: python/sourceclientgui.py:139
+#: python/sourceclientgui.py:144
 msgid "Enter new server connection details"
 msgstr ""
 
-#: python/sourceclientgui.py:158
+#: python/sourceclientgui.py:164
 msgid "Edit existing server connection details"
 msgstr ""
 
-#: python/sourceclientgui.py:195
+#. TC: Dialog title bar text.
+#: python/sourceclientgui.py:218
+msgid "Certificate Authority Directory"
+msgstr ""
+
+#. TC: Dialog title bar text.
+#: python/sourceclientgui.py:232
+msgid "Certificate Authority File"
+msgstr ""
+
+#. TC: Dialog title bar text.
+#: python/sourceclientgui.py:246
+msgid "TLS Client Certificate"
+msgstr ""
+
+#: python/sourceclientgui.py:257
 msgid "This server is to be scanned for audience figures"
 msgstr ""
 
-#: python/sourceclientgui.py:208
+#: python/sourceclientgui.py:270
 msgid "Server type"
 msgstr ""
 
-#: python/sourceclientgui.py:208
+#: python/sourceclientgui.py:270
 msgid "Port number"
 msgstr ""
 
-#: python/sourceclientgui.py:209
+#: python/sourceclientgui.py:271
 msgid "Mount point"
 msgstr ""
 
-#: python/sourceclientgui.py:209
+#: python/sourceclientgui.py:271
 msgid "Login name"
 msgstr ""
 
-#: python/sourceclientgui.py:475
+#: python/sourceclientgui.py:272
+msgid "TLS"
+msgstr ""
+
+#: python/sourceclientgui.py:272
+msgid "CA directory"
+msgstr ""
+
+#: python/sourceclientgui.py:272
+msgid "CA file"
+msgstr ""
+
+#: python/sourceclientgui.py:272
+msgid "Client cert"
+msgstr ""
+
+#: python/sourceclientgui.py:556
 msgid "Encoder Format Not Set/Compatible"
 msgstr ""
 
 #. TC: Connection button text when no details have been entered.
-#: python/sourceclientgui.py:478
+#: python/sourceclientgui.py:559
 msgid "No Master Server Configured"
 msgstr ""
 
-#: python/sourceclientgui.py:680
+#: python/sourceclientgui.py:761
 msgid ""
 "A table of servers with which to connect. Only one master server can be "
 "added for the purpose of streaming. All other servers will appear below the "
@@ -3411,99 +3477,99 @@ msgid ""
 "toggled on a per server basis."
 msgstr ""
 
-#: python/sourceclientgui.py:696
+#: python/sourceclientgui.py:777
 msgid "Hostname/IP address"
 msgstr ""
 
 #. TC: Mount point is a technical term in relation to icecast servers.
-#: python/sourceclientgui.py:709
+#: python/sourceclientgui.py:790
 msgid "Mount point       "
 msgstr ""
 
 #. TC: This is the listener count heading.
-#: python/sourceclientgui.py:718
+#: python/sourceclientgui.py:799
 msgid "Listeners"
 msgstr ""
 
-#: python/sourceclientgui.py:733
+#: python/sourceclientgui.py:814
 msgid "The sum total of listeners in this server tab."
 msgstr ""
 
-#: python/sourceclientgui.py:760
+#: python/sourceclientgui.py:841
 msgid "Never"
 msgstr ""
 
-#: python/sourceclientgui.py:763
+#: python/sourceclientgui.py:844
 msgid "Always"
 msgstr ""
 
-#: python/sourceclientgui.py:765
+#: python/sourceclientgui.py:846
 msgid "If connected"
 msgstr ""
 
-#: python/sourceclientgui.py:1021
+#: python/sourceclientgui.py:1102
 msgid "Custom user agent string"
 msgstr ""
 
-#: python/sourceclientgui.py:1028
+#: python/sourceclientgui.py:1109
 msgid ""
 "Set this on the occasion that the server or its firewall specifically "
 "refuses to allow libshout based clients."
 msgstr ""
 
-#: python/sourceclientgui.py:1033
+#: python/sourceclientgui.py:1114
 msgid "If the connection breaks reconnect to the server"
 msgstr ""
 
 #. TC: Label for a comma separated list of delay times.
-#: python/sourceclientgui.py:1043
+#: python/sourceclientgui.py:1124
 msgid "Delay times"
 msgstr ""
 
-#: python/sourceclientgui.py:1047
+#: python/sourceclientgui.py:1128
 msgid ""
 "A comma separated list of delays in seconds between reconnection attempts. "
 "Note that bad values or values less than 5 will be interpreted as 5."
 msgstr ""
 
-#: python/sourceclientgui.py:1053
+#: python/sourceclientgui.py:1134
 msgid "Repeat the sequence of delays indefinitely."
 msgstr ""
 
 #. TC: User specifies no dialog box to be shown.
-#: python/sourceclientgui.py:1056
+#: python/sourceclientgui.py:1137
 msgid "Quiet"
 msgstr ""
 
-#: python/sourceclientgui.py:1058
+#: python/sourceclientgui.py:1139
 msgid "Keep the reconnection dialogue box hidden at all times."
 msgstr ""
 
-#: python/sourceclientgui.py:1063
+#: python/sourceclientgui.py:1144
 msgid "The contingency plan upon the stream buffer becoming full is..."
 msgstr ""
 
-#: python/sourceclientgui.py:1072
+#: python/sourceclientgui.py:1153
 msgid "Discard audio data for as long as needed."
 msgstr ""
 
-#: python/sourceclientgui.py:1074
+#: python/sourceclientgui.py:1155
 msgid "Assume the connection is beyond saving and reconnect."
 msgstr ""
 
-#: python/sourceclientgui.py:1357 python/format.py:1140
+#: python/sourceclientgui.py:1442 python/format.py:1227
 msgid "Shoutcast"
 msgstr ""
 
-#: python/sourceclientgui.py:1394
+#: python/sourceclientgui.py:1483
 msgid "[Metadata suppressed]"
 msgstr ""
 
-#: python/sourceclientgui.py:1473
+#: python/sourceclientgui.py:1562
 msgid "Individual Controls"
 msgstr ""
 
-#: python/sourceclientgui.py:1487
+#: python/sourceclientgui.py:1576
 msgid ""
 "Connect to or disconnect from the radio server. If the button does not stay "
 "in, the connection failed for some reason.\n"
@@ -3518,97 +3584,97 @@ msgid ""
 msgstr ""
 
 #. TC: Kick whoever is on the server.
-#: python/sourceclientgui.py:1504
+#: python/sourceclientgui.py:1593
 msgid "Kick Source"
 msgstr ""
 
-#: python/sourceclientgui.py:1506
+#: python/sourceclientgui.py:1595
 msgid ""
 "This will disconnect whoever is currently using the server, freeing it up "
 "for personal use."
 msgstr ""
 
-#: python/sourceclientgui.py:1516
+#: python/sourceclientgui.py:1605
 msgid "Timer:"
 msgstr ""
 
-#: python/sourceclientgui.py:1520
+#: python/sourceclientgui.py:1609
 msgid "From"
 msgstr ""
 
-#: python/sourceclientgui.py:1521
+#: python/sourceclientgui.py:1610
 msgid ""
 "Automatically connect to the server at a specific time in 24 hour format, "
 "midnight being 00:00"
 msgstr ""
 
-#: python/sourceclientgui.py:1526
+#: python/sourceclientgui.py:1615
 msgid "Kick"
 msgstr ""
 
-#: python/sourceclientgui.py:1528
+#: python/sourceclientgui.py:1617
 msgid "Disconnect whoever is using the server just before start time."
 msgstr ""
 
-#: python/sourceclientgui.py:1537
+#: python/sourceclientgui.py:1626
 msgid "To"
 msgstr ""
 
-#: python/sourceclientgui.py:1538
+#: python/sourceclientgui.py:1627
 msgid ""
 "Automatically disconnect from the server at a specific time in 24 hour "
 "format."
 msgstr ""
 
-#: python/sourceclientgui.py:1541
+#: python/sourceclientgui.py:1630
 msgid "Fade out"
 msgstr ""
 
-#: python/sourceclientgui.py:1543
+#: python/sourceclientgui.py:1632
 msgid "Fade audio before disconnecting."
 msgstr ""
 
-#: python/sourceclientgui.py:1557
+#: python/sourceclientgui.py:1646
 msgid "At connect:"
 msgstr ""
 
 #. TC: [x] Start player (*) 1 ( ) 2
-#: python/sourceclientgui.py:1561
+#: python/sourceclientgui.py:1650
 msgid "Start player"
 msgstr ""
 
-#: python/sourceclientgui.py:1566
+#: python/sourceclientgui.py:1655
 msgid ""
 "Have one of the players start automatically when a radio server connection "
 "is successfully made."
 msgstr ""
 
 #. TC: [x] Start recorder (*) 1 ( ) 2
-#: python/sourceclientgui.py:1574
+#: python/sourceclientgui.py:1663
 msgid "Start recorder"
 msgstr ""
 
-#: python/sourceclientgui.py:1581
+#: python/sourceclientgui.py:1670
 msgid ""
 "Have a recorder start automatically when a radio server connection is "
 "successfully made."
 msgstr ""
 
-#: python/sourceclientgui.py:1586 python/format.py:521 python/format.py:532
-#: python/format.py:542
+#: python/sourceclientgui.py:1675 python/format.py:530 python/format.py:541
+#: python/format.py:552 python/format.py:562
 msgid "Metadata"
 msgstr ""
 
-#: python/sourceclientgui.py:1596
+#: python/sourceclientgui.py:1685
 msgid "Format String"
 msgstr ""
 
 #. TC: Label for the metadata fallback value.
-#: python/sourceclientgui.py:1598
+#: python/sourceclientgui.py:1687
 msgid "Fallback"
 msgstr ""
 
-#: python/sourceclientgui.py:1612
+#: python/sourceclientgui.py:1701
 msgid ""
 "You can enter text to accompany the stream here and can specify placemarkers "
 "%r %t %l %s for the artist, title, album, and songname respectively, or "
@@ -3622,133 +3688,133 @@ msgid ""
 "%s."
 msgstr ""
 
-#: python/sourceclientgui.py:1620
+#: python/sourceclientgui.py:1709
 msgid ""
 "The fallback text to use when %r %t %l metadata is unavailable. See the "
 "format string to the left."
 msgstr ""
 
-#: python/sourceclientgui.py:1622
+#: python/sourceclientgui.py:1711
 msgid ""
 "Metadata normally updates only on song title changes but you can force an "
 "immediate update here."
 msgstr ""
 
-#: python/sourceclientgui.py:1641
+#: python/sourceclientgui.py:1730
 msgid "Configuration"
 msgstr ""
 
-#: python/sourceclientgui.py:1642
+#: python/sourceclientgui.py:1731
 msgid "The controls for configuring a stream."
 msgstr ""
 
-#: python/sourceclientgui.py:1650
+#: python/sourceclientgui.py:1739
 msgid "Connection"
 msgstr ""
 
-#: python/sourceclientgui.py:1655
+#: python/sourceclientgui.py:1744
 msgid "Format"
 msgstr ""
 
 #. TC: Tab heading. User can enter information about the stream here.
-#: python/sourceclientgui.py:1664
+#: python/sourceclientgui.py:1753
 msgid "Stream Info"
 msgstr ""
 
-#: python/sourceclientgui.py:1669
+#: python/sourceclientgui.py:1758
 msgid ""
 "Enter your DJ name or station name here. Typically this information will be "
 "displayed by listener clients."
 msgstr ""
 
-#: python/sourceclientgui.py:1672
+#: python/sourceclientgui.py:1761
 msgid ""
 "The URL of your radio station. This and the rest of the information below is "
 "intended for display on a radio station listings website."
 msgstr ""
 
-#: python/sourceclientgui.py:1677
+#: python/sourceclientgui.py:1766
 msgid "A description of your radio station."
 msgstr ""
 
-#: python/sourceclientgui.py:1682
+#: python/sourceclientgui.py:1771
 msgid "The musical genres you are likely to play."
 msgstr ""
 
-#: python/sourceclientgui.py:1685
+#: python/sourceclientgui.py:1774
 msgid "Make Public"
 msgstr ""
 
-#: python/sourceclientgui.py:1686
+#: python/sourceclientgui.py:1775
 msgid ""
 "Publish your radio station on a listings website. The website in question "
 "will depend on how the server to which you connect is configured."
 msgstr ""
 
-#: python/sourceclientgui.py:1698
+#: python/sourceclientgui.py:1787
 msgid "Genre(s)"
 msgstr ""
 
-#: python/sourceclientgui.py:1709
+#: python/sourceclientgui.py:1798
 msgid "Master server admin password"
 msgstr ""
 
-#: python/sourceclientgui.py:1714
+#: python/sourceclientgui.py:1803
 msgid ""
 "This is for kick and stats on Shoutcast master servers that have an "
 "administrator password. For those that don't leave this blank (the source "
 "password is sufficient for those)."
 msgstr ""
 
-#: python/sourceclientgui.py:1723
+#: python/sourceclientgui.py:1812
 msgid "Contact Details"
 msgstr ""
 
-#: python/sourceclientgui.py:1727
+#: python/sourceclientgui.py:1816
 msgid "Internet Relay Chat connection info goes here."
 msgstr ""
 
-#: python/sourceclientgui.py:1730
+#: python/sourceclientgui.py:1819
 msgid "Connection info for AOL instant messenger goes here."
 msgstr ""
 
-#: python/sourceclientgui.py:1733
+#: python/sourceclientgui.py:1822
 msgid "ICQ instant messenger connection info goes here."
 msgstr ""
 
-#: python/sourceclientgui.py:1736
+#: python/sourceclientgui.py:1825
 msgid "IRC"
 msgstr ""
 
-#: python/sourceclientgui.py:1737
+#: python/sourceclientgui.py:1826
 msgid "AIM"
 msgstr ""
 
-#: python/sourceclientgui.py:1738
+#: python/sourceclientgui.py:1827
 msgid "ICQ"
 msgstr ""
 
-#: python/sourceclientgui.py:1748
+#: python/sourceclientgui.py:1837
 msgid "Use ISO-8859-1 encoding for fixed metadata"
 msgstr ""
 
-#: python/sourceclientgui.py:1750
+#: python/sourceclientgui.py:1839
 msgid "Enable this if sending to a Shoutcast V1 server."
 msgstr ""
 
-#: python/sourceclientgui.py:1754
+#: python/sourceclientgui.py:1843
 msgid "Extra Shoutcast"
 msgstr ""
 
-#: python/sourceclientgui.py:1759
+#: python/sourceclientgui.py:1848
 msgid "Troubleshooting"
 msgstr ""
 
-#: python/sourceclientgui.py:1890
+#: python/sourceclientgui.py:1979
 msgid "Stop recording."
 msgstr ""
 
-#: python/sourceclientgui.py:1892
+#: python/sourceclientgui.py:1981
 msgid ""
 "Start recording.\n"
 "\n"
@@ -3756,27 +3822,27 @@ msgid ""
 "not valid or write permission is not granted on the selected folder."
 msgstr ""
 
-#: python/sourceclientgui.py:1897
+#: python/sourceclientgui.py:1986
 msgid "Pause recording."
 msgstr ""
 
-#: python/sourceclientgui.py:1934
+#: python/sourceclientgui.py:2023
 msgid "Recording time elapsed."
 msgstr ""
 
 #. TC: Dialog title bar text.
-#: python/sourceclientgui.py:1988
+#: python/sourceclientgui.py:2077
 msgid "Select the folder to record to"
 msgstr ""
 
-#: python/sourceclientgui.py:1999
+#: python/sourceclientgui.py:2088
 msgid ""
 "Choose which stream to record or the 24 bit FLAC option. If the stream isn't "
 "already running the encoder will be started automatically using whatever "
 "settings are currently configured."
 msgstr ""
 
-#: python/sourceclientgui.py:2003
+#: python/sourceclientgui.py:2092
 msgid ""
 "Choose which directory you want to save to. All file names will be in a "
 "timestamp format and have either an oga, mp3, or flac file extension. "
@@ -3784,77 +3850,77 @@ msgid ""
 "permission."
 msgstr ""
 
-#: python/sourceclientgui.py:2110
+#: python/sourceclientgui.py:2199
 msgid "Perform operations on multiple servers in unison."
 msgstr ""
 
-#: python/sourceclientgui.py:2122
+#: python/sourceclientgui.py:2211
 msgid "Connect"
 msgstr ""
 
-#: python/sourceclientgui.py:2139
+#: python/sourceclientgui.py:2228
 msgid "Disconnect"
 msgstr ""
 
-#: python/sourceclientgui.py:2147
+#: python/sourceclientgui.py:2236
 msgid "Kick Sources"
 msgstr ""
 
-#: python/sourceclientgui.py:2156
+#: python/sourceclientgui.py:2245
 msgid "Metadata:"
 msgstr ""
 
-#: python/sourceclientgui.py:2186
+#: python/sourceclientgui.py:2275
 msgid "Group Controls"
 msgstr ""
 
-#: python/sourceclientgui.py:2692
+#: python/sourceclientgui.py:2782
 msgid "Recording Facility Unavailable"
 msgstr ""
 
-#: python/sourceclientgui.py:2695
+#: python/sourceclientgui.py:2785
 msgid "No Recorders Are Correctly Configured"
 msgstr ""
 
 #. TC: Recorder menu format string.
-#: python/sourceclientgui.py:2708
+#: python/sourceclientgui.py:2798
 #, python-brace-format
 msgid "{numericid} [{source}] > [{directory}]"
 msgstr ""
 
-#: python/sourceclientgui.py:2710
+#: python/sourceclientgui.py:2800
 msgid "Misconfigured"
 msgstr ""
 
-#: python/sourceclientgui.py:2731
+#: python/sourceclientgui.py:2821
 msgid "Streaming Facility Unavailable"
 msgstr ""
 
-#: python/sourceclientgui.py:2733
+#: python/sourceclientgui.py:2823
 msgid "No Streams Are Currently Configured"
 msgstr ""
 
-#: python/sourceclientgui.py:2736
+#: python/sourceclientgui.py:2826
 msgid "Group Connect"
 msgstr ""
 
-#: python/sourceclientgui.py:2742
+#: python/sourceclientgui.py:2832
 msgid "Group Disconnect"
 msgstr ""
 
 #. TC: Window title bar text.
-#: python/sourceclientgui.py:2773
+#: python/sourceclientgui.py:2863
 msgid "IDJC Output"
 msgstr ""
 
-#: python/sourceclientgui.py:2789
+#: python/sourceclientgui.py:2879
 msgid ""
 "Each one of these tabs represents a separate stream recorder. The LED "
 "indicator colours represent the following: Clear=Stopped Yellow=Paused "
 "Red=Recording."
 msgstr ""
 
-#: python/sourceclientgui.py:2797
+#: python/sourceclientgui.py:2887
 msgid ""
 "Each one of these tabs represents a separate radio streamer. The LED "
 "indicator colours represent the following: Clear=No connection "
@@ -3862,11 +3928,11 @@ msgid ""
 "a bad connection."
 msgstr ""
 
-#: python/sourceclientgui.py:2815
+#: python/sourceclientgui.py:2905
 msgid " Stream "
 msgstr ""
 
-#: python/sourceclientgui.py:2850
+#: python/sourceclientgui.py:2940
 msgid ""
 "<span weight=\"bold\" size=\"12000\">A connection to a radio server has "
 "failed.</span>\n"
@@ -3874,7 +3940,7 @@ msgid ""
 "Reconnection will not be attempted."
 msgstr ""
 
-#: python/sourceclientgui.py:2855
+#: python/sourceclientgui.py:2945
 msgid ""
 "<span weight=\"bold\" size=\"12000\">A scheduled stream disconnection has "
 "occurred.</span>"
@@ -3884,43 +3950,43 @@ msgstr ""
 msgid "Right click for suggested values."
 msgstr ""
 
-#: python/format.py:438
+#: python/format.py:439
 msgid "Suggested Values"
 msgstr ""
 
-#: python/format.py:494
+#: python/format.py:503
 msgid "Pregain"
 msgstr ""
 
-#: python/format.py:495 python/format.py:913
+#: python/format.py:504 python/format.py:933
 msgid "0 dB"
 msgstr ""
 
-#: python/format.py:496 python/format.py:914
+#: python/format.py:505 python/format.py:934
 msgid "-0.5 dB"
 msgstr ""
 
-#: python/format.py:497 python/format.py:915
+#: python/format.py:506 python/format.py:935
 msgid "-1.0 dB"
 msgstr ""
 
-#: python/format.py:498 python/format.py:916
+#: python/format.py:507 python/format.py:936
 msgid "-1.5 dB"
 msgstr ""
 
-#: python/format.py:499 python/format.py:917
+#: python/format.py:508 python/format.py:937
 msgid "-2.0 dB"
 msgstr ""
 
-#: python/format.py:500 python/format.py:918
+#: python/format.py:509 python/format.py:938
 msgid "-2.5 dB"
 msgstr ""
 
-#: python/format.py:501 python/format.py:919
+#: python/format.py:510 python/format.py:939
 msgid "-3.0 dB"
 msgstr ""
 
-#: python/format.py:502
+#: python/format.py:511
 msgid ""
 "A blanket gain reduction to promote audio quality when using long "
 "established lossy audio codecs like mp3 with loud audio material.\n"
@@ -3929,454 +3995,463 @@ msgid ""
 "in that case is 0 dB."
 msgstr ""
 
-#: python/format.py:510
+#: python/format.py:519
 msgid "Resample Quality"
 msgstr ""
 
-#: python/format.py:511
+#: python/format.py:520
 msgid "Highest"
 msgstr ""
 
-#: python/format.py:513
+#: python/format.py:522
 msgid "Lowest"
 msgstr ""
 
-#: python/format.py:514
+#: python/format.py:523
 msgid ""
 "All of these settings will provide adequate audio quality. The highest "
 "setting will preserve more of the original audio bandwidth at the expense of "
 "many CPU cycles."
 msgstr ""
 
-#: python/format.py:522 python/format.py:533 python/format.py:543
+#: python/format.py:531 python/format.py:553 python/format.py:563
 msgid "Suppressed"
 msgstr ""
 
-#: python/format.py:523 python/format.py:534
+#: python/format.py:532 python/format.py:554
 msgid "UTF-8"
 msgstr ""
 
-#: python/format.py:524
+#: python/format.py:533
 msgid "Latin1 *"
 msgstr ""
 
-#: python/format.py:525
+#: python/format.py:534
 msgid ""
 "This affects the stream metadata only. Recordings will use UTF-8 for their "
 "metadata."
 msgstr ""
 
-#: python/format.py:535
+#: python/format.py:542
+msgid "Unsupported"
+msgstr ""
+
+#: python/format.py:543 python/format.py:555
 msgid ""
 "Choose whether the stream will carry dynamic metadata. In the case of Ogg "
 "streams this is important as a great many players can't handle chained Ogg "
 "streams which result from the metadata updates."
 msgstr ""
 
-#: python/format.py:544
+#: python/format.py:564
 msgid "Latin1"
 msgstr ""
 
-#: python/format.py:545
+#: python/format.py:565
 msgid "Choose whether to send metadata. Recordings will use UTF-8 metadata."
 msgstr ""
 
-#: python/format.py:561 python/format.py:572 python/format.py:583
-#: python/format.py:690 python/format.py:818 python/format.py:888
-#: python/format.py:897 python/format.py:971 python/format.py:994
-#: python/format.py:1003
+#: python/format.py:581 python/format.py:592 python/format.py:603
+#: python/format.py:710 python/format.py:838 python/format.py:908
+#: python/format.py:917 python/format.py:991 python/format.py:1014
+#: python/format.py:1023 python/format.py:1141 python/format.py:1163
 msgid "Mode"
 msgstr ""
 
-#: python/format.py:562 python/format.py:573 python/format.py:584
-#: python/format.py:691 python/format.py:819 python/format.py:889
-#: python/format.py:898 python/format.py:972 python/format.py:995
-#: python/format.py:1004
+#: python/format.py:582 python/format.py:593 python/format.py:604
+#: python/format.py:711 python/format.py:839 python/format.py:909
+#: python/format.py:918 python/format.py:992 python/format.py:1015
+#: python/format.py:1024 python/format.py:1142 python/format.py:1164
 msgid "Mono"
 msgstr ""
 
-#: python/format.py:563 python/format.py:574 python/format.py:585
-#: python/format.py:692 python/format.py:820 python/format.py:890
-#: python/format.py:899 python/format.py:973 python/format.py:996
-#: python/format.py:1005
+#: python/format.py:583 python/format.py:594 python/format.py:605
+#: python/format.py:712 python/format.py:840 python/format.py:910
+#: python/format.py:919 python/format.py:993 python/format.py:1016
+#: python/format.py:1025 python/format.py:1143 python/format.py:1165
 msgid "Stereo"
 msgstr ""
 
-#: python/format.py:564 python/format.py:575 python/format.py:586
-#: python/format.py:693
+#: python/format.py:584 python/format.py:595 python/format.py:606
+#: python/format.py:713
 msgid "Joint Stereo"
 msgstr ""
 
-#: python/format.py:565
+#: python/format.py:585
 msgid "Joint Stereo is a good choice on streams with low bitrates."
 msgstr ""
 
-#: python/format.py:576
+#: python/format.py:596
 msgid "Due to the high bitrate selected, this codec will only support stereo."
 msgstr ""
 
-#: python/format.py:587
+#: python/format.py:607
 msgid "Due to the low bitrate selected, this codec will only support mono."
 msgstr ""
 
-#: python/format.py:636 python/format.py:646 python/format.py:743
-#: python/format.py:753 python/format.py:763 python/format.py:869
-#: python/format.py:879 python/format.py:1032 python/format.py:1052
+#: python/format.py:656 python/format.py:666 python/format.py:763
+#: python/format.py:773 python/format.py:783 python/format.py:889
+#: python/format.py:899 python/format.py:1052 python/format.py:1072
+#: python/format.py:1132
 msgid "Samplerate"
 msgstr ""
 
 #. TC: Abbreviation of the word, standard.
-#: python/format.py:657 python/format.py:774
+#: python/format.py:677 python/format.py:794
 msgid "Std."
 msgstr ""
 
 #. TC: v stands for version.
-#: python/format.py:659 python/format.py:776
+#: python/format.py:679 python/format.py:796
 msgid "V 1"
 msgstr ""
 
 #. TC: v stands for version.
-#: python/format.py:661 python/format.py:778
+#: python/format.py:681 python/format.py:798
 msgid "V 2"
 msgstr ""
 
-#: python/format.py:662
+#: python/format.py:682
 msgid ""
 "MPEG2 introduced lower samplerate options and corresponding lower bitrates. "
 "Choose 2 if those are required."
 msgstr ""
 
-#: python/format.py:669 python/format.py:797
+#: python/format.py:689 python/format.py:817
 msgid "Quality"
 msgstr ""
 
-#: python/format.py:670
+#: python/format.py:690
 msgid "0 most"
 msgstr ""
 
 #. TC: * means is the recommended setting.
-#: python/format.py:673
+#: python/format.py:693
 msgid "2 *"
 msgstr ""
 
-#: python/format.py:675
+#: python/format.py:695
 msgid "Higher quality costs more in terms of CPU cycles."
 msgstr ""
 
-#: python/format.py:694
+#: python/format.py:714
 msgid "Joint Stereo is a good choice on streams with low bitrates"
 msgstr ""
 
 #. TC: v stands for version.
-#: python/format.py:780
+#: python/format.py:800
 msgid "V 2.5"
 msgstr ""
 
-#: python/format.py:787
+#: python/format.py:807
 msgid "Complexity"
 msgstr ""
 
-#: python/format.py:790
+#: python/format.py:810
 msgid "A quality setting that affects how heavily the CPU is used."
 msgstr ""
 
-#: python/format.py:800
+#: python/format.py:820
 msgid "The higher this setting, the higher the bitrate."
 msgstr ""
 
-#: python/format.py:807
+#: python/format.py:827
 msgid "Bandwidth"
 msgstr ""
 
-#: python/format.py:808
+#: python/format.py:828
 msgid "Ultrawide"
 msgstr ""
 
-#: python/format.py:809
+#: python/format.py:829
 msgid "Wide"
 msgstr ""
 
-#: python/format.py:810
+#: python/format.py:830
 msgid "Narrow"
 msgstr ""
 
-#: python/format.py:811
+#: python/format.py:831
 msgid "Essentially a samplerate setting."
 msgstr ""
 
-#: python/format.py:828
+#: python/format.py:848
 msgid "24 bit"
 msgstr ""
 
-#: python/format.py:829
+#: python/format.py:849
 msgid "20 bit"
 msgstr ""
 
-#: python/format.py:830
+#: python/format.py:850
 msgid "16 bit"
 msgstr ""
 
-#: python/format.py:831
+#: python/format.py:851
 msgid ""
 "24 bit records with the highest level of detail. If file size is a concern "
 "maybe FLAC is not the right codec."
 msgstr ""
 
-#: python/format.py:838 python/format.py:927
+#: python/format.py:858 python/format.py:947
 msgid "Variability"
 msgstr ""
 
-#: python/format.py:839
+#: python/format.py:859
 msgid "Constant"
 msgstr ""
 
-#: python/format.py:840
+#: python/format.py:860
 msgid "±10%"
 msgstr ""
 
-#: python/format.py:841
+#: python/format.py:861
 msgid "±20%"
 msgstr ""
 
-#: python/format.py:842
+#: python/format.py:862
 msgid "±30%"
 msgstr ""
 
-#: python/format.py:843
+#: python/format.py:863
 msgid "±40%"
 msgstr ""
 
-#: python/format.py:844
+#: python/format.py:864
 msgid "±50%"
 msgstr ""
 
-#: python/format.py:845
+#: python/format.py:865
 msgid "This control is for enabling variable bitrate on Vorbis streams."
 msgstr ""
 
-#: python/format.py:906
+#: python/format.py:926
 msgid "Postgain"
 msgstr ""
 
-#: python/format.py:907
+#: python/format.py:927
 msgid "3.0 dB"
 msgstr ""
 
-#: python/format.py:908
+#: python/format.py:928
 msgid "2.5 dB"
 msgstr ""
 
-#: python/format.py:909
+#: python/format.py:929
 msgid "2.0 dB"
 msgstr ""
 
-#: python/format.py:910
+#: python/format.py:930
 msgid "1.5 dB"
 msgstr ""
 
-#: python/format.py:911
+#: python/format.py:931
 msgid "1.0 dB"
 msgstr ""
 
-#: python/format.py:912
+#: python/format.py:932
 msgid "0.5 dB"
 msgstr ""
 
-#: python/format.py:920
+#: python/format.py:940
 msgid "A gain adjustment for the player to apply."
 msgstr ""
 
-#: python/format.py:928
+#: python/format.py:948
 msgid "CBR *"
 msgstr ""
 
-#: python/format.py:929
+#: python/format.py:949
 msgid "CVBR"
 msgstr ""
 
-#: python/format.py:930
+#: python/format.py:950
 msgid "VBR"
 msgstr ""
 
-#: python/format.py:931
+#: python/format.py:951
 msgid ""
 "Bitrate variability. Actual VBR operation may require a higher frame size."
 msgstr ""
 
-#: python/format.py:938
+#: python/format.py:958
 msgid "Frame Size"
 msgstr ""
 
-#: python/format.py:939
+#: python/format.py:959
 msgid "60 ms"
 msgstr ""
 
-#: python/format.py:940
+#: python/format.py:960
 msgid "40 ms"
 msgstr ""
 
-#: python/format.py:941
+#: python/format.py:961
 msgid "20 ms"
 msgstr ""
 
-#: python/format.py:942
+#: python/format.py:962
 msgid "A higher frame size may sound better on very low bitrates."
 msgstr ""
 
-#: python/format.py:949
+#: python/format.py:969
 msgid "CPU"
 msgstr ""
 
-#: python/format.py:952
+#: python/format.py:972
 msgid "The encoder complexity setting which affects CPU load."
 msgstr ""
 
-#: python/format.py:980 python/format.py:1083
+#: python/format.py:1000 python/format.py:1103 python/format.py:1172
 msgid "Codec"
 msgstr ""
 
-#: python/format.py:981
+#: python/format.py:1001 python/format.py:1174
 msgid "Vorbis"
 msgstr ""
 
-#: python/format.py:982
+#: python/format.py:1002
 msgid "FLAC"
 msgstr ""
 
-#: python/format.py:983
+#: python/format.py:1003
 msgid "Speex"
 msgstr ""
 
-#: python/format.py:984
+#: python/format.py:1004 python/format.py:1173
 msgid "Opus"
 msgstr ""
 
-#: python/format.py:987
+#: python/format.py:1007
 msgid "Codecs of the Ogg container."
 msgstr ""
 
-#: python/format.py:1033
+#: python/format.py:1053
 msgid "96000 Hz"
 msgstr ""
 
-#: python/format.py:1034
+#: python/format.py:1054
 msgid "88200 Hz"
 msgstr ""
 
-#: python/format.py:1035
+#: python/format.py:1055
 msgid "64000 Hz"
 msgstr ""
 
-#: python/format.py:1036 python/format.py:1053
+#: python/format.py:1056 python/format.py:1073
 msgid "48000 Hz"
 msgstr ""
 
-#: python/format.py:1037 python/format.py:1054
+#: python/format.py:1057 python/format.py:1074
 msgid "44100 Hz"
 msgstr ""
 
-#: python/format.py:1038
+#: python/format.py:1058
 msgid "32000 Hz"
 msgstr ""
 
-#: python/format.py:1039
+#: python/format.py:1059
 msgid "24000 Hz"
 msgstr ""
 
-#: python/format.py:1040
+#: python/format.py:1060
 msgid "22050 Hz"
 msgstr ""
 
-#: python/format.py:1041
+#: python/format.py:1061
 msgid "16000 Hz"
 msgstr ""
 
-#: python/format.py:1042
+#: python/format.py:1062
 msgid "12000 Hz"
 msgstr ""
 
-#: python/format.py:1043
+#: python/format.py:1063
 msgid "11025 Hz"
 msgstr ""
 
-#: python/format.py:1044
+#: python/format.py:1064
 msgid "8000 Hz"
 msgstr ""
 
-#: python/format.py:1045
+#: python/format.py:1065
 msgid "7350 Hz"
 msgstr ""
 
-#: python/format.py:1067
+#: python/format.py:1087
 msgid "The MP2 option requires IDJC be rebuilt against libtwolame."
 msgstr ""
 
-#: python/format.py:1070
+#: python/format.py:1090
 msgid "Enable the MP3 option by installing libmp3lame."
 msgstr ""
 
-#: python/format.py:1073
+#: python/format.py:1093
 msgid "The AAC options require IDJC be rebuilt against libav libraries."
 msgstr ""
 
-#: python/format.py:1076
+#: python/format.py:1096
 msgid ""
 "Specific AAC support not present in libavcodec. More info: idjc.sourceforge."
 "net."
 msgstr ""
 
-#: python/format.py:1078
+#: python/format.py:1098
 msgid ""
 "Specific AAC+ support not present in libavcodec. More info: idjc.sourceforge."
 "net."
 msgstr ""
 
-#: python/format.py:1081
+#: python/format.py:1101
 msgid "Codecs of the MPEG family."
 msgstr ""
 
-#: python/format.py:1084
+#: python/format.py:1104
 msgid "MP2"
 msgstr ""
 
-#: python/format.py:1085
+#: python/format.py:1105
 msgid "MP3"
 msgstr ""
 
-#: python/format.py:1086
+#: python/format.py:1106
 msgid "AAC"
 msgstr ""
 
-#: python/format.py:1087
+#: python/format.py:1107
 msgid "AAC+ v2"
 msgstr ""
 
 #. TC: Codec family e.g. Xiph/Ogg, MPEG etc.
-#: python/format.py:1099
+#: python/format.py:1185
 msgid "Family"
 msgstr ""
 
+#: python/format.py:1186
+msgid "WebM"
+msgstr ""
+
 #. TC: Xiph.org Ogg container format.
-#: python/format.py:1101
+#: python/format.py:1188
 msgid "Xiph/Ogg"
 msgstr ""
 
-#: python/format.py:1102
+#: python/format.py:1189
 msgid "MPEG"
 msgstr ""
 
-#: python/format.py:1103
+#: python/format.py:1190
 msgid "Codecs have been grouped by standards body and or container format."
 msgstr ""
 
-#: python/format.py:1128
+#: python/format.py:1215
 msgid "Capabilities"
 msgstr ""
 
-#: python/format.py:1140
+#: python/format.py:1227
 msgid "Icecast"
 msgstr ""
 
-#: python/format.py:1140
+#: python/format.py:1227
 msgid "Recordable"
 msgstr ""
diff --git a/po/it.gmo b/po/it.gmo
index df66149..6c3bbf7 100644
Binary files a/po/it.gmo and b/po/it.gmo differ
diff --git a/po/it.po b/po/it.po
index b1a5c6f..de6d1f2 100644
--- a/po/it.po
+++ b/po/it.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: putidjcinthesubjectline at bethere.co.uk\n"
-"POT-Creation-Date: 2015-07-27 07:47+0100\n"
+"POT-Creation-Date: 2016-04-30 18:46+0100\n"
 "PO-Revision-Date: 2013-11-07 16:48+0000\n"
 "Last-Translator: \n"
 "Language-Team: English <team at example.com>\n"
@@ -484,28 +484,42 @@ msgstr "Nuovo profilo basato su %s"
 msgid "New profile details"
 msgstr "Dettagli del nuovo profilo"
 
-#. TC: profile dialog window title text.
-#: python/prelims/profiledialog.py:243
-msgid "IDJC Profile Manager"
-msgstr "Gestore dei profili IDJC"
+#. TC: data entry dialog label text.
+#: python/prelims/profiledialog.py:125
+#, fuzzy
+msgid "Profile name"
+msgstr "nome_profilo"
 
-#: python/prelims/profiledialog.py:277
-msgid "Profile"
-msgstr "Profilo"
+#. TC: data entry dialog label text.
+#: python/prelims/profiledialog.py:127 python/maingui.py:681
+msgid "Icon"
+msgstr "Icona"
 
+#. TC: data entry dialog label text.
 #. TC: column heading. The profile nicknames.
 #. TC: IRC nickname data entry label.
-#: python/prelims/profiledialog.py:285 python/irc.py:452
+#: python/prelims/profiledialog.py:129 python/prelims/profiledialog.py:285
+#: python/irc.py:452
 msgid "Nickname"
 msgstr "Nickname"
 
+#. TC: data entry dialog label text.
 #. TC: column heading.
 #. TC: Station description.
-#: python/prelims/profiledialog.py:288 python/irc.py:96
-#: python/playergui.py:307 python/sourceclientgui.py:1697
+#: python/prelims/profiledialog.py:131 python/prelims/profiledialog.py:288
+#: python/irc.py:96 python/playergui.py:334 python/sourceclientgui.py:1786
 msgid "Description"
 msgstr "Descrizione"
 
+#. TC: profile dialog window title text.
+#: python/prelims/profiledialog.py:243
+msgid "IDJC Profile Manager"
+msgstr "Gestore dei profili IDJC"
+
+#: python/prelims/profiledialog.py:277
+msgid "Profile"
+msgstr "Profilo"
+
 #. TC: column heading. The time a particular profile has been running.
 #: python/prelims/profiledialog.py:292
 msgid "Up-time"
@@ -562,12 +576,12 @@ msgstr "Tentativo %d. Non ci sono limiti ai tentativi."
 msgid "_Retry Now"
 msgstr "_Riprova adesso"
 
-#: python/__init__.py.in.in:101
+#: python/__init__.py.in.in:102
 #, python-format
 msgid "Copyright 2005-%s Stephen Fairchild and others."
 msgstr "Diritti 2005-%s Stephen Fairchild ed altri."
 
-#: python/__init__.py.in.in:103
+#: python/__init__.py.in.in:104
 msgid "Released under the GNU General Public License V2.0+."
 msgstr "Rilasciato sotto la Licenza Pubblica Generica GNU, V2.0+"
 
@@ -599,30 +613,30 @@ msgstr "Altre opzioni"
 
 #. TC: Track artist.
 #: python/irc.py:95 python/mutagentagger.py:375 python/songdb.py:902
-#: python/songdb.py:1290 python/sourceclientgui.py:94
+#: python/songdb.py:1290 python/sourceclientgui.py:99
 msgid "Artist"
 msgstr "Artista"
 
 #: python/irc.py:95 python/mutagentagger.py:375 python/songdb.py:1292
-#: python/sourceclientgui.py:94
+#: python/sourceclientgui.py:99
 msgid "Title"
 msgstr "Titolo"
 
 #: python/irc.py:95 python/mutagentagger.py:376 python/songdb.py:1291
-#: python/sourceclientgui.py:94
+#: python/sourceclientgui.py:99
 msgid "Album"
 msgstr "Album"
 
-#: python/irc.py:95 python/sourceclientgui.py:95
+#: python/irc.py:95 python/sourceclientgui.py:100
 msgid "Song name"
 msgstr "Canzone"
 
 #. TC: The DJ or Stream name.
-#: python/irc.py:96 python/sourceclientgui.py:1694
+#: python/irc.py:96 python/sourceclientgui.py:1783
 msgid "DJ name"
 msgstr "Nome DJ"
 
-#: python/irc.py:96 python/sourceclientgui.py:1695
+#: python/irc.py:96 python/sourceclientgui.py:1784
 msgid "Listen URL"
 msgstr "Indirizzo di ascolto (URL)"
 
@@ -679,13 +693,13 @@ msgid "Network"
 msgstr "Rete"
 
 #. TC: label for hostname entry.
-#: python/irc.py:446 python/sourceclientgui.py:208
+#: python/irc.py:446 python/sourceclientgui.py:270
 msgid "Hostname"
 msgstr "Nome host"
 
 #. TC: TCP/IP port number label.
 #. TC: TCP port number.
-#: python/irc.py:448 python/sourceclientgui.py:704
+#: python/irc.py:448 python/sourceclientgui.py:785
 msgid "Port"
 msgstr "Porta"
 
@@ -693,7 +707,7 @@ msgstr "Porta"
 msgid "User name"
 msgstr "Nome utente"
 
-#: python/irc.py:450 python/songdb.py:343 python/sourceclientgui.py:209
+#: python/irc.py:450 python/songdb.py:343 python/sourceclientgui.py:271
 msgid "Password"
 msgstr "Password"
 
@@ -918,11 +932,11 @@ msgid "Stop"
 msgstr "Ferma"
 
 #. TC: Column heading, whether to play.
-#: python/jingles.py:114 python/playergui.py:299
+#: python/jingles.py:114 python/playergui.py:326
 msgid "Play"
 msgstr "Riproduci"
 
-#: python/jingles.py:123 python/sourceclientgui.py:1051
+#: python/jingles.py:123 python/sourceclientgui.py:1132
 msgid "Repeat"
 msgstr "Ripeti"
 
@@ -931,7 +945,7 @@ msgstr "Ripeti"
 msgid "Configure"
 msgstr "Configurazione"
 
-#: python/jingles.py:327 python/playergui.py:4135
+#: python/jingles.py:327 python/playergui.py:4194
 msgid "Supported media"
 msgstr "Media supportati"
 
@@ -981,7 +995,7 @@ msgstr "Effetto"
 msgid "Effects %d"
 msgstr "Effetto"
 
-#: python/jingles.py:599 python/maingui.py:189
+#: python/jingles.py:599 python/maingui.py:190
 msgid "Background Tracks"
 msgstr ""
 
@@ -989,105 +1003,105 @@ msgstr ""
 msgid "Background Tracks volume."
 msgstr ""
 
-#: python/maingui.py:93
+#: python/maingui.py:94
 msgid "Show a JACK freewheel control on the main panel"
 msgstr ""
 
-#: python/maingui.py:95
+#: python/maingui.py:96
 msgid "Toggle JACK freewheel mode."
 msgstr ""
 
-#: python/maingui.py:168
+#: python/maingui.py:169
 #, fuzzy
 msgid "File"
 msgstr "Nome file"
 
-#: python/maingui.py:168 python/preferences.py:1130
+#: python/maingui.py:169 python/preferences.py:1130
 msgid "View"
 msgstr "Vista"
 
-#: python/maingui.py:169
+#: python/maingui.py:170
 msgid "JACK Ports"
 msgstr "Porte JACK"
 
-#: python/maingui.py:169
+#: python/maingui.py:170
 msgid "Help"
 msgstr ""
 
-#: python/maingui.py:171 python/maingui.py:3689
+#: python/maingui.py:172 python/maingui.py:3688
 msgid "Streams"
 msgstr "Flussi"
 
-#: python/maingui.py:172
+#: python/maingui.py:173
 #, fuzzy
 msgid "Recorders"
 msgstr "Registratore"
 
-#: python/maingui.py:185 python/maingui.py:224
+#: python/maingui.py:186 python/maingui.py:225
 msgid "Output"
 msgstr "Uscita"
 
-#: python/maingui.py:185
+#: python/maingui.py:186
 msgid "Preferences"
 msgstr "Preferenze"
 
-#: python/maingui.py:185
+#: python/maingui.py:186
 msgid "Profiles"
 msgstr "Profili"
 
-#: python/maingui.py:188 python/songdb.py:409
+#: python/maingui.py:189 python/songdb.py:409
 #, fuzzy
 msgid "Music Database"
 msgstr "Database"
 
-#: python/maingui.py:188
+#: python/maingui.py:189
 #, fuzzy
 msgid "Channel Meters"
 msgstr "Gestore canale"
 
-#: python/maingui.py:188
+#: python/maingui.py:189
 #, fuzzy
 msgid "Output Meters"
 msgstr "Uscita"
 
-#: python/maingui.py:189
+#: python/maingui.py:190
 msgid "Tabbed Area"
 msgstr ""
 
-#: python/maingui.py:189
+#: python/maingui.py:190
 msgid "Button Bar"
 msgstr ""
 
-#: python/maingui.py:223 python/preferences.py:1485
+#: python/maingui.py:224 python/preferences.py:1485
 msgid "Channels"
 msgstr "Canali"
 
-#: python/maingui.py:223
+#: python/maingui.py:224
 #, fuzzy
 msgid "Players"
 msgstr "Lettore"
 
-#: python/maingui.py:224
+#: python/maingui.py:225
 msgid "VoIP"
 msgstr ""
 
-#: python/maingui.py:224 python/maingui.py:3129
+#: python/maingui.py:225 python/maingui.py:3128
 msgid "DSP"
 msgstr ""
 
-#: python/maingui.py:224
+#: python/maingui.py:225
 msgid "Mix"
 msgstr ""
 
-#: python/maingui.py:224
+#: python/maingui.py:225
 msgid "Misc"
 msgstr ""
 
-#: python/maingui.py:269
+#: python/maingui.py:270
 msgid "Reset"
 msgstr ""
 
-#: python/maingui.py:272
+#: python/maingui.py:273
 msgid "Reset the JACK port connections to the default settings."
 msgstr ""
 
@@ -1100,37 +1114,33 @@ msgid ""
 "and replaced with defaults."
 msgstr ""
 
-#: python/maingui.py:321
+#: python/maingui.py:320
 msgid "No compatible ports available."
 msgstr ""
 
-#: python/maingui.py:364
+#: python/maingui.py:363
 #, python-brace-format
 msgid "{0} profile={1}:{2} settings saved."
 msgstr ""
 
-#: python/maingui.py:367
+#: python/maingui.py:366
 #, python-brace-format
 msgid "{0} session={1}:{2} settings saved."
 msgstr ""
 
-#: python/maingui.py:671
+#: python/maingui.py:670
 msgid "Text"
 msgstr "Testo"
 
-#: python/maingui.py:674
+#: python/maingui.py:673
 msgid "The opener button's text."
 msgstr "Il testo del pulsante di apertura"
 
-#: python/maingui.py:682
-msgid "Icon"
-msgstr "Icona"
-
-#: python/maingui.py:690
+#: python/maingui.py:689
 msgid "The opener button's icon."
 msgstr "L'iconda del pulsante di apertura."
 
-#: python/maingui.py:698
+#: python/maingui.py:697
 msgid ""
 "The headroom is the amount by which to reduce player volume when this opener "
 "is active. Note that the actual amount will be the largest value of all the "
@@ -1140,15 +1150,15 @@ msgstr ""
 "questo opener è attivo. Notare che la riduzione attuale sarà relativa al "
 "valore più alto tra tutti i pulsanti aperti."
 
-#: python/maingui.py:703
+#: python/maingui.py:702
 msgid "The amount of headroom required (dB)"
 msgstr "La quantità di headroom richiesta (dB)"
 
-#: python/maingui.py:712
+#: python/maingui.py:711
 msgid "This button will flash as a reminder to close"
 msgstr "Questo pulsante lampeggerà per ricordarvi di chiuderlo"
 
-#: python/maingui.py:713
+#: python/maingui.py:712
 msgid ""
 "After a number of seconds where a main player is active this button's status "
 "indicator will start to flash and will continue to do so until the button is "
@@ -1159,11 +1169,11 @@ msgstr ""
 "a farlo finché il pulsante non sarà rilasciato o finché non verrò fermata la "
 "riproduzione."
 
-#: python/maingui.py:721
+#: python/maingui.py:720
 msgid "This button is to be treated as a microphone opener"
 msgstr "Questo apre il microfono"
 
-#: python/maingui.py:723
+#: python/maingui.py:722
 msgid ""
 "The button will be grouped with the other microphone opener buttons. It will "
 "be affected by signals to close microphone buttons. Channels associated with "
@@ -1174,83 +1184,83 @@ msgstr ""
 "questo pulsante saranno missati in modo diverso quando vengono usate le "
 "modalità VoIP."
 
-#: python/maingui.py:732
+#: python/maingui.py:731
 msgid "This button will automatically cancel JACK freewheel mode"
 msgstr ""
 
-#: python/maingui.py:734
+#: python/maingui.py:733
 msgid ""
 "This should be set for all buttons that control input from a live sound "
 "source or device."
 msgstr ""
 
-#: python/maingui.py:737
+#: python/maingui.py:736
 msgid "Button Open Triggers"
 msgstr "Inneschi apertura pulsante"
 
-#: python/maingui.py:744
+#: python/maingui.py:743
 msgid "Playlist advance button"
 msgstr "Pulsante di avanzamento playlist"
 
-#: python/maingui.py:745 python/maingui.py:746
+#: python/maingui.py:744 python/maingui.py:745
 #, python-format
 msgid "'%s' control"
 msgstr "controllo '%s'"
 
 #. TC: Insert playlist control to stop the player.
-#: python/maingui.py:745 python/playergui.py:4393
+#: python/maingui.py:744 python/playergui.py:4457
 msgid "Player Stop"
 msgstr "Ferma lettore"
 
 #. TC: Insert playlist control to stop the player.
-#: python/maingui.py:746 python/playergui.py:4400
+#: python/maingui.py:745 python/playergui.py:4464
 msgid "Player Stop 2"
 msgstr "Ferma lettore 2"
 
-#: python/maingui.py:747
+#: python/maingui.py:746
 msgid "Announcements"
 msgstr "Annunci"
 
-#: python/maingui.py:759
+#: python/maingui.py:758
 msgid "When opened close these other buttons"
 msgstr "Chiude questi altri pulsanti se aperto"
 
-#: python/maingui.py:770
+#: python/maingui.py:769
 msgid "Shell Command"
 msgstr "Comando Shell"
 
-#: python/maingui.py:771
+#: python/maingui.py:770
 msgid ""
 "Mostly useful issuing 'amixer' commands, in particular for setting capture."
 msgstr ""
 "Più utile se si lancia il comando 'amixer', in particolare per impostare la "
 "registrazione."
 
-#: python/maingui.py:791
+#: python/maingui.py:790
 msgid "On open"
 msgstr "All'avvio"
 
-#: python/maingui.py:792
+#: python/maingui.py:791
 msgid "On close"
 msgstr "In chiusura"
 
-#: python/maingui.py:836
+#: python/maingui.py:835
 msgid "Main Panel Opener Buttons"
 msgstr "Pulsanti di apertura del pannello principale"
 
-#: python/maingui.py:848
+#: python/maingui.py:847
 msgid "Indicate button numbers and associated channel numbers"
 msgstr "Indica il numero dei pulsanti e dei numeri di canale associati"
 
-#: python/maingui.py:850
+#: python/maingui.py:849
 msgid "A useful feature to have switched on while allocating channel openers."
 msgstr "Una funzionalità utile da attivare mentre si allocano i canali"
 
-#: python/maingui.py:856
+#: python/maingui.py:855
 msgid "Status Indicator Appearance"
 msgstr "Aspetto dell'indicatore di stato"
 
-#: python/maingui.py:859
+#: python/maingui.py:858
 msgid ""
 "Each opener button has two vertical bars at the side to make the button "
 "state more apparent. These settings control their appearance."
@@ -1258,28 +1268,28 @@ msgstr ""
 "Ogni pulsante ha due barre verticali ai lati per renderne chiaro lo stato. "
 "Queste impostazioni ne controllano la grafica."
 
-#: python/maingui.py:868 python/format.py:827
+#: python/maingui.py:867 python/format.py:847
 msgid "Width"
 msgstr "Larghezza"
 
-#: python/maingui.py:875
+#: python/maingui.py:874
 msgid "Opened"
 msgstr "Aperto"
 
-#: python/maingui.py:879 python/preferences.py:503 python/preferences.py:505
+#: python/maingui.py:878 python/preferences.py:503 python/preferences.py:505
 msgid "Closed"
 msgstr "Chiuso"
 
-#: python/maingui.py:884
+#: python/maingui.py:883
 msgid "Remind"
 msgstr "Ricorda"
 
 #. TC: A placeholder text for when there are no opener buttons.
-#: python/maingui.py:1065
+#: python/maingui.py:1064
 msgid "No Channel Opener Buttons"
 msgstr "Nessun canale da abilitare"
 
-#: python/maingui.py:1354
+#: python/maingui.py:1353
 msgid ""
 "This indicates the state of the various streams. Flashing means stream "
 "packets are being discarded because of network congestion. Partial red means "
@@ -1291,54 +1301,54 @@ msgstr ""
 "indica che il buffer di invio è parzialmente pieno, ovvero difficoltà di "
 "comunicazione con il server. Verde indica che tutto è a posto."
 
-#: python/maingui.py:1377
+#: python/maingui.py:1376
 msgid "The combined total number of listeners in all server tabs."
 msgstr "Il numero cumulato di ascoltatori per tutti i server."
 
 #. TC: Record as in, to make a recording.
-#: python/maingui.py:1825 python/sourceclientgui.py:2784
+#: python/maingui.py:1824 python/sourceclientgui.py:2874
 msgid "Record"
 msgstr "Registra"
 
-#: python/maingui.py:2647
+#: python/maingui.py:2646
 msgid "Confirmation to quit IDJC is required."
 msgstr "Viene chiesta una conferma per chiudere IDJC."
 
-#: python/maingui.py:2651
+#: python/maingui.py:2650
 msgid "All active recordings and radio streams will terminate."
 msgstr "Tutte le registrazioni ed i flussi radio verranno interrotti."
 
-#: python/maingui.py:2653
+#: python/maingui.py:2652
 msgid "All of the active radio streams will terminate."
 msgstr "Tutti flussi radio verranno interrotti."
 
-#: python/maingui.py:2655
+#: python/maingui.py:2654
 msgid "All active recordings will cease."
 msgstr "Tutte le registrazioni verranno interrotte."
 
 #. TC: Popup menu item, wipes away the tracks played history text.
-#: python/maingui.py:2921 python/maingui.py:3353
+#: python/maingui.py:2920 python/maingui.py:3352
 msgid "Remove Contents"
 msgstr "Rimuove i contenuti"
 
-#: python/maingui.py:3076
+#: python/maingui.py:3075
 msgid "Renameable Labels"
 msgstr ""
 
-#: python/maingui.py:3100
+#: python/maingui.py:3099
 #, fuzzy
 msgid "Main Players"
 msgstr "Lettore destro"
 
-#: python/maingui.py:3153
+#: python/maingui.py:3152
 msgid "Mix voice over IP audio to the output stream."
 msgstr "Manda in onda l'audio del VoIP"
 
-#: python/maingui.py:3166
+#: python/maingui.py:3165
 msgid "Mix voice over IP audio to the DJ only."
 msgstr "Missa l'audio del VoIP solo al DJ"
 
-#: python/maingui.py:3193
+#: python/maingui.py:3192
 msgid ""
 "This button steps through the active playlist, pausing between tracks. The "
 "active playlist is defined by the placement of the crossfader."
@@ -1346,44 +1356,44 @@ msgstr ""
 "Questo pulsante scorre la playlist attiva facendo una pausa tra le tracce. "
 "La playlist attiva viene dedotta dal posizionamento del crossfader"
 
-#: python/maingui.py:3238 python/preferences.py:873
+#: python/maingui.py:3237 python/preferences.py:873
 msgid "The volume control shared by both music players."
 msgstr "Il controllo del volume per entrambi i lettori"
 
-#: python/maingui.py:3249
+#: python/maingui.py:3248
 msgid "The volume control for the right music player."
 msgstr "Il volume del lettore di destra."
 
-#: python/maingui.py:3277
+#: python/maingui.py:3276
 msgid "VoIP level adjustment. 0dB gain is at the mid point."
 msgstr ""
 
-#: python/maingui.py:3300
+#: python/maingui.py:3299
 msgid "The stream volume level to send to the voice over IP connection."
 msgstr "Il volume del flusso da inviare alla connessione VoIP"
 
-#: python/maingui.py:3327 python/preferences.py:1413
+#: python/maingui.py:3326 python/preferences.py:1413
 msgid "Tracks Played"
 msgstr "Tracce eseguite"
 
-#: python/maingui.py:3398 python/maingui.py:3400 python/maingui.py:3424
+#: python/maingui.py:3397 python/maingui.py:3399 python/maingui.py:3423
 msgid "Monitor Mix"
 msgstr "Monitoraggio Mix"
 
-#: python/maingui.py:3407 python/maingui.py:3424 python/playergui.py:4334
+#: python/maingui.py:3406 python/maingui.py:3423 python/playergui.py:4398
 msgid "DJ"
 msgstr "DJ"
 
 #. TC: binding editor, action pane, first row, toplevel menu.
-#: python/maingui.py:3410 python/maingui.py:3424 python/midicontrols.py:155
-#: python/midicontrols.py:1507 python/playergui.py:4326
-#: python/sourceclientgui.py:2792
+#: python/maingui.py:3409 python/maingui.py:3423 python/midicontrols.py:155
+#: python/midicontrols.py:1507 python/playergui.py:4390
+#: python/sourceclientgui.py:2882
 msgid "Stream"
 msgstr "Flusso"
 
 #. TC: Context {0}, {1}, {2} = Monitor Mix, Stream, DJ
 #. TC: Or whatever they become translated to.
-#: python/maingui.py:3420
+#: python/maingui.py:3419
 #, python-brace-format
 msgid ""
 "In IDJC there are are two audio paths and this '{0}' control toggles between "
@@ -1397,83 +1407,83 @@ msgstr ""
 "impostato su '{2}' per utilizzare al meglio le funzionalità VoIP"
 
 #. TC: Dropdown box title text widget.
-#: python/maingui.py:3433 python/maingui.py:3435
+#: python/maingui.py:3432 python/maingui.py:3434
 msgid "Metadata Source"
 msgstr "Sorgente dei metadati"
 
 #. TC: The chosen source of track metadata.
-#: python/maingui.py:3441 python/playergui.py:4044
+#: python/maingui.py:3440 python/playergui.py:4103
 msgid "Playlist 1"
 msgstr "Playlist 1"
 
 #. TC: The chosen source of track metadata.
-#: python/maingui.py:3443 python/playergui.py:4045
+#: python/maingui.py:3442 python/playergui.py:4104
 msgid "Playlist 2"
 msgstr "Playlist 2"
 
 #. TC: The chosen source of track metadata.
-#: python/maingui.py:3445 python/songdb.py:909 python/songdb.py:1293
+#: python/maingui.py:3444 python/songdb.py:909 python/songdb.py:1293
 msgid "Last Played"
 msgstr "Ultima eseguita"
 
 #. TC: The chosen source of track metadata.
-#: python/maingui.py:3447 python/maingui.py:3484 python/maingui.py:3486
+#: python/maingui.py:3446 python/maingui.py:3483 python/maingui.py:3485
 msgid "Crossfader"
 msgstr "Crossfader"
 
 #. TC: The chosen source of track metadata. In this case no metadata.
 #. TC: Fade time is zero. No fade, none.
-#: python/maingui.py:3449 python/playergui.py:4309
+#: python/maingui.py:3448 python/playergui.py:4373
 msgid "None"
 msgstr "Nessuna"
 
 #. TC: The chosen source of track metadata. In this case no metadata.
-#: python/maingui.py:3451
+#: python/maingui.py:3450 python/playergui.py:4104
 msgid "Playlist 3"
 msgstr "Playlist 3"
 
-#: python/maingui.py:3456
+#: python/maingui.py:3455
 #, fuzzy
 msgid "Select the origin for the playing track metadata on the stream."
 msgstr "Seleziona quale Deck è responsabile dei metadati del flusso"
 
 #. TC: Abbreviation of left.
-#: python/maingui.py:3466 python/maingui.py:3468
+#: python/maingui.py:3465 python/maingui.py:3467
 msgid "L"
 msgstr "L"
 
-#: python/maingui.py:3478
+#: python/maingui.py:3477
 msgid "Move the crossfader fully left."
 msgstr "Sposta il crossfader a sinistra"
 
-#: python/maingui.py:3498
+#: python/maingui.py:3497
 msgid "The crossfader."
 msgstr "Il crossfader"
 
 #. TC: Abbreviation of right.
-#: python/maingui.py:3502 python/maingui.py:3504
+#: python/maingui.py:3501 python/maingui.py:3503
 msgid "R"
 msgstr "R"
 
-#: python/maingui.py:3514
+#: python/maingui.py:3513
 msgid "Move the crossfader fully right."
 msgstr "Sposta il crossfader a destra"
 
 #. TC: Describes a mid point.
-#: python/maingui.py:3523 python/maingui.py:3525
+#: python/maingui.py:3522 python/maingui.py:3524
 msgid "Middle"
 msgstr "Mezzo/Metà"
 
-#: python/maingui.py:3542 python/maingui.py:3549
+#: python/maingui.py:3541 python/maingui.py:3548
 msgid "Move the crossfader to the middle of its range of travel."
 msgstr "Sposta il crossfader a metà della corsa"
 
 #. TC: The attenuation response curve of the crossfader. User selectable.
-#: python/maingui.py:3554 python/maingui.py:3556
+#: python/maingui.py:3553 python/maingui.py:3555
 msgid "Response"
 msgstr "Risposta"
 
-#: python/maingui.py:3578
+#: python/maingui.py:3577
 msgid ""
 "This selects the response curve of the crossfader.\n"
 "\n"
@@ -1483,11 +1493,11 @@ msgstr ""
 "Le attenuzioni nel punto di mezzo sono -3dB, 0dB e -22dB rispettivamente."
 
 #. TC: Duration in seconds.
-#: python/maingui.py:3592 python/maingui.py:3594
+#: python/maingui.py:3591 python/maingui.py:3593
 msgid "Time"
 msgstr "Tempo"
 
-#: python/maingui.py:3611
+#: python/maingui.py:3610
 msgid ""
 "The time in seconds that the crossfader will take to automatically pass "
 "across when the button to the right is clicked."
@@ -1497,11 +1507,11 @@ msgstr ""
 
 #. TC: The crossfader pass-across button text.
 #. TC: The actual button appears as [<-->] with this text above it.
-#: python/maingui.py:3620 python/maingui.py:3622
+#: python/maingui.py:3619 python/maingui.py:3621
 msgid "Pass"
 msgstr "Avvia"
 
-#: python/maingui.py:3635
+#: python/maingui.py:3634
 msgid ""
 "This button causes the crossfader to move to the opposite side at a speed "
 "determined by the speed selector to the left."
@@ -1509,32 +1519,32 @@ msgstr ""
 "Questo pulsante muove il crossfader fino alla parte opposta nel lasso di "
 "tempo specificato qui a sinistra"
 
-#: python/maingui.py:3678
+#: python/maingui.py:3677
 #, fuzzy
 msgid "Peak"
 msgstr "Str Peak"
 
-#: python/maingui.py:3681
+#: python/maingui.py:3680
 msgid "A peak hold meter indicating the signal strength of the stream audio."
 msgstr ""
 "Un indicatore a tenuta di picco che indica la potenza del segnale audio "
 "trasmesso."
 
 #. TC: This text appears above the stream mix VU meter.
-#: python/maingui.py:3703
+#: python/maingui.py:3702
 msgid "VU"
 msgstr ""
 
-#: python/maingui.py:3707
+#: python/maingui.py:3706
 msgid "A VU meter for the stream audio."
 msgstr "Indicatore VU per il flusso audio"
 
 #. TC: Appears above the mic meters as a label followed by a number.
-#: python/maingui.py:3710
+#: python/maingui.py:3709
 msgid "Ch"
 msgstr "Ch"
 
-#: python/maingui.py:3737
+#: python/maingui.py:3736
 msgid ""
 "A peak hold meter indicating the microphone signal strength and a meter "
 "indicating attenuation levels in the microphone signal processing system. "
@@ -1569,7 +1579,7 @@ msgstr "Lettore riproduci/pausa"
 
 #. TC: Control method. Please keep it as Target:Action.
 #. TC: Playlist control.
-#: python/midicontrols.py:56 python/playergui.py:3798
+#: python/midicontrols.py:56 python/playergui.py:3857
 msgid "Player stop"
 msgstr "Lettore ferma"
 
@@ -2249,14 +2259,14 @@ msgstr ""
 
 #. TC: Track playback time.
 #. TC: Playback time.
-#: python/songdb.py:908 python/songdb.py:1296 python/playergui.py:313
+#: python/songdb.py:908 python/songdb.py:1296 python/playergui.py:340
 msgid "Duration"
 msgstr "Durata"
 
-#: python/songdb.py:910 python/songdb.py:1297 python/format.py:594
-#: python/format.py:615 python/format.py:701 python/format.py:722
-#: python/format.py:857 python/format.py:962 python/format.py:1012
-#: python/format.py:1022
+#: python/songdb.py:910 python/songdb.py:1297 python/format.py:614
+#: python/format.py:635 python/format.py:721 python/format.py:742
+#: python/format.py:877 python/format.py:982 python/format.py:1032
+#: python/format.py:1042 python/format.py:1120 python/format.py:1153
 msgid "Bitrate"
 msgstr "Bitrate"
 
@@ -2386,300 +2396,306 @@ msgstr "data di registrazione"
 msgid "Found Prokyon 3 schema"
 msgstr ""
 
-#: python/playergui.py:236
+#: python/playergui.py:104
+msgid "Click to stop adding tracks!"
+msgstr ""
+
+#: python/playergui.py:263
 msgid "Cuesheet Playlist"
 msgstr "Playlist da file cue"
 
 #. TC: Column heading, the track number.
-#: python/playergui.py:302
+#: python/playergui.py:329
 msgid "Trk"
 msgstr "Trk"
 
 #. TC: Column heading, the index number.
-#: python/playergui.py:305
+#: python/playergui.py:332
 msgid "Ind"
 msgstr "Ind"
 
-#: python/playergui.py:414
+#: python/playergui.py:441
 msgid "External Playlist"
 msgstr "Playlist esterna"
 
 #. TC: Button text to activate an external playlist.
-#: python/playergui.py:425
+#: python/playergui.py:452
 msgid "Active"
 msgstr "Attivo"
 
-#: python/playergui.py:435
+#: python/playergui.py:462
 msgid "Choose a playlist file"
 msgstr "Scegli un file playlist"
 
-#: python/playergui.py:440
+#: python/playergui.py:467
 msgid "Choose a media directory"
 msgstr "Scegli una cartella per i media"
 
-#: python/playergui.py:453
+#: python/playergui.py:480
 msgid "Choose a playlist file."
 msgstr "Scegli un playlist file"
 
-#: python/playergui.py:455
+#: python/playergui.py:482
 msgid "Choose a folder/directory of music."
 msgstr "Scegli una cartella per la musica"
 
-#: python/playergui.py:522
+#: python/playergui.py:549
 msgid "Create a new announcement"
 msgstr "Crea un nuovo annuncio"
 
-#: python/playergui.py:525
+#: python/playergui.py:552
 msgid "Modify or Delete this announcement"
 msgstr "Modifica o elimina questo annuncio"
 
 #. TC: Embed a DJ announcement text into the playlist.
-#: python/playergui.py:528 python/playergui.py:4430
+#: python/playergui.py:555 python/playergui.py:4494
 msgid "Announcement"
 msgstr "Avviso"
 
 #. TC: The time format as minutes and seconds.
-#: python/playergui.py:556
+#: python/playergui.py:583
 msgid "mm:ss"
 msgstr "mm:ss"
 
 #. TC: Alongside the name of the next track.
-#: python/playergui.py:609
+#: python/playergui.py:636
 msgid "Next track"
 msgstr "Traccia successiva"
 
-#: python/playergui.py:934
+#: python/playergui.py:961
 msgid "By Extension"
 msgstr "Per estensione"
 
-#: python/playergui.py:934
+#: python/playergui.py:961
 msgid "M3U playlist"
 msgstr "Playlist M3U"
 
-#: python/playergui.py:934
+#: python/playergui.py:961
 #, fuzzy
 msgid "M3U8 playlist"
 msgstr "Playlist M3U"
 
-#: python/playergui.py:935
+#: python/playergui.py:962
 msgid "XSPF playlist"
 msgstr "XSPF playlist"
 
-#: python/playergui.py:935
+#: python/playergui.py:962
 msgid "PLS playlist"
 msgstr "PLS playlist"
 
-#: python/playergui.py:1007
+#: python/playergui.py:1034
 #, python-format
 msgid "%d Audio Tracks"
 msgstr ""
 
 #. TC: Missing metadata text.
-#: python/playergui.py:1017
+#: python/playergui.py:1044
 msgid "Unknown"
 msgstr "Sconosciuto"
 
-#: python/playergui.py:1021
+#: python/playergui.py:1048
 msgid "(Cue sheet)"
 msgstr "(Elementi del file cue)"
 
-#: python/playergui.py:1058
+#: python/playergui.py:1085
 msgid "Bad Tag"
 msgstr "Tag errato"
 
-#: python/playergui.py:1888 python/playergui.py:4268
+#: python/playergui.py:1921 python/playergui.py:4333
 msgid "Manual"
 msgstr "Manuale"
 
-#: python/playergui.py:1892 python/playergui.py:4265
+#. TC: playlist modes
+#: python/playergui.py:1925 python/playergui.py:4332
 msgid "Play All"
 msgstr "Riproduci tutto"
 
-#: python/playergui.py:1900 python/playergui.py:1909 python/playergui.py:4266
+#: python/playergui.py:1933 python/playergui.py:1942 python/playergui.py:4332
 msgid "Loop All"
 msgstr "Riproduci in ciclo"
 
-#: python/playergui.py:1900 python/playergui.py:4269
+#: python/playergui.py:1933 python/playergui.py:4333
 msgid "Cue Up"
 msgstr "Accoda"
 
-#: python/playergui.py:1901 python/playergui.py:4273
+#: python/playergui.py:1934 python/playergui.py:4337
 msgid "Fade Over"
 msgstr "Dissolvenza in uscita"
 
-#: python/playergui.py:1913 python/playergui.py:1984 python/playergui.py:4267
+#: python/playergui.py:1946 python/playergui.py:2021 python/playergui.py:4332
 msgid "Random"
 msgstr "Casuale"
 
-#: python/playergui.py:1953 python/playergui.py:4270
+#: python/playergui.py:1990 python/playergui.py:4333
 msgid "External"
 msgstr "Esterna"
 
-#: python/playergui.py:1965 python/playergui.py:1981 python/playergui.py:4272
+#. TC: yet more playlist modes these ones for the main players only
+#: python/playergui.py:2002 python/playergui.py:2018 python/playergui.py:4337
 msgid "Alternate"
 msgstr "Alterna"
 
-#: python/playergui.py:1965 python/playergui.py:1983 python/playergui.py:4274
+#: python/playergui.py:2002 python/playergui.py:2020 python/playergui.py:4337
 msgid "Random Hop"
 msgstr "Salto casuale"
 
 #. TC: The remaining playlist time.
-#: python/playergui.py:2138 python/playergui.py:2144
+#: python/playergui.py:2176 python/playergui.py:2182
 msgid "Remaining"
 msgstr "Restante"
 
 #. TC: The estimated finish time of the playlist.
 #. TC: The estimated finish time of the playlist (ETA).
-#: python/playergui.py:2140 python/playergui.py:2144 python/playergui.py:2158
+#: python/playergui.py:2178 python/playergui.py:2182 python/playergui.py:2196
 msgid "Finish"
 msgstr "Fine"
 
 #. TC: The play duration of the block of audio tracks.
-#: python/playergui.py:2145 python/playergui.py:2156
+#: python/playergui.py:2183 python/playergui.py:2194
 msgid "Block size"
 msgstr "Dimensione blocco"
 
 #. TC: File dialog title text.
-#: python/playergui.py:2546
+#: python/playergui.py:2584
 msgid "Add music to left playlist"
 msgstr "Aggiungi musica alla playlist di sinistra"
 
 #. TC: File dialog title text.
-#: python/playergui.py:2549
+#: python/playergui.py:2587
 msgid "Add music to right playlist"
 msgstr "Aggiungi musica alla playlist di destra"
 
-#: python/playergui.py:2551
+#: python/playergui.py:2589
 msgid "Add background music"
 msgstr ""
 
 #. TC: File filter text.
-#: python/playergui.py:2563
+#: python/playergui.py:2601
 msgid "Supported Media Formats"
 msgstr "Formati di media supportati"
 
 #. TC: Expander text "Select File Type (.pls)" for the pls file type.
-#: python/playergui.py:2625
+#: python/playergui.py:2652
 msgid "Select File Type"
 msgstr "Seleziona il tipo di file"
 
-#: python/playergui.py:3383
+#: python/playergui.py:3442
 msgid "Save left playlist"
 msgstr "Salva la playlist di sinistra"
 
-#: python/playergui.py:3385
+#: python/playergui.py:3444
 msgid "Save right playlist"
 msgstr "Salva la playlist di destra"
 
-#: python/playergui.py:3387
+#: python/playergui.py:3446
 #, fuzzy
 msgid "Save background playlist"
 msgstr "Salva la playlist di destra"
 
-#: python/playergui.py:3405
+#: python/playergui.py:3464
 msgid "File Type"
 msgstr "Tipo file"
 
-#: python/playergui.py:3410
+#: python/playergui.py:3469
 msgid "Extension"
 msgstr "Estensione"
 
 #. TC: Playlist control.
 #. TC: Insert playlist control to do a ten second fade to the next track.
-#: python/playergui.py:3774 python/playergui.py:4441
+#: python/playergui.py:3833 python/playergui.py:4505
 msgid "Fade 10s"
 msgstr "Dissolvi 10sec"
 
 #. TC: Playlist control.
 #. TC: Insert playlist control to do a five second fade to the next track.
-#: python/playergui.py:3780 python/playergui.py:4448
+#: python/playergui.py:3839 python/playergui.py:4512
 msgid "Fade 5s"
 msgstr "Dissolvi 5sec"
 
 #. TC: Playlist control.
 #. TC: Insert playlist control to not do a fade to the next track.
-#: python/playergui.py:3785 python/playergui.py:4455
+#: python/playergui.py:3844 python/playergui.py:4519
 msgid "No Fade"
 msgstr "Nessun dissolvenza"
 
 #. TC: Playlist control.
-#: python/playergui.py:3793
+#: python/playergui.py:3852
 msgid ">> Normal Speed <<"
 msgstr ">> Velocità normale <<"
 
 #. TC: Playlist control.
-#: python/playergui.py:3803
+#: python/playergui.py:3862
 msgid "Player stop 2"
 msgstr "Lettore ferma 2"
 
 #. TC: Playlist control.
 #. TC: Insert playlist control to jump to the top of the playlist.
-#: python/playergui.py:3808 python/playergui.py:4407
+#: python/playergui.py:3867 python/playergui.py:4471
 msgid "Jump To Top"
 msgstr "Passa all'inizio"
 
 #. TC: Playlist control.
-#: python/playergui.py:3813 python/playergui.py:4467
+#: python/playergui.py:3872 python/playergui.py:4531
 msgid "Stop streaming"
 msgstr "Interrompi il flusso"
 
 #. TC: Playlist control.
-#: python/playergui.py:3818 python/playergui.py:4475
+#: python/playergui.py:3877 python/playergui.py:4539
 msgid "Stop recording"
 msgstr "Interrompi la registrazione"
 
-#: python/playergui.py:3851
+#: python/playergui.py:3910
 #, fuzzy
 msgid "Announcement:"
 msgstr "Avviso"
 
 #. TC: Playlist control.
-#: python/playergui.py:3857
+#: python/playergui.py:3916
 msgid ">>> Transfer across >>>"
 msgstr ">>> Trasferisci tra >>>"
 
 #. TC: Playlist control.
-#: python/playergui.py:3860
+#: python/playergui.py:3919
 msgid "<<< Transfer across <<<"
 msgstr "<<< Trasferisci tra <<<"
 
 #. TC: Playlist control.
-#: python/playergui.py:3865
+#: python/playergui.py:3924
 msgid ">>> Fade across >>>"
 msgstr ">>> Dissolvi tra >>>"
 
 #. TC: Playlist control.
-#: python/playergui.py:3868
+#: python/playergui.py:3927
 msgid "<<< Fade across <<<"
 msgstr "<<< Dissolvi tra <<<"
 
 #. TC: Playlist control.
-#: python/playergui.py:3874
+#: python/playergui.py:3933
 msgid "Ignored playlist control"
 msgstr "Controlli playlist ignorati"
 
-#: python/playergui.py:3942
+#: python/playergui.py:4001
 #, python-brace-format
 msgid "Playing track {0} of {1}"
 msgstr "Riproduzione traccia {0} di {1}"
 
 #. TC: Previous line: Playing track {0} of {1}
-#: python/playergui.py:3955
+#: python/playergui.py:4014
 #, python-format
 msgid "From the album, %s"
 msgstr "Dall'album, %s"
 
-#: python/playergui.py:3962
+#: python/playergui.py:4021
 #, python-format
 msgid "Total number of tracks %d"
 msgstr "Numero totale di tracce %d"
 
-#: python/playergui.py:3966 python/playergui.py:3968
+#: python/playergui.py:4025 python/playergui.py:4027
 #, python-format
 msgid "Total play duration %s"
 msgstr "Durata totale %s"
 
-#: python/playergui.py:4018
+#: python/playergui.py:4077
 msgid ""
 "Left click toggles between showing the amount of time elapsed or remaining "
 "on the current track being played."
@@ -2687,7 +2703,7 @@ msgstr ""
 "Il click sinistro cambia dal mostrare il tempo trascorso o restante della "
 "traccia in esecuzione."
 
-#: python/playergui.py:4036
+#: python/playergui.py:4095
 msgid ""
 "This slider acts as both a play progress indicator and as a means for "
 "seeking within the currently playing track."
@@ -2696,16 +2712,16 @@ msgstr ""
 "strumento per spostarsi nella traccia attualmente in esecuzione."
 
 #. TC: File filter text.
-#: python/playergui.py:4125
+#: python/playergui.py:4184
 msgid "All file types"
 msgstr "Tutti i tipi di file"
 
-#: python/playergui.py:4130
+#: python/playergui.py:4189
 #, fuzzy
 msgid "Playlist types"
 msgstr "Playlist 1"
 
-#: python/playergui.py:4145
+#: python/playergui.py:4204
 msgid ""
 "'Block size' indicates the amount of time that it will take to play from the "
 "currently selected track to the next stop.\n"
@@ -2717,43 +2733,43 @@ msgstr ""
 "'Restante' è il tempo fino al prossimo stop.\n"
 "'Fine' è il tempo calcolato quando finirà la riproduzione delle tracce."
 
-#: python/playergui.py:4168
+#: python/playergui.py:4230
 msgid "This adjusts the playback speed anywhere from 25% to 400%."
 msgstr "Regola la velocità di riproduzione tra il 25% ed il 400%."
 
-#: python/playergui.py:4182
+#: python/playergui.py:4244
 msgid "This sets the playback speed back to normal."
 msgstr "Reimposta la normale velocità di riproduzione "
 
-#: python/playergui.py:4199
+#: python/playergui.py:4261
 msgid "Previous track."
 msgstr "Traccia precedente"
 
-#: python/playergui.py:4211
+#: python/playergui.py:4273
 msgid "Play."
 msgstr "Riproduci"
 
-#: python/playergui.py:4221
+#: python/playergui.py:4283
 msgid "Pause."
 msgstr "Pausa"
 
-#: python/playergui.py:4231
+#: python/playergui.py:4293
 msgid "Stop."
 msgstr "Ferma"
 
-#: python/playergui.py:4241
+#: python/playergui.py:4303
 msgid "Next track."
 msgstr "Traccia successiva"
 
-#: python/playergui.py:4253
+#: python/playergui.py:4315
 msgid "Add tracks to the playlist."
 msgstr "Aggiungi tracce alla playlist"
 
-#: python/playergui.py:4260 python/preferences.py:71
+#: python/playergui.py:4322 python/preferences.py:71
 msgid "Playlist Mode"
 msgstr "Modalità playlist"
 
-#: python/playergui.py:4279
+#: python/playergui.py:4343
 msgid ""
 "This sets the playlist mode which defines player behaviour after a track has "
 "finished playing.\n"
@@ -2815,31 +2831,31 @@ msgstr ""
 "'Salto casuale' sceglierà una traccia a caso dall'altra playlist."
 
 #. TC: Fade time heading.
-#: python/playergui.py:4303 python/preferences.py:72
+#: python/playergui.py:4367 python/preferences.py:72
 msgid "Fade"
 msgstr "Dissolvenza"
 
-#: python/playergui.py:4315
+#: python/playergui.py:4379
 msgid "This controls the amount of fade between tracks."
 msgstr "Controlla il tempo di dissolvenza tra tracce"
 
-#: python/playergui.py:4322
+#: python/playergui.py:4386
 msgid "Audio Feed"
 msgstr "Audio Feed"
 
-#: python/playergui.py:4332
+#: python/playergui.py:4396
 msgid "Make output from this player available for streaming."
 msgstr "Manda in onda l'audio di questo lettore"
 
-#: python/playergui.py:4340
+#: python/playergui.py:4404
 msgid "Make output from this player audible to the DJ."
 msgstr "Rende l'uscita di questo lettore udibile dal DJ"
 
-#: python/playergui.py:4342
+#: python/playergui.py:4406
 msgid "Force"
 msgstr ""
 
-#: python/playergui.py:4348
+#: python/playergui.py:4412
 msgid ""
 "When selected this player will be treated like a main player.\n"
 "It will be affected by microphone ducking and won't mute when a main player "
@@ -2847,122 +2863,122 @@ msgid ""
 msgstr ""
 
 #. TC: Insert playlist control.
-#: python/playergui.py:4361
+#: python/playergui.py:4425
 msgid "Insert control"
 msgstr "Inserisci controllo"
 
 #. TC: The Item submenu.
-#: python/playergui.py:4370
+#: python/playergui.py:4434
 msgid "Item"
 msgstr "Elemento"
 
 #. TC: The Playlist submenu.
-#: python/playergui.py:4375
+#: python/playergui.py:4439
 msgid "Playlist"
 msgstr "Playlist"
 
 #. TC: Insert playlist control to set playback speed to normal.
-#: python/playergui.py:4386
+#: python/playergui.py:4450
 msgid "Normal Speed"
 msgstr "Velocità normale"
 
 #. TC: Submenu Item. Parent menu is Playlist.
-#: python/playergui.py:4415 python/playergui.py:4569
+#: python/playergui.py:4479 python/playergui.py:4633
 msgid "Transfer"
 msgstr "Trasferisci"
 
-#: python/playergui.py:4423
+#: python/playergui.py:4487
 msgid "Crossfade"
 msgstr "Dissolvi"
 
 #. TC: Menu item. Opens the metadata tagger on the selected track.
-#: python/playergui.py:4488
+#: python/playergui.py:4552
 msgid "Meta Tag"
 msgstr "Meta Tag"
 
 #. TC: Menu Item. Duplicates the selected track in the playlist.
-#: python/playergui.py:4494
+#: python/playergui.py:4558
 msgid "Duplicate"
 msgstr "Duplica"
 
 #. TC: Menu Item. Remove the selected track.
-#: python/playergui.py:4501
+#: python/playergui.py:4565
 msgid "Remove"
 msgstr "Rimuovi"
 
 #. TC: Submenu Item. Parent menu item is Remove.
-#: python/playergui.py:4512
+#: python/playergui.py:4576
 msgid "This"
 msgstr "Questo"
 
 #. TC: Submenu Item. Parent menu item is Remove.
-#: python/playergui.py:4519 python/preferences.py:1237
+#: python/playergui.py:4583 python/preferences.py:1237
 msgid "All"
 msgstr "Tutto"
 
 #. TC: Submenu Item. Parent menu item is Remove.
-#: python/playergui.py:4526
+#: python/playergui.py:4590
 msgid "From Here"
 msgstr "Da qui"
 
 #. TC: Submenu Item. Parent menu item is Remove.
-#: python/playergui.py:4533
+#: python/playergui.py:4597
 msgid "To Here"
 msgstr "Fino a qui"
 
 #. TC: Open the file dialog for adding music to the chosen playlist.
-#: python/playergui.py:4546
+#: python/playergui.py:4610
 msgid "Add Music"
 msgstr "Aggiungi musica"
 
 #. TC: Submenu Item. Parent menu is Playlist.
-#: python/playergui.py:4553
+#: python/playergui.py:4617
 msgid "Save"
 msgstr "Salva"
 
 #. TC: Submenu Item. Parent menu is Playlist.
-#: python/playergui.py:4564
+#: python/playergui.py:4628
 msgid "Copy"
 msgstr "Copia"
 
-#: python/playergui.py:4575
+#: python/playergui.py:4639
 msgid "Exchange"
 msgstr "Scambia"
 
 #. TC: Submenu Item. Parent menu is Playlist.
-#: python/playergui.py:4582
+#: python/playergui.py:4646
 msgid "Empty"
 msgstr "Vuoto"
 
 #. TC: Submenu Item. Parent menus are Playlist->Copy.
 #. TC: Submenu Item. Parent menus are Playlist->Transfer.
-#: python/playergui.py:4596 python/playergui.py:4635
+#: python/playergui.py:4660 python/playergui.py:4699
 msgid "Append"
 msgstr "Appendi"
 
 #. TC: Submenu Item. Parent menus are Playlist->Copy.
 #. TC: Submenu Item. Parent menus are Playlist->Transfer.
-#: python/playergui.py:4603 python/playergui.py:4642
+#: python/playergui.py:4667 python/playergui.py:4706
 msgid "Prepend"
 msgstr "Prependi"
 
 #. TC: Submenu Item. Parent menus are Playlist->Copy.
-#: python/playergui.py:4614
+#: python/playergui.py:4678
 msgid "Append Cursor"
 msgstr "Accoda dal cursore"
 
 #. TC: Submenu Item. Parent menus are Playlist->Copy.
-#: python/playergui.py:4621
+#: python/playergui.py:4685
 msgid "Prepend Cursor"
 msgstr "Prependi dal cursore"
 
 #. TC: Submenu Item. Parent menus are Playlist->Transfer.
-#: python/playergui.py:4653
+#: python/playergui.py:4717
 msgid "Append at Cursor"
 msgstr "Accoda dal cursore"
 
 #. TC: Submenu Item. Parent menus are Playlist->Transfer.
-#: python/playergui.py:4660
+#: python/playergui.py:4724
 msgid "Prepend at Cursor"
 msgstr "Prependi dal cursore"
 
@@ -3333,7 +3349,7 @@ msgstr ""
 msgid "Best"
 msgstr ""
 
-#: python/preferences.py:996 python/format.py:512
+#: python/preferences.py:996 python/format.py:521
 msgid "Medium"
 msgstr ""
 
@@ -3632,72 +3648,125 @@ msgstr "Collaboratori"
 msgid "Translators"
 msgstr "Traduttori"
 
-#: python/preferences.py:1574
+#: python/preferences.py:1575
 msgid "Build Info"
 msgstr ""
 
-#: python/preferences.py:1591
+#: python/preferences.py:1592
 msgid "About"
 msgstr "Circa"
 
-#: python/sourceclientgui.py:91
+#: python/sourceclientgui.py:75
+#, fuzzy
+msgid "Disabled"
+msgstr "Configurazione disabilitata"
+
+#: python/sourceclientgui.py:75
+msgid "Auto"
+msgstr "Auto"
+
+#: python/sourceclientgui.py:75
+msgid "Auto, no plaintext"
+msgstr ""
+
+#: python/sourceclientgui.py:76
+msgid "RFC2818"
+msgstr ""
+
+#: python/sourceclientgui.py:76
+msgid "RFC2817"
+msgstr ""
+
+#: python/sourceclientgui.py:96
 msgid "Insert Attribute"
 msgstr "Inserisci attributo"
 
-#: python/sourceclientgui.py:135
+#: python/sourceclientgui.py:140
 msgid "Icecast 2 Master"
 msgstr "Icecast 2 Master"
 
-#: python/sourceclientgui.py:135
+#: python/sourceclientgui.py:140
 msgid "Shoutcast Master"
 msgstr "Shoutcast Master"
 
-#: python/sourceclientgui.py:136
+#: python/sourceclientgui.py:141
 msgid "Icecast 2 Stats/Relay"
 msgstr "Icecast 2 Stats/Relay"
 
-#: python/sourceclientgui.py:136
+#: python/sourceclientgui.py:141
 msgid "Shoutcast Stats/Relay"
 msgstr "Icecast 2 Stats/Relay"
 
-#: python/sourceclientgui.py:139
+#: python/sourceclientgui.py:144
 msgid "Enter new server connection details"
 msgstr "Inserisci i dettagli della connessione al server"
 
-#: python/sourceclientgui.py:158
+#: python/sourceclientgui.py:164
 msgid "Edit existing server connection details"
 msgstr "Modifica i dettagli della connessione"
 
-#: python/sourceclientgui.py:195
+#. TC: Dialog title bar text.
+#: python/sourceclientgui.py:218
+msgid "Certificate Authority Directory"
+msgstr ""
+
+#. TC: Dialog title bar text.
+#: python/sourceclientgui.py:232
+msgid "Certificate Authority File"
+msgstr ""
+
+#. TC: Dialog title bar text.
+#: python/sourceclientgui.py:246
+msgid "TLS Client Certificate"
+msgstr ""
+
+#: python/sourceclientgui.py:257
 msgid "This server is to be scanned for audience figures"
 msgstr "Da scansionare per il pubblico in ascolto"
 
-#: python/sourceclientgui.py:208
+#: python/sourceclientgui.py:270
 msgid "Server type"
 msgstr "Tipo server"
 
-#: python/sourceclientgui.py:208
+#: python/sourceclientgui.py:270
 msgid "Port number"
 msgstr "Numero porta"
 
-#: python/sourceclientgui.py:209
+#: python/sourceclientgui.py:271
 msgid "Mount point"
 msgstr "Punto di montaggio"
 
-#: python/sourceclientgui.py:209
+#: python/sourceclientgui.py:271
 msgid "Login name"
 msgstr "Nome utente"
 
-#: python/sourceclientgui.py:475
+#: python/sourceclientgui.py:272
+msgid "TLS"
+msgstr ""
+
+#: python/sourceclientgui.py:272
+#, fuzzy
+msgid "CA directory"
+msgstr "Scegli una cartella per i media"
+
+#: python/sourceclientgui.py:272
+msgid "CA file"
+msgstr ""
+
+#: python/sourceclientgui.py:272
+msgid "Client cert"
+msgstr ""
+
+#: python/sourceclientgui.py:556
 msgid "Encoder Format Not Set/Compatible"
 msgstr ""
 
 #. TC: Connection button text when no details have been entered.
-#: python/sourceclientgui.py:478
+#: python/sourceclientgui.py:559
 msgid "No Master Server Configured"
 msgstr "Nessun server principale configurato"
 
-#: python/sourceclientgui.py:680
+#: python/sourceclientgui.py:761
 msgid ""
 "A table of servers with which to connect. Only one master server can be "
 "added for the purpose of streaming. All other servers will appear below the "
@@ -3709,42 +3778,42 @@ msgstr ""
 "sotto il server principale nella lista allo scopo di raccogliere statistiche "
 "che possono essere attivate per ciascun server."
 
-#: python/sourceclientgui.py:696
+#: python/sourceclientgui.py:777
 msgid "Hostname/IP address"
 msgstr "Nomehost/Indirizzo IP"
 
 #. TC: Mount point is a technical term in relation to icecast servers.
-#: python/sourceclientgui.py:709
+#: python/sourceclientgui.py:790
 #, fuzzy
 msgid "Mount point       "
 msgstr "Punto di mount     "
 
 #. TC: This is the listener count heading.
-#: python/sourceclientgui.py:718
+#: python/sourceclientgui.py:799
 msgid "Listeners"
 msgstr "Ascoltatori"
 
-#: python/sourceclientgui.py:733
+#: python/sourceclientgui.py:814
 msgid "The sum total of listeners in this server tab."
 msgstr "Il totale degli ascoltatori per questo server"
 
-#: python/sourceclientgui.py:760
+#: python/sourceclientgui.py:841
 msgid "Never"
 msgstr "Mai"
 
-#: python/sourceclientgui.py:763
+#: python/sourceclientgui.py:844
 msgid "Always"
 msgstr "Sempre"
 
-#: python/sourceclientgui.py:765
+#: python/sourceclientgui.py:846
 msgid "If connected"
 msgstr "Se connesso"
 
-#: python/sourceclientgui.py:1021
+#: python/sourceclientgui.py:1102
 msgid "Custom user agent string"
 msgstr "Stringa personalizzata per i navigatori"
 
-#: python/sourceclientgui.py:1028
+#: python/sourceclientgui.py:1109
 msgid ""
 "Set this on the occasion that the server or its firewall specifically "
 "refuses to allow libshout based clients."
@@ -3752,16 +3821,16 @@ msgstr ""
 "Impostare questa opzione nell'eventualità che il server o il suo firewall "
 "rifiutino esplicitamente connessioni da client che usano libshout."
 
-#: python/sourceclientgui.py:1033
+#: python/sourceclientgui.py:1114
 msgid "If the connection breaks reconnect to the server"
 msgstr "Se la connessione si interrompe riconnettiti al server"
 
 #. TC: Label for a comma separated list of delay times.
-#: python/sourceclientgui.py:1043
+#: python/sourceclientgui.py:1124
 msgid "Delay times"
 msgstr "Tempi di ritardo"
 
-#: python/sourceclientgui.py:1047
+#: python/sourceclientgui.py:1128
 msgid ""
 "A comma separated list of delays in seconds between reconnection attempts. "
 "Note that bad values or values less than 5 will be interpreted as 5."
@@ -3769,45 +3838,45 @@ msgstr ""
 "Una lista di ritardi, separati da virgola, tra i vari tentativi di "
 "riconnessione. Valori errati o inferiori a 5 verranno interpretati come 5."
 
-#: python/sourceclientgui.py:1053
+#: python/sourceclientgui.py:1134
 msgid "Repeat the sequence of delays indefinitely."
 msgstr "Ripeti all'infinito la sequenza dei ritardi"
 
 #. TC: User specifies no dialog box to be shown.
-#: python/sourceclientgui.py:1056
+#: python/sourceclientgui.py:1137
 msgid "Quiet"
 msgstr "Calmo"
 
-#: python/sourceclientgui.py:1058
+#: python/sourceclientgui.py:1139
 msgid "Keep the reconnection dialogue box hidden at all times."
 msgstr "Tieni nascosta la finestra della riconnessone ad ogni tentativo."
 
-#: python/sourceclientgui.py:1063
+#: python/sourceclientgui.py:1144
 msgid "The contingency plan upon the stream buffer becoming full is..."
 msgstr "Il piano da attuare nel caso il buffer si stia riempiendo è..."
 
-#: python/sourceclientgui.py:1072
+#: python/sourceclientgui.py:1153
 msgid "Discard audio data for as long as needed."
 msgstr "Scarta i dati audio finché è necessario."
 
-#: python/sourceclientgui.py:1074
+#: python/sourceclientgui.py:1155
 msgid "Assume the connection is beyond saving and reconnect."
 msgstr "Assumi che la connessione sia in fase di salvataggio e riconnettiti."
 
-#: python/sourceclientgui.py:1357 python/format.py:1140
+#: python/sourceclientgui.py:1442 python/format.py:1227
 msgid "Shoutcast"
 msgstr "Shoucast"
 
-#: python/sourceclientgui.py:1394
+#: python/sourceclientgui.py:1483
 #, fuzzy
 msgid "[Metadata suppressed]"
 msgstr "Sorgente dei metadati"
 
-#: python/sourceclientgui.py:1473
+#: python/sourceclientgui.py:1562
 msgid "Individual Controls"
 msgstr "Controlli individuali"
 
-#: python/sourceclientgui.py:1487
+#: python/sourceclientgui.py:1576
 #, fuzzy
 msgid ""
 "Connect to or disconnect from the radio server. If the button does not stay "
@@ -3832,12 +3901,12 @@ msgstr ""
 "server principale."
 
 #. TC: Kick whoever is on the server.
-#: python/sourceclientgui.py:1504
+#: python/sourceclientgui.py:1593
 #, fuzzy
 msgid "Kick Source"
 msgstr "Fonte"
 
-#: python/sourceclientgui.py:1506
+#: python/sourceclientgui.py:1595
 msgid ""
 "This will disconnect whoever is currently using the server, freeing it up "
 "for personal use."
@@ -3845,17 +3914,17 @@ msgstr ""
 "Questo disconnetterà chiunque stia utilizzando il server, liberandolo per un "
 "uso personale."
 
-#: python/sourceclientgui.py:1516
+#: python/sourceclientgui.py:1605
 #, fuzzy
 msgid "Timer:"
 msgstr "Cronometro"
 
-#: python/sourceclientgui.py:1520
+#: python/sourceclientgui.py:1609
 #, fuzzy
 msgid "From"
 msgstr "Da qui"
 
-#: python/sourceclientgui.py:1521
+#: python/sourceclientgui.py:1610
 msgid ""
 "Automatically connect to the server at a specific time in 24 hour format, "
 "midnight being 00:00"
@@ -3863,19 +3932,19 @@ msgstr ""
 "Connessione automatica al server ad un orario specifico nel formato a 24 "
 "ore, la mezzanotte è indicata con 00:00"
 
-#: python/sourceclientgui.py:1526
+#: python/sourceclientgui.py:1615
 msgid "Kick"
 msgstr ""
 
-#: python/sourceclientgui.py:1528
+#: python/sourceclientgui.py:1617
 msgid "Disconnect whoever is using the server just before start time."
 msgstr "Disconnetti chiunque stia usando il server poco prima dell'inizio."
 
-#: python/sourceclientgui.py:1537
+#: python/sourceclientgui.py:1626
 msgid "To"
 msgstr ""
 
-#: python/sourceclientgui.py:1538
+#: python/sourceclientgui.py:1627
 msgid ""
 "Automatically disconnect from the server at a specific time in 24 hour "
 "format."
@@ -3883,25 +3952,25 @@ msgstr ""
 "Disconnessione automatica al server ad un orario specifico nel formato a 24 "
 "ore, la mezzanotte è indicata con 00:00"
 
-#: python/sourceclientgui.py:1541
+#: python/sourceclientgui.py:1630
 #, fuzzy
 msgid "Fade out"
 msgstr "Dissolvi 5sec"
 
-#: python/sourceclientgui.py:1543
+#: python/sourceclientgui.py:1632
 msgid "Fade audio before disconnecting."
 msgstr ""
 
-#: python/sourceclientgui.py:1557
+#: python/sourceclientgui.py:1646
 msgid "At connect:"
 msgstr "Una volta connesso:"
 
 #. TC: [x] Start player (*) 1 ( ) 2
-#: python/sourceclientgui.py:1561
+#: python/sourceclientgui.py:1650
 msgid "Start player"
 msgstr "Lettore iniziale"
 
-#: python/sourceclientgui.py:1566
+#: python/sourceclientgui.py:1655
 msgid ""
 "Have one of the players start automatically when a radio server connection "
 "is successfully made."
@@ -3910,11 +3979,11 @@ msgstr ""
 "buon fine."
 
 #. TC: [x] Start recorder (*) 1 ( ) 2
-#: python/sourceclientgui.py:1574
+#: python/sourceclientgui.py:1663
 msgid "Start recorder"
 msgstr "Avvia il registratore"
 
-#: python/sourceclientgui.py:1581
+#: python/sourceclientgui.py:1670
 msgid ""
 "Have a recorder start automatically when a radio server connection is "
 "successfully made."
@@ -3922,21 +3991,21 @@ msgstr ""
 "Avvia uno dei registratori automaticamente quando una connessione al server "
 "va a buon fine."
 
-#: python/sourceclientgui.py:1586 python/format.py:521 python/format.py:532
-#: python/format.py:542
+#: python/sourceclientgui.py:1675 python/format.py:530 python/format.py:541
+#: python/format.py:552 python/format.py:562
 msgid "Metadata"
 msgstr "Metadati"
 
-#: python/sourceclientgui.py:1596
+#: python/sourceclientgui.py:1685
 msgid "Format String"
 msgstr "Stringa di formattazione"
 
 #. TC: Label for the metadata fallback value.
-#: python/sourceclientgui.py:1598
+#: python/sourceclientgui.py:1687
 msgid "Fallback"
 msgstr "Alternativa"
 
-#: python/sourceclientgui.py:1612
+#: python/sourceclientgui.py:1701
 msgid ""
 "You can enter text to accompany the stream here and can specify placemarkers "
 "%r %t %l %s for the artist, title, album, and songname respectively, or "
@@ -3960,7 +4029,7 @@ msgstr ""
 "Se lasciato vuoto, i flussi Ogg utilizzeranno i tag standard e gli mp3 "
 "utilizzeranno %s."
 
-#: python/sourceclientgui.py:1620
+#: python/sourceclientgui.py:1709
 msgid ""
 "The fallback text to use when %r %t %l metadata is unavailable. See the "
 "format string to the left."
@@ -3968,7 +4037,7 @@ msgstr ""
 "Il testo cui ricorrere quando i metadati %r %t %l non sono disponibili. "
 "Guarda il formato dell stringa sulla sinitra."
 
-#: python/sourceclientgui.py:1622
+#: python/sourceclientgui.py:1711
 msgid ""
 "Metadata normally updates only on song title changes but you can force an "
 "immediate update here."
@@ -3976,28 +4045,28 @@ msgstr ""
 "I metadati di solito vengono aggiornati quando cambia il titolo della song "
 "in esecuzione ma potete forzare un aggiornamento automatico qui."
 
-#: python/sourceclientgui.py:1641
+#: python/sourceclientgui.py:1730
 msgid "Configuration"
 msgstr "Configurazione"
 
-#: python/sourceclientgui.py:1642
+#: python/sourceclientgui.py:1731
 msgid "The controls for configuring a stream."
 msgstr "I controlli per configurare un flusso."
 
-#: python/sourceclientgui.py:1650
+#: python/sourceclientgui.py:1739
 msgid "Connection"
 msgstr "Connessione"
 
-#: python/sourceclientgui.py:1655
+#: python/sourceclientgui.py:1744
 msgid "Format"
 msgstr "Formato"
 
 #. TC: Tab heading. User can enter information about the stream here.
-#: python/sourceclientgui.py:1664
+#: python/sourceclientgui.py:1753
 msgid "Stream Info"
 msgstr "Informazioni flusso"
 
-#: python/sourceclientgui.py:1669
+#: python/sourceclientgui.py:1758
 msgid ""
 "Enter your DJ name or station name here. Typically this information will be "
 "displayed by listener clients."
@@ -4006,7 +4075,7 @@ msgstr ""
 "informazioni saranno visualizzate attraverso i programmi usati dagli "
 "ascoltatori."
 
-#: python/sourceclientgui.py:1672
+#: python/sourceclientgui.py:1761
 msgid ""
 "The URL of your radio station. This and the rest of the information below is "
 "intended for display on a radio station listings website."
@@ -4015,19 +4084,19 @@ msgstr ""
 "informazioni qui sotto sono da intendersi come visualizzabili su di un sito "
 "web che fornisce una lista di stazioni."
 
-#: python/sourceclientgui.py:1677
+#: python/sourceclientgui.py:1766
 msgid "A description of your radio station."
 msgstr "Descrizione della vostra stazione."
 
-#: python/sourceclientgui.py:1682
+#: python/sourceclientgui.py:1771
 msgid "The musical genres you are likely to play."
 msgstr "Il genere musicale che offrirete."
 
-#: python/sourceclientgui.py:1685
+#: python/sourceclientgui.py:1774
 msgid "Make Public"
 msgstr "Rendi pubblico"
 
-#: python/sourceclientgui.py:1686
+#: python/sourceclientgui.py:1775
 msgid ""
 "Publish your radio station on a listings website. The website in question "
 "will depend on how the server to which you connect is configured."
@@ -4035,15 +4104,15 @@ msgstr ""
 "Pubblicate la vostra stazione su un sito. Il sito in questione dipenderà "
 "dalla configurazione del server cui vi connettete."
 
-#: python/sourceclientgui.py:1698
+#: python/sourceclientgui.py:1787
 msgid "Genre(s)"
 msgstr "Genere(i)"
 
-#: python/sourceclientgui.py:1709
+#: python/sourceclientgui.py:1798
 msgid "Master server admin password"
 msgstr "Password di amministrazione del server principale"
 
-#: python/sourceclientgui.py:1714
+#: python/sourceclientgui.py:1803
 msgid ""
 "This is for kick and stats on Shoutcast master servers that have an "
 "administrator password. For those that don't leave this blank (the source "
@@ -4053,56 +4122,56 @@ msgstr ""
 "password di amministrazione impostata. Per chi riempie questo campo (la "
 "password della fonte è sufficente)"
 
-#: python/sourceclientgui.py:1723
+#: python/sourceclientgui.py:1812
 msgid "Contact Details"
 msgstr "Dettagli del contatto"
 
-#: python/sourceclientgui.py:1727
+#: python/sourceclientgui.py:1816
 msgid "Internet Relay Chat connection info goes here."
 msgstr "Le informazioni per IRC vanno inserite qui"
 
-#: python/sourceclientgui.py:1730
+#: python/sourceclientgui.py:1819
 msgid "Connection info for AOL instant messenger goes here."
 msgstr "Le informazioni per AOL vanno inserite qui."
 
-#: python/sourceclientgui.py:1733
+#: python/sourceclientgui.py:1822
 msgid "ICQ instant messenger connection info goes here."
 msgstr "Le informazioni per ICQ vanno inserite qui."
 
-#: python/sourceclientgui.py:1736
+#: python/sourceclientgui.py:1825
 msgid "IRC"
 msgstr "IRC"
 
-#: python/sourceclientgui.py:1737
+#: python/sourceclientgui.py:1826
 msgid "AIM"
 msgstr "AIM"
 
-#: python/sourceclientgui.py:1738
+#: python/sourceclientgui.py:1827
 msgid "ICQ"
 msgstr "ICQ"
 
-#: python/sourceclientgui.py:1748
+#: python/sourceclientgui.py:1837
 #, fuzzy
 msgid "Use ISO-8859-1 encoding for fixed metadata"
 msgstr "Usa la codifica utf-8 quando si inviano i metadati"
 
-#: python/sourceclientgui.py:1750
+#: python/sourceclientgui.py:1839
 msgid "Enable this if sending to a Shoutcast V1 server."
 msgstr ""
 
-#: python/sourceclientgui.py:1754
+#: python/sourceclientgui.py:1843
 msgid "Extra Shoutcast"
 msgstr "Extra Shoutcast"
 
-#: python/sourceclientgui.py:1759
+#: python/sourceclientgui.py:1848
 msgid "Troubleshooting"
 msgstr "Risoluzione problemi"
 
-#: python/sourceclientgui.py:1890
+#: python/sourceclientgui.py:1979
 msgid "Stop recording."
 msgstr "Ferma la registrazione"
 
-#: python/sourceclientgui.py:1892
+#: python/sourceclientgui.py:1981
 msgid ""
 "Start recording.\n"
 "\n"
@@ -4110,20 +4179,20 @@ msgid ""
 "not valid or write permission is not granted on the selected folder."
 msgstr ""
 
-#: python/sourceclientgui.py:1897
+#: python/sourceclientgui.py:1986
 msgid "Pause recording."
 msgstr "Metti in pausa"
 
-#: python/sourceclientgui.py:1934
+#: python/sourceclientgui.py:2023
 msgid "Recording time elapsed."
 msgstr "Tempo di registrazione trascorso."
 
 #. TC: Dialog title bar text.
-#: python/sourceclientgui.py:1988
+#: python/sourceclientgui.py:2077
 msgid "Select the folder to record to"
 msgstr "Seleziona la cartella in cui registrare"
 
-#: python/sourceclientgui.py:1999
+#: python/sourceclientgui.py:2088
 msgid ""
 "Choose which stream to record or the 24 bit FLAC option. If the stream isn't "
 "already running the encoder will be started automatically using whatever "
@@ -4133,7 +4202,7 @@ msgstr ""
 "già attivo il codificatore verrà avviato automaticamente con le impostazioni "
 "attualmente configurate."
 
-#: python/sourceclientgui.py:2003
+#: python/sourceclientgui.py:2092
 msgid ""
 "Choose which directory you want to save to. All file names will be in a "
 "timestamp format and have either an oga, mp3, or flac file extension. "
@@ -4145,75 +4214,75 @@ msgstr ""
 "Importante: dovete scegliere una cartella per la quale avete i permessi "
 "necessari alla scrittura."
 
-#: python/sourceclientgui.py:2110
+#: python/sourceclientgui.py:2199
 msgid "Perform operations on multiple servers in unison."
 msgstr "Esegue le operazioni su più server alla volta."
 
-#: python/sourceclientgui.py:2122
+#: python/sourceclientgui.py:2211
 msgid "Connect"
 msgstr "Connetti"
 
-#: python/sourceclientgui.py:2139
+#: python/sourceclientgui.py:2228
 msgid "Disconnect"
 msgstr "Disconnetti"
 
-#: python/sourceclientgui.py:2147
+#: python/sourceclientgui.py:2236
 #, fuzzy
 msgid "Kick Sources"
 msgstr "Fonte"
 
-#: python/sourceclientgui.py:2156
+#: python/sourceclientgui.py:2245
 msgid "Metadata:"
 msgstr "Metadati:"
 
-#: python/sourceclientgui.py:2186
+#: python/sourceclientgui.py:2275
 msgid "Group Controls"
 msgstr "Controlli di gruppo"
 
-#: python/sourceclientgui.py:2692
+#: python/sourceclientgui.py:2782
 msgid "Recording Facility Unavailable"
 msgstr ""
 
-#: python/sourceclientgui.py:2695
+#: python/sourceclientgui.py:2785
 #, fuzzy
 msgid "No Recorders Are Correctly Configured"
 msgstr "Nessun server principale configurato"
 
 #. TC: Recorder menu format string.
-#: python/sourceclientgui.py:2708
+#: python/sourceclientgui.py:2798
 #, python-brace-format
 msgid "{numericid} [{source}] > [{directory}]"
 msgstr ""
 
-#: python/sourceclientgui.py:2710
+#: python/sourceclientgui.py:2800
 msgid "Misconfigured"
 msgstr ""
 
-#: python/sourceclientgui.py:2731
+#: python/sourceclientgui.py:2821
 msgid "Streaming Facility Unavailable"
 msgstr ""
 
-#: python/sourceclientgui.py:2733
+#: python/sourceclientgui.py:2823
 #, fuzzy
 msgid "No Streams Are Currently Configured"
 msgstr "Nessun server principale configurato"
 
-#: python/sourceclientgui.py:2736
+#: python/sourceclientgui.py:2826
 #, fuzzy
 msgid "Group Connect"
 msgstr "Controlli di gruppo"
 
-#: python/sourceclientgui.py:2742
+#: python/sourceclientgui.py:2832
 #, fuzzy
 msgid "Group Disconnect"
 msgstr "Disconnetti"
 
 #. TC: Window title bar text.
-#: python/sourceclientgui.py:2773
+#: python/sourceclientgui.py:2863
 msgid "IDJC Output"
 msgstr "Uscita IDJC"
 
-#: python/sourceclientgui.py:2789
+#: python/sourceclientgui.py:2879
 msgid ""
 "Each one of these tabs represents a separate stream recorder. The LED "
 "indicator colours represent the following: Clear=Stopped Yellow=Paused "
@@ -4222,7 +4291,7 @@ msgstr ""
 "Ognuna di queste linguette rappresenta un registratore di flusso. I colori "
 "del LED indicano: Vuoto=Fermo Giallo=Pausa Rosso=Registrazione."
 
-#: python/sourceclientgui.py:2797
+#: python/sourceclientgui.py:2887
 msgid ""
 "Each one of these tabs represents a separate radio streamer. The LED "
 "indicator colours represent the following: Clear=No connection "
@@ -4233,11 +4302,11 @@ msgstr ""
 "Vuoto=Non connesso Giallo=In attesa di autenticazione. Verde=Connesso. "
 "Lampeggiante=Perdita di pacchetti a causa di una cattiva connessione."
 
-#: python/sourceclientgui.py:2815
+#: python/sourceclientgui.py:2905
 msgid " Stream "
 msgstr " Flusso "
 
-#: python/sourceclientgui.py:2850
+#: python/sourceclientgui.py:2940
 msgid ""
 "<span weight=\"bold\" size=\"12000\">A connection to a radio server has "
 "failed.</span>\n"
@@ -4249,7 +4318,7 @@ msgstr ""
 "\n"
 "Non verrà effettuato un altro tentativo."
 
-#: python/sourceclientgui.py:2855
+#: python/sourceclientgui.py:2945
 msgid ""
 "<span weight=\"bold\" size=\"12000\">A scheduled stream disconnection has "
 "occurred.</span>"
@@ -4261,45 +4330,45 @@ msgstr ""
 msgid "Right click for suggested values."
 msgstr ""
 
-#: python/format.py:438
+#: python/format.py:439
 #, fuzzy
 msgid "Suggested Values"
 msgstr "Imposta valore"
 
-#: python/format.py:494
+#: python/format.py:503
 #, fuzzy
 msgid "Pregain"
 msgstr "Lettore imposta il gain"
 
-#: python/format.py:495 python/format.py:913
+#: python/format.py:504 python/format.py:933
 msgid "0 dB"
 msgstr ""
 
-#: python/format.py:496 python/format.py:914
+#: python/format.py:505 python/format.py:934
 msgid "-0.5 dB"
 msgstr ""
 
-#: python/format.py:497 python/format.py:915
+#: python/format.py:506 python/format.py:935
 msgid "-1.0 dB"
 msgstr ""
 
-#: python/format.py:498 python/format.py:916
+#: python/format.py:507 python/format.py:936
 msgid "-1.5 dB"
 msgstr ""
 
-#: python/format.py:499 python/format.py:917
+#: python/format.py:508 python/format.py:937
 msgid "-2.0 dB"
 msgstr ""
 
-#: python/format.py:500 python/format.py:918
+#: python/format.py:509 python/format.py:938
 msgid "-2.5 dB"
 msgstr ""
 
-#: python/format.py:501 python/format.py:919
+#: python/format.py:510 python/format.py:939
 msgid "-3.0 dB"
 msgstr ""
 
-#: python/format.py:502
+#: python/format.py:511
 msgid ""
 "A blanket gain reduction to promote audio quality when using long "
 "established lossy audio codecs like mp3 with loud audio material.\n"
@@ -4308,466 +4377,476 @@ msgid ""
 "in that case is 0 dB."
 msgstr ""
 
-#: python/format.py:510
+#: python/format.py:519
 #, fuzzy
 msgid "Resample Quality"
 msgstr "Qualità di ricampionamento del lettore"
 
-#: python/format.py:511
+#: python/format.py:520
 msgid "Highest"
 msgstr "Elevata"
 
-#: python/format.py:513
+#: python/format.py:522
 #, fuzzy
 msgid "Lowest"
 msgstr "Inferiore %"
 
-#: python/format.py:514
+#: python/format.py:523
 msgid ""
 "All of these settings will provide adequate audio quality. The highest "
 "setting will preserve more of the original audio bandwidth at the expense of "
 "many CPU cycles."
 msgstr ""
 
-#: python/format.py:522 python/format.py:533 python/format.py:543
+#: python/format.py:531 python/format.py:553 python/format.py:563
 #, fuzzy
 msgid "Suppressed"
 msgstr "Premuto"
 
-#: python/format.py:523 python/format.py:534
+#: python/format.py:532 python/format.py:554
 msgid "UTF-8"
 msgstr ""
 
-#: python/format.py:524
+#: python/format.py:533
 msgid "Latin1 *"
 msgstr ""
 
-#: python/format.py:525
+#: python/format.py:534
 msgid ""
 "This affects the stream metadata only. Recordings will use UTF-8 for their "
 "metadata."
 msgstr ""
 
-#: python/format.py:535
+#: python/format.py:542
+#, fuzzy
+msgid "Unsupported"
+msgstr "Media supportati"
+
+#: python/format.py:543 python/format.py:555
 msgid ""
 "Choose whether the stream will carry dynamic metadata. In the case of Ogg "
 "streams this is important as a great many players can't handle chained Ogg "
 "streams which result from the metadata updates."
 msgstr ""
 
-#: python/format.py:544
+#: python/format.py:564
 msgid "Latin1"
 msgstr ""
 
-#: python/format.py:545
+#: python/format.py:565
 msgid "Choose whether to send metadata. Recordings will use UTF-8 metadata."
 msgstr ""
 
-#: python/format.py:561 python/format.py:572 python/format.py:583
-#: python/format.py:690 python/format.py:818 python/format.py:888
-#: python/format.py:897 python/format.py:971 python/format.py:994
-#: python/format.py:1003
+#: python/format.py:581 python/format.py:592 python/format.py:603
+#: python/format.py:710 python/format.py:838 python/format.py:908
+#: python/format.py:917 python/format.py:991 python/format.py:1014
+#: python/format.py:1023 python/format.py:1141 python/format.py:1163
 msgid "Mode"
 msgstr "Modo"
 
-#: python/format.py:562 python/format.py:573 python/format.py:584
-#: python/format.py:691 python/format.py:819 python/format.py:889
-#: python/format.py:898 python/format.py:972 python/format.py:995
-#: python/format.py:1004
+#: python/format.py:582 python/format.py:593 python/format.py:604
+#: python/format.py:711 python/format.py:839 python/format.py:909
+#: python/format.py:918 python/format.py:992 python/format.py:1015
+#: python/format.py:1024 python/format.py:1142 python/format.py:1164
 msgid "Mono"
 msgstr "Mono"
 
-#: python/format.py:563 python/format.py:574 python/format.py:585
-#: python/format.py:692 python/format.py:820 python/format.py:890
-#: python/format.py:899 python/format.py:973 python/format.py:996
-#: python/format.py:1005
+#: python/format.py:583 python/format.py:594 python/format.py:605
+#: python/format.py:712 python/format.py:840 python/format.py:910
+#: python/format.py:919 python/format.py:993 python/format.py:1016
+#: python/format.py:1025 python/format.py:1143 python/format.py:1165
 msgid "Stereo"
 msgstr "Stereo"
 
-#: python/format.py:564 python/format.py:575 python/format.py:586
-#: python/format.py:693
+#: python/format.py:584 python/format.py:595 python/format.py:606
+#: python/format.py:713
 #, fuzzy
 msgid "Joint Stereo"
 msgstr "Stereo"
 
-#: python/format.py:565
+#: python/format.py:585
 msgid "Joint Stereo is a good choice on streams with low bitrates."
 msgstr ""
 
-#: python/format.py:576
+#: python/format.py:596
 msgid "Due to the high bitrate selected, this codec will only support stereo."
 msgstr ""
 
-#: python/format.py:587
+#: python/format.py:607
 msgid "Due to the low bitrate selected, this codec will only support mono."
 msgstr ""
 
-#: python/format.py:636 python/format.py:646 python/format.py:743
-#: python/format.py:753 python/format.py:763 python/format.py:869
-#: python/format.py:879 python/format.py:1032 python/format.py:1052
+#: python/format.py:656 python/format.py:666 python/format.py:763
+#: python/format.py:773 python/format.py:783 python/format.py:889
+#: python/format.py:899 python/format.py:1052 python/format.py:1072
+#: python/format.py:1132
 #, fuzzy
 msgid "Samplerate"
 msgstr "Frequenza di campionamento"
 
 #. TC: Abbreviation of the word, standard.
-#: python/format.py:657 python/format.py:774
+#: python/format.py:677 python/format.py:794
 msgid "Std."
 msgstr ""
 
 #. TC: v stands for version.
-#: python/format.py:659 python/format.py:776
+#: python/format.py:679 python/format.py:796
 msgid "V 1"
 msgstr ""
 
 #. TC: v stands for version.
-#: python/format.py:661 python/format.py:778
+#: python/format.py:681 python/format.py:798
 msgid "V 2"
 msgstr ""
 
-#: python/format.py:662
+#: python/format.py:682
 msgid ""
 "MPEG2 introduced lower samplerate options and corresponding lower bitrates. "
 "Choose 2 if those are required."
 msgstr ""
 
-#: python/format.py:669 python/format.py:797
+#: python/format.py:689 python/format.py:817
 msgid "Quality"
 msgstr "Qualità"
 
-#: python/format.py:670
+#: python/format.py:690
 msgid "0 most"
 msgstr ""
 
 #. TC: * means is the recommended setting.
-#: python/format.py:673
+#: python/format.py:693
 msgid "2 *"
 msgstr ""
 
-#: python/format.py:675
+#: python/format.py:695
 msgid "Higher quality costs more in terms of CPU cycles."
 msgstr ""
 
-#: python/format.py:694
+#: python/format.py:714
 msgid "Joint Stereo is a good choice on streams with low bitrates"
 msgstr ""
 
 #. TC: v stands for version.
-#: python/format.py:780
+#: python/format.py:800
 msgid "V 2.5"
 msgstr ""
 
-#: python/format.py:787
+#: python/format.py:807
 msgid "Complexity"
 msgstr ""
 
-#: python/format.py:790
+#: python/format.py:810
 msgid "A quality setting that affects how heavily the CPU is used."
 msgstr ""
 
-#: python/format.py:800
+#: python/format.py:820
 msgid "The higher this setting, the higher the bitrate."
 msgstr ""
 
-#: python/format.py:807
+#: python/format.py:827
 msgid "Bandwidth"
 msgstr ""
 
-#: python/format.py:808
+#: python/format.py:828
 #, fuzzy
 msgid "Ultrawide"
 msgstr "Banda ultra larga"
 
-#: python/format.py:809
+#: python/format.py:829
 #, fuzzy
 msgid "Wide"
 msgstr "Banda larga"
 
-#: python/format.py:810
+#: python/format.py:830
 #, fuzzy
 msgid "Narrow"
 msgstr "Banda stretta"
 
-#: python/format.py:811
+#: python/format.py:831
 msgid "Essentially a samplerate setting."
 msgstr ""
 
-#: python/format.py:828
+#: python/format.py:848
 msgid "24 bit"
 msgstr ""
 
-#: python/format.py:829
+#: python/format.py:849
 msgid "20 bit"
 msgstr ""
 
-#: python/format.py:830
+#: python/format.py:850
 msgid "16 bit"
 msgstr ""
 
-#: python/format.py:831
+#: python/format.py:851
 msgid ""
 "24 bit records with the highest level of detail. If file size is a concern "
 "maybe FLAC is not the right codec."
 msgstr ""
 
-#: python/format.py:838 python/format.py:927
+#: python/format.py:858 python/format.py:947
 msgid "Variability"
 msgstr ""
 
-#: python/format.py:839
+#: python/format.py:859
 msgid "Constant"
 msgstr ""
 
-#: python/format.py:840
+#: python/format.py:860
 msgid "±10%"
 msgstr ""
 
-#: python/format.py:841
+#: python/format.py:861
 msgid "±20%"
 msgstr ""
 
-#: python/format.py:842
+#: python/format.py:862
 msgid "±30%"
 msgstr ""
 
-#: python/format.py:843
+#: python/format.py:863
 msgid "±40%"
 msgstr ""
 
-#: python/format.py:844
+#: python/format.py:864
 msgid "±50%"
 msgstr ""
 
-#: python/format.py:845
+#: python/format.py:865
 #, fuzzy
 msgid "This control is for enabling variable bitrate on Vorbis streams."
 msgstr "I controlli per configurare un flusso."
 
-#: python/format.py:906
+#: python/format.py:926
 #, fuzzy
 msgid "Postgain"
 msgstr "VoIP imposta guadagno"
 
-#: python/format.py:907
+#: python/format.py:927
 msgid "3.0 dB"
 msgstr ""
 
-#: python/format.py:908
+#: python/format.py:928
 msgid "2.5 dB"
 msgstr ""
 
-#: python/format.py:909
+#: python/format.py:929
 msgid "2.0 dB"
 msgstr ""
 
-#: python/format.py:910
+#: python/format.py:930
 msgid "1.5 dB"
 msgstr ""
 
-#: python/format.py:911
+#: python/format.py:931
 msgid "1.0 dB"
 msgstr ""
 
-#: python/format.py:912
+#: python/format.py:932
 msgid "0.5 dB"
 msgstr ""
 
-#: python/format.py:920
+#: python/format.py:940
 msgid "A gain adjustment for the player to apply."
 msgstr ""
 
-#: python/format.py:928
+#: python/format.py:948
 msgid "CBR *"
 msgstr ""
 
-#: python/format.py:929
+#: python/format.py:949
 msgid "CVBR"
 msgstr ""
 
-#: python/format.py:930
+#: python/format.py:950
 msgid "VBR"
 msgstr ""
 
-#: python/format.py:931
+#: python/format.py:951
 msgid ""
 "Bitrate variability. Actual VBR operation may require a higher frame size."
 msgstr ""
 
-#: python/format.py:938
+#: python/format.py:958
 msgid "Frame Size"
 msgstr ""
 
-#: python/format.py:939
+#: python/format.py:959
 msgid "60 ms"
 msgstr ""
 
-#: python/format.py:940
+#: python/format.py:960
 msgid "40 ms"
 msgstr ""
 
-#: python/format.py:941
+#: python/format.py:961
 msgid "20 ms"
 msgstr ""
 
-#: python/format.py:942
+#: python/format.py:962
 msgid "A higher frame size may sound better on very low bitrates."
 msgstr ""
 
-#: python/format.py:949
+#: python/format.py:969
 msgid "CPU"
 msgstr "CPU"
 
-#: python/format.py:952
+#: python/format.py:972
 msgid "The encoder complexity setting which affects CPU load."
 msgstr ""
 
-#: python/format.py:980 python/format.py:1083
+#: python/format.py:1000 python/format.py:1103 python/format.py:1172
 msgid "Codec"
 msgstr ""
 
-#: python/format.py:981
+#: python/format.py:1001 python/format.py:1174
 msgid "Vorbis"
 msgstr ""
 
-#: python/format.py:982
+#: python/format.py:1002
 msgid "FLAC"
 msgstr ""
 
-#: python/format.py:983
+#: python/format.py:1003
 msgid "Speex"
 msgstr ""
 
-#: python/format.py:984
+#: python/format.py:1004 python/format.py:1173
 msgid "Opus"
 msgstr ""
 
-#: python/format.py:987
+#: python/format.py:1007
 msgid "Codecs of the Ogg container."
 msgstr ""
 
-#: python/format.py:1033
+#: python/format.py:1053
 msgid "96000 Hz"
 msgstr ""
 
-#: python/format.py:1034
+#: python/format.py:1054
 msgid "88200 Hz"
 msgstr ""
 
-#: python/format.py:1035
+#: python/format.py:1055
 msgid "64000 Hz"
 msgstr ""
 
-#: python/format.py:1036 python/format.py:1053
+#: python/format.py:1056 python/format.py:1073
 msgid "48000 Hz"
 msgstr ""
 
-#: python/format.py:1037 python/format.py:1054
+#: python/format.py:1057 python/format.py:1074
 msgid "44100 Hz"
 msgstr ""
 
-#: python/format.py:1038
+#: python/format.py:1058
 msgid "32000 Hz"
 msgstr ""
 
-#: python/format.py:1039
+#: python/format.py:1059
 msgid "24000 Hz"
 msgstr ""
 
-#: python/format.py:1040
+#: python/format.py:1060
 msgid "22050 Hz"
 msgstr ""
 
-#: python/format.py:1041
+#: python/format.py:1061
 msgid "16000 Hz"
 msgstr ""
 
-#: python/format.py:1042
+#: python/format.py:1062
 msgid "12000 Hz"
 msgstr ""
 
-#: python/format.py:1043
+#: python/format.py:1063
 msgid "11025 Hz"
 msgstr ""
 
-#: python/format.py:1044
+#: python/format.py:1064
 msgid "8000 Hz"
 msgstr ""
 
-#: python/format.py:1045
+#: python/format.py:1065
 msgid "7350 Hz"
 msgstr ""
 
-#: python/format.py:1067
+#: python/format.py:1087
 msgid "The MP2 option requires IDJC be rebuilt against libtwolame."
 msgstr ""
 
-#: python/format.py:1070
+#: python/format.py:1090
 msgid "Enable the MP3 option by installing libmp3lame."
 msgstr ""
 
-#: python/format.py:1073
+#: python/format.py:1093
 msgid "The AAC options require IDJC be rebuilt against libav libraries."
 msgstr ""
 
-#: python/format.py:1076
+#: python/format.py:1096
 msgid ""
 "Specific AAC support not present in libavcodec. More info: idjc.sourceforge."
 "net."
 msgstr ""
 
-#: python/format.py:1078
+#: python/format.py:1098
 msgid ""
 "Specific AAC+ support not present in libavcodec. More info: idjc.sourceforge."
 "net."
 msgstr ""
 
-#: python/format.py:1081
+#: python/format.py:1101
 msgid "Codecs of the MPEG family."
 msgstr ""
 
-#: python/format.py:1084
+#: python/format.py:1104
 msgid "MP2"
 msgstr ""
 
-#: python/format.py:1085
+#: python/format.py:1105
 msgid "MP3"
 msgstr ""
 
-#: python/format.py:1086
+#: python/format.py:1106
 msgid "AAC"
 msgstr ""
 
-#: python/format.py:1087
+#: python/format.py:1107
 msgid "AAC+ v2"
 msgstr ""
 
 #. TC: Codec family e.g. Xiph/Ogg, MPEG etc.
-#: python/format.py:1099
+#: python/format.py:1185
 msgid "Family"
 msgstr ""
 
+#: python/format.py:1186
+msgid "WebM"
+msgstr ""
+
 #. TC: Xiph.org Ogg container format.
-#: python/format.py:1101
+#: python/format.py:1188
 msgid "Xiph/Ogg"
 msgstr ""
 
-#: python/format.py:1102
+#: python/format.py:1189
 msgid "MPEG"
 msgstr ""
 
-#: python/format.py:1103
+#: python/format.py:1190
 msgid "Codecs have been grouped by standards body and or container format."
 msgstr ""
 
-#: python/format.py:1128
+#: python/format.py:1215
 msgid "Capabilities"
 msgstr ""
 
-#: python/format.py:1140
+#: python/format.py:1227
 #, fuzzy
 msgid "Icecast"
 msgstr "Icecast 2 Master"
 
-#: python/format.py:1140
+#: python/format.py:1227
 #, fuzzy
 msgid "Recordable"
 msgstr "Registratore"
@@ -5237,9 +5316,6 @@ msgstr "Registratore"
 #~ "Il formato qualitativamente migliore disponibile in IDJC. Consigliato per "
 #~ "le pre-registrazioni."
 
-#~ msgid "Feature Disabled"
-#~ msgstr "Configurazione disabilitata"
-
 #~ msgid ""
 #~ "Apply intensity stereo to the audio stream. This is a very efficient "
 #~ "implementation of stereo but is only suited to voice."
@@ -5336,9 +5412,6 @@ msgstr "Registratore"
 #~ msgid "Set"
 #~ msgstr "Imposta"
 
-#~ msgid "Auto"
-#~ msgstr "Auto"
-
 #~ msgid "Use default JACK audio routing"
 #~ msgstr "Usa il sistema base di JACK per il routing audio"
 
diff --git a/py-compile b/py-compile
index 46ea866..bc20391 100755
--- a/py-compile
+++ b/py-compile
@@ -3,7 +3,7 @@
 
 scriptversion=2011-06-08.12; # UTC
 
-# Copyright (C) 2000-2013 Free Software Foundation, Inc.
+# Copyright (C) 2000-2014 Free Software Foundation, Inc.
 
 # 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
diff --git a/python/Makefile.in b/python/Makefile.in
index 50bb270..5f3224b 100644
--- a/python/Makefile.in
+++ b/python/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.13.4 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
 
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -14,7 +14,17 @@
 
 @SET_MAKE@
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
 am__make_running_with_option = \
   case $${target_option-} in \
       ?) ;; \
@@ -79,10 +89,6 @@ build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
 subdir = python
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-	$(srcdir)/__init__.py.in.in $(dist_noinst_PYTHON) \
-	$(idjcpkgpython_PYTHON) $(python_PYTHON) \
-	$(top_srcdir)/py-compile
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
 	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
@@ -94,6 +100,8 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
 	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(dist_noinst_PYTHON) \
+	$(idjcpkgpython_PYTHON) $(python_PYTHON) $(am__DIST_COMMON)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES = __init__.py.in
@@ -183,6 +191,8 @@ am__define_uniq_tagged_files = \
 ETAGS = etags
 CTAGS = ctags
 DIST_SUBDIRS = $(SUBDIRS)
+am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/__init__.py.in.in \
+	$(top_srcdir)/py-compile
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 am__relativize = \
   dir0=`pwd`; \
@@ -254,6 +264,7 @@ HAVE_AVUTIL = @HAVE_AVUTIL@
 HAVE_FLAC = @HAVE_FLAC@
 HAVE_OGGFLAC = @HAVE_OGGFLAC@
 HAVE_OPUS = @HAVE_OPUS@
+HAVE_SHOUT_TLS = @HAVE_SHOUT_TLS@
 HAVE_SPEEX = @HAVE_SPEEX@
 HAVE_SWRESAMPLE = @HAVE_SWRESAMPLE@
 HAVE_TWOLAME = @HAVE_TWOLAME@
@@ -438,7 +449,6 @@ $(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu python/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu python/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -888,6 +898,8 @@ uninstall-am: uninstall-idjcpkgpythonPYTHON \
 	uninstall-idjcpkgpythonPYTHON \
 	uninstall-nodist_idjcpkgpythonPYTHON uninstall-pythonPYTHON
 
+.PRECIOUS: Makefile
+
 
 __init__.py: __init__.py.in
 	sed -e 's|$${pkgdatadir}|${pkgdatadir}|g'	\
diff --git a/python/__init__.py.in.in b/python/__init__.py.in.in
index b59b5ff..af8b92e 100644
--- a/python/__init__.py.in.in
+++ b/python/__init__.py.in.in
@@ -68,6 +68,7 @@ class FGlobs(object):
     opusenabled = @HAVE_OPUS@
     speexenabled = @HAVE_SPEEX@
     twolameenabled = @HAVE_TWOLAME@
+    shouttlsenabled = @HAVE_SHOUT_TLS@
     
     have_libmp3lame, libmp3lame_filename = lib_probe(@DYN_LAME@,
                                 "libmp3lame liblame", """@DYLIB_EXT@""")
diff --git a/python/format.py b/python/format.py
index 9e98a53..08569ea 100644
--- a/python/format.py
+++ b/python/format.py
@@ -430,6 +430,7 @@ class FormatSpin(gtk.VBox):
         size_group = gtk.SizeGroup(gtk.SIZE_GROUP_VERTICAL)
         size_group.add_widget(prev_object.get_children()[0])
         size_group.add_widget(frame)
+        self.scale = 1
 
     def _on_changed(self, spin_button):
         self._fixed.set_text(str(int(spin_button.props.value)) + self._unit)
@@ -477,12 +478,20 @@ class FormatSpin(gtk.VBox):
         
     @property
     def value(self):
-        return str(int(self._spin_button.props.value))
+        return str(int(self._spin_button.props.value * self.scale))
 
     @value.setter
     def value(self, value):
         if not self.applied:
-            self._spin_button.props.value = int(value)
+            self._spin_button.props.value = int(value) // self.scale
+            
+    @property
+    def scale(self):
+        return self._scale
+
+    @scale.setter
+    def scale(self, value):
+        self._scale = value
 
 
 class FormatPregain(FormatDropdown):
@@ -525,13 +534,24 @@ class FormatMetadataChoice(FormatDropdown):
             _("This affects the stream metadata only. Recordings will use UTF-8 for their metadata."))
 
 
+class FormatMetadataNone(FormatDropdown):
+    """User can not select any metadata."""
+    
+    def __init__(self, prev_object):
+        FormatDropdown.__init__(self, prev_object, _('Metadata'), "metadata_mode", (
+            dict(display_text=_('Unsupported'), value="suppressed", chain="FormatResampleQuality"),), 1,
+            _("Choose whether the stream will carry dynamic metadata. In the case of Ogg streams this is important as a great many players can't handle chained Ogg streams which result from the metadata updates."))
+
+
 class FormatMetadataUTF8(FormatDropdown):
     """User can select whether to have metadata."""
     
     def __init__(self, prev_object):
+        discourage = format_collate(prev_object)["family"] == "webm"
+        
         FormatDropdown.__init__(self, prev_object, _('Metadata'), "metadata_mode", (
-            dict(display_text=_('Suppressed'), value="suppressed", chain="FormatResampleQuality"),
-            dict(display_text=_('UTF-8'), value="utf-8", chain="FormatResampleQuality", default=True)), 1,
+            dict(display_text=_('Suppressed'), value="suppressed", chain="FormatResampleQuality", default=discourage),
+            dict(display_text=_('UTF-8'), value="utf-8", chain="FormatResampleQuality", default=not discourage)), 1,
             _("Choose whether the stream will carry dynamic metadata. In the case of Ogg streams this is important as a great many players can't handle chained Ogg streams which result from the metadata updates."))
 
 
@@ -953,7 +973,7 @@ class FormatCodecOpusComplexity(FormatDropdown):
 
 
 class FormatCodecOpusBitRate(FormatSpin):
-    """Opus bit rate selection for stereo."""
+    """Opus bit rate selection."""
     
     def __init__(self, prev_object):
         dict_ = format_collate(prev_object)
@@ -1088,6 +1108,72 @@ class FormatCodecMPEG(FormatDropdown):
             tooltip)
 
 
+class FormatCodecWebMVorbisBitRate(FormatSpin):
+    """Vorbis bit rate selection."""
+    
+    def __init__(self, prev_object):
+        dict_ = format_collate(prev_object)
+        channels = 1 if dict_["mode"] == "mono" else 2
+        er = EncoderRange(VorbisTestEncoder())
+        sr = int(dict_["samplerate"])
+        bounds = er.bitrate_bounds(channels, sr)
+        FormatSpin.__init__(self, prev_object, _('Bitrate'), "bitrate",
+            (128000,) + bounds + (1, 10), 0, " bps", "FormatMetadataUTF8",
+            er.good_bitrates(channels, sr))
+
+
+class FormatCodecWebMVorbisSampleRate(FormatSpin):
+    """Vorbis sample rate selection."""
+    
+    def __init__(self, prev_object):
+        channels = 1 if format_collate(prev_object)["mode"] == "mono" else 2
+        er = EncoderRange(VorbisTestEncoder())
+        bounds = er.bounds(channels)["samplerate_bounds"]
+        FormatSpin.__init__(self, prev_object, _('Samplerate'), "samplerate",
+            (44100,) + bounds + (1, 10), 0, " Hz", "FormatCodecWebMVorbisBitRate",
+            er.good_samplerates(channels))
+
+
+class FormatCodecWebMVorbisMode(FormatDropdown):
+    """Vorbis mode selection."""
+    
+    def __init__(self, prev_object):
+        FormatDropdown.__init__(self, prev_object, _('Mode'), "mode", (
+            dict(display_text=_("Mono"), value="mono", chain="FormatCodecWebMVorbisSampleRate"),
+            dict(display_text=_("Stereo"), value="stereo", default=True, chain="FormatCodecWebMVorbisSampleRate")), 0)
+
+
+class FormatCodecWebMOpusBitRate(FormatSpin):
+    """Opus bit rate selection."""
+    
+    def __init__(self, prev_object):
+        dict_ = format_collate(prev_object)
+        channels = 1 if dict_["mode"] == "mono" else 2
+        bounds = (6 * channels, 256 * channels)
+        FormatSpin.__init__(self, prev_object, _('Bitrate'), "bitrate",
+            ((64, 96)[channels - 1],) + bounds + (1, 10), 0, " kbps", "FormatMetadataUTF8",
+            (256 * channels, 128 * channels, 64 * channels, 48 * channels, 32 * channels, 16 * channels))
+        self.scale = 1000
+
+
+class FormatCodecWebMOpusMode(FormatDropdown):
+    """Opus mode selection."""
+    
+    def __init__(self, prev_object):
+        FormatDropdown.__init__(self, prev_object, _('Mode'), "mode", (
+            dict(display_text=_("Mono"), value="mono", chain="FormatCodecWebMOpusBitRate"),
+            dict(display_text=_("Stereo"), value="stereo", default=True, chain="FormatCodecWebMOpusBitRate")), 0)
+
+
+class FormatCodecWebM(FormatDropdown):
+    """Audio only WebM codec selection."""
+
+    def __init__(self, prev_object):
+        FormatDropdown.__init__(self, prev_object, _('Codec'), "codec", (
+            dict(display_text=_('Opus'), value="opus", chain="FormatCodecWebMOpusMode", default=True),
+            dict(display_text=_('Vorbis'), value="vorbis", chain="FormatCodecWebMVorbisMode")), 0)
+
+
 class FormatFamily(FormatDropdown):
     """Gives choice of codec family/container format e.g. Xiph/Ogg or MPEG.
     
@@ -1097,6 +1183,7 @@ class FormatFamily(FormatDropdown):
     def __init__(self, prev_object):
         # TC: Codec family e.g. Xiph/Ogg, MPEG etc.
         FormatDropdown.__init__(self, prev_object, _('Family'), "family", (
+            dict(display_text=_('WebM'), value="webm", chain="FormatCodecWebM", shoutcast=False, sensitive=FGlobs.avenabled),
             # TC: Xiph.org Ogg container format.
             dict(display_text=_('Xiph/Ogg'), value="ogg", chain="FormatCodecXiphOgg", shoutcast=False),
             dict(display_text=_('MPEG'), value="mpeg", chain="FormatCodecMPEG", default=True)), 0,
@@ -1223,6 +1310,13 @@ class FormatControl(gtk.VBox):
             self.stop_encoder_rc()
             
     _cap_table = {
+            "webm":
+            {
+                "opus":
+                    {"shoutcast": False, "icecast": True, "recordable": True},
+                "vorbis":
+                    {"shoutcast": False, "icecast": True, "recordable": True},
+            },
             "ogg":
             {
                 "vorbis":
diff --git a/python/gtkstuff.py b/python/gtkstuff.py
index 9dc79d4..60d08e1 100644
--- a/python/gtkstuff.py
+++ b/python/gtkstuff.py
@@ -643,7 +643,7 @@ class FolderChooserButton(gtk.Button):
         self._icon = gtk.image_new_from_stock(gtk.STOCK_DIRECTORY, gtk.ICON_SIZE_MENU)
         hbox.pack_start(self._icon, False)
         # TC: FolderChooserButton text for null -- no directory is set.
-        self._label = gtk.Label(_("(none)"))
+        self._label = gtk.Label(_("(None)"))
         self._label.set_alignment(0.0, 0.5)
         self._label.set_ellipsize(pango.ELLIPSIZE_END)
         hbox.pack_start(self._label)
@@ -679,10 +679,13 @@ class FolderChooserButton(gtk.Button):
                 self._dialog.set_current_folder(new_folder)
                 self.emit("current-folder-changed", new_folder)
 
+    def unselect_all(self):
+        self.set_current_folder("")
+
     def _update_visual(self):
         folder_name = self.get_current_folder()
         if not folder_name:
-            folder_name = _("(none)")
+            folder_name = _("(None)")
         else:
             folder_name = os.path.split(folder_name)[1]
         self._label.set_text(folder_name)
diff --git a/python/maingui.py b/python/maingui.py
index b80eccd..cafbe4a 100644
--- a/python/maingui.py
+++ b/python/maingui.py
@@ -33,6 +33,7 @@ import collections
 import json
 import uuid
 import ctypes
+from binascii import hexlify, unhexlify
 
 import dbus
 import dbus.service
@@ -271,7 +272,6 @@ class JackMenu(MenuMixin):
         set_tip(self.resetmenu_i,
                 _('Reset the JACK port connections to the default settings.'))
         
-        
     def _reset_confirm_dialog(self, menuitem):
         dialog = ConfirmationDialog("",
             _('<span size="12000" weight="bold">Reset all JACK port connections?</span>\n\n'
@@ -282,7 +282,6 @@ class JackMenu(MenuMixin):
         dialog.ok.connect("clicked", lambda w: self._reset_port_connections())
         dialog.show_all()
 
-
     def _reset_port_connections(self):
         for port in self.ports:
             self.write("disconnect", "JPRT=%s\nJPT2=\nend\n" % port)
@@ -323,12 +322,12 @@ class JackMenu(MenuMixin):
         else:
             for destport in reply:
                 self.build(menu, use_underline=False)(
-                (("targetport", destport.lstrip("@")),), how=gtk.CheckMenuItem)
+                (("targetport", unhexlify(destport[1:])),), how=gtk.CheckMenuItem)
                 mi = getattr(self, "targetportmenu_i")
                 if destport.startswith("@"):
                     mi.set_active(True)
                 mi.connect(
-                    "activate", self.cb_activate, port, destport.lstrip("@"))
+                    "activate", self.cb_activate, port, unhexlify(destport[1:]))
 
 
     def cb_activate(self, mi, local, dest):
@@ -342,10 +341,10 @@ class JackMenu(MenuMixin):
         reply = ""
         while not reply.startswith("jackports="):
             reply = self.read()
-            
-        pbports = len([x for x in reply[10:].strip().split()
-                                        if x.startswith("system:playback_")])
-        return pbports
+
+        match = "-" + hexlify("system:playback_")
+        pbports = [x for x in reply[10:-1].split() if x.startswith(match)]
+        return len(pbports)
 
         
     def standard_save(self):
@@ -382,7 +381,7 @@ class JackMenu(MenuMixin):
             while not reply.startswith("jackports="):
                 reply = self.read()
             
-            element.append([x.lstrip("@") for x in reply[10:].rstrip().split()
+            element.append([unhexlify(x.lstrip("@-")) for x in reply[10:-1].split()
                                                         if x.startswith("@")])
             total.append(element)
         return total
diff --git a/python/playergui.py b/python/playergui.py
index fbbe24d..86fab55 100644
--- a/python/playergui.py
+++ b/python/playergui.py
@@ -99,6 +99,33 @@ CueSheetTrack = namedtuple("CueSheetTrack",
     "pathname play tracknum index performer title offset duration replaygain album")
 
 
+class FillStopper(gtk.Button):
+    def __init__(self):
+        gtk.Button.__init__(self, _("Click to stop adding tracks!"))
+        self.set_border_width(4)
+        self._reg = {}
+        self.connect("clicked", self._on_clicked)
+        
+    def register(self, iterator):
+        self._reg[iterator] = True
+        
+    def unregister(self, iterator):
+        try:
+            del self._reg[iterator]
+        except KeyError:
+            pass
+            
+        if not self._reg:
+            self.hide()
+        
+    def check(self, iterator):
+        return iterator in self._reg
+
+    def _on_clicked(self, button):
+        self._reg.clear()
+        self.hide()
+
+
 class IndexingIterator(object):
     def __init__(self, iteree):
         self.index = 0
@@ -1236,12 +1263,14 @@ class IDJC_Media_Player:
                     # due to it frequently being based on the source audio.
                     if rg == RGDEF:
                         try:
-                            rg = str(audio.info.track_gain) + " RG"
-                        except:
+                            rg = audio.info.track_gain
+                        except AttributeError:
                             pass
                         else:
-                             if rg is None:
-                                 rg = RGDEF
+                            if rg is None:
+                                rg = RGDEF
+                            else:
+                                rg = str(rg) + " RG"
                 else:
                     x = list(audio.get("Artist", []))
                     x += list(audio.get("Author", []))
@@ -1598,7 +1627,9 @@ class IDJC_Media_Player:
                     if self.is_paused:
                         self.pause.set_active(False)
                 else:
-                    print "suppressed the toggle off of the play button"
+                    print "scrolling the playlist window to the current track"
+                    path = self.model_playing.get_path(self.iter_playing)
+                    self.treeview.scroll_to_cell(path)
             else:
                 self.is_playing = True
                 self.new_title = False
@@ -1880,7 +1911,9 @@ class IDJC_Media_Player:
     def invoke_end_of_track_policy(self, mode_text=None):
         # This is where we implement the playlist modes for the most part.
         if mode_text is None:
-            mode_text = self.pl_mode.get_active_text()
+            model = self.pl_mode.get_model()
+            iter = self.pl_mode.get_active_iter()
+            mode_text = model.get_value(iter, 0)
             if self.is_playing == False:
                 print "Assertion failed in: invoke_end_of_track_policy"
                 return
@@ -1937,7 +1970,11 @@ class IDJC_Media_Player:
                 timestamped_pathnames = [(fp.get(pn, 0), pn) 
                                             for pn in random_pathnames if pn]
                 timestamped_pathnames.sort()
-                least_recent_ts = timestamped_pathnames[0][0]
+                try:
+                    least_recent_ts = timestamped_pathnames[0][0]
+                except IndexError:
+                    print "cannot select from an empty playlist"
+                    return
                 timestamped_pathnames = [x for x in timestamped_pathnames
                                                     if x[0] == least_recent_ts]
                 least_recent = random.choice(timestamped_pathnames)[1]
@@ -2067,11 +2104,12 @@ class IDJC_Media_Player:
                 treeselection.select_path(0)
 
     def get_pl_block_size(self, iter):
+        use_controls = self.pl_mode.get_active() == 0
         size = 0
         speedfactor = self.pbspeedfactor
         while iter is not None:
             length = self.liststore.get_value(iter, 2)
-            if length == -11:
+            if length == -11 and use_controls:
                 text = self.liststore.get_value(iter, 0)
                 if text.startswith("<b>"):
                     text = text[3:-4]
@@ -2094,7 +2132,7 @@ class IDJC_Media_Player:
         Block times give the DJ an idea when the playlist will finish.
         """
 
-        if self.pl_mode.get_active() != 0:
+        if self.pl_mode.get_active() not in (0, 3, 4):
             return
         if self.player_is_playing:
             if self.cuesheet:
@@ -2342,7 +2380,7 @@ class IDJC_Media_Player:
             else:
                 fade = self.pl_delay.get_active()
                 if (fade == 1 and rem == 10) or (fade == 2 and rem == 5) or \
-                                    pl_mode in (3, 4, 6) or \
+                                    pl_mode in (3, 4, 6, 7, 8) or \
                                     (pl_mode == 0 and self.islastinplaylist()):
                     fade = 0
                 if fade:
@@ -2590,18 +2628,7 @@ class IDJC_Media_Player:
         if response_id != gtk.RESPONSE_ACCEPT:
             return
         gen = self.filter_allowed_controls(self.get_elements_from(chosenfiles))
-        idle_add(self.file_response_idle, iter(gen)) 
-
-    @threadslock
-    def file_response_idle(self, iterator):
-        if self.no_more_files:
-            self.no_more_files = False
-        else:
-            for element in iterator:
-                self.liststore.append(element)
-                return True
-
-        return False
+        idle_add(self.drag_data_received_data_idle, self.liststore, None, gen) 
 
     def filter_allowed_controls(self, items):
         """Interlude playlist must not contain certain playlist controls."""
@@ -2882,6 +2909,13 @@ class IDJC_Media_Player:
                 return self.get_elements_from_xspf(pathnames[0])
             elif os.path.isdir(pathnames[0]):
                 return self.get_elements_from_directory(pathnames[0], 2)
+
+        for each in pathnames:
+            if not os.path.isdir(each):
+                break
+        else:
+            return self.get_elements_from_directories(pathnames)
+
         return self.get_elements_from_chosen(pathnames)
 
     def get_elements_from_chosen(self, chosenfiles):
@@ -2903,6 +2937,11 @@ class IDJC_Media_Player:
             if any(pathnames):
                 yield cuesheet_entry
 
+    def get_elements_from_directories(self, dirpaths):
+        for chosendir in dirpaths:
+            for element in self.get_elements_from_directory(chosendir, 2):
+                yield element
+
     def get_elements_from_directory(self, chosendir, depth=1, visited=None):
         depth -= 1
         if visited is None:
@@ -3155,13 +3194,14 @@ class IDJC_Media_Player:
                 elements = self.get_elements_from([urllib.unquote(t[7:])
                                     for t in dragged.data.strip().splitlines() 
                                     if t.startswith("file://")])
+                model = treeview.get_model()
                 try:
                     path, pos = treeview.get_dest_row_at_pos(x, y)
                 except (ValueError, TypeError):
-                    idle_add(self.file_response_idle, elements)
+                    idle_add(self.drag_data_received_data_idle, model, None,
+                                                                    elements)
                 else:
                     for element in elements:
-                        model = treeview.get_model()
                         iter_ = model.get_iter(path)
                         if pos in (gtk.TREE_VIEW_DROP_BEFORE,
                                             gtk.TREE_VIEW_DROP_INTO_OR_BEFORE):
@@ -3191,17 +3231,36 @@ class IDJC_Media_Player:
         return True
 
     @threadslock
-    def drag_data_received_data_idle(self, model, iter_, elements):
+    def drag_data_received_data_idle(self, model, iter_, elements,
+                                                timestamp=None, reselect=True):
+        if timestamp is not False:
+            if timestamp is not None:
+                if time.time() > timestamp + 4:
+                    self.fill_stopper.show()
+                    timestamp = False
+            else:
+                timestamp = time.time()
+                self.fill_stopper.register(elements)
+            
         if self.no_more_files:
             self.no_more_files = False
         else:
             for element in elements:
-                iter_ = model.insert_after(iter_, element)
-                idle_add(self.drag_data_received_data_idle,
-                                                        model, iter_, elements)
+                if iter_ is None:
+                    iter_ = model.append(element)
+                    reselect = False
+                else:
+                    iter_ = model.insert_after(iter_, element)
+
+                if not self.fill_stopper.check(elements):
+                    elements = []
+                    
+                idle_add(self.drag_data_received_data_idle, model, iter_,
+                                                elements, timestamp, reselect)
                 break
             else:
-                self.reselect_please = True
+                self.fill_stopper.unregister(elements)
+                self.reselect_please = reselect
 
         return False
 
@@ -3885,7 +3944,7 @@ class IDJC_Media_Player:
 
     def cb_playlist_mode(self, widget):
         self.pl_delay.set_sensitive(self.pl_mode.get_active() in (0, 1, 2, 5))
-        if widget.get_active() == 0:
+        if widget.get_active() in (0, 3, 4):
             self.update_time_stats()
             self.pl_statusbar.show()
         else:
@@ -4042,7 +4101,7 @@ class IDJC_Media_Player:
 
         # A frame for our playlist
         plframe = gtk.Frame(" %s " % dict(left=_('Playlist 1'),
-                        right=_('Playlist 2'), interlude=('Playlist 3'))[name])
+                        right=_('Playlist 2'), interlude=_('Playlist 3'))[name])
             
         plframe.set_border_width(4)
         plframe.set_shadow_type(gtk.SHADOW_ETCHED_IN)
@@ -4150,6 +4209,9 @@ class IDJC_Media_Player:
 
         pbox.pack_start(plframe, True, True, 0)
 
+        self.fill_stopper = FillStopper()
+        pbox.pack_start(self.fill_stopper, False)
+
         # A box for the playback speed controls
         self.pbspeedbox = gtk.HBox(False, 0)
         self.pbspeedbox.set_border_width(3)
@@ -4261,17 +4323,19 @@ class IDJC_Media_Player:
         self.hbox2.pack_start(frame)
         frame.show()
 
-        self.pl_mode = gtk.combo_box_new_text()
-        self.pl_mode.append_text(N_('Play All'))
-        self.pl_mode.append_text(N_('Loop All'))
-        self.pl_mode.append_text(N_('Random'))
-        self.pl_mode.append_text(N_('Manual'))
-        self.pl_mode.append_text(N_('Cue Up'))
-        self.pl_mode.append_text(N_('External'))
+        store = gtk.ListStore(str, str)
+        self.pl_mode = gtk.ComboBox(store)
+        rend = gtk.CellRendererText()
+        self.pl_mode.pack_start(rend)
+        self.pl_mode.add_attribute(rend, "text", 1)
+        # TC: playlist modes
+        for each in (N_('Play All'), N_('Loop All'), N_('Random'), 
+                    N_('Manual'), N_('Cue Up'), N_('External')):
+            store.append((each, _(each)))
         if self.playername != "interlude":
-            self.pl_mode.append_text(N_('Alternate'))
-            self.pl_mode.append_text(N_('Fade Over'))
-            self.pl_mode.append_text(N_('Random Hop'))
+            # TC: yet more playlist modes these ones for the main players only
+            for each in (N_('Alternate'), N_('Fade Over'), N_('Random Hop')):
+                store.append((each, _(each)))
             self.pl_mode.set_active(1)
         else:
             self.pl_mode.set_active(0)
diff --git a/python/preferences.py b/python/preferences.py
index e2269cc..0514163 100644
--- a/python/preferences.py
+++ b/python/preferences.py
@@ -1568,7 +1568,8 @@ class mixprefs:
             "Brian Millham (bmillham at users.sourceforge.net)"))
 
         contribs_page(_('Translators'),
-            ("<b>fr</b> nvignot (nicotux at users.sf.net)",
+            ("<b>es</b> Blank Frank (frank at rhizomatica.org)",
+            "<b>fr</b> nvignot (nicotux at users.sf.net)",
             "<b>it</b>  Raffaele Morelli (raffaele.morelli at gmail.com)"))
 
         label = gtk.Label(_('Build Info'))
diff --git a/python/prelims/Makefile.in b/python/prelims/Makefile.in
index 959aceb..427a92f 100644
--- a/python/prelims/Makefile.in
+++ b/python/prelims/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.13.4 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
 
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -14,7 +14,17 @@
 
 @SET_MAKE@
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
 am__make_running_with_option = \
   case $${target_option-} in \
       ?) ;; \
@@ -79,8 +89,6 @@ build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
 subdir = python/prelims
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-	$(prelimspython_PYTHON) $(top_srcdir)/py-compile
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
 	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
@@ -92,6 +100,8 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
 	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(prelimspython_PYTHON) \
+	$(am__DIST_COMMON)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
@@ -148,6 +158,7 @@ am__pep3147_tweak = \
   sed -e 's|\.py$$||' -e 's|[^/]*$$|__pycache__/&.*.py|'
 py_compile = $(top_srcdir)/py-compile
 am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/py-compile
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
@@ -194,6 +205,7 @@ HAVE_AVUTIL = @HAVE_AVUTIL@
 HAVE_FLAC = @HAVE_FLAC@
 HAVE_OGGFLAC = @HAVE_OGGFLAC@
 HAVE_OPUS = @HAVE_OPUS@
+HAVE_SHOUT_TLS = @HAVE_SHOUT_TLS@
 HAVE_SPEEX = @HAVE_SPEEX@
 HAVE_SWRESAMPLE = @HAVE_SWRESAMPLE@
 HAVE_TWOLAME = @HAVE_TWOLAME@
@@ -371,7 +383,6 @@ $(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu python/prelims/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu python/prelims/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -598,6 +609,8 @@ uninstall-am: uninstall-prelimspythonPYTHON
 	mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \
 	uninstall-am uninstall-prelimspythonPYTHON
 
+.PRECIOUS: Makefile
+
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/python/prelims/profiledialog.py b/python/prelims/profiledialog.py
index 522a8ff..80b09e9 100644
--- a/python/prelims/profiledialog.py
+++ b/python/prelims/profiledialog.py
@@ -122,13 +122,13 @@ class NewProfileDialog(gtk.Dialog):
 
         labels = (
                 # TC: data entry dialog label text.
-                "Profile name",
+                _("Profile name"),
                 # TC: data entry dialog label text.
-                "Icon",
+                _("Icon"),
                 # TC: data entry dialog label text.
-                "Nickname",
+                _("Nickname"),
                 # TC: data entry dialog label text.
-                "Description")
+                _("Description"))
         names = ("profile_entry", "icon_button", "nickname_entry",
                                                         "description_entry")
         widgets = (ProfileEntry(), IconChooserButton(self._icon_dialog),
diff --git a/python/sourceclientgui.py b/python/sourceclientgui.py
index 28a0aa6..492042b 100644
--- a/python/sourceclientgui.py
+++ b/python/sourceclientgui.py
@@ -55,7 +55,7 @@ from .prelims import ProfileManager
 
 _ = gettext.translation(FGlobs.package_name, FGlobs.localedir,
                                                         fallback=True).gettext
-
+N_ = lambda n: n
 
 pm = ProfileManager()
 
@@ -64,11 +64,16 @@ ENCODER_START = 1; ENCODER_STOP = 0
 
 LISTFORMAT = (("check_stats", bool), ("server_type", int), ("host", str),
                             ("port", int), ("mount", str), ("listeners", int),
-                            ("login", str), ("password", str))
+                            ("login", str), ("password", str), ("tls", int),
+                            ("ca_file", str), ("ca_directory", str),
+                            ("client_cert", str))
                             
 ListLine = namedtuple("ListLine", " ".join([x[0] for x in LISTFORMAT]))
 
-BLANK_LISTLINE = ListLine(1, 0, "", 8000, "", -1, "", "")
+BLANK_LISTLINE = ListLine(1, 0, "", 8000, "", -1, "", "", 1, "", "", "")
+
+tls_options = (N_('Disabled'), N_('Auto'), N_('Auto, no plaintext'),
+                N_('RFC2818'), N_('RFC2817'))
 
 lame_enabled = False
 
@@ -147,6 +152,7 @@ class ConnectionDialog(gtk.Dialog):
         #
         cap_master = True
         preselect = 0
+        tls = 0
         data = BLANK_LISTLINE
         try:
             first = ListLine._make(model[0])
@@ -160,6 +166,7 @@ class ConnectionDialog(gtk.Dialog):
                 index = model.get_path(iter)[0]
                 data = ListLine._make(model[index])
                 preselect = data.server_type
+                tls = data.tls
                 if index and first.server_type < 2:
                     # Editing non first line where a master server is configured.
                     cap_master = False
@@ -191,6 +198,61 @@ class ConnectionDialog(gtk.Dialog):
         self.loginname = DefaultEntry("source")
         self.password = DefaultEntry("changeme")
         self.password.set_visibility(False)
+
+        tls_liststore = gtk.ListStore(str, str)
+        for each in tls_options:
+            tls_liststore.append((each, _(each)))
+        self.tls_security = gtk.ComboBox(tls_liststore)
+        tls_renderer = gtk.CellRendererText()
+        self.tls_security.pack_start(tls_renderer, True)
+        self.tls_security.set_attributes(tls_renderer, text=1)
+
+        file_dialog = gtk.FileChooserDialog("", None,
+                gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER, (
+                gtk.STOCK_CLEAR, gtk.RESPONSE_NONE,
+                gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT,
+                gtk.STOCK_OK, gtk.RESPONSE_ACCEPT))
+        file_dialog.set_modal(True)
+        file_dialog.set_transient_for(self)
+        # TC: Dialog title bar text.
+        file_dialog.set_title(_('Certificate Authority Directory'
+                                                        ) + pm.title_extra)
+        file_dialog.set_do_overwrite_confirmation(True)
+        self.ca_directory = FolderChooserButton(file_dialog)
+        file_dialog.connect("response", self._on_file_response, self.ca_directory)
+
+        file_dialog = gtk.FileChooserDialog("", None,
+                gtk.FILE_CHOOSER_ACTION_OPEN, (
+                gtk.STOCK_CLEAR, gtk.RESPONSE_NONE,
+                gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT,
+                gtk.STOCK_OK, gtk.RESPONSE_ACCEPT))
+        file_dialog.set_modal(True)
+        file_dialog.set_transient_for(self)
+        # TC: Dialog title bar text.
+        file_dialog.set_title(_('Certificate Authority File'
+                                                        ) + pm.title_extra)
+        file_dialog.set_do_overwrite_confirmation(True)
+        self.ca_file = gtk.FileChooserButton(file_dialog)
+        file_dialog.connect("response", self._on_file_response, self.ca_file)
+
+        file_dialog = gtk.FileChooserDialog("", None,
+                gtk.FILE_CHOOSER_ACTION_OPEN, (
+                gtk.STOCK_CLEAR, gtk.RESPONSE_NONE,
+                gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT,
+                gtk.STOCK_OK, gtk.RESPONSE_ACCEPT))
+        file_dialog.set_modal(True)
+        file_dialog.set_transient_for(self)
+        # TC: Dialog title bar text.
+        file_dialog.set_title(_('TLS Client Certificate'
+                                                        ) + pm.title_extra)
+        file_dialog.set_do_overwrite_confirmation(True)
+        self.client_cert = gtk.FileChooserButton(file_dialog)
+        file_dialog.connect("response", self._on_file_response, self.client_cert)
+
+        if not FGlobs.shouttlsenabled:
+            for each in (self.tls_security, self.ca_directory, self.ca_file, self.client_cert):
+                each.set_sensitive(False)
+
         self.stats = gtk.CheckButton(
                         _('This server is to be scanned for audience figures'))
         
@@ -206,9 +268,12 @@ class ConnectionDialog(gtk.Dialog):
         sg = gtk.SizeGroup(gtk.SIZE_GROUP_HORIZONTAL)
         for text, widget in zip(
                 (_('Server type'), _('Hostname'), _('Port number'), 
-                _('Mount point'), _('Login name'), _('Password')), 
-                (self.servertype, self.hostname, self.portnumber, 
-                self.mountpoint, self.loginname, self.password)):
+                _('Mount point'), _('Login name'), _('Password'),
+                _('TLS'), _('CA directory'), _('CA file'), _('Client cert')), 
+                (self.servertype, self.hostname, self.portnumber,
+                 self.mountpoint, self.loginname, self.password,
+                 self.tls_security, self.ca_directory, self.ca_file,
+                 self.client_cert)):
             row = gtk.HBox()
             row.set_spacing(3)
             label = gtk.Label(text)
@@ -235,6 +300,17 @@ class ConnectionDialog(gtk.Dialog):
         self.mountpoint.set_text(data.mount)
         self.loginname.set_text(data.login)
         self.password.set_text(data.password)
+        self.tls_security.set_active(tls)
+        self.ca_directory.set_current_folder(data.ca_directory)
+        
+        if data.ca_file:
+            self.ca_file.set_filename(data.ca_file)
+        else:
+            self.ca_file.unselect_all()
+        if data.client_cert:
+            self.client_cert.set_filename(data.client_cert)
+        else:
+            self.client_cert.unselect_all()
         self.stats.set_active(data.check_stats)
         
     @staticmethod
@@ -249,13 +325,18 @@ class ConnectionDialog(gtk.Dialog):
                                                                         "/"))
 
             data = ListLine(check_stats=self.stats.get_active(),
-                                 server_type=self.servertype.get_active(),
-                                 host=self.hostname.get_text(),
-                                 port=int(self.portnumber.get_value()),
-                                 mount=self.mountpoint.get_text(),
-                                 listeners=-1,
-                                 login=self.loginname.get_text(),
-                                 password=self.password.get_text())
+                    server_type=self.servertype.get_active(),
+                    host=self.hostname.get_text(),
+                    port=int(self.portnumber.get_value()),
+                    mount=self.mountpoint.get_text(),
+                    listeners=-1,
+                    login=self.loginname.get_text(),
+                    password=self.password.get_text(),
+                    tls=self.tls_security.get_active(),
+                    ca_file=self.ca_file.get_filename() or "",
+                    ca_directory=self.ca_directory.get_current_folder(),
+                    client_cert=self.client_cert.get_filename() or ""
+                    )
 
             if self.servertype.get_active() < 2:
                 if iter:
@@ -279,6 +360,9 @@ class ConnectionDialog(gtk.Dialog):
         self.mountpoint.set_sensitive(sens)
         self.loginname.set_sensitive(sens)
 
+    def _on_file_response(self, dialog, response_id, chooser):
+        if response_id == gtk.RESPONSE_NONE:
+            chooser.unselect_all()
 
 
 class StatsThread(Thread):
@@ -298,10 +382,10 @@ class StatsThread(Thread):
 
 
     def run(self):
-        class NoStats(ValueError):
-            pass
         class BadXML(ValueError):
             pass
+        class GoodXML(Exception):
+            pass
         
         hostport = "%s:%d" % (self.host, self.port)
         if self.is_shoutcast:
@@ -315,33 +399,28 @@ class StatsThread(Thread):
         auth_handler.add_password(realm, hostport, self.login, self.passwd)
         opener = urllib2.build_opener(auth_handler)
         opener.addheaders = [('User-agent', 'Mozilla/5.0')]
-        
+
         try:
+            # Logged in method works with Shoutcast 1 and Icecast 2.
             try:
                 with closing(opener.open(stats_url)) as h:
                     data = h.read()
-            except Exception:
-                raise NoStats
-
-            try:
-                dom = mdom.parseString(data)
-            except Exception:
+            except IOError:
                 if self.is_shoutcast:
-                    # SC2 servers will return an HTML page, not XML.
-                    try:
-                        # No need to log in. :)
-                        with closing(urllib2.urlopen("http://%s/statistics" %
-                                                                hostport)) as h:
-                            data = h.read()
-                        dom = mdom.parseString(data)
-                    except Exception:
-                        raise NoStats
-
+                    # Shoutcast 2 servers don't require a login.
+                    with closing(urllib2.urlopen("http://%s/statistics" %
+                                                            hostport)) as h:
+                        data = h.read()
                 else:
-                    raise NoStats
-                    
-        except NoStats:
-            print "failed to obtain server stats for", self.url
+                    raise
+        except IOError:
+            print "failed to obtain server stats data for", self.url
+            return
+
+        try:
+            dom = mdom.parseString(data)
+        except Exception as e:
+            print "server stats data is not valid xml: %s" % e
             return
 
         try:
@@ -357,29 +436,31 @@ class StatsThread(Thread):
                                                 0].firstChild.wholeText.strip())
                 except:
                     raise BadXML
+                else:
+                    raise GoodXML
             else:
+                
                 if dom.documentElement.tagName == u'icestats':
                     icestats = dom.documentElement
                 else:
                     raise BadXML
-                sources = icestats.getElementsByTagName('source')
-                for source in sources:
-                    mount = source.getAttribute('mount')
-                    if stats_url.endswith(mount):
-                        listeners = source.getElementsByTagName('Listeners')
-                        try:
-                            self.listeners = int(
-                                    listeners[0].firstChild.wholeText.strip())
-                            break
-                        except:
-                            raise BadXML
+                for child in icestats.childNodes:
+                    if child.nodeName == u'source':
+                        if child.getAttribute('mount') == self.mount:
+                            for child in child.childNodes:
+                                if child.nodeName.lower() == u'listeners':
+                                    self.listeners = int(
+                                            child.firstChild.wholeText.strip())
+                                    raise GoodXML
                 else:
-                    raise BadXML
-        except BadXML:
-            print "Unexpected data in server stats XML file"
-        dom.unlink()
-        print "server", self.url, "has", self.listeners, "listeners"
+                    raise BadXML                
 
+        except GoodXML:
+            print "server", self.url, "has", self.listeners, "listeners"
+        except BadXML:
+            print "unexpected to parse server stats XML file"
+        finally:
+            dom.unlink()
 
 
 class ActionTimer(object):
@@ -1304,6 +1385,10 @@ class StreamTab(Tab):
                     "irc=" + proc(self.irc_entry),
                     "aim=" + proc(self.aim_entry),
                     "icq=" + proc(self.icq_entry),
+                    "tls=" + tls_options[d["tls"]],
+                    "ca_directory=" + d["ca_directory"],
+                    "ca_file=" + d["ca_file"],
+                    "client_cert=" + d["client_cert"],
                     "make_public=" + str(bool(self.make_public.get_active())),
                     "command=server_connect\n"))
             self.send(self.connection_string)
@@ -1383,6 +1468,10 @@ class StreamTab(Tab):
                     cm = songname
             elif fdata["family"] == "ogg":
                 disp = "[{0[%r]}], [{0[%t]}], [{0[%l]}]".format(dict(table))
+            elif fdata["family"] == "webm":
+                disp = songname
+                if not cm:
+                    cm = songname
             else:
                 disp = "no metadata string defined for this stream format: %s %s" % (fdata["family"], fdata["codec"])
             
@@ -2542,6 +2631,7 @@ class SourceClientGui(dbus.service.Object):
                         f.write("\n")
         except Exception as e:
             print "error attempting to write file: serverdata", e
+            raise
 
     def load_previous_session(self):
         try:

-- 
idjc packaging



More information about the pkg-multimedia-commits mailing list